From a3f29c8b1b3106047410e50f6cce64a67f3e8e3b Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 28 Sep 2024 17:29:28 -0400 Subject: [PATCH 01/36] v2: Drop the vegafusion-jupyter package (#509) * Remove vegafusion-jupyter package * port altair mock tests to use JupyterChart and * relock, update pixi version in GA * update ci * install chrome, install test deps * Don't run selenium tests on osx arm * debugging * disable selenium tests for windows * remove unneeded windows deps * comment other jobs * add ipykernel * fix selection * restore all tests * restore all tests * comment out test with slider position issue --- .github/workflows/build_test.yml | 148 +- .gitignore | 7 +- .vscode/settings.json | 6 - pixi.lock | 271 +- pixi.toml | 13 +- python/vegafusion-jupyter/.coveragerc | 2 - python/vegafusion-jupyter/.eslintignore | 5 - python/vegafusion-jupyter/.eslintrc.js | 28 - .../.github/workflows/build.yml | 63 - python/vegafusion-jupyter/.gitignore | 157 - python/vegafusion-jupyter/.npmignore | 7 - python/vegafusion-jupyter/.prettierignore | 4 - python/vegafusion-jupyter/.prettierrc | 3 - python/vegafusion-jupyter/LICENSE.txt | 27 - python/vegafusion-jupyter/MANIFEST.in | 34 - python/vegafusion-jupyter/README.md | 76 - python/vegafusion-jupyter/babel.config.js | 13 - python/vegafusion-jupyter/codecov.yml | 12 - python/vegafusion-jupyter/css/README.md | 3 - .../images/VegaFusionLogo-SmallGrey.svg | 1 - python/vegafusion-jupyter/install.json | 5 - python/vegafusion-jupyter/jest.config.js | 16 - python/vegafusion-jupyter/package-lock.json | 26918 ---------------- python/vegafusion-jupyter/package.json | 109 - python/vegafusion-jupyter/pyproject.toml | 3 - python/vegafusion-jupyter/pytest.ini | 2 - python/vegafusion-jupyter/readthedocs.yml | 9 - .../scss/vegafusion-embed.scss | 162 - python/vegafusion-jupyter/scss/widget.scss | 7 - python/vegafusion-jupyter/setup.cfg | 15 - python/vegafusion-jupyter/setup.py | 108 - python/vegafusion-jupyter/src/extension.ts | 13 - python/vegafusion-jupyter/src/index.ts | 2 - .../src/nbextension/extension.js | 17 - python/vegafusion-jupyter/src/plugin.ts | 39 - python/vegafusion-jupyter/src/version.ts | 17 - python/vegafusion-jupyter/src/widget.ts | 156 - python/vegafusion-jupyter/tests/__init__.py | 0 python/vegafusion-jupyter/tests/conftest.py | 51 - .../tests/test_conext_manager.py | 52 - .../tests/test_nbextension_path.py | 11 - .../vegafusion-jupyter/tsconfig.eslint.json | 5 - python/vegafusion-jupyter/tsconfig.json | 25 - .../vegafusion-jupyter.json | 5 - .../vegafusion_jupyter/__init__.py | 97 - .../vegafusion_jupyter/_frontend.py | 5 - .../vegafusion_jupyter/_version.py | 1 - .../nbextension/extension.js | 17 - .../vegafusion_jupyter/renderer.py | 16 - .../vegafusion_jupyter/widget.py | 107 - .../webpack.config.experimental.js | 8 - python/vegafusion-jupyter/webpack.config.js | 97 - .../tests/test_altair_mocks.py | 38 +- 53 files changed, 145 insertions(+), 28868 deletions(-) delete mode 100644 .vscode/settings.json delete mode 100644 python/vegafusion-jupyter/.coveragerc delete mode 100644 python/vegafusion-jupyter/.eslintignore delete mode 100644 python/vegafusion-jupyter/.eslintrc.js delete mode 100644 python/vegafusion-jupyter/.github/workflows/build.yml delete mode 100644 python/vegafusion-jupyter/.gitignore delete mode 100644 python/vegafusion-jupyter/.npmignore delete mode 100644 python/vegafusion-jupyter/.prettierignore delete mode 100644 python/vegafusion-jupyter/.prettierrc delete mode 100644 python/vegafusion-jupyter/LICENSE.txt delete mode 100644 python/vegafusion-jupyter/MANIFEST.in delete mode 100644 python/vegafusion-jupyter/README.md delete mode 100644 python/vegafusion-jupyter/babel.config.js delete mode 100644 python/vegafusion-jupyter/codecov.yml delete mode 100644 python/vegafusion-jupyter/css/README.md delete mode 100644 python/vegafusion-jupyter/images/VegaFusionLogo-SmallGrey.svg delete mode 100644 python/vegafusion-jupyter/install.json delete mode 100644 python/vegafusion-jupyter/jest.config.js delete mode 100644 python/vegafusion-jupyter/package-lock.json delete mode 100644 python/vegafusion-jupyter/package.json delete mode 100644 python/vegafusion-jupyter/pyproject.toml delete mode 100644 python/vegafusion-jupyter/pytest.ini delete mode 100644 python/vegafusion-jupyter/readthedocs.yml delete mode 100644 python/vegafusion-jupyter/scss/vegafusion-embed.scss delete mode 100644 python/vegafusion-jupyter/scss/widget.scss delete mode 100644 python/vegafusion-jupyter/setup.cfg delete mode 100644 python/vegafusion-jupyter/setup.py delete mode 100644 python/vegafusion-jupyter/src/extension.ts delete mode 100644 python/vegafusion-jupyter/src/index.ts delete mode 100644 python/vegafusion-jupyter/src/nbextension/extension.js delete mode 100644 python/vegafusion-jupyter/src/plugin.ts delete mode 100644 python/vegafusion-jupyter/src/version.ts delete mode 100644 python/vegafusion-jupyter/src/widget.ts delete mode 100644 python/vegafusion-jupyter/tests/__init__.py delete mode 100644 python/vegafusion-jupyter/tests/conftest.py delete mode 100644 python/vegafusion-jupyter/tests/test_conext_manager.py delete mode 100644 python/vegafusion-jupyter/tests/test_nbextension_path.py delete mode 100644 python/vegafusion-jupyter/tsconfig.eslint.json delete mode 100644 python/vegafusion-jupyter/tsconfig.json delete mode 100644 python/vegafusion-jupyter/vegafusion-jupyter.json delete mode 100644 python/vegafusion-jupyter/vegafusion_jupyter/__init__.py delete mode 100644 python/vegafusion-jupyter/vegafusion_jupyter/_frontend.py delete mode 100644 python/vegafusion-jupyter/vegafusion_jupyter/_version.py delete mode 100644 python/vegafusion-jupyter/vegafusion_jupyter/nbextension/extension.js delete mode 100644 python/vegafusion-jupyter/vegafusion_jupyter/renderer.py delete mode 100644 python/vegafusion-jupyter/vegafusion_jupyter/widget.py delete mode 100644 python/vegafusion-jupyter/webpack.config.experimental.js delete mode 100644 python/vegafusion-jupyter/webpack.config.js rename python/{vegafusion-jupyter => vegafusion}/tests/test_altair_mocks.py (92%) diff --git a/.github/workflows/build_test.yml b/.github/workflows/build_test.yml index 61a23d30b..458b30c2c 100644 --- a/.github/workflows/build_test.yml +++ b/.github/workflows/build_test.yml @@ -10,7 +10,7 @@ jobs: uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3.5.2 - uses: prefix-dev/setup-pixi@v0.8.1 with: - pixi-version: v0.27.1 + pixi-version: v0.30.0 cache: true - name: Cache uses: actions/cache@v3 @@ -41,7 +41,7 @@ jobs: uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3.5.2 - uses: prefix-dev/setup-pixi@v0.8.1 with: - pixi-version: v0.27.1 + pixi-version: v0.30.0 - name: Cache uses: actions/cache@v3 with: @@ -70,7 +70,7 @@ jobs: uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3.5.2 - uses: prefix-dev/setup-pixi@v0.8.1 with: - pixi-version: v0.27.1 + pixi-version: v0.30.0 - name: Cache uses: actions/cache@v3 with: @@ -158,7 +158,7 @@ jobs: uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3.5.2 - uses: prefix-dev/setup-pixi@v0.8.1 with: - pixi-version: v0.27.1 + pixi-version: v0.30.0 - name: Cache uses: actions/cache@v3 with: @@ -185,7 +185,7 @@ jobs: uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3.5.2 - uses: prefix-dev/setup-pixi@v0.8.1 with: - pixi-version: v0.27.1 + pixi-version: v0.30.0 - name: Cache uses: actions/cache@v3 with: @@ -212,7 +212,7 @@ jobs: uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3.5.2 - uses: prefix-dev/setup-pixi@v0.8.1 with: - pixi-version: v0.27.1 + pixi-version: v0.30.0 - name: Cache uses: actions/cache@v3 with: @@ -239,7 +239,7 @@ jobs: uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3.5.2 - uses: prefix-dev/setup-pixi@v0.8.1 with: - pixi-version: v0.27.1 + pixi-version: v0.30.0 - name: Cache uses: actions/cache@v3 with: @@ -259,34 +259,6 @@ jobs: python/vegafusion/dist/*.whl python/vegafusion/dist/*.tar.gz - build-vegafusion-jupyter-packages: - runs-on: ubuntu-20.04 - steps: - - name: Check out repository code - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3.5.2 - - uses: prefix-dev/setup-pixi@v0.8.1 - with: - pixi-version: v0.27.1 - - name: Cache - uses: actions/cache@v3 - with: - key: ${{ runner.os }}-${{ hashFiles('pixi.lock', 'Cargo.lock') }}-build-vegafusion-jupyter-packages - path: | - ~/.cargo - target - .pixi - - name: Build vegafusion-jupyter wheel - run: | - echo JupyterLab Version: `pixi run jupyter-lab --version` - pixi run build-py-jupyter - - name: Upload artifacts - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # pin@v3.1.2 - with: - name: vegafusion-jupyter-packages - path: | - python/vegafusion-jupyter/dist/*.whl - python/vegafusion-jupyter/dist/*.tar.gz - test-vegafusion-python-linux-64: runs-on: ubuntu-20.04 needs: [build-vegafusion-python-embed-linux-64, build-vegafusion-packages] @@ -297,6 +269,10 @@ jobs: uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # pin@4.7 with: python-version: '3.11' + - name: Install Chrome + uses: browser-actions/setup-chrome@f0ff752add8c926994566c80b3ceadfd03f24d12 # pin@latest + with: + chrome-version: stable - name: Install fonts on Linux if: runner.os == 'Linux' run: | @@ -318,13 +294,27 @@ jobs: ls -la python -m pip install vegafusion-*.whl python -m pip install vegafusion_python_embed-*manylinux_2_17_x86_64*.whl - python -m pip install pytest vega-datasets polars-lts-cpu "duckdb>=1.0" "vl-convert-python>=1.0.1rc1" scikit-image "pandas>=2.2" + + # Optional dependencies + python -m pip install polars-lts-cpu "duckdb>=1.0" "vl-convert-python>=1.0.1rc1" scikit-image "pandas>=2.2" jupytext voila anywidget ipywidgets chromedriver-binary-auto + + # Test dependencies + python -m pip install pytest vega-datasets scikit-image jupytext voila ipykernel anywidget ipywidgets selenium flaky tenacity chromedriver-binary-auto - name: Test lazy imports working-directory: python/vegafusion/ run: python checks/check_lazy_imports.py - name: Test vegafusion working-directory: python/vegafusion/ + env: + VEGAFUSION_TEST_HEADLESS: 1 run: pytest + - name: Upload test artifacts + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # pin@v3.1.2 + if: always() + with: + name: vegafusion-python-test-failures + path: | + python/vegafusion/tests/output/* test-vegafusion-python-osx-arm64: runs-on: macos-14 @@ -352,10 +342,16 @@ jobs: ls -la python -m pip install vegafusion-*.whl python -m pip install vegafusion_python_embed-*macosx_11_*_arm64.whl - python -m pip install pytest vega-datasets polars "duckdb>=1.0" vl-convert-python scikit-image "pandas>=2.2" + + # Optional dependencies + python -m pip install polars "duckdb>=1.0" vl-convert-python "pandas>=2.2" + + # Test dependencies + python -m pip install pytest vega-datasets scikit-image + - name: Test vegafusion working-directory: python/vegafusion/ - run: pytest + run: pytest --ignore=tests/test_altair_mocks.py test-vegafusion-python-win-64: runs-on: windows-2022 @@ -367,6 +363,10 @@ jobs: uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # pin@4.7 with: python-version: '3.8' + - name: Install Chrome + uses: browser-actions/setup-chrome@f0ff752add8c926994566c80b3ceadfd03f24d12 # pin@latest + with: + chrome-version: stable - name: Download vegafusion-python-embed wheel uses: actions/download-artifact@cbed621e49e4c01b044d60f6c80ea4ed6328b281 # pin@v2 with: @@ -387,66 +387,16 @@ jobs: python -m pip install $vegafusion python -m pip install $vegafusion_python_embed - python -m pip install pytest pyarrow==10.0 altair==5.1.2 vega-datasets polars[timezone] "duckdb>=1.0" vl-convert-python scikit-image + + # Optional dependencies + python -m pip install pyarrow==10.0 altair==5.1.2 polars[timezone] "duckdb>=1.0" vl-convert-python + + # Test dependencies + python -m pip install pytest vega-datasets scikit-image - name: Test vegafusion working-directory: python/vegafusion/ - run: pytest + run: pytest --ignore=tests/test_altair_mocks.py - test-vegafusion-jupyter-linux-64: - runs-on: ubuntu-20.04 - needs: - - build-vegafusion-python-embed-linux-64 - - build-vegafusion-packages - - build-vegafusion-jupyter-packages - steps: - - name: Check out repository code - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3.5.2 - - uses: prefix-dev/setup-pixi@v0.8.1 - with: - pixi-version: v0.27.1 - - name: Cache - uses: actions/cache@v3 - with: - key: ${{ runner.os }}-${{ hashFiles('pixi.lock', 'Cargo.lock') }}-test-vegafusion-jupyter-linux-64 - path: | - .pixi - - name: Install Chrome - uses: browser-actions/setup-chrome@f0ff752add8c926994566c80b3ceadfd03f24d12 # pin@latest - with: - chrome-version: stable - - name: Download vegafusion-python-embed wheel - uses: actions/download-artifact@cbed621e49e4c01b044d60f6c80ea4ed6328b281 # pin@v2 - with: - name: vegafusion-python-embed-wheels - path: target/wheels/ - - name: Download vegafusion wheel - uses: actions/download-artifact@cbed621e49e4c01b044d60f6c80ea4ed6328b281 # pin@v2 - with: - name: vegafusion-packages - path: target/wheels/ - - name: Download vegafusion-jupyter wheel - uses: actions/download-artifact@cbed621e49e4c01b044d60f6c80ea4ed6328b281 # pin@v2 - with: - name: vegafusion-jupyter-packages - path: target/wheels/ - - name: install wheels - run: | - ls -la target/wheels/ - pixi run pip install target/wheels/vegafusion_python_embed-*manylinux_2_17_x86_64*.whl - pixi run pip install target/wheels/vegafusion-*.whl - pixi run pip install target/wheels/vegafusion_jupyter-*.whl - pixi run pip install chromedriver-binary-auto - pixi run pip list - - name: Test vegafusion jupyter - run: | - VEGAFUSION_TEST_HEADLESS=1 pixi run pytest python/vegafusion-jupyter/tests - - name: Upload test artifacts - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # pin@v3.1.2 - if: always() - with: - name: vegafusion-jupyter-test-failures - path: | - python/vegafusion-jupyter/tests/failures/* build-vegafusion-server-linux-64: runs-on: ubuntu-20.04 @@ -455,7 +405,7 @@ jobs: uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3.5.2 - uses: prefix-dev/setup-pixi@v0.8.1 with: - pixi-version: v0.27.1 + pixi-version: v0.30.0 - name: Cache uses: actions/cache@v3 with: @@ -564,7 +514,7 @@ jobs: uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3.5.2 - uses: prefix-dev/setup-pixi@v0.8.1 with: - pixi-version: v0.27.1 + pixi-version: v0.30.0 - name: Cache uses: actions/cache@v3 with: @@ -596,7 +546,7 @@ jobs: uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3.5.2 - uses: prefix-dev/setup-pixi@v0.8.1 with: - pixi-version: v0.27.1 + pixi-version: v0.30.0 - name: Cache uses: actions/cache@v3 with: @@ -627,7 +577,7 @@ jobs: uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3.5.2 - uses: prefix-dev/setup-pixi@v0.8.1 with: - pixi-version: v0.27.1 + pixi-version: v0.30.0 - name: Cache uses: actions/cache@v3 with: diff --git a/.gitignore b/.gitignore index 7bdee7245..1655f81a3 100644 --- a/.gitignore +++ b/.gitignore @@ -6,9 +6,14 @@ # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html Cargo.bak.lock +# vscode +.vscode/settings.json + # These are backup files generated by rustfmt **/*.rs.bk +/python/vegafusion/tests/output/ + vega-fusion/tests/scratch/* vega-fusion/tests/util/vegajs_runtime/node_modules @@ -19,7 +24,7 @@ vegafusion-runtime/tests/util/vegajs_runtime/node_modules/ /python/vegafusion-jupyter/vegafusion_jupyter/nbextension/ /.idea/ /python/vegafusion-jupyter/css/ -/python/vegafusion-jupyter/tests/temp_screenshot/ + _vegafusion_data /python/vegafusion-jupyter/examples/data/ /python/vegafusion-jupyter/examples/omnisci_downloads/ diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 428398df2..000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "[rust]": { - "editor.defaultFormatter": "rust-lang.rust-analyzer", - "editor.formatOnSave": true - } -} diff --git a/pixi.lock b/pixi.lock index fd0a29310..63c282373 100644 --- a/pixi.lock +++ b/pixi.lock @@ -9,9 +9,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/_sysroot_linux-64_curr_repodata_hack-3-h69a702a_16.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.10-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.6.1-h59595ed_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py310h2372a71_4.conda @@ -64,7 +64,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.0-py310hc6cd4ac_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/deprecation-2.1.0-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda @@ -107,7 +106,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-packaging-0.12.3-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.5.0-py310hff52083_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.8.0-pyhd8ed1ab_0.conda @@ -185,6 +183,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/minio-7.1.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/minio-server-2023.09.23.03.47.50-hbcca054_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.7.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.10.0-pyhd8ed1ab_0.conda @@ -278,15 +277,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py310h2372a71_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.13.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/trio-0.22.2-py310hff52083_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/trio-websocket-0.11.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.14.1-h64cca9d_5.conda @@ -333,9 +330,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.0.7-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda osx-64: - - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/aom-3.6.1-he965462_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.3-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda @@ -387,7 +384,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/debugpy-1.8.0-py310h9e9d8ca_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/deprecation-2.1.0-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda @@ -419,7 +415,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-packaging-0.12.3-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/jupyter_core-5.5.0-py310h2ec42d9_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.8.0-pyhd8ed1ab_0.conda @@ -484,6 +479,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/minio-7.1.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/minio-server-2023.09.23.03.47.50-h8857fd0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.7.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.10.0-pyhd8ed1ab_0.conda @@ -574,15 +570,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-hef22860_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/tornado-6.3.3-py310h6729b98_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.13.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/trio-0.22.2-py310h2ec42d9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/trio-websocket-0.11.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda @@ -612,9 +606,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.0.7-hb7f2c08_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.5-h829000d_0.conda osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-3.7.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.5.0-h7ea286d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.3-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-21.3.0-pyhd8ed1ab_0.tar.bz2 @@ -670,7 +664,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.6.8-py310h1253130_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/deprecation-2.1.0-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-1.2.0-pyhd8ed1ab_0.tar.bz2 @@ -719,7 +712,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-packaging-0.12.3-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jupyter_core-5.3.1-py310hbe9552e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.7.0-pyhd8ed1ab_2.conda @@ -788,6 +780,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/minio-7.1.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minio-server-2023.09.23.03.47.50-hf0a4a13_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.7.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.7.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.7.4-pyhd8ed1ab_0.conda @@ -881,14 +874,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.12-he1e0b03_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.1-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.3.2-py310h2aa6e3c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/trio-0.21.0-py310hbe9552e_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/trio-websocket-0.10.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda @@ -918,9 +909,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.0.7-h1a8c8d9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.2-h4f39d0f_7.conda win-64: - - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.6.1-h63175ca_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-21.2.0-py310h8d17308_4.conda @@ -968,7 +959,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.0-py310h00ffb61_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/deprecation-2.1.0-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda @@ -998,7 +988,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-packaging-0.12.3-pyha770c72_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/jupyter_core-5.5.0-py310h5588dad_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.8.0-pyhd8ed1ab_0.conda @@ -1064,6 +1053,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2023.2.0-h6a75c08_50496.conda - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.7.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.10.0-pyhd8ed1ab_0.conda @@ -1153,15 +1143,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-hcfcfb64_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.3.3-py310h8d17308_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.13.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/trio-0.22.2-py310h5588dad_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/trio-websocket-0.11.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 @@ -1261,27 +1249,25 @@ packages: timestamp: 1693607226431 - kind: conda name: altair - version: 5.3.0 + version: 5.4.1 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/altair-5.3.0-pyhd8ed1ab_0.conda - sha256: e0ee5efa2583c44991b92db49f5bf552c7152a46750fd8b982aa98e2498769cc - md5: 349c74f4f918e28bc0d3c5aa4bc3487b + url: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_0.conda + sha256: 242d548dd4465b52b5be41be3f4c5366b2b322dd2df3fbfa8aef59571b51b921 + md5: 8c32c3e09ecd8bf038fef2cafa68ccfb depends: - importlib-metadata - jinja2 - jsonschema >=3.0 - - numpy + - narwhals >=1.1.0 - packaging - - pandas >=0.25 - python >=3.8 - - toolz - - typing-extensions >=4.0.1 + - typing-extensions >=4.10.0 license: BSD-3-Clause license_family: BSD - size: 437414 - timestamp: 1711824960682 + size: 463447 + timestamp: 1724754076209 - kind: conda name: anyio version: 3.7.1 @@ -1333,13 +1319,13 @@ packages: timestamp: 1693488730301 - kind: conda name: anywidget - version: 0.9.6 + version: 0.9.13 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.6-pyhd8ed1ab_0.conda - sha256: 519063eaf46c00aefb6ff843b371dd9a035659c6a67bd829da1c73545d845b4b - md5: 354237509a1c0dbc46587983501bbef5 + url: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.13-pyhd8ed1ab_0.conda + sha256: dbe8cd33de4c1eb1edd3578866d54497a6f51b8ee232bc522a2e497e7926bac0 + md5: 5163983551f7a4361b0a6bcc85334e0c depends: - ipywidgets - psygnal @@ -1347,10 +1333,9 @@ packages: - typing_extensions - watchfiles license: MIT - purls: - - pkg:pypi/anywidget - size: 75280 - timestamp: 1712108573508 + license_family: MIT + size: 66391 + timestamp: 1719028676289 - kind: conda name: aom version: 3.5.0 @@ -4237,26 +4222,6 @@ packages: - pkg:pypi/defusedxml size: 24062 timestamp: 1615232388757 -- kind: conda - name: deprecation - version: 2.1.0 - build: pyh9f0ad1d_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/deprecation-2.1.0-pyh9f0ad1d_0.tar.bz2 - sha256: 2695a60ff355b114d0c459458461d941d2209ec9aff152853b6a3ca8700c94ec - md5: 7b6747d7cc2076341029cff659669e8b - depends: - - packaging * - - python * - arch: x86_64 - platform: win - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/deprecation - size: 14487 - timestamp: 1589881524975 - kind: conda name: entrypoints version: '0.4' @@ -6041,31 +6006,6 @@ packages: license_family: BSD size: 52525 timestamp: 1685453825227 -- kind: conda - name: jupyter-packaging - version: 0.12.3 - build: pyha770c72_1 - build_number: 1 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyter-packaging-0.12.3-pyha770c72_1.conda - sha256: 7efa4122a8698de054ecb05d478a742bf616d9910fbc929b3ed49fa36dccbb85 - md5: 20d17ccfeb8a3b6ac7ea05b71a5ed97b - depends: - - deprecation * - - packaging * - - python >=3.7 - - setuptools >=60.2.0 - - tomlkit * - - wheel * - arch: x86_64 - platform: win - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jupyter-packaging - size: 19565 - timestamp: 1683544291686 - kind: conda name: jupyter_client version: 8.3.0 @@ -10522,6 +10462,20 @@ packages: platform: win size: 3227 timestamp: 1608166968312 +- kind: conda + name: narwhals + version: 1.8.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.8.4-pyhd8ed1ab_0.conda + sha256: b74a21d86093a8673bc7b9fb2cbc8d95c07d66974fb09e661e6fb6df81cbcae6 + md5: 3ded56572050710d75079ae7521afbfc + depends: + - python >=3.8 + license: MIT + size: 102448 + timestamp: 1727475884317 - kind: conda name: nbclient version: 0.7.4 @@ -15060,61 +15014,6 @@ packages: - pkg:pypi/tomli size: 15940 timestamp: 1644342331069 -- kind: conda - name: tomlkit - version: 0.12.1 - build: pyha770c72_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.1-pyha770c72_0.conda - sha256: dc4abf58ca42f29e12b8c0f8aadedfca49cc1e97dab025d15cf000b1787df773 - md5: 62f5b331c53d73e2f6c4c130b53518a0 - depends: - - python >=3.7 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - purls: - - pkg:pypi/tomlkit - size: 37008 - timestamp: 1690472913703 -- kind: conda - name: tomlkit - version: 0.12.2 - build: pyha770c72_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.2-pyha770c72_0.conda - sha256: 2db2564e0332f051f46670fb7c430b53d3d596f102f7d9994e84cf8afae2a12f - md5: 495ddad84b81dde4ee1138dd59ef5805 - depends: - - python >=3.7 - arch: x86_64 - platform: win - license: MIT - license_family: MIT - purls: - - pkg:pypi/tomlkit - size: 37106 - timestamp: 1698950692429 -- kind: conda - name: toolz - version: 0.12.0 - build: pyhd8ed1ab_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2 - sha256: 90229da7665175b0185183ab7b53f50af487c7f9b0f47cf09c184cbc139fd24b - md5: 92facfec94bc02d6ccf42e7173831a36 - depends: - - python >=3.5 - arch: x86_64 - platform: win - license: BSD-3-Clause - license_family: BSD - size: 49136 - timestamp: 1657485654230 - kind: conda name: tornado version: 6.3.2 @@ -15398,76 +15297,34 @@ packages: timestamp: 1689883066161 - kind: conda name: typing-extensions - version: 4.7.1 - build: hd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda - sha256: d5d19b8f5b275240c19616a46d67ec57250b3720ba88200da8c732c3fcbfc21d - md5: f96688577f1faa58096d06a45136afa2 - depends: - - typing_extensions ==4.7.1 pyha770c72_0 - arch: aarch64 - platform: osx - license: PSF-2.0 - license_family: PSF - size: 10080 - timestamp: 1688315729011 -- kind: conda - name: typing-extensions - version: 4.8.0 + version: 4.12.2 build: hd8ed1ab_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda - sha256: d6e1dddd0c372218ef15912383d351ac8c73465cbf16238017f0269813cafe2d - md5: 384462e63262a527bda564fa2d9126c0 - depends: - - typing_extensions ==4.8.0 pyha770c72_0 - arch: x86_64 - platform: win - license: PSF-2.0 - license_family: PSF - size: 10104 - timestamp: 1695040958008 -- kind: conda - name: typing_extensions - version: 4.7.1 - build: pyha770c72_0 - subdir: osx-arm64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda - sha256: 6edd6d5be690be492712cb747b6d62707f0d0c34ef56eefc796d91e5a03187d1 - md5: c39d6a09fe819de4951c2642629d9115 + url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + sha256: d3b9a8ed6da7c9f9553c5fd8a4fca9c3e0ab712fa5f497859f82337d67533b73 + md5: 52d648bd608f5737b123f510bb5514b5 depends: - - python >=3.7 - arch: aarch64 - platform: osx + - typing_extensions 4.12.2 pyha770c72_0 license: PSF-2.0 license_family: PSF - purls: - - pkg:pypi/typing-extensions - size: 36321 - timestamp: 1688315719627 + size: 10097 + timestamp: 1717802659025 - kind: conda name: typing_extensions - version: 4.8.0 + version: 4.12.2 build: pyha770c72_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda - sha256: 38d16b5c53ec1af845d37d22e7bb0e6c934c7f19499123507c5a470f6f8b7dde - md5: 5b1be40a26d10a06f6d4f1f9e19fa0c7 + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 depends: - python >=3.8 - arch: x86_64 - platform: win license: PSF-2.0 license_family: PSF - purls: - - pkg:pypi/typing-extensions - size: 35108 - timestamp: 1695040948828 + size: 39888 + timestamp: 1717802653893 - kind: conda name: typing_utils version: 0.1.0 diff --git a/pixi.toml b/pixi.toml index c1b14a62e..c875a7307 100644 --- a/pixi.toml +++ b/pixi.toml @@ -20,18 +20,18 @@ bump-version = "python automation/bump_version.py $1" # setup python dev packages dev-py-embed = { cmd = ["maturin", "develop", "-m", "vegafusion-python-embed/Cargo.toml", "--release"]} dev-py-vegafusion = { cmd = "cd python/vegafusion && pip install -e . --no-deps", depends_on = ["dev-py-embed"] } -dev-py-jupyter = { cmd = "cd python/vegafusion-jupyter && npm install && npm run build:dev", depends_on = ["dev-py-vegafusion", "dev-py-embed", "build-js-embed"] } # Build Python packages build-py-embed = {cmd = "maturin build -m vegafusion-python-embed/Cargo.toml --release --strip --sdist $0"} build-py-vegafusion = {cmd = "cd python/vegafusion && python -m build $0"} -build-py-jupyter = {cmd = "cd python/vegafusion-jupyter && npm install && python -m build $0", depends_on = ["build-js-embed"]} # test python +install-chromedriver-auto = """ +pip cache remove chromedriver-binary-auto && +pip install -U chromedriver-binary-auto --force-reinstall +""" test-py-vegafusion = { cmd = "cd python/vegafusion && pytest $0", depends_on = ["dev-py-vegafusion"]} -install-chromedriver-auto = "pip install -U chromedriver-binary-auto" -test-py-jupyter = { cmd = "cd python/vegafusion-jupyter && pytest $0", depends_on = ["dev-py-jupyter", "install-chromedriver-auto"]} -test-py-jupyter-headless = { cmd = "export VEGAFUSION_TEST_HEADLESS=1 && cd python/vegafusion-jupyter && pytest $0", depends_on = ["dev-py-jupyter", "install-chromedriver-auto"]} +test-py-vegafusion-headless = { cmd = "cd python/vegafusion && VEGAFUSION_TEST_HEADLESS=1 pytest $0", depends_on = ["dev-py-vegafusion", "install-chromedriver-auto"]} # Test rust build-vegajs-runtime = { cmd = "cd vegafusion-runtime/tests/util/vegajs_runtime && npm install" } @@ -115,7 +115,6 @@ toml = "0.10.2.*" pytest = ">=4.6" click = "8.1.6.*" python-duckdb = "1.0" -jupyter-packaging = "0.12.3.*" pip = "23.2.1.*" voila = "0.5.0.*" polars = "0.18.15.*" @@ -134,7 +133,7 @@ minio = "7.1.17.*" psutil = "5.9.5.*" pyarrow = "12.0.1.*" pandas = "2.0.3.*" -altair = "5.3.*" +altair = "5.4.*" protobuf = "4.23.3.*" ipywidgets = "8.1.0.*" rust = "1.80.*" diff --git a/python/vegafusion-jupyter/.coveragerc b/python/vegafusion-jupyter/.coveragerc deleted file mode 100644 index 5d747894d..000000000 --- a/python/vegafusion-jupyter/.coveragerc +++ /dev/null @@ -1,2 +0,0 @@ -[run] -omit = vegafusion_jupyter/tests/* diff --git a/python/vegafusion-jupyter/.eslintignore b/python/vegafusion-jupyter/.eslintignore deleted file mode 100644 index e8a22210a..000000000 --- a/python/vegafusion-jupyter/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules -dist -coverage -**/*.d.ts -tests \ No newline at end of file diff --git a/python/vegafusion-jupyter/.eslintrc.js b/python/vegafusion-jupyter/.eslintrc.js deleted file mode 100644 index 9fb27ea5b..000000000 --- a/python/vegafusion-jupyter/.eslintrc.js +++ /dev/null @@ -1,28 +0,0 @@ -module.exports = { - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/eslint-recommended', - 'plugin:@typescript-eslint/recommended', - 'plugin:prettier/recommended' - ], - parser: '@typescript-eslint/parser', - parserOptions: { - project: 'tsconfig.eslint.json', - sourceType: 'module' - }, - plugins: ['@typescript-eslint'], - rules: { - '@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' - } -}; \ No newline at end of file diff --git a/python/vegafusion-jupyter/.github/workflows/build.yml b/python/vegafusion-jupyter/.github/workflows/build.yml deleted file mode 100644 index d706bbbd1..000000000 --- a/python/vegafusion-jupyter/.github/workflows/build.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: Build - -on: - push: - branches: main - pull_request: - branches: "*" - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Install node - uses: actions/setup-node@v1 - with: - node-version: "12.x" - - name: Install Python - uses: actions/setup-python@v2 - with: - python-version: "3.7" - architecture: "x64" - - - name: Setup pip cache - uses: actions/cache@v2 - with: - path: ~/.cache/pip - key: pip-3.7-${{ hashFiles('package.json') }} - restore-keys: | - pip-3.7- - pip- - - - name: Get npm cache directory - id: npm-cache - run: | - echo "::set-output name=dir::$(npm config get cache)" - - uses: actions/cache@v2 - with: - path: ${{ steps.npm-cache.outputs.dir }} - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - - name: Install dependencies - run: | - python -m pip install -U pip setuptools codecov - npm install -g codecov - - name: Test the extension - run: | - python -m pip install --upgrade -v -e ".[test, examples, docs]" - yarn run lint:check - - pytest - yarn run test - - - name: Check docs can be build + links - run: | - sudo apt install -y pandoc - pushd docs - make html - python -m pytest --check-links - popd diff --git a/python/vegafusion-jupyter/.gitignore b/python/vegafusion-jupyter/.gitignore deleted file mode 100644 index f386afe1e..000000000 --- a/python/vegafusion-jupyter/.gitignore +++ /dev/null @@ -1,157 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -env/ -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -*.egg-info/ -.installed.cfg -*.egg - -# 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/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*,cover -.hypothesis/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py - -# Flask instance folder -instance/ - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ -docs/source/_static/embed-bundle.js -docs/source/_static/embed-bundle.js.map - -# PyBuilder -target/ - -# IPython Notebook -.ipynb_checkpoints - -# pyenv -.python-version - -# celery beat schedule file -celerybeat-schedule - -# dotenv -.env - -# virtualenv -venv/ -ENV/ - -# Spyder project settings -.spyderproject - -# Rope project settings -.ropeproject - -# ========================= -# Operating System Files -# ========================= - -# OSX -# ========================= - -.DS_Store -.AppleDouble -.LSOverride - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -# Windows -# ========================= - -# Windows image file caches -Thumbs.db -ehthumbs.db - -# Folder config file -Desktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msm -*.msp - -# Windows shortcuts -*.lnk - - -# NPM -# ---- - -**/node_modules/ -vegafusion_jupyter/nbextension/index.* -vegafusion_jupyter/labextension/*.tgz - -# Coverage data -# ------------- -**/coverage/ - -# Packed lab extensions -vegafusion_jupyter/labextension -/css/*.css diff --git a/python/vegafusion-jupyter/.npmignore b/python/vegafusion-jupyter/.npmignore deleted file mode 100644 index f8ec1d196..000000000 --- a/python/vegafusion-jupyter/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -.DS_Store -node_modules/ -tests/ -.jshintrc -# Ignore any build output from python: -dist/*.tar.gz -dist/*.wheel diff --git a/python/vegafusion-jupyter/.prettierignore b/python/vegafusion-jupyter/.prettierignore deleted file mode 100644 index b56605bbd..000000000 --- a/python/vegafusion-jupyter/.prettierignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -**/node_modules -**/lib -**/package.json \ No newline at end of file diff --git a/python/vegafusion-jupyter/.prettierrc b/python/vegafusion-jupyter/.prettierrc deleted file mode 100644 index dc2fb828f..000000000 --- a/python/vegafusion-jupyter/.prettierrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "singleQuote": true -} \ No newline at end of file diff --git a/python/vegafusion-jupyter/LICENSE.txt b/python/vegafusion-jupyter/LICENSE.txt deleted file mode 100644 index b765d1206..000000000 --- a/python/vegafusion-jupyter/LICENSE.txt +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2023, Hex Technologies, Inc -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 OWNER 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. \ No newline at end of file diff --git a/python/vegafusion-jupyter/MANIFEST.in b/python/vegafusion-jupyter/MANIFEST.in deleted file mode 100644 index 23a33534e..000000000 --- a/python/vegafusion-jupyter/MANIFEST.in +++ /dev/null @@ -1,34 +0,0 @@ -include LICENSE.txt -include README.md - -include pyproject.toml -include pytest.ini -include .coverage.rc - -include tsconfig.json -include package.json -include webpack.config.js -include webpack.config.experimental.js -include vegafusion_jupyter/labextension/*.tgz - -# Javascript files -graft vegafusion_jupyter/nbextension -graft src -graft css -prune node_modules -prune **/node_modules -prune coverage -prune lib - -# Prune Others -prune tests -prune examples -prune dist -prune docs - -# Patterns to exclude from any directory -global-exclude *~ -global-exclude *.pyc -global-exclude *.pyo -global-exclude .git -global-exclude .ipynb_checkpoints diff --git a/python/vegafusion-jupyter/README.md b/python/vegafusion-jupyter/README.md deleted file mode 100644 index def342622..000000000 --- a/python/vegafusion-jupyter/README.md +++ /dev/null @@ -1,76 +0,0 @@ -# VegaFusion Jupyter -This directory contains the `vegafusion-jupyter` package. For documentation on using this package to display Altair visualizations powered by VegaFusion in Jupyter contexts, see https://vegafusion.io. - -The content below was autogenerated by Jupyter Widget cookiecutter ---- -# vegafusion-jupyter - -[![Build Status](https://travis-ci.org/jonmmease/vegafusion.svg?branch=master)](https://travis-ci.org/jonmmease/vegafusion_jupyter) -[![codecov](https://codecov.io/gh/jonmmease/vegafusion/branch/master/graph/badge.svg)](https://codecov.io/gh/jonmmease/vegafusion) - - -Altair Jupyter Widget library that relies on VegaFusion for serverside calculations - -## Installation - -You can install using `pip`: - -```bash -pip install vegafusion_jupyter -``` - -If you are using Jupyter Notebook 5.2 or earlier, you may also need to enable -the nbextension: -```bash -jupyter nbextension enable --py [--sys-prefix|--user|--system] vegafusion_jupyter -``` - -## Development Installation - -Create a dev environment: -```bash -conda create -n vegafusion_jupyter-dev -c conda-forge nodejs yarn python jupyterlab -conda activate vegafusion_jupyter-dev -``` - -Install the python. This will also build the TS package. -```bash -pip install -e ".[test, examples]" -``` - -When developing your extensions, you need to manually enable your extensions with the -notebook / lab frontend. For lab, this is done by the command: - -``` -jupyter labextension develop --overwrite . -yarn run build -``` - -For classic notebook, you need to run: - -``` -jupyter nbextension install --sys-prefix --symlink --overwrite --py vegafusion_jupyter -jupyter nbextension enable --sys-prefix --py vegafusion_jupyter -``` - -Note that the `--symlink` flag doesn't work on Windows, so you will here have to run -the `install` command every time that you rebuild your extension. For certain installations -you might also need another flag instead of `--sys-prefix`, but we won't cover the meaning -of those flags here. - -### How to see your changes -#### Typescript: -If you use JupyterLab to develop then 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 widget. - -```bash -# Watch the source directory in one terminal, automatically rebuilding when needed -yarn run watch -# Run JupyterLab in another terminal -jupyter lab -``` - -After a change wait for the build to finish and then refresh your browser and the changes should take effect. - -#### Python: -If you make a change to the python code then you will need to restart the notebook kernel to have it take effect. diff --git a/python/vegafusion-jupyter/babel.config.js b/python/vegafusion-jupyter/babel.config.js deleted file mode 100644 index bbc789a7f..000000000 --- a/python/vegafusion-jupyter/babel.config.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = { - sourceMap: 'inline', - presets: [ - [ - '@babel/preset-env', - { - targets: { - node: 'current', - }, - }, - ], - ], -}; diff --git a/python/vegafusion-jupyter/codecov.yml b/python/vegafusion-jupyter/codecov.yml deleted file mode 100644 index 9450934aa..000000000 --- a/python/vegafusion-jupyter/codecov.yml +++ /dev/null @@ -1,12 +0,0 @@ -comment: off -# show coverage in CI status, but never consider it a failure -coverage: - status: - project: - default: - target: 0% - patch: - default: - target: 0% -ignore: - - "vegafusion_jupyter/tests" diff --git a/python/vegafusion-jupyter/css/README.md b/python/vegafusion-jupyter/css/README.md deleted file mode 100644 index 6517784da..000000000 --- a/python/vegafusion-jupyter/css/README.md +++ /dev/null @@ -1,3 +0,0 @@ -Do not edit! - -these css files are generated from the scss files in the `scss/` directory by the `build:lib` command. diff --git a/python/vegafusion-jupyter/images/VegaFusionLogo-SmallGrey.svg b/python/vegafusion-jupyter/images/VegaFusionLogo-SmallGrey.svg deleted file mode 100644 index e5aaabacd..000000000 --- a/python/vegafusion-jupyter/images/VegaFusionLogo-SmallGrey.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/python/vegafusion-jupyter/install.json b/python/vegafusion-jupyter/install.json deleted file mode 100644 index 49dc70d00..000000000 --- a/python/vegafusion-jupyter/install.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "packageManager": "python", - "packageName": "vegafusion-jupyter", - "uninstallInstructions": "Use your Python package manager (pip, conda, etc.) to uninstall the package vegafusion-jupyter" -} diff --git a/python/vegafusion-jupyter/jest.config.js b/python/vegafusion-jupyter/jest.config.js deleted file mode 100644 index 79453a3ae..000000000 --- a/python/vegafusion-jupyter/jest.config.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - automock: false, - moduleNameMapper: { - '\\.(css|less|sass|scss)$': 'identity-obj-proxy', - }, - preset: 'ts-jest/presets/js-with-babel', - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], - testPathIgnorePatterns: ['/lib/', '/node_modules/'], - testRegex: '/__tests__/.*.spec.ts[x]?$', - transformIgnorePatterns: ['/node_modules/(?!(@jupyter(lab|-widgets)/.*)/)'], - globals: { - 'ts-jest': { - tsconfig: '/tsconfig.json', - }, - }, -}; diff --git a/python/vegafusion-jupyter/package-lock.json b/python/vegafusion-jupyter/package-lock.json deleted file mode 100644 index 05d2067bb..000000000 --- a/python/vegafusion-jupyter/package-lock.json +++ /dev/null @@ -1,26918 +0,0 @@ -{ - "name": "vegafusion-jupyter", - "version": "1.6.9", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "vegafusion-jupyter", - "version": "1.5.0", - "license": "BSD-3-Clause", - "dependencies": { - "@jupyter-widgets/base": "^4 || ^5 || ^6", - "@jupyterlab/notebook": "^3 || ^4", - "marked": "^4.0.10", - "vega": "^5.25.0", - "vega-lite": "^5.8.0", - "vega-themes": "^2.13.0", - "vegafusion-embed": "../../javascript/vegafusion-embed", - "vegafusion-wasm": "../../vegafusion-wasm/pkg" - }, - "devDependencies": { - "@babel/core": "^7.5.0", - "@babel/preset-env": "^7.5.0", - "@jupyterlab/builder": "^4.0.5", - "@phosphor/application": "^1.6.0", - "@phosphor/widgets": "^1.6.0", - "@types/jest": "^26.0.0", - "@types/webpack-env": "^1.16.3", - "@typescript-eslint/eslint-plugin": "^3.6.0", - "@typescript-eslint/parser": "^3.6.0", - "acorn": "^7.2.0", - "css-loader": "6.5.1", - "eslint": "^7.4.0", - "eslint-config-prettier": "^6.11.0", - "eslint-plugin-prettier": "^3.1.4", - "fs-extra": "^7.0.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^26.0.0", - "mkdirp": "^0.5.1", - "npm-run-all": "^4.1.3", - "prettier": "^2.0.5", - "rimraf": "^2.6.2", - "sass": "^1.45.2", - "source-map-loader": "^1.1.3", - "style-loader": "^1.0.0", - "svg-inline-loader": "^0.8.2", - "ts-jest": "^26.0.0", - "ts-loader": "^8.0.0", - "typescript": "~4.1.3", - "webpack": "^5.65.0", - "webpack-cli": "^4.9.1", - "webpack-require-from": "^1.8.6" - } - }, - "../../javascript/vegafusion-embed": { - "version": "1.5.0", - "license": "BSD-3-Clause", - "dependencies": { - "grpc-web": "^1.3.1", - "vega-lite": "^4.17.0", - "vegafusion-wasm": "../../vegafusion-wasm/pkg" - }, - "devDependencies": { - "@babel/core": "^7.5.0", - "@babel/preset-env": "^7.5.0", - "@types/node": "17.0.21", - "@typescript-eslint/eslint-plugin": "^3.6.0", - "@typescript-eslint/parser": "^3.6.0", - "acorn": "^7.2.0", - "css-loader": "6.5.1", - "eslint": "^7.4.0", - "eslint-config-prettier": "^6.11.0", - "eslint-plugin-prettier": "^3.1.4", - "fs-extra": "^7.0.0", - "identity-obj-proxy": "^3.0.0", - "mkdirp": "^0.5.1", - "npm-run-all": "^4.1.3", - "prettier": "^2.0.5", - "rimraf": "^2.6.2", - "sass": "^1.45.2", - "source-map-loader": "^1.1.3", - "style-loader": "^1.0.0", - "svg-inline-loader": "^0.8.2", - "ts-loader": "^8.0.0", - "typescript": "~4.1.3" - } - }, - "../../vegafusion-wasm/pkg": { - "name": "vegafusion-wasm", - "version": "1.5.0", - "license": "BSD-3-Clause", - "dependencies": { - "bootstrap": "^5.1.3", - "grpc-web": "^1.3.1", - "lodash": "^4.17.21", - "vega": "^5.22.1", - "vega-tooltip": "^0.27.0", - "vega-util": "^1.17.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", - "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", - "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", - "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", - "dev": true, - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz", - "integrity": "sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz", - "integrity": "sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^4.7.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", - "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", - "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", - "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", - "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", - "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", - "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", - "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", - "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz", - "integrity": "sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", - "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", - "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", - "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", - "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", - "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", - "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", - "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", - "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", - "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", - "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", - "dev": true, - "dependencies": { - "regenerator-transform": "^0.14.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", - "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.8.tgz", - "integrity": "sha512-9rNKgVCdwHb3z1IlbMyft6yIXIeP3xz6vWvGaLHrJThuEIqWfHb0DNBH9VuTgnDfdbUDhkmkvMZS/YMCtP7Elg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.8", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-async-generator-functions": "^7.16.8", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-class-static-block": "^7.16.7", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.16.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.7", - "@babel/plugin-proposal-private-property-in-object": "^7.16.7", - "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", - "@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-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-transform-arrow-functions": "^7.16.7", - "@babel/plugin-transform-async-to-generator": "^7.16.8", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.16.7", - "@babel/plugin-transform-classes": "^7.16.7", - "@babel/plugin-transform-computed-properties": "^7.16.7", - "@babel/plugin-transform-destructuring": "^7.16.7", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.16.7", - "@babel/plugin-transform-modules-commonjs": "^7.16.8", - "@babel/plugin-transform-modules-systemjs": "^7.16.7", - "@babel/plugin-transform-modules-umd": "^7.16.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", - "@babel/plugin-transform-new-target": "^7.16.7", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.16.7", - "@babel/plugin-transform-reserved-words": "^7.16.7", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.16.7", - "@babel/plugin-transform-typeof-symbol": "^7.16.7", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.16.8", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.20.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", - "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", - "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.8", - "@babel/types": "^7.16.8", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@blueprintjs/colors": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@blueprintjs/colors/-/colors-4.1.2.tgz", - "integrity": "sha512-wvq92hgRZZYrohI8GaN/pV0iQfxvWa2RI1cLYuItDvXM6i/u1riaw0RcsqqAIL1MH1fHsKFdH1O8i7Tj5a+lpQ==" - }, - "node_modules/@blueprintjs/core": { - "version": "3.54.0", - "resolved": "https://registry.npmjs.org/@blueprintjs/core/-/core-3.54.0.tgz", - "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" - }, - "bin": { - "upgrade-blueprint-2.0.0-rename": "scripts/upgrade-blueprint-2.0.0-rename.sh", - "upgrade-blueprint-3.0.0-rename": "scripts/upgrade-blueprint-3.0.0-rename.sh" - }, - "peerDependencies": { - "react": "^15.3.0 || 16 || 17", - "react-dom": "^15.3.0 || 16 || 17" - } - }, - "node_modules/@blueprintjs/core/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/@blueprintjs/icons": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/@blueprintjs/icons/-/icons-3.33.0.tgz", - "integrity": "sha512-Q6qoSDIm0kRYQZISm59UUcDCpV3oeHulkLuh3bSlw0HhcSjvEQh2PSYbtaifM60Q4aK4PCd6bwJHg7lvF1x5fQ==", - "dependencies": { - "classnames": "^2.2", - "tslib": "~2.3.1" - } - }, - "node_modules/@blueprintjs/icons/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/@blueprintjs/select": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/@blueprintjs/select/-/select-3.19.1.tgz", - "integrity": "sha512-8UJIZMaWXRMQHr14wbmzJc/CklcSKxOU5JUux0xXKQz/hDW/g1a650tlwJmnxufvRdShbGinlVfHupCs0EL6sw==", - "dependencies": { - "@blueprintjs/core": "^3.54.0", - "classnames": "^2.2", - "tslib": "~2.3.1" - }, - "peerDependencies": { - "react": "^15.3.0 || 16 || 17", - "react-dom": "^15.3.0 || 16 || 17" - } - }, - "node_modules/@blueprintjs/select/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", - "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@hypnosphi/create-react-context": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz", - "integrity": "sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A==", - "dependencies": { - "gud": "^1.0.0", - "warning": "^4.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": ">=0.14.0" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/core/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "node-notifier": "^8.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@juggle/resize-observer": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.3.1.tgz", - "integrity": "sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==" - }, - "node_modules/@jupyter-widgets/base": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@jupyter-widgets/base/-/base-4.0.0.tgz", - "integrity": "sha512-lBQgLYzq6C+XjfVJTidk+rckKo/+xlTgIm1XUtACA3BUz8bgi2du2zmbYkcrplJMwGub4QWP6GnKgM5ZZRhzYg==", - "dependencies": { - "@jupyterlab/services": "^6.0.0", - "@lumino/coreutils": "^1.2.0", - "@lumino/messaging": "^1.2.1", - "@lumino/widgets": "^1.3.0", - "@types/backbone": "^1.4.1", - "@types/lodash": "^4.14.134", - "backbone": "1.2.3", - "base64-js": "^1.2.1", - "jquery": "^3.1.1", - "lodash": "^4.17.4" - } - }, - "node_modules/@jupyterlab/apputils": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/apputils/-/apputils-3.5.2.tgz", - "integrity": "sha512-VTgiYzoGRt2hjiaG94M3M35jXw46bMO+pl8whjPRZFZ6UzIJpMq9/Rr1VyuJyG+eE/Wt9WQsxCP84nTlUZNfBQ==", - "dependencies": { - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/services": "^6.5.2", - "@jupyterlab/settingregistry": "^3.5.2", - "@jupyterlab/statedb": "^3.5.2", - "@jupyterlab/translation": "^3.5.2", - "@jupyterlab/ui-components": "^3.5.2", - "@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.33.0", - "@types/react": "^17.0.0", - "react": "^17.0.1", - "react-dom": "^17.0.1", - "sanitize-html": "~2.7.3", - "url": "^0.11.0" - } - }, - "node_modules/@jupyterlab/attachments": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/attachments/-/attachments-3.5.2.tgz", - "integrity": "sha512-zVu6soe+biGG/V+ZOLb24rr3esr7YyvLnxLefWB02pSJPBlIe5Pn1GY6eWYPOZPtcFN2Di8OZsCp6LQJaNygeA==", - "dependencies": { - "@jupyterlab/nbformat": "^3.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/rendermime": "^3.5.2", - "@jupyterlab/rendermime-interfaces": "^3.5.2", - "@lumino/disposable": "^1.10.0", - "@lumino/signaling": "^1.10.0" - } - }, - "node_modules/@jupyterlab/builder": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@jupyterlab/builder/-/builder-4.0.5.tgz", - "integrity": "sha512-rypdRtkDvoq1nt7WqbYwTBCCumFPceUxvUW9J9Xe3KaScnk/BoveV9D+oRSHNl8okDdJZLkgS99UT4mC0ysduw==", - "dev": true, - "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" - } - }, - "node_modules/@jupyterlab/builder/node_modules/@lumino/algorithm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.1.tgz", - "integrity": "sha512-iA+uuvA7DeNFB0/cQpIWNgO1c6z4pOSigifjstLy+rxf1U5ZzxIq+xudnEuTbWgKSTviG02j4cKwCyx1PO6rzA==", - "dev": true - }, - "node_modules/@jupyterlab/builder/node_modules/@lumino/collections": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/collections/-/collections-2.0.1.tgz", - "integrity": "sha512-8TbAU/48XVPKc/FOhGHLuugf2Gmx6vhVEx867KGG5fLwDOI8EW4gTno78yJUk8G0QpgNa+sdpB/LwbJFNIratg==", - "dev": true, - "dependencies": { - "@lumino/algorithm": "^2.0.1" - } - }, - "node_modules/@jupyterlab/builder/node_modules/@lumino/commands": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@lumino/commands/-/commands-2.1.3.tgz", - "integrity": "sha512-F0ZYZDrfJzcPp4JqeQMC2dzi3XOobzNZD94qUJ6QBsbfghFRcPBM+rfOspghRvCEFHAZdtghw04wOp7VWgIczA==", - "dev": true, - "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" - } - }, - "node_modules/@jupyterlab/builder/node_modules/@lumino/coreutils": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.1.2.tgz", - "integrity": "sha512-vyz7WzchTO4HQ8iVAxvSUmb5o/8t3cz1vBo8V4ZIaPGada0Jx0xe3tKQ8bXp4pjHc+AEhMnkCnlUyVYMWbnj4A==", - "dev": true - }, - "node_modules/@jupyterlab/builder/node_modules/@lumino/disposable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@lumino/disposable/-/disposable-2.1.2.tgz", - "integrity": "sha512-0qmB6zPt9+uj4SVMTfISn0wUOjYHahtKotwxDD5flfcscj2gsXaFCXO4Oqot1zcsZbg8uJmTUhEzAvFW0QhFNA==", - "dev": true, - "dependencies": { - "@lumino/signaling": "^2.1.2" - } - }, - "node_modules/@jupyterlab/builder/node_modules/@lumino/domutils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/domutils/-/domutils-2.0.1.tgz", - "integrity": "sha512-tbcfhsdKH04AMjSgYAYGD2xE80YcjrqKnfMTeU2NHt4J294Hzxs1GvEmSMk5qJ3Bbgwx6Z4BbQ7apnFg8Gc6cA==", - "dev": true - }, - "node_modules/@jupyterlab/builder/node_modules/@lumino/dragdrop": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@lumino/dragdrop/-/dragdrop-2.1.3.tgz", - "integrity": "sha512-lETk7lu+8pMfufxWGL76Dfz8kO/44CgHua0zzaLMh/eK+sRQxghMAxqKAMrEw+6eDy7EsM59R3xuynhkLrxa2A==", - "dev": true, - "dependencies": { - "@lumino/coreutils": "^2.1.2", - "@lumino/disposable": "^2.1.2" - } - }, - "node_modules/@jupyterlab/builder/node_modules/@lumino/keyboard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/keyboard/-/keyboard-2.0.1.tgz", - "integrity": "sha512-R2mrH9HCEcv/0MSAl7bEUbjCNOnhrg49nXZBEVckg//TEG+sdayCsyrbJNMPcZ07asIPKc6mq3v7DpAmDKqh+w==", - "dev": true - }, - "node_modules/@jupyterlab/builder/node_modules/@lumino/messaging": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/messaging/-/messaging-2.0.1.tgz", - "integrity": "sha512-Z1b9Sq7i2yw7BN/u9ezoBUMYK06CsQXO7BqpczSnEO0PfwFf9dWi7y9VcIySOBz9uogsT1uczZMIMtLefk+xPQ==", - "dev": true, - "dependencies": { - "@lumino/algorithm": "^2.0.1", - "@lumino/collections": "^2.0.1" - } - }, - "node_modules/@jupyterlab/builder/node_modules/@lumino/properties": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-2.0.1.tgz", - "integrity": "sha512-RPtHrp8cQqMnTC915lOIdrmsbPDCC7PhPOZb2YY7/Jj6dEdwmGhoMthc2tBEYWoHP+tU/hVm8UR/mEQby22srQ==", - "dev": true - }, - "node_modules/@jupyterlab/builder/node_modules/@lumino/signaling": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.2.tgz", - "integrity": "sha512-KtwKxx+xXkLOX/BdSqtvnsqBTPKDIENFBKeYkMTxstQc3fHRmyTzmaVoeZES+pr1EUy3e8vM4pQFVQpb8VsDdA==", - "dev": true, - "dependencies": { - "@lumino/algorithm": "^2.0.1", - "@lumino/coreutils": "^2.1.2" - } - }, - "node_modules/@jupyterlab/builder/node_modules/@lumino/virtualdom": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/virtualdom/-/virtualdom-2.0.1.tgz", - "integrity": "sha512-WNM+uUZX7vORhlDRN9NmhEE04Tz1plDjtbwsX+i/51pQj2N2r7+gsVPY/gR4w+I5apmC3zG8/BojjJYIwi8ogA==", - "dev": true, - "dependencies": { - "@lumino/algorithm": "^2.0.1" - } - }, - "node_modules/@jupyterlab/builder/node_modules/@lumino/widgets": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@lumino/widgets/-/widgets-2.3.0.tgz", - "integrity": "sha512-82vvNHmi1r5MzLEybq3ImJ7vAkaVxHZyw6/H+3ZlhXYasOwOIlYy7le71VsW8O4EtLLjuf/A/Wme9vsxH7Wp0w==", - "dev": true, - "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" - } - }, - "node_modules/@jupyterlab/builder/node_modules/@webpack-cli/configtest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@jupyterlab/builder/node_modules/@webpack-cli/info": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - } - }, - "node_modules/@jupyterlab/builder/node_modules/@webpack-cli/serve": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", - "dev": true, - "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@jupyterlab/builder/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@jupyterlab/builder/node_modules/css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/@jupyterlab/builder/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jupyterlab/builder/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jupyterlab/builder/node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@jupyterlab/builder/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/@jupyterlab/builder/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@jupyterlab/builder/node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/@jupyterlab/builder/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@jupyterlab/builder/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jupyterlab/builder/node_modules/source-map-loader": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.0.2.tgz", - "integrity": "sha512-oX8d6ndRjN+tVyjj6PlXSyFPhDdVAPsZA30nD3/II8g4uOv8fCz0DMn5sy8KtVbDfKQxOpGwGJnK3xIW3tauDw==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/@jupyterlab/builder/node_modules/source-map-loader/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@jupyterlab/builder/node_modules/source-map-loader/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/@jupyterlab/builder/node_modules/source-map-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/@jupyterlab/builder/node_modules/style-loader": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", - "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/@jupyterlab/builder/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@jupyterlab/builder/node_modules/webpack-cli": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", - "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", - "dev": true, - "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" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@jupyterlab/builder/node_modules/webpack-cli/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@jupyterlab/cells": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/cells/-/cells-3.5.2.tgz", - "integrity": "sha512-ze0vuFRH3CL88wS+oMoD4YmapMU/aR/RTZPuAOgK0o072CEAuhJFOPgpv12NalnEYlNM8YBeR4/nJ2xPfbX8lQ==", - "dependencies": { - "@jupyterlab/apputils": "^3.5.2", - "@jupyterlab/attachments": "^3.5.2", - "@jupyterlab/codeeditor": "^3.5.2", - "@jupyterlab/codemirror": "^3.5.2", - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/filebrowser": "^3.5.2", - "@jupyterlab/nbformat": "^3.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/outputarea": "^3.5.2", - "@jupyterlab/rendermime": "^3.5.2", - "@jupyterlab/services": "^6.5.2", - "@jupyterlab/shared-models": "^3.5.2", - "@jupyterlab/ui-components": "^3.5.2", - "@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.33.0", - "marked": "^4.0.17", - "react": "^17.0.1" - } - }, - "node_modules/@jupyterlab/codeeditor": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/codeeditor/-/codeeditor-3.5.2.tgz", - "integrity": "sha512-ONMCUEvgSwXhOEDW3i8Gl7s7xWbbgpjbG413LV4F+JP4J4IZv6fSW/AhXQ4Omdtl1lTJsqlGqfNyEmdAkLto9w==", - "dependencies": { - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/nbformat": "^3.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/shared-models": "^3.5.2", - "@jupyterlab/translation": "^3.5.2", - "@jupyterlab/ui-components": "^3.5.2", - "@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.33.0" - } - }, - "node_modules/@jupyterlab/codemirror": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/codemirror/-/codemirror-3.5.2.tgz", - "integrity": "sha512-PpAKmDwMd69Ge/ZG+F8PiB6ZoJcdJ8slsAv3Tu1FM4I2MPZ+X2E6TnqmgsBL7LZTr3qkWcQuTBaNxinAVbAzkA==", - "dependencies": { - "@jupyterlab/apputils": "^3.5.2", - "@jupyterlab/codeeditor": "^3.5.2", - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/nbformat": "^3.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/shared-models": "^3.5.2", - "@jupyterlab/statusbar": "^3.5.2", - "@jupyterlab/translation": "^3.5.2", - "@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.33.0", - "codemirror": "~5.61.0", - "react": "^17.0.1", - "y-codemirror": "^3.0.1" - } - }, - "node_modules/@jupyterlab/coreutils": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-5.5.2.tgz", - "integrity": "sha512-mpanIZlMcUN10xYN8P8N6Icnz6DbJjKrOMRvmD6ALZ3i62SJqqMjuYCW6vFZ7cW+EZlMTqOk8VMnAJ+rwC5d+g==", - "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" - } - }, - "node_modules/@jupyterlab/docmanager": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/docmanager/-/docmanager-3.5.2.tgz", - "integrity": "sha512-IGP6NL/+qiq4w288I2gqmGrNOnShZcDyDsEE5Sts7HYoRDnSZL5lZSRwmP7DFnUQQ3v4PGrz9n/Mu3nNCBRv/g==", - "dependencies": { - "@jupyterlab/apputils": "^3.5.2", - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/docprovider": "^3.5.2", - "@jupyterlab/docregistry": "^3.5.2", - "@jupyterlab/services": "^6.5.2", - "@jupyterlab/statusbar": "^3.5.2", - "@jupyterlab/translation": "^3.5.2", - "@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.33.0", - "react": "^17.0.1" - } - }, - "node_modules/@jupyterlab/docprovider": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/docprovider/-/docprovider-3.5.2.tgz", - "integrity": "sha512-QH9lHBAbD843Azc12PzqkiMUhJ6k7Mn/+N5mY0BCYijU0M1qBRcWIN6Cyanyx4jLsIOKX8oslKF5fO8JYosKfw==", - "dependencies": { - "@jupyterlab/shared-models": "^3.5.2", - "@lumino/coreutils": "^1.11.0", - "lib0": "^0.2.42", - "y-websocket": "^1.3.15", - "yjs": "^13.5.17" - } - }, - "node_modules/@jupyterlab/docregistry": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/docregistry/-/docregistry-3.5.2.tgz", - "integrity": "sha512-sJ/tIzDiCapRs3OxMpqswiBe/uvwqHtDyYAux28Ux6q4nN14Ht9svqDM8knkUjcOlcM+W011LqPeR6vUDmlcxA==", - "dependencies": { - "@jupyterlab/apputils": "^3.5.2", - "@jupyterlab/codeeditor": "^3.5.2", - "@jupyterlab/codemirror": "^3.5.2", - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/docprovider": "^3.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/rendermime": "^3.5.2", - "@jupyterlab/rendermime-interfaces": "^3.5.2", - "@jupyterlab/services": "^6.5.2", - "@jupyterlab/shared-models": "^3.5.2", - "@jupyterlab/translation": "^3.5.2", - "@jupyterlab/ui-components": "^3.5.2", - "@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.33.0", - "yjs": "^13.5.17" - } - }, - "node_modules/@jupyterlab/filebrowser": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/filebrowser/-/filebrowser-3.5.2.tgz", - "integrity": "sha512-XOgxL9s2+4I0X2DEkgLdLs6nRhn9jppLClBlBQUboRiDabqW62Pwbkf54KUH7yJgvXy0ZJ4EiX4uRoDGY3qJ7w==", - "dependencies": { - "@jupyterlab/apputils": "^3.5.2", - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/docmanager": "^3.5.2", - "@jupyterlab/docregistry": "^3.5.2", - "@jupyterlab/services": "^6.5.2", - "@jupyterlab/statedb": "^3.5.2", - "@jupyterlab/statusbar": "^3.5.2", - "@jupyterlab/translation": "^3.5.2", - "@jupyterlab/ui-components": "^3.5.2", - "@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.33.0", - "react": "^17.0.1" - } - }, - "node_modules/@jupyterlab/nbformat": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/nbformat/-/nbformat-3.5.2.tgz", - "integrity": "sha512-Ml5hNpS9tMqZ9ThI24+iXHgX71XWQAysyPOU1vA3idvTGCbGhVc4FaZcDX17uepA7yIEUitlj4xQGtJR8hNzuA==", - "dependencies": { - "@lumino/coreutils": "^1.11.0" - } - }, - "node_modules/@jupyterlab/notebook": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/notebook/-/notebook-3.4.0.tgz", - "integrity": "sha512-OzNXGfLnNmyEZItXQ6g5CGbUZS/8tmTXJLW6+7cKhoDCJsV6riX3ujLgFsZJdU2e0a4HWtbKDUYOxvH12hYe1A==", - "dependencies": { - "@jupyterlab/apputils": "^3.4.0", - "@jupyterlab/cells": "^3.4.0", - "@jupyterlab/codeeditor": "^3.4.0", - "@jupyterlab/coreutils": "^5.4.0", - "@jupyterlab/docregistry": "^3.4.0", - "@jupyterlab/nbformat": "^3.4.0", - "@jupyterlab/observables": "^4.4.0", - "@jupyterlab/rendermime": "^3.4.0", - "@jupyterlab/services": "^6.4.0", - "@jupyterlab/settingregistry": "^3.4.0", - "@jupyterlab/shared-models": "^3.4.0", - "@jupyterlab/statusbar": "^3.4.0", - "@jupyterlab/translation": "^3.4.0", - "@jupyterlab/ui-components": "^3.4.0", - "@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.30.0", - "react": "^17.0.1" - } - }, - "node_modules/@jupyterlab/observables": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/observables/-/observables-4.5.2.tgz", - "integrity": "sha512-aRruzLKEls5vxUgPmK+Wxh6yyTXlQMrKqmNUZKilKSLRyfnLl3wDprIP7odzosQhaURixa3dQnrYg90k/VaLdw==", - "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" - } - }, - "node_modules/@jupyterlab/outputarea": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/outputarea/-/outputarea-3.5.2.tgz", - "integrity": "sha512-cjIx0OFm/qLqff01mioWraeMI6rNJ9ORHfbF2gvIUZna9XNyhBKO8Jc+lAnL8+K0d2vn5RpgimhrTwWJ83ELuw==", - "dependencies": { - "@jupyterlab/apputils": "^3.5.2", - "@jupyterlab/nbformat": "^3.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/rendermime": "^3.5.2", - "@jupyterlab/rendermime-interfaces": "^3.5.2", - "@jupyterlab/services": "^6.5.2", - "@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.33.0", - "resize-observer-polyfill": "^1.5.1" - } - }, - "node_modules/@jupyterlab/rendermime": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/rendermime/-/rendermime-3.5.2.tgz", - "integrity": "sha512-tr3Fj1/khEMvSkJ59WCBXF5l1xixPt6F+aou13w+RIFmNkJqH8Mos2mIDE4WwdF2481Jqo6lVE+0nVCgpLLCAQ==", - "dependencies": { - "@jupyterlab/apputils": "^3.5.2", - "@jupyterlab/codemirror": "^3.5.2", - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/nbformat": "^3.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/rendermime-interfaces": "^3.5.2", - "@jupyterlab/services": "^6.5.2", - "@jupyterlab/translation": "^3.5.2", - "@lumino/algorithm": "^1.9.0", - "@lumino/coreutils": "^1.11.0", - "@lumino/messaging": "^1.10.0", - "@lumino/signaling": "^1.10.0", - "@lumino/widgets": "^1.33.0", - "lodash.escape": "^4.0.1", - "marked": "^4.0.17" - } - }, - "node_modules/@jupyterlab/rendermime-interfaces": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-3.5.2.tgz", - "integrity": "sha512-IMQVO8cVwcHHkhl+WCREw4ZaeMpuRNfjos/p5PY0jQ3wXg4NLSakckZEdpTN8xRB56ui6EWesW5846DRnudfLA==", - "dependencies": { - "@jupyterlab/translation": "^3.5.2", - "@lumino/coreutils": "^1.11.0", - "@lumino/widgets": "^1.33.0" - } - }, - "node_modules/@jupyterlab/services": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/services/-/services-6.5.2.tgz", - "integrity": "sha512-3uiOZpIsx7o1we/QDj9tfEkw3fwFlk018OPYfo1nRFg/Xl1B+9cOHQJtFzDpIIAIdNDNsYyIK8RergTsnjP5FA==", - "dependencies": { - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/nbformat": "^3.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/settingregistry": "^3.5.2", - "@jupyterlab/statedb": "^3.5.2", - "@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" - } - }, - "node_modules/@jupyterlab/settingregistry": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/settingregistry/-/settingregistry-3.5.2.tgz", - "integrity": "sha512-ZiJojTy/Vd15f217tp8zkE4z0I7cTYZvFJkwNXeM+IoEXMzZG5A8dSkdVugWjfjs9VeCXCzRyut1kb8z0aA+BQ==", - "dependencies": { - "@jupyterlab/statedb": "^3.5.2", - "@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" - } - }, - "node_modules/@jupyterlab/shared-models": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/shared-models/-/shared-models-3.5.2.tgz", - "integrity": "sha512-MbLA8OtfZpf7e4YLveM4mJYBG0Hwloypl09zYajs0HHs6Y6s2keV/xkIeCjKyirSruUx7LC1LqF8mHNrPouR+w==", - "dependencies": { - "@jupyterlab/nbformat": "^3.5.2", - "@lumino/coreutils": "^1.11.0", - "@lumino/disposable": "^1.10.0", - "@lumino/signaling": "^1.10.0", - "y-protocols": "^1.0.5", - "yjs": "^13.5.17" - } - }, - "node_modules/@jupyterlab/statedb": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/statedb/-/statedb-3.5.2.tgz", - "integrity": "sha512-BrxWSbCJ5MvDn0OiTC/Gv8vuPFIz6mbiQ6JTojcknK1YxDfMOqE5Hvl+f/oODSGnoaVu3s2czCjTMo1sPDjW8g==", - "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" - } - }, - "node_modules/@jupyterlab/statusbar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/statusbar/-/statusbar-3.5.2.tgz", - "integrity": "sha512-WN0j3cTtDmk8efKsK07MKj4iw1CFNNJjXsKbiNXaFOSAXzzEtlsZ+iKVpjPuKhDLWF6gW3iUU3RLnOUtqjYLqg==", - "dependencies": { - "@jupyterlab/apputils": "^3.5.2", - "@jupyterlab/codeeditor": "^3.5.2", - "@jupyterlab/services": "^6.5.2", - "@jupyterlab/translation": "^3.5.2", - "@jupyterlab/ui-components": "^3.5.2", - "@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.33.0", - "csstype": "~3.0.3", - "react": "^17.0.1", - "typestyle": "^2.0.4" - } - }, - "node_modules/@jupyterlab/translation": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/translation/-/translation-3.5.2.tgz", - "integrity": "sha512-CrmJJ/kZK2jAF/UM616spUpsqgBQGBM7S19eCbuZugml3U5XXyVBNo4Nc8I1n1xUWbqnU5O6HdLSCo8jXCV53Q==", - "dependencies": { - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/services": "^6.5.2", - "@jupyterlab/statedb": "^3.5.2", - "@lumino/coreutils": "^1.11.0" - } - }, - "node_modules/@jupyterlab/ui-components": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/ui-components/-/ui-components-3.5.2.tgz", - "integrity": "sha512-efeoq+om3w6RNYzmAcK4ETQvlQGUED2CDzrt1MgndQ5rUduCs/taT/48Sk/+6pm1QAACYBwMNJbHd6+nMafxDQ==", - "dependencies": { - "@blueprintjs/core": "^3.36.0", - "@blueprintjs/select": "^3.15.0", - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/translation": "^3.5.2", - "@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.33.0", - "@rjsf/core": "^3.1.0", - "react": "^17.0.1", - "react-dom": "^17.0.1", - "typestyle": "^2.0.4" - }, - "peerDependencies": { - "react": "^17.0.1" - } - }, - "node_modules/@lumino/algorithm": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-1.9.2.tgz", - "integrity": "sha512-Z06lp/yuhz8CtIir3PNTGnuk7909eXt4ukJsCzChsGuot2l5Fbs96RJ/FOHgwCedaX74CtxPjXHXoszFbUA+4A==" - }, - "node_modules/@lumino/application": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@lumino/application/-/application-2.2.1.tgz", - "integrity": "sha512-oO6N0FvScnPukoxU0KxyAHMLMbPP2IQeKcurE9qSLKnjNHO7h/Yb/Zfl82CZda4rBnd3foZEkVoH/hWrtu3jpw==", - "dev": true, - "dependencies": { - "@lumino/commands": "^2.1.3", - "@lumino/coreutils": "^2.1.2", - "@lumino/widgets": "^2.3.0" - } - }, - "node_modules/@lumino/application/node_modules/@lumino/algorithm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.1.tgz", - "integrity": "sha512-iA+uuvA7DeNFB0/cQpIWNgO1c6z4pOSigifjstLy+rxf1U5ZzxIq+xudnEuTbWgKSTviG02j4cKwCyx1PO6rzA==", - "dev": true - }, - "node_modules/@lumino/application/node_modules/@lumino/collections": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/collections/-/collections-2.0.1.tgz", - "integrity": "sha512-8TbAU/48XVPKc/FOhGHLuugf2Gmx6vhVEx867KGG5fLwDOI8EW4gTno78yJUk8G0QpgNa+sdpB/LwbJFNIratg==", - "dev": true, - "dependencies": { - "@lumino/algorithm": "^2.0.1" - } - }, - "node_modules/@lumino/application/node_modules/@lumino/commands": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@lumino/commands/-/commands-2.1.3.tgz", - "integrity": "sha512-F0ZYZDrfJzcPp4JqeQMC2dzi3XOobzNZD94qUJ6QBsbfghFRcPBM+rfOspghRvCEFHAZdtghw04wOp7VWgIczA==", - "dev": true, - "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" - } - }, - "node_modules/@lumino/application/node_modules/@lumino/coreutils": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.1.2.tgz", - "integrity": "sha512-vyz7WzchTO4HQ8iVAxvSUmb5o/8t3cz1vBo8V4ZIaPGada0Jx0xe3tKQ8bXp4pjHc+AEhMnkCnlUyVYMWbnj4A==", - "dev": true - }, - "node_modules/@lumino/application/node_modules/@lumino/disposable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@lumino/disposable/-/disposable-2.1.2.tgz", - "integrity": "sha512-0qmB6zPt9+uj4SVMTfISn0wUOjYHahtKotwxDD5flfcscj2gsXaFCXO4Oqot1zcsZbg8uJmTUhEzAvFW0QhFNA==", - "dev": true, - "dependencies": { - "@lumino/signaling": "^2.1.2" - } - }, - "node_modules/@lumino/application/node_modules/@lumino/domutils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/domutils/-/domutils-2.0.1.tgz", - "integrity": "sha512-tbcfhsdKH04AMjSgYAYGD2xE80YcjrqKnfMTeU2NHt4J294Hzxs1GvEmSMk5qJ3Bbgwx6Z4BbQ7apnFg8Gc6cA==", - "dev": true - }, - "node_modules/@lumino/application/node_modules/@lumino/dragdrop": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@lumino/dragdrop/-/dragdrop-2.1.3.tgz", - "integrity": "sha512-lETk7lu+8pMfufxWGL76Dfz8kO/44CgHua0zzaLMh/eK+sRQxghMAxqKAMrEw+6eDy7EsM59R3xuynhkLrxa2A==", - "dev": true, - "dependencies": { - "@lumino/coreutils": "^2.1.2", - "@lumino/disposable": "^2.1.2" - } - }, - "node_modules/@lumino/application/node_modules/@lumino/keyboard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/keyboard/-/keyboard-2.0.1.tgz", - "integrity": "sha512-R2mrH9HCEcv/0MSAl7bEUbjCNOnhrg49nXZBEVckg//TEG+sdayCsyrbJNMPcZ07asIPKc6mq3v7DpAmDKqh+w==", - "dev": true - }, - "node_modules/@lumino/application/node_modules/@lumino/messaging": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/messaging/-/messaging-2.0.1.tgz", - "integrity": "sha512-Z1b9Sq7i2yw7BN/u9ezoBUMYK06CsQXO7BqpczSnEO0PfwFf9dWi7y9VcIySOBz9uogsT1uczZMIMtLefk+xPQ==", - "dev": true, - "dependencies": { - "@lumino/algorithm": "^2.0.1", - "@lumino/collections": "^2.0.1" - } - }, - "node_modules/@lumino/application/node_modules/@lumino/properties": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-2.0.1.tgz", - "integrity": "sha512-RPtHrp8cQqMnTC915lOIdrmsbPDCC7PhPOZb2YY7/Jj6dEdwmGhoMthc2tBEYWoHP+tU/hVm8UR/mEQby22srQ==", - "dev": true - }, - "node_modules/@lumino/application/node_modules/@lumino/signaling": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.2.tgz", - "integrity": "sha512-KtwKxx+xXkLOX/BdSqtvnsqBTPKDIENFBKeYkMTxstQc3fHRmyTzmaVoeZES+pr1EUy3e8vM4pQFVQpb8VsDdA==", - "dev": true, - "dependencies": { - "@lumino/algorithm": "^2.0.1", - "@lumino/coreutils": "^2.1.2" - } - }, - "node_modules/@lumino/application/node_modules/@lumino/virtualdom": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/virtualdom/-/virtualdom-2.0.1.tgz", - "integrity": "sha512-WNM+uUZX7vORhlDRN9NmhEE04Tz1plDjtbwsX+i/51pQj2N2r7+gsVPY/gR4w+I5apmC3zG8/BojjJYIwi8ogA==", - "dev": true, - "dependencies": { - "@lumino/algorithm": "^2.0.1" - } - }, - "node_modules/@lumino/application/node_modules/@lumino/widgets": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@lumino/widgets/-/widgets-2.3.0.tgz", - "integrity": "sha512-82vvNHmi1r5MzLEybq3ImJ7vAkaVxHZyw6/H+3ZlhXYasOwOIlYy7le71VsW8O4EtLLjuf/A/Wme9vsxH7Wp0w==", - "dev": true, - "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" - } - }, - "node_modules/@lumino/collections": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@lumino/collections/-/collections-1.9.3.tgz", - "integrity": "sha512-2i2Wf1xnfTgEgdyKEpqM16bcYRIhUOGCDzaVCEZACVG9R1CgYwOe3zfn71slBQOVSjjRgwYrgLXu4MBpt6YK+g==", - "dependencies": { - "@lumino/algorithm": "^1.9.2" - } - }, - "node_modules/@lumino/commands": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/@lumino/commands/-/commands-1.21.1.tgz", - "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" - } - }, - "node_modules/@lumino/coreutils": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-1.12.1.tgz", - "integrity": "sha512-JLu3nTHzJk9N8ohZ85u75YxemMrmDzJdNgZztfP7F7T7mxND3YVNCkJG35a6aJ7edu1sIgCjBxOvV+hv27iYvQ==", - "peerDependencies": { - "crypto": "1.0.1" - } - }, - "node_modules/@lumino/disposable": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@lumino/disposable/-/disposable-1.10.4.tgz", - "integrity": "sha512-4ZxyYcyzUS+ZeB2KAH9oAH3w0DUUceiVr+FIZHZ2TAYGWZI/85WlqJtfm0xjwEpCwLLW1TDqJrISuZu3iMmVMA==", - "dependencies": { - "@lumino/algorithm": "^1.9.2", - "@lumino/signaling": "^1.11.1" - } - }, - "node_modules/@lumino/domutils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@lumino/domutils/-/domutils-1.8.2.tgz", - "integrity": "sha512-QIpMfkPJrs4GrWBuJf2Sn1fpyVPmvqUUAeD8xAQo8+4V5JAT0vUDLxZ9HijefMgNCi3+Bs8Z3lQwRCrz+cFP1A==" - }, - "node_modules/@lumino/dragdrop": { - "version": "1.14.5", - "resolved": "https://registry.npmjs.org/@lumino/dragdrop/-/dragdrop-1.14.5.tgz", - "integrity": "sha512-LC5xB82+xGF8hFyl716TMpV32OIMIMl+s3RU1PaqDkD6B7PkgiVk6NkJ4X9/GcEvl2igkvlGQt/3L7qxDAJNxw==", - "dependencies": { - "@lumino/coreutils": "^1.12.1", - "@lumino/disposable": "^1.10.4" - } - }, - "node_modules/@lumino/keyboard": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@lumino/keyboard/-/keyboard-1.8.2.tgz", - "integrity": "sha512-Dy+XqQ1wXbcnuYtjys5A0pAqf4SpAFl9NY6owyIhXAo0Va7w3LYp3jgiP1xAaBAwMuUppiUAfrbjrysZuZ625g==" - }, - "node_modules/@lumino/messaging": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@lumino/messaging/-/messaging-1.10.3.tgz", - "integrity": "sha512-F/KOwMCdqvdEG8CYAJcBSadzp6aI7a47Fr60zAKGqZATSRRRV41q53iXU7HjFPqQqQIvdn9Z7J32rBEAyQAzww==", - "dependencies": { - "@lumino/algorithm": "^1.9.2", - "@lumino/collections": "^1.9.3" - } - }, - "node_modules/@lumino/polling": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@lumino/polling/-/polling-1.10.0.tgz", - "integrity": "sha512-ZNXObJQfugnS41Yrlr7yWcFiRK+xAGGOXO08JJ0Mctsg5mT30UEGFVWJY2AjZ6N5aQuLyGed/pMkBzLzrzt8OA==", - "dependencies": { - "@lumino/coreutils": "^1.12.0", - "@lumino/disposable": "^1.10.1", - "@lumino/signaling": "^1.10.1" - } - }, - "node_modules/@lumino/properties": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-1.8.2.tgz", - "integrity": "sha512-EkjI9Cw8R0U+xC9HxdFSu7X1tz1H1vKu20cGvJ2gU+CXlMB1DvoYJCYxCThByHZ+kURTAap4SE5x8HvKwNPbig==" - }, - "node_modules/@lumino/signaling": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-1.11.1.tgz", - "integrity": "sha512-YCUmgw08VoyMN5KxzqPO3KMx+cwdPv28tAN06C0K7Q/dQf+oufb1XocuhZb5selTrTmmuXeizaYxgLIQGdS1fA==", - "dependencies": { - "@lumino/algorithm": "^1.9.2", - "@lumino/properties": "^1.8.2" - } - }, - "node_modules/@lumino/virtualdom": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/@lumino/virtualdom/-/virtualdom-1.14.3.tgz", - "integrity": "sha512-5joUC1yuxeXbpfbSBm/OR8Mu9HoTo6PDX0RKqzlJ9o97iml7zayFN/ynzcxScKGQAo9iaXOY8uVIvGUT8FnsGw==", - "dependencies": { - "@lumino/algorithm": "^1.9.2" - } - }, - "node_modules/@lumino/widgets": { - "version": "1.37.2", - "resolved": "https://registry.npmjs.org/@lumino/widgets/-/widgets-1.37.2.tgz", - "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" - } - }, - "node_modules/@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "node_modules/@phosphor/application": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@phosphor/application/-/application-1.7.3.tgz", - "integrity": "sha512-ohxrW7rv5Tms4PSyPRZT6YArZQQGQNG4MgTeFzkoLJ+7mp/BcbFuvEoaV1/CUKQArofl0DCkKDOTOIkXP+/32A==", - "dev": true, - "dependencies": { - "@phosphor/commands": "^1.7.2", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/widgets": "^1.9.3" - } - }, - "node_modules/@phosphor/collections": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/collections/-/collections-1.2.0.tgz", - "integrity": "sha512-T9/0EjSuY6+ga2LIFRZ0xupciOR3Qnyy8Q95lhGTC0FXZUFwC8fl9e8On6IcwasCszS+1n8dtZUWSIynfgdpzw==", - "dev": true, - "dependencies": { - "@phosphor/algorithm": "^1.2.0" - } - }, - "node_modules/@phosphor/commands": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@phosphor/commands/-/commands-1.7.2.tgz", - "integrity": "sha512-iSyBIWMHsus323BVEARBhuVZNnVel8USo+FIPaAxGcq+icTSSe6+NtSxVQSmZblGN6Qm4iw6I6VtiSx0e6YDgQ==", - "dev": true, - "dependencies": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.1", - "@phosphor/domutils": "^1.1.4", - "@phosphor/keyboard": "^1.1.3", - "@phosphor/signaling": "^1.3.1" - } - }, - "node_modules/@phosphor/coreutils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/coreutils/-/coreutils-1.3.1.tgz", - "integrity": "sha512-9OHCn8LYRcPU/sbHm5v7viCA16Uev3gbdkwqoQqlV+EiauDHl70jmeL7XVDXdigl66Dz0LI11C99XOxp+s3zOA==", - "dev": true - }, - "node_modules/@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "dependencies": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "node_modules/@phosphor/domutils": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@phosphor/domutils/-/domutils-1.1.4.tgz", - "integrity": "sha512-ivwq5TWjQpKcHKXO8PrMl+/cKqbgxPClPiCKc1gwbMd+6hnW5VLwNG0WBzJTxCzXK43HxX18oH+tOZ3E04wc3w==", - "dev": true - }, - "node_modules/@phosphor/dragdrop": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@phosphor/dragdrop/-/dragdrop-1.4.1.tgz", - "integrity": "sha512-77paMoubIWk7pdwA2GVFkqba1WP48hTZZvS17N30+KVOeWfSqBL3flPSnW2yC4y6FnOP2PFOCtuPIbQv+pYhCA==", - "dev": true, - "dependencies": { - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.1" - } - }, - "node_modules/@phosphor/keyboard": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@phosphor/keyboard/-/keyboard-1.1.3.tgz", - "integrity": "sha512-dzxC/PyHiD6mXaESRy6PZTd9JeK+diwG1pyngkyUf127IXOEzubTIbu52VSdpGBklszu33ws05BAGDa4oBE4mQ==", - "dev": true - }, - "node_modules/@phosphor/messaging": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@phosphor/messaging/-/messaging-1.3.0.tgz", - "integrity": "sha512-k0JE+BTMKlkM335S2AmmJxoYYNRwOdW5jKBqLgjJdGRvUQkM0+2i60ahM45+J23atGJDv9esKUUBINiKHFhLew==", - "dev": true, - "dependencies": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/collections": "^1.2.0" - } - }, - "node_modules/@phosphor/properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@phosphor/properties/-/properties-1.1.3.tgz", - "integrity": "sha512-GiglqzU77s6+tFVt6zPq9uuyu/PLQPFcqZt914ZhJ4cN/7yNI/SLyMzpYZ56IRMXvzK9TUgbRna6URE3XAwFUg==", - "dev": true - }, - "node_modules/@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "dependencies": { - "@phosphor/algorithm": "^1.2.0" - } - }, - "node_modules/@phosphor/virtualdom": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/virtualdom/-/virtualdom-1.2.0.tgz", - "integrity": "sha512-L9mKNhK2XtVjzjuHLG2uYuepSz8uPyu6vhF4EgCP0rt0TiLYaZeHwuNu3XeFbul9DMOn49eBpye/tfQVd4Ks+w==", - "dev": true, - "dependencies": { - "@phosphor/algorithm": "^1.2.0" - } - }, - "node_modules/@phosphor/widgets": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@phosphor/widgets/-/widgets-1.9.3.tgz", - "integrity": "sha512-61jsxloDrW/+WWQs8wOgsS5waQ/MSsXBuhONt0o6mtdeL93HVz7CYO5krOoot5owammfF6oX1z0sDaUYIYgcPA==", - "dev": true, - "dependencies": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/commands": "^1.7.2", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.1", - "@phosphor/domutils": "^1.1.4", - "@phosphor/dragdrop": "^1.4.1", - "@phosphor/keyboard": "^1.1.3", - "@phosphor/messaging": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.1", - "@phosphor/virtualdom": "^1.2.0" - } - }, - "node_modules/@rjsf/core": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-3.2.1.tgz", - "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" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "react": ">=16" - } - }, - "node_modules/@rjsf/core/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/backbone": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@types/backbone/-/backbone-1.4.15.tgz", - "integrity": "sha512-WWeKtYlsIMtDyLbbhkb96taJMEbfQBnuz7yw1u0pkphCOtksemoWhIXhK74VRCY9hbjnsH3rsJu2uUiFtnsEYg==", - "dependencies": { - "@types/jquery": "*", - "@types/underscore": "*" - } - }, - "node_modules/@types/clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/clone/-/clone-2.1.1.tgz", - "integrity": "sha512-BZIU34bSYye0j/BFcPraiDZ5ka6MJADjcDVELGf7glr9K+iE8NYVjFslJFVWzskSxkLLyCrSPScE82/UUoBSvg==" - }, - "node_modules/@types/dom4": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/dom4/-/dom4-2.0.2.tgz", - "integrity": "sha512-Rt4IC1T7xkCWa0OG1oSsPa0iqnxlDeQqKXZAHrQGLb7wFGncWm85MaxKUjAGejOrUynOgWlFi4c6S6IyJwoK4g==" - }, - "node_modules/@types/eslint": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.2.tgz", - "integrity": "sha512-nQxgB8/Sg+QKhnV8e0WzPpxjIGT3tuJDDzybkDi8ItE/IgTlHo07U0shaIjzhcvQxlq9SDRE42lsJ23uvEgJ2A==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "node_modules/@types/geojson": { - "version": "7946.0.10", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", - "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "26.0.24", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", - "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", - "dev": true, - "dependencies": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "node_modules/@types/jquery": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", - "integrity": "sha512-ZxJrup8nz/ZxcU0vantG+TPdboMhB24jad2uSap50zE7Q9rUeYlCF25kFMSmHR33qoeOgqcdHEp3roaookC0Sg==", - "dependencies": { - "@types/sizzle": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" - }, - "node_modules/@types/lodash": { - "version": "4.14.178", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", - "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==" - }, - "node_modules/@types/node": { - "version": "17.0.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.9.tgz", - "integrity": "sha512-5dNBXu/FOER+EXnyah7rn8xlNrfMOQb/qXnw4NQgLkCygKBKhdmF/CA5oXVOKZLBEahw8s2WP9LxIcN/oDDRgQ==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.3.tgz", - "integrity": "sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/react": { - "version": "17.0.44", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.44.tgz", - "integrity": "sha512-Ye0nlw09GeMp2Suh8qoOv0odfgCoowfM/9MG6WeRD60Gq9wS90bdkdRtYbRkNhXOpG4H+YXGvj4wOWhAC0LJ1g==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==" - }, - "node_modules/@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/underscore": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", - "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==" - }, - "node_modules/@types/webpack-env": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.3.tgz", - "integrity": "sha512-9gtOPPkfyNoEqCQgx4qJKkuNm/x0R2hKR7fdl7zvTJyHnIisuE/LfvXOsYWL0o3qq6uiBnKZNNNzi3l0y/X+xw==", - "dev": true - }, - "node_modules/@types/webpack-sources": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.9.tgz", - "integrity": "sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.6.1" - } - }, - "node_modules/@types/webpack-sources/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz", - "integrity": "sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "3.10.1", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^3.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", - "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", - "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", - "dev": true, - "dependencies": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "3.10.1", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", - "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", - "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/visitor-keys": "3.10.1", - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", - "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", - "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", - "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", - "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "optional": true, - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "optional": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz", - "integrity": "sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.20.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "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" - } - }, - "node_modules/babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/backbone": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.2.3.tgz", - "integrity": "sha1-wiz9B/yG676uYdGJKe0RXpmdZbk=", - "dependencies": { - "underscore": ">=1.7.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001300", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz", - "integrity": "sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" - }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/codemirror": { - "version": "5.61.1", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.61.1.tgz", - "integrity": "sha512-+D1NZjAucuzE93vJGbAaXzvoBHwp9nJZWWWF9utjv25+5AZUiah6CIlfb4ikG4MoDsFsCG8niiJH5++OO2LgIQ==" - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/compute-gcd": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", - "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", - "dependencies": { - "validate.io-array": "^1.0.3", - "validate.io-function": "^1.0.2", - "validate.io-integer-array": "^1.0.0" - } - }, - "node_modules/compute-lcm": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", - "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" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js-compat": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.3.tgz", - "integrity": "sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw==", - "dev": true, - "dependencies": { - "browserslist": "^4.19.1", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-js-pure": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.4.tgz", - "integrity": "sha512-4iF+QZkpzIz0prAFuepmxwJ2h5t4agvE8WPYqs2mjLJMNNwJOnpch76w2Q7bUfCPEv/V7wpvOfog0w273M+ZSw==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", - "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", - "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in.", - "peer": true - }, - "node_modules/css-loader": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz", - "integrity": "sha512-gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.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", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/csstype": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", - "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==" - }, - "node_modules/d3-array": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.2.tgz", - "integrity": "sha512-yEEyEAbDrF8C6Ob2myOBLjwBLck1Z89jMGFee0oPsn95GqjerpaOA4ch+vc2l0FNFFwMD5N7OCSEN5eAlsUbgQ==", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-delaunay": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", - "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", - "dependencies": { - "delaunator": "5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "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" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/d3-dsv/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", - "dependencies": { - "d3-array": "2.5.0 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-geo-projection": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-4.0.0.tgz", - "integrity": "sha512-p0bK60CEzph1iqmnxut7d/1kyTmm3UWtPlwdkM31AU+LW+BXazd5zJdoCn7VFxNCHXRngPHRnsNn5uGjLRGndg==", - "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" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-geo-projection/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "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" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "dependencies": { - "d3-path": "^3.1.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "optional": true, - "dependencies": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "dependencies": { - "robust-predicates": "^3.0.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "dependencies": { - "@babel/runtime": "^7.1.2" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/dom4": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/dom4/-/dom4-2.1.6.tgz", - "integrity": "sha512-JkCVGnN4ofKGbjf5Uvc8mmxaATIErKQKSgACdBXpsQ3fY6DlIpAyWfiBSrGkttATssbDCp3psiAKWXk5gmjycA==" - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/duplicate-package-checker-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/duplicate-package-checker-webpack-plugin/-/duplicate-package-checker-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-aO50/qPC7X2ChjRFniRiscxBLT/K01bALqfcDaf8Ih5OqQ1N4iT/Abx9Ofu3/ms446vHTm46FACIuJUmgUQcDQ==", - "dev": true, - "dependencies": { - "chalk": "^2.3.0", - "find-root": "^1.0.0", - "lodash": "^4.17.4", - "semver": "^5.4.1" - } - }, - "node_modules/duplicate-package-checker-webpack-plugin/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.46", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.46.tgz", - "integrity": "sha512-UtV0xUA/dibCKKP2JMxOpDtXR74zABevuUEH4K0tvduFSIoxRVcYmQsbB51kXsFTX8MmOyWMt8tuZAlmDOqkrQ==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "optional": true, - "dependencies": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/enhanced-resolve/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "devOptional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, - "dependencies": { - "get-stdin": "^6.0.0" - }, - "bin": { - "eslint-config-prettier-check": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=3.14.1" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/expect/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/expect/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/expect/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", - "dev": true - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/free-style": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/free-style/-/free-style-3.1.0.tgz", - "integrity": "sha512-vJujYSIyT30iDoaoeigNAxX4yB1RUrh+N2ZMhIElMr3BvCuGXOw7XNJMEEJkDUeamK2Rnb/IKFGKRKlTWIGRWA==" - }, - "node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true, - "optional": true - }, - "node_modules/gud": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" - }, - "node_modules/harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", - "dev": true, - "dependencies": { - "harmony-reflect": "^1.4.6" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "optional": true - }, - "node_modules/immutable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", - "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "devOptional": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "optional": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isomorphic.js": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz", - "integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==", - "funding": { - "type": "GitHub Sponsors \u2764", - "url": "https://github.com/sponsors/dmonad" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", - "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "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" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "dev": true, - "dependencies": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "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" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jquery": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", - "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-compare": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", - "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", - "dependencies": { - "lodash": "^4.17.4" - } - }, - "node_modules/json-schema-merge-allof": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.6.0.tgz", - "integrity": "sha512-LEw4VMQVRceOPLuGRWcxW5orTTiR9ZAtqTAe4rQUjNADTeR81bezBVFa0MqIwp0YmHIM1KkhSjZM7o+IQhaPbQ==", - "dependencies": { - "compute-lcm": "^1.1.0", - "json-schema-compare": "^0.2.2", - "lodash": "^4.17.4" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json-stringify-pretty-compact": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz", - "integrity": "sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonpointer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz", - "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/level": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz", - "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==", - "optional": true, - "dependencies": { - "level-js": "^5.0.0", - "level-packager": "^5.1.0", - "leveldown": "^5.4.0" - }, - "engines": { - "node": ">=8.6.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/level" - } - }, - "node_modules/level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "optional": true, - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "optional": true, - "dependencies": { - "errno": "~0.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "optional": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/level-js": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz", - "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==", - "optional": true, - "dependencies": { - "abstract-leveldown": "~6.2.3", - "buffer": "^5.5.0", - "inherits": "^2.0.3", - "ltgt": "^2.1.2" - } - }, - "node_modules/level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "optional": true, - "dependencies": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "optional": true, - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/leveldown": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", - "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "abstract-leveldown": "~6.2.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "~4.1.0" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "optional": true, - "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" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lib0": { - "version": "0.2.58", - "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.58.tgz", - "integrity": "sha512-6ovqPaYfOKU7GkkVxz/wjMR0zsqmNsISLvH+h9Lx5YNtWDZey69aYsTGXaSVpUPpJ+ZFtIvcZHsTGL3MbwOM8A==", - "dependencies": { - "isomorphic.js": "^0.2.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "GitHub Sponsors \u2764", - "url": "https://github.com/sponsors/dmonad" - } - }, - "node_modules/license-webpack-plugin": { - "version": "2.3.21", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.21.tgz", - "integrity": "sha512-rVaYU9TddZN3ao8M/0PrRSCdTp2EW6VQymlgsuScld1vef0Ou7fALx3ePe83KLP3xAEDcPK5fkqUVqGBnbz1zQ==", - "dev": true, - "dependencies": { - "@types/webpack-sources": "^0.1.5", - "webpack-sources": "^1.2.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "node_modules/lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "optional": true - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/marked": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.5.tgz", - "integrity": "sha512-jPueVhumq7idETHkb203WDD4fMA3yV9emQ5vLwop58lu8bTclMghBWcYAavlDqIEMaisADinV1TooIFCfqOsYQ==", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dev": true, - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/mini-svg-data-uri": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", - "dev": true, - "bin": { - "mini-svg-data-uri": "cli.js" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "optional": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-gyp-build": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", - "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node_modules/node-notifier": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", - "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", - "dev": true, - "optional": true, - "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_modules/node-notifier/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize.css": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", - "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" - }, - "node_modules/npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/npm-run-all/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/npm-run-all/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/npm-run-all/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-all/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-all/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/parse-srcset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", - "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==" - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pirates": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", - "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", - "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "8.4.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", - "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", - "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/pretty-format/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "devOptional": true - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-popper": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-1.3.11.tgz", - "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" - }, - "peerDependencies": { - "react": "0.14.x || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "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" - }, - "peerDependencies": { - "react": ">=15.0.0", - "react-dom": ">=15.0.0" - } - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "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" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "node_modules/resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" - }, - "node_modules/resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", - "dev": true, - "dependencies": { - "is-core-module": "^2.8.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/robust-predicates": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", - "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true, - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "devOptional": true - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", - "dev": true, - "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" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/sane/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "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" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/sane/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/sanitize-html": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.7.3.tgz", - "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" - } - }, - "node_modules/sanitize-html/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sass": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.48.0.tgz", - "integrity": "sha512-hQi5g4DcfjcipotoHZ80l7GNJHGqQS5LwMBjVYB/TaT0vcSSpbgM8Ad7cgfsB2M0MinbkEQQPO9+sjjSiwxqmw==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "node_modules/simple-html-tokenizer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.1.1.tgz", - "integrity": "sha1-BcLuxXn//+FFoDCsJs/qYbmA+r4=", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.1.3.tgz", - "integrity": "sha512-6YHeF+XzDOrT/ycFJNI53cgEsp/tHTMl37hi7uVyqFAlTXW109JazaQCkbc+jjoL2637qkH1amLi+JzrIpt5lA==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.2", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "source-map": "^0.6.1", - "whatwg-mimetype": "^2.3.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/source-map-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "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" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "devOptional": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.padend": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", - "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-loader": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", - "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-inline-loader": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/svg-inline-loader/-/svg-inline-loader-0.8.2.tgz", - "integrity": "sha512-kbrcEh5n5JkypaSC152eGfGcnT4lkR0eSfvefaUJkLqgGjRQJyKDvvEE/CCv5aTSdfXuc+N98w16iAojhShI3g==", - "dev": true, - "dependencies": { - "loader-utils": "^1.1.0", - "object-assign": "^4.0.1", - "simple-html-tokenizer": "^0.1.1" - } - }, - "node_modules/svg-inline-loader/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/svg-inline-loader/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/topojson-client": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", - "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", - "dependencies": { - "commander": "2" - }, - "bin": { - "topo2geo": "bin/topo2geo", - "topomerge": "bin/topomerge", - "topoquantize": "bin/topoquantize" - } - }, - "node_modules/topojson-client/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-jest": { - "version": "26.5.6", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", - "integrity": "sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==", - "dev": true, - "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" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": ">= 10" - }, - "peerDependencies": { - "jest": ">=26 <27", - "typescript": ">=3.8 <5.0" - } - }, - "node_modules/ts-jest/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", - "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^2.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "*" - } - }, - "node_modules/ts-loader/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ts-loader/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-loader/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ts-loader/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-styles": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz", - "integrity": "sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.6.tgz", - "integrity": "sha512-pxnwLxeb/Z5SP80JDRzVjh58KsM6jZHRAOtTpS7sXLS4ogXNKC9ANxHHZqLLeVHZN35jCtI4JdmLLbLiC1kBow==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/typestyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/typestyle/-/typestyle-2.3.0.tgz", - "integrity": "sha512-JZd1R5cWxRvwXzPAKVFsbxO/QjDkFeQlqGF6ZxR7IREEXyFQrf1f1mmlx5EynOTItLLx4aBbcVpCH+CDsl5ZTw==", - "dependencies": { - "csstype": "3.0.10", - "free-style": "3.1.0" - } - }, - "node_modules/typestyle/node_modules/csstype": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", - "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/underscore": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", - "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "devOptional": true - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate.io-array": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", - "integrity": "sha1-W1osr9j4uFq7L4hroVPy2Tond00=" - }, - "node_modules/validate.io-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", - "integrity": "sha1-NDoZgC7TsZaCaceA5VjpNBHAutc=" - }, - "node_modules/validate.io-integer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", - "integrity": "sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg=", - "dependencies": { - "validate.io-number": "^1.0.3" - } - }, - "node_modules/validate.io-integer-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", - "integrity": "sha1-LKveAzKTpry+Bj/q/pHq9GsToIk=", - "dependencies": { - "validate.io-array": "^1.0.3", - "validate.io-integer": "^1.0.4" - } - }, - "node_modules/validate.io-number": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", - "integrity": "sha1-9j/+2iSL8opnqNSODjtGGhZluvg=" - }, - "node_modules/vega": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/vega/-/vega-5.25.0.tgz", - "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" - } - }, - "node_modules/vega-canvas": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/vega-canvas/-/vega-canvas-1.2.7.tgz", - "integrity": "sha512-OkJ9CACVcN9R5Pi9uF6MZBF06pO6qFpDYHWSKBJsdHP5o724KrsgR6UvbnXFH82FdsiTOff/HqjuaG8C7FL+9Q==" - }, - "node_modules/vega-crossfilter": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/vega-crossfilter/-/vega-crossfilter-4.1.1.tgz", - "integrity": "sha512-yesvlMcwRwxrtAd9IYjuxWJJuAMI0sl7JvAFfYtuDkkGDtqfLXUcCzHIATqW6igVIE7tWwGxnbfvQLhLNgK44Q==", - "dependencies": { - "d3-array": "^3.2.2", - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" - } - }, - "node_modules/vega-dataflow": { - "version": "5.7.5", - "resolved": "https://registry.npmjs.org/vega-dataflow/-/vega-dataflow-5.7.5.tgz", - "integrity": "sha512-EdsIl6gouH67+8B0f22Owr2tKDiMPNNR8lEvJDcxmFw02nXd8juimclpLvjPQriqn6ta+3Dn5txqfD117H04YA==", - "dependencies": { - "vega-format": "^1.1.1", - "vega-loader": "^4.5.1", - "vega-util": "^1.17.1" - } - }, - "node_modules/vega-encode": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/vega-encode/-/vega-encode-4.9.2.tgz", - "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" - } - }, - "node_modules/vega-event-selector": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vega-event-selector/-/vega-event-selector-3.0.1.tgz", - "integrity": "sha512-K5zd7s5tjr1LiOOkjGpcVls8GsH/f2CWCrWcpKy74gTCp+llCdwz0Enqo013ZlGaRNjfgD/o1caJRt3GSaec4A==" - }, - "node_modules/vega-expression": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/vega-expression/-/vega-expression-5.1.0.tgz", - "integrity": "sha512-u8Rzja/cn2PEUkhQN3zUj3REwNewTA92ExrcASNKUJPCciMkHJEjESwFYuI6DWMCq4hQElQ92iosOAtwzsSTqA==", - "dependencies": { - "@types/estree": "^1.0.0", - "vega-util": "^1.17.1" - } - }, - "node_modules/vega-expression/node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - }, - "node_modules/vega-force": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vega-force/-/vega-force-4.2.0.tgz", - "integrity": "sha512-aE2TlP264HXM1r3fl58AvZdKUWBNOGkIvn4EWyqeJdgO2vz46zSU7x7TzPG4ZLuo44cDRU5Ng3I1eQk23Asz6A==", - "dependencies": { - "d3-force": "^3.0.0", - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" - } - }, - "node_modules/vega-format": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vega-format/-/vega-format-1.1.1.tgz", - "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" - } - }, - "node_modules/vega-functions": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/vega-functions/-/vega-functions-5.13.2.tgz", - "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" - } - }, - "node_modules/vega-geo": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/vega-geo/-/vega-geo-4.4.1.tgz", - "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" - } - }, - "node_modules/vega-hierarchy": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/vega-hierarchy/-/vega-hierarchy-4.1.1.tgz", - "integrity": "sha512-h5mbrDtPKHBBQ9TYbvEb/bCqmGTlUX97+4CENkyH21tJs7naza319B15KRK0NWOHuhbGhFmF8T0696tg+2c8XQ==", - "dependencies": { - "d3-hierarchy": "^3.1.2", - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" - } - }, - "node_modules/vega-label": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/vega-label/-/vega-label-1.2.1.tgz", - "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" - } - }, - "node_modules/vega-lite": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/vega-lite/-/vega-lite-5.9.0.tgz", - "integrity": "sha512-VA3XDlF6nd/t46KDMfq8eNKOJKy9gpJuM+6CIl3jbWqS97jWXRWXp8DpUyDmbV+iq8n4hqNTaoPqDP/e03kifw==", - "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.1" - }, - "bin": { - "vl2pdf": "bin/vl2pdf", - "vl2png": "bin/vl2png", - "vl2svg": "bin/vl2svg", - "vl2vg": "bin/vl2vg" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "vega": "^5.24.0" - } - }, - "node_modules/vega-lite/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/vega-lite/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "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" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/vega-lite/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/vega-lite/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/vega-lite/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "node_modules/vega-lite/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/vega-lite/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/vega-lite/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "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" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/vega-lite/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/vega-loader": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vega-loader/-/vega-loader-4.5.1.tgz", - "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" - } - }, - "node_modules/vega-parser": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/vega-parser/-/vega-parser-6.2.0.tgz", - "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" - } - }, - "node_modules/vega-projection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vega-projection/-/vega-projection-1.6.0.tgz", - "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" - } - }, - "node_modules/vega-regression": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vega-regression/-/vega-regression-1.2.0.tgz", - "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" - } - }, - "node_modules/vega-runtime": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/vega-runtime/-/vega-runtime-6.1.4.tgz", - "integrity": "sha512-0dDYXyFLQcxPQ2OQU0WuBVYLRZnm+/CwVu6i6N4idS7R9VXIX5581EkCh3pZ20pQ/+oaA7oJ0pR9rJgJ6rukRQ==", - "dependencies": { - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" - } - }, - "node_modules/vega-scale": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/vega-scale/-/vega-scale-7.3.0.tgz", - "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" - } - }, - "node_modules/vega-scenegraph": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/vega-scenegraph/-/vega-scenegraph-4.10.2.tgz", - "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" - } - }, - "node_modules/vega-selections": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/vega-selections/-/vega-selections-5.4.1.tgz", - "integrity": "sha512-EtYc4DvA+wXqBg9tq+kDomSoVUPCmQfS7hUxy2qskXEed79YTimt3Hcl1e1fW226I4AVDBEqTTKebmKMzbSgAA==", - "dependencies": { - "d3-array": "3.2.2", - "vega-expression": "^5.0.1", - "vega-util": "^1.17.1" - } - }, - "node_modules/vega-statistics": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/vega-statistics/-/vega-statistics-1.9.0.tgz", - "integrity": "sha512-GAqS7mkatpXcMCQKWtFu1eMUKLUymjInU0O8kXshWaQrVWjPIO2lllZ1VNhdgE0qGj4oOIRRS11kzuijLshGXQ==", - "dependencies": { - "d3-array": "^3.2.2" - } - }, - "node_modules/vega-themes": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/vega-themes/-/vega-themes-2.13.0.tgz", - "integrity": "sha512-SVr/YDqGhkVDO2bRS62TeGyr1dVuXaNLJNCu42b1tbcnnmX2m9cyaq8G6gcputPeibArvHT1MsTF7MUzboOIWg==", - "peerDependencies": { - "vega": "*", - "vega-lite": "*" - } - }, - "node_modules/vega-time": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vega-time/-/vega-time-2.1.1.tgz", - "integrity": "sha512-z1qbgyX0Af2kQSGFbApwBbX2meenGvsoX8Nga8uyWN8VIbiySo/xqizz1KrP6NbB6R+x5egKmkjdnyNThPeEWA==", - "dependencies": { - "d3-array": "^3.2.2", - "d3-time": "^3.1.0", - "vega-util": "^1.17.1" - } - }, - "node_modules/vega-transforms": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/vega-transforms/-/vega-transforms-4.10.2.tgz", - "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" - } - }, - "node_modules/vega-typings": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/vega-typings/-/vega-typings-0.24.0.tgz", - "integrity": "sha512-FFYf67Dn5VNPbYoYHgO2T9Z1I81qcwrXjwKEe0rlJk0MX7CNWPJr9Y3VZEWfxyEx7J9anAm69hGIv0Ehb2G85A==", - "dependencies": { - "@types/geojson": "^7946.0.10", - "vega-event-selector": "^3.0.1", - "vega-expression": "^5.0.1", - "vega-util": "^1.17.1" - } - }, - "node_modules/vega-util": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.17.2.tgz", - "integrity": "sha512-omNmGiZBdjm/jnHjZlywyYqafscDdHaELHx1q96n5UOz/FlO9JO99P4B3jZg391EFG8dqhWjQilSf2JH6F1mIw==" - }, - "node_modules/vega-view": { - "version": "5.11.1", - "resolved": "https://registry.npmjs.org/vega-view/-/vega-view-5.11.1.tgz", - "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" - } - }, - "node_modules/vega-view-transforms": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/vega-view-transforms/-/vega-view-transforms-4.5.9.tgz", - "integrity": "sha512-NxEq4ZD4QwWGRrl2yDLnBRXM9FgCI+vvYb3ZC2+nVDtkUxOlEIKZsMMw31op5GZpfClWLbjCT3mVvzO2xaTF+g==", - "dependencies": { - "vega-dataflow": "^5.7.5", - "vega-scenegraph": "^4.10.2", - "vega-util": "^1.17.1" - } - }, - "node_modules/vega-voronoi": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vega-voronoi/-/vega-voronoi-4.2.1.tgz", - "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" - } - }, - "node_modules/vega-wordcloud": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/vega-wordcloud/-/vega-wordcloud-4.1.4.tgz", - "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" - } - }, - "node_modules/vegafusion-embed": { - "resolved": "../../javascript/vegafusion-embed", - "link": true - }, - "node_modules/vegafusion-wasm": { - "resolved": "../../vegafusion-wasm/pkg", - "link": true - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/webpack": { - "version": "5.76.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.2.tgz", - "integrity": "sha512-Th05ggRm23rVzEOlX8y67NkYCHa9nTNcwHPBhdg+lKG+mtiW7XgggjAeeLnADAe7mLjJ6LUNfgHAuRRh+Z6J7w==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "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.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", - "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.0", - "@webpack-cli/info": "^1.4.0", - "@webpack-cli/serve": "^1.6.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-cli/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/webpack-cli/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/webpack-cli/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-require-from": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/webpack-require-from/-/webpack-require-from-1.8.6.tgz", - "integrity": "sha512-QmRsOkOYPKeNXp4uVc7qxnPrFQPrP4bhOc/gl4QenTFNgXdEbF1U8VC+jM/Sljb0VzJLNgyNiHlVkuHjcmDtBQ==", - "dev": true, - "peerDependencies": { - "tapable": "^2.2.0" - } - }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack-sources/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/webpack/node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack/node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/worker-loader": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-3.0.8.tgz", - "integrity": "sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/worker-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", - "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "optional": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y-codemirror": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/y-codemirror/-/y-codemirror-3.0.1.tgz", - "integrity": "sha512-TsLSoouAZxkxOKbmTj7qdwZNS0lZMVqIdp7/j9EgUUqYj0remZYDGl6VBABrmp9UX1QvX6RoXXqzbNhftgfCbA==", - "dependencies": { - "lib0": "^0.2.42" - }, - "funding": { - "type": "GitHub Sponsors \u2764", - "url": "https://github.com/sponsors/dmonad" - }, - "peerDependencies": { - "codemirror": "^5.52.2", - "yjs": "^13.5.17" - } - }, - "node_modules/y-leveldb": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/y-leveldb/-/y-leveldb-0.1.1.tgz", - "integrity": "sha512-L8Q0MQmxCQ0qWIOuPzLbWn95TNhrCI7M6LaHnilU4I2IX08e4Dmfg5Tgy4JZ3tnl2aiuZyDOJplHl/msIB/IsA==", - "optional": true, - "dependencies": { - "level": "^6.0.1", - "lib0": "^0.2.31" - }, - "funding": { - "type": "GitHub Sponsors \u2764", - "url": "https://github.com/sponsors/dmonad" - }, - "peerDependencies": { - "yjs": "^13.0.0" - } - }, - "node_modules/y-protocols": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.5.tgz", - "integrity": "sha512-Wil92b7cGk712lRHDqS4T90IczF6RkcvCwAD0A2OPg+adKmOe+nOiT/N2hvpQIWS3zfjmtL4CPaH5sIW1Hkm/A==", - "dependencies": { - "lib0": "^0.2.42" - }, - "funding": { - "type": "GitHub Sponsors \u2764", - "url": "https://github.com/sponsors/dmonad" - } - }, - "node_modules/y-websocket": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/y-websocket/-/y-websocket-1.4.5.tgz", - "integrity": "sha512-5d9LTSy0GQKqSd/FKRo5DMBlsiTlCipbKcIgPLlno+5xHtfT8bm3uQdcbY9JvLfckojilLZWauXJu0vzDZX05w==", - "dependencies": { - "lib0": "^0.2.52", - "lodash.debounce": "^4.0.8", - "y-protocols": "^1.0.5" - }, - "bin": { - "y-websocket": "bin/server.js", - "y-websocket-server": "bin/server.js" - }, - "funding": { - "type": "GitHub Sponsors \u2764", - "url": "https://github.com/sponsors/dmonad" - }, - "optionalDependencies": { - "ws": "^6.2.1", - "y-leveldb": "^0.1.0" - }, - "peerDependencies": { - "yjs": "^13.5.6" - } - }, - "node_modules/y-websocket/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "optional": true, - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yjs": { - "version": "13.5.35", - "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.5.35.tgz", - "integrity": "sha512-vsqGmvZLiVwFcI4RlIZJeX59lGXDLXw37QrrbKVWXQJGbhMKgwAhZI4ZUVANUO54waoE1jta/NWb6gLSqNZ82Q==", - "dependencies": { - "lib0": "^0.2.49" - }, - "funding": { - "type": "GitHub Sponsors \u2764", - "url": "https://github.com/sponsors/dmonad" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/compat-data": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", - "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", - "dev": true - }, - "@babel/core": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", - "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - } - }, - "@babel/generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", - "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz", - "integrity": "sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz", - "integrity": "sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" - } - }, - "@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" - } - }, - "@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", - "dev": true, - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", - "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", - "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", - "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", - "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", - "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", - "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", - "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", - "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz", - "integrity": "sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", - "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", - "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", - "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", - "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", - "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", - "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", - "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", - "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", - "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", - "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", - "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/preset-env": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.8.tgz", - "integrity": "sha512-9rNKgVCdwHb3z1IlbMyft6yIXIeP3xz6vWvGaLHrJThuEIqWfHb0DNBH9VuTgnDfdbUDhkmkvMZS/YMCtP7Elg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.8", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-async-generator-functions": "^7.16.8", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-class-static-block": "^7.16.7", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.16.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.7", - "@babel/plugin-proposal-private-property-in-object": "^7.16.7", - "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", - "@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-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-transform-arrow-functions": "^7.16.7", - "@babel/plugin-transform-async-to-generator": "^7.16.8", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.16.7", - "@babel/plugin-transform-classes": "^7.16.7", - "@babel/plugin-transform-computed-properties": "^7.16.7", - "@babel/plugin-transform-destructuring": "^7.16.7", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.16.7", - "@babel/plugin-transform-modules-commonjs": "^7.16.8", - "@babel/plugin-transform-modules-systemjs": "^7.16.7", - "@babel/plugin-transform-modules-umd": "^7.16.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", - "@babel/plugin-transform-new-target": "^7.16.7", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.16.7", - "@babel/plugin-transform-reserved-words": "^7.16.7", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.16.7", - "@babel/plugin-transform-typeof-symbol": "^7.16.7", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.16.8", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.20.2", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@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/runtime": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", - "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/traverse": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", - "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.8", - "@babel/types": "^7.16.8", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@blueprintjs/colors": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@blueprintjs/colors/-/colors-4.1.2.tgz", - "integrity": "sha512-wvq92hgRZZYrohI8GaN/pV0iQfxvWa2RI1cLYuItDvXM6i/u1riaw0RcsqqAIL1MH1fHsKFdH1O8i7Tj5a+lpQ==" - }, - "@blueprintjs/core": { - "version": "3.54.0", - "resolved": "https://registry.npmjs.org/@blueprintjs/core/-/core-3.54.0.tgz", - "integrity": "sha512-u2c1s6MNn0ocxhnC6CuiG5g3KV6b4cKUvSobznepA9SC3/AL1s3XOvT7DLWoHRv2B/vBOHFYEDzLw2/vlcGGZg==", - "requires": { - "@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" - }, - "dependencies": { - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - } - } - }, - "@blueprintjs/icons": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/@blueprintjs/icons/-/icons-3.33.0.tgz", - "integrity": "sha512-Q6qoSDIm0kRYQZISm59UUcDCpV3oeHulkLuh3bSlw0HhcSjvEQh2PSYbtaifM60Q4aK4PCd6bwJHg7lvF1x5fQ==", - "requires": { - "classnames": "^2.2", - "tslib": "~2.3.1" - }, - "dependencies": { - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - } - } - }, - "@blueprintjs/select": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/@blueprintjs/select/-/select-3.19.1.tgz", - "integrity": "sha512-8UJIZMaWXRMQHr14wbmzJc/CklcSKxOU5JUux0xXKQz/hDW/g1a650tlwJmnxufvRdShbGinlVfHupCs0EL6sw==", - "requires": { - "@blueprintjs/core": "^3.54.0", - "classnames": "^2.2", - "tslib": "~2.3.1" - }, - "dependencies": { - "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" - } - } - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", - "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@hypnosphi/create-react-context": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz", - "integrity": "sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A==", - "requires": { - "gud": "^1.0.0", - "warning": "^4.0.3" - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - } - }, - "@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "requires": { - "@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": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - } - }, - "@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dev": true, - "requires": { - "@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", - "node-notifier": "^8.0.0", - "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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "requires": { - "@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": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dev": true, - "requires": { - "@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": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@juggle/resize-observer": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.3.1.tgz", - "integrity": "sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw==" - }, - "@jupyter-widgets/base": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@jupyter-widgets/base/-/base-4.0.0.tgz", - "integrity": "sha512-lBQgLYzq6C+XjfVJTidk+rckKo/+xlTgIm1XUtACA3BUz8bgi2du2zmbYkcrplJMwGub4QWP6GnKgM5ZZRhzYg==", - "requires": { - "@jupyterlab/services": "^6.0.0", - "@lumino/coreutils": "^1.2.0", - "@lumino/messaging": "^1.2.1", - "@lumino/widgets": "^1.3.0", - "@types/backbone": "^1.4.1", - "@types/lodash": "^4.14.134", - "backbone": "1.2.3", - "base64-js": "^1.2.1", - "jquery": "^3.1.1", - "lodash": "^4.17.4" - } - }, - "@jupyterlab/apputils": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/apputils/-/apputils-3.5.2.tgz", - "integrity": "sha512-VTgiYzoGRt2hjiaG94M3M35jXw46bMO+pl8whjPRZFZ6UzIJpMq9/Rr1VyuJyG+eE/Wt9WQsxCP84nTlUZNfBQ==", - "requires": { - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/services": "^6.5.2", - "@jupyterlab/settingregistry": "^3.5.2", - "@jupyterlab/statedb": "^3.5.2", - "@jupyterlab/translation": "^3.5.2", - "@jupyterlab/ui-components": "^3.5.2", - "@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.33.0", - "@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": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/attachments/-/attachments-3.5.2.tgz", - "integrity": "sha512-zVu6soe+biGG/V+ZOLb24rr3esr7YyvLnxLefWB02pSJPBlIe5Pn1GY6eWYPOZPtcFN2Di8OZsCp6LQJaNygeA==", - "requires": { - "@jupyterlab/nbformat": "^3.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/rendermime": "^3.5.2", - "@jupyterlab/rendermime-interfaces": "^3.5.2", - "@lumino/disposable": "^1.10.0", - "@lumino/signaling": "^1.10.0" - } - }, - "@jupyterlab/builder": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@jupyterlab/builder/-/builder-4.0.5.tgz", - "integrity": "sha512-rypdRtkDvoq1nt7WqbYwTBCCumFPceUxvUW9J9Xe3KaScnk/BoveV9D+oRSHNl8okDdJZLkgS99UT4mC0ysduw==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "@lumino/algorithm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.1.tgz", - "integrity": "sha512-iA+uuvA7DeNFB0/cQpIWNgO1c6z4pOSigifjstLy+rxf1U5ZzxIq+xudnEuTbWgKSTviG02j4cKwCyx1PO6rzA==", - "dev": true - }, - "@lumino/collections": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/collections/-/collections-2.0.1.tgz", - "integrity": "sha512-8TbAU/48XVPKc/FOhGHLuugf2Gmx6vhVEx867KGG5fLwDOI8EW4gTno78yJUk8G0QpgNa+sdpB/LwbJFNIratg==", - "dev": true, - "requires": { - "@lumino/algorithm": "^2.0.1" - } - }, - "@lumino/commands": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@lumino/commands/-/commands-2.1.3.tgz", - "integrity": "sha512-F0ZYZDrfJzcPp4JqeQMC2dzi3XOobzNZD94qUJ6QBsbfghFRcPBM+rfOspghRvCEFHAZdtghw04wOp7VWgIczA==", - "dev": true, - "requires": { - "@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" - } - }, - "@lumino/coreutils": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.1.2.tgz", - "integrity": "sha512-vyz7WzchTO4HQ8iVAxvSUmb5o/8t3cz1vBo8V4ZIaPGada0Jx0xe3tKQ8bXp4pjHc+AEhMnkCnlUyVYMWbnj4A==", - "dev": true - }, - "@lumino/disposable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@lumino/disposable/-/disposable-2.1.2.tgz", - "integrity": "sha512-0qmB6zPt9+uj4SVMTfISn0wUOjYHahtKotwxDD5flfcscj2gsXaFCXO4Oqot1zcsZbg8uJmTUhEzAvFW0QhFNA==", - "dev": true, - "requires": { - "@lumino/signaling": "^2.1.2" - } - }, - "@lumino/domutils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/domutils/-/domutils-2.0.1.tgz", - "integrity": "sha512-tbcfhsdKH04AMjSgYAYGD2xE80YcjrqKnfMTeU2NHt4J294Hzxs1GvEmSMk5qJ3Bbgwx6Z4BbQ7apnFg8Gc6cA==", - "dev": true - }, - "@lumino/dragdrop": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@lumino/dragdrop/-/dragdrop-2.1.3.tgz", - "integrity": "sha512-lETk7lu+8pMfufxWGL76Dfz8kO/44CgHua0zzaLMh/eK+sRQxghMAxqKAMrEw+6eDy7EsM59R3xuynhkLrxa2A==", - "dev": true, - "requires": { - "@lumino/coreutils": "^2.1.2", - "@lumino/disposable": "^2.1.2" - } - }, - "@lumino/keyboard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/keyboard/-/keyboard-2.0.1.tgz", - "integrity": "sha512-R2mrH9HCEcv/0MSAl7bEUbjCNOnhrg49nXZBEVckg//TEG+sdayCsyrbJNMPcZ07asIPKc6mq3v7DpAmDKqh+w==", - "dev": true - }, - "@lumino/messaging": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/messaging/-/messaging-2.0.1.tgz", - "integrity": "sha512-Z1b9Sq7i2yw7BN/u9ezoBUMYK06CsQXO7BqpczSnEO0PfwFf9dWi7y9VcIySOBz9uogsT1uczZMIMtLefk+xPQ==", - "dev": true, - "requires": { - "@lumino/algorithm": "^2.0.1", - "@lumino/collections": "^2.0.1" - } - }, - "@lumino/properties": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-2.0.1.tgz", - "integrity": "sha512-RPtHrp8cQqMnTC915lOIdrmsbPDCC7PhPOZb2YY7/Jj6dEdwmGhoMthc2tBEYWoHP+tU/hVm8UR/mEQby22srQ==", - "dev": true - }, - "@lumino/signaling": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.2.tgz", - "integrity": "sha512-KtwKxx+xXkLOX/BdSqtvnsqBTPKDIENFBKeYkMTxstQc3fHRmyTzmaVoeZES+pr1EUy3e8vM4pQFVQpb8VsDdA==", - "dev": true, - "requires": { - "@lumino/algorithm": "^2.0.1", - "@lumino/coreutils": "^2.1.2" - } - }, - "@lumino/virtualdom": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/virtualdom/-/virtualdom-2.0.1.tgz", - "integrity": "sha512-WNM+uUZX7vORhlDRN9NmhEE04Tz1plDjtbwsX+i/51pQj2N2r7+gsVPY/gR4w+I5apmC3zG8/BojjJYIwi8ogA==", - "dev": true, - "requires": { - "@lumino/algorithm": "^2.0.1" - } - }, - "@lumino/widgets": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@lumino/widgets/-/widgets-2.3.0.tgz", - "integrity": "sha512-82vvNHmi1r5MzLEybq3ImJ7vAkaVxHZyw6/H+3ZlhXYasOwOIlYy7le71VsW8O4EtLLjuf/A/Wme9vsxH7Wp0w==", - "dev": true, - "requires": { - "@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" - } - }, - "@webpack-cli/configtest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", - "dev": true, - "requires": {} - }, - "@webpack-cli/info": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", - "dev": true, - "requires": {} - }, - "@webpack-cli/serve": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", - "dev": true, - "requires": {} - }, - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "css-loader": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", - "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", - "dev": true, - "requires": { - "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" - } - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "requires": { - "resolve": "^1.20.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-loader": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.0.2.tgz", - "integrity": "sha512-oX8d6ndRjN+tVyjj6PlXSyFPhDdVAPsZA30nD3/II8g4uOv8fCz0DMn5sy8KtVbDfKQxOpGwGJnK3xIW3tauDw==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "style-loader": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", - "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", - "dev": true, - "requires": {} - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "webpack-cli": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", - "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "dev": true - } - } - } - } - }, - "@jupyterlab/cells": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/cells/-/cells-3.5.2.tgz", - "integrity": "sha512-ze0vuFRH3CL88wS+oMoD4YmapMU/aR/RTZPuAOgK0o072CEAuhJFOPgpv12NalnEYlNM8YBeR4/nJ2xPfbX8lQ==", - "requires": { - "@jupyterlab/apputils": "^3.5.2", - "@jupyterlab/attachments": "^3.5.2", - "@jupyterlab/codeeditor": "^3.5.2", - "@jupyterlab/codemirror": "^3.5.2", - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/filebrowser": "^3.5.2", - "@jupyterlab/nbformat": "^3.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/outputarea": "^3.5.2", - "@jupyterlab/rendermime": "^3.5.2", - "@jupyterlab/services": "^6.5.2", - "@jupyterlab/shared-models": "^3.5.2", - "@jupyterlab/ui-components": "^3.5.2", - "@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.33.0", - "marked": "^4.0.17", - "react": "^17.0.1" - } - }, - "@jupyterlab/codeeditor": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/codeeditor/-/codeeditor-3.5.2.tgz", - "integrity": "sha512-ONMCUEvgSwXhOEDW3i8Gl7s7xWbbgpjbG413LV4F+JP4J4IZv6fSW/AhXQ4Omdtl1lTJsqlGqfNyEmdAkLto9w==", - "requires": { - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/nbformat": "^3.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/shared-models": "^3.5.2", - "@jupyterlab/translation": "^3.5.2", - "@jupyterlab/ui-components": "^3.5.2", - "@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.33.0" - } - }, - "@jupyterlab/codemirror": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/codemirror/-/codemirror-3.5.2.tgz", - "integrity": "sha512-PpAKmDwMd69Ge/ZG+F8PiB6ZoJcdJ8slsAv3Tu1FM4I2MPZ+X2E6TnqmgsBL7LZTr3qkWcQuTBaNxinAVbAzkA==", - "requires": { - "@jupyterlab/apputils": "^3.5.2", - "@jupyterlab/codeeditor": "^3.5.2", - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/nbformat": "^3.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/shared-models": "^3.5.2", - "@jupyterlab/statusbar": "^3.5.2", - "@jupyterlab/translation": "^3.5.2", - "@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.33.0", - "codemirror": "~5.61.0", - "react": "^17.0.1", - "y-codemirror": "^3.0.1" - } - }, - "@jupyterlab/coreutils": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-5.5.2.tgz", - "integrity": "sha512-mpanIZlMcUN10xYN8P8N6Icnz6DbJjKrOMRvmD6ALZ3i62SJqqMjuYCW6vFZ7cW+EZlMTqOk8VMnAJ+rwC5d+g==", - "requires": { - "@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": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/docmanager/-/docmanager-3.5.2.tgz", - "integrity": "sha512-IGP6NL/+qiq4w288I2gqmGrNOnShZcDyDsEE5Sts7HYoRDnSZL5lZSRwmP7DFnUQQ3v4PGrz9n/Mu3nNCBRv/g==", - "requires": { - "@jupyterlab/apputils": "^3.5.2", - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/docprovider": "^3.5.2", - "@jupyterlab/docregistry": "^3.5.2", - "@jupyterlab/services": "^6.5.2", - "@jupyterlab/statusbar": "^3.5.2", - "@jupyterlab/translation": "^3.5.2", - "@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.33.0", - "react": "^17.0.1" - } - }, - "@jupyterlab/docprovider": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/docprovider/-/docprovider-3.5.2.tgz", - "integrity": "sha512-QH9lHBAbD843Azc12PzqkiMUhJ6k7Mn/+N5mY0BCYijU0M1qBRcWIN6Cyanyx4jLsIOKX8oslKF5fO8JYosKfw==", - "requires": { - "@jupyterlab/shared-models": "^3.5.2", - "@lumino/coreutils": "^1.11.0", - "lib0": "^0.2.42", - "y-websocket": "^1.3.15", - "yjs": "^13.5.17" - } - }, - "@jupyterlab/docregistry": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/docregistry/-/docregistry-3.5.2.tgz", - "integrity": "sha512-sJ/tIzDiCapRs3OxMpqswiBe/uvwqHtDyYAux28Ux6q4nN14Ht9svqDM8knkUjcOlcM+W011LqPeR6vUDmlcxA==", - "requires": { - "@jupyterlab/apputils": "^3.5.2", - "@jupyterlab/codeeditor": "^3.5.2", - "@jupyterlab/codemirror": "^3.5.2", - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/docprovider": "^3.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/rendermime": "^3.5.2", - "@jupyterlab/rendermime-interfaces": "^3.5.2", - "@jupyterlab/services": "^6.5.2", - "@jupyterlab/shared-models": "^3.5.2", - "@jupyterlab/translation": "^3.5.2", - "@jupyterlab/ui-components": "^3.5.2", - "@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.33.0", - "yjs": "^13.5.17" - } - }, - "@jupyterlab/filebrowser": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/filebrowser/-/filebrowser-3.5.2.tgz", - "integrity": "sha512-XOgxL9s2+4I0X2DEkgLdLs6nRhn9jppLClBlBQUboRiDabqW62Pwbkf54KUH7yJgvXy0ZJ4EiX4uRoDGY3qJ7w==", - "requires": { - "@jupyterlab/apputils": "^3.5.2", - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/docmanager": "^3.5.2", - "@jupyterlab/docregistry": "^3.5.2", - "@jupyterlab/services": "^6.5.2", - "@jupyterlab/statedb": "^3.5.2", - "@jupyterlab/statusbar": "^3.5.2", - "@jupyterlab/translation": "^3.5.2", - "@jupyterlab/ui-components": "^3.5.2", - "@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.33.0", - "react": "^17.0.1" - } - }, - "@jupyterlab/nbformat": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/nbformat/-/nbformat-3.5.2.tgz", - "integrity": "sha512-Ml5hNpS9tMqZ9ThI24+iXHgX71XWQAysyPOU1vA3idvTGCbGhVc4FaZcDX17uepA7yIEUitlj4xQGtJR8hNzuA==", - "requires": { - "@lumino/coreutils": "^1.11.0" - } - }, - "@jupyterlab/notebook": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/notebook/-/notebook-3.4.0.tgz", - "integrity": "sha512-OzNXGfLnNmyEZItXQ6g5CGbUZS/8tmTXJLW6+7cKhoDCJsV6riX3ujLgFsZJdU2e0a4HWtbKDUYOxvH12hYe1A==", - "requires": { - "@jupyterlab/apputils": "^3.4.0", - "@jupyterlab/cells": "^3.4.0", - "@jupyterlab/codeeditor": "^3.4.0", - "@jupyterlab/coreutils": "^5.4.0", - "@jupyterlab/docregistry": "^3.4.0", - "@jupyterlab/nbformat": "^3.4.0", - "@jupyterlab/observables": "^4.4.0", - "@jupyterlab/rendermime": "^3.4.0", - "@jupyterlab/services": "^6.4.0", - "@jupyterlab/settingregistry": "^3.4.0", - "@jupyterlab/shared-models": "^3.4.0", - "@jupyterlab/statusbar": "^3.4.0", - "@jupyterlab/translation": "^3.4.0", - "@jupyterlab/ui-components": "^3.4.0", - "@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.30.0", - "react": "^17.0.1" - } - }, - "@jupyterlab/observables": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/observables/-/observables-4.5.2.tgz", - "integrity": "sha512-aRruzLKEls5vxUgPmK+Wxh6yyTXlQMrKqmNUZKilKSLRyfnLl3wDprIP7odzosQhaURixa3dQnrYg90k/VaLdw==", - "requires": { - "@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": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/outputarea/-/outputarea-3.5.2.tgz", - "integrity": "sha512-cjIx0OFm/qLqff01mioWraeMI6rNJ9ORHfbF2gvIUZna9XNyhBKO8Jc+lAnL8+K0d2vn5RpgimhrTwWJ83ELuw==", - "requires": { - "@jupyterlab/apputils": "^3.5.2", - "@jupyterlab/nbformat": "^3.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/rendermime": "^3.5.2", - "@jupyterlab/rendermime-interfaces": "^3.5.2", - "@jupyterlab/services": "^6.5.2", - "@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.33.0", - "resize-observer-polyfill": "^1.5.1" - } - }, - "@jupyterlab/rendermime": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/rendermime/-/rendermime-3.5.2.tgz", - "integrity": "sha512-tr3Fj1/khEMvSkJ59WCBXF5l1xixPt6F+aou13w+RIFmNkJqH8Mos2mIDE4WwdF2481Jqo6lVE+0nVCgpLLCAQ==", - "requires": { - "@jupyterlab/apputils": "^3.5.2", - "@jupyterlab/codemirror": "^3.5.2", - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/nbformat": "^3.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/rendermime-interfaces": "^3.5.2", - "@jupyterlab/services": "^6.5.2", - "@jupyterlab/translation": "^3.5.2", - "@lumino/algorithm": "^1.9.0", - "@lumino/coreutils": "^1.11.0", - "@lumino/messaging": "^1.10.0", - "@lumino/signaling": "^1.10.0", - "@lumino/widgets": "^1.33.0", - "lodash.escape": "^4.0.1", - "marked": "^4.0.17" - } - }, - "@jupyterlab/rendermime-interfaces": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-3.5.2.tgz", - "integrity": "sha512-IMQVO8cVwcHHkhl+WCREw4ZaeMpuRNfjos/p5PY0jQ3wXg4NLSakckZEdpTN8xRB56ui6EWesW5846DRnudfLA==", - "requires": { - "@jupyterlab/translation": "^3.5.2", - "@lumino/coreutils": "^1.11.0", - "@lumino/widgets": "^1.33.0" - } - }, - "@jupyterlab/services": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/services/-/services-6.5.2.tgz", - "integrity": "sha512-3uiOZpIsx7o1we/QDj9tfEkw3fwFlk018OPYfo1nRFg/Xl1B+9cOHQJtFzDpIIAIdNDNsYyIK8RergTsnjP5FA==", - "requires": { - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/nbformat": "^3.5.2", - "@jupyterlab/observables": "^4.5.2", - "@jupyterlab/settingregistry": "^3.5.2", - "@jupyterlab/statedb": "^3.5.2", - "@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": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/settingregistry/-/settingregistry-3.5.2.tgz", - "integrity": "sha512-ZiJojTy/Vd15f217tp8zkE4z0I7cTYZvFJkwNXeM+IoEXMzZG5A8dSkdVugWjfjs9VeCXCzRyut1kb8z0aA+BQ==", - "requires": { - "@jupyterlab/statedb": "^3.5.2", - "@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": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/shared-models/-/shared-models-3.5.2.tgz", - "integrity": "sha512-MbLA8OtfZpf7e4YLveM4mJYBG0Hwloypl09zYajs0HHs6Y6s2keV/xkIeCjKyirSruUx7LC1LqF8mHNrPouR+w==", - "requires": { - "@jupyterlab/nbformat": "^3.5.2", - "@lumino/coreutils": "^1.11.0", - "@lumino/disposable": "^1.10.0", - "@lumino/signaling": "^1.10.0", - "y-protocols": "^1.0.5", - "yjs": "^13.5.17" - } - }, - "@jupyterlab/statedb": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/statedb/-/statedb-3.5.2.tgz", - "integrity": "sha512-BrxWSbCJ5MvDn0OiTC/Gv8vuPFIz6mbiQ6JTojcknK1YxDfMOqE5Hvl+f/oODSGnoaVu3s2czCjTMo1sPDjW8g==", - "requires": { - "@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": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/statusbar/-/statusbar-3.5.2.tgz", - "integrity": "sha512-WN0j3cTtDmk8efKsK07MKj4iw1CFNNJjXsKbiNXaFOSAXzzEtlsZ+iKVpjPuKhDLWF6gW3iUU3RLnOUtqjYLqg==", - "requires": { - "@jupyterlab/apputils": "^3.5.2", - "@jupyterlab/codeeditor": "^3.5.2", - "@jupyterlab/services": "^6.5.2", - "@jupyterlab/translation": "^3.5.2", - "@jupyterlab/ui-components": "^3.5.2", - "@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.33.0", - "csstype": "~3.0.3", - "react": "^17.0.1", - "typestyle": "^2.0.4" - } - }, - "@jupyterlab/translation": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/translation/-/translation-3.5.2.tgz", - "integrity": "sha512-CrmJJ/kZK2jAF/UM616spUpsqgBQGBM7S19eCbuZugml3U5XXyVBNo4Nc8I1n1xUWbqnU5O6HdLSCo8jXCV53Q==", - "requires": { - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/services": "^6.5.2", - "@jupyterlab/statedb": "^3.5.2", - "@lumino/coreutils": "^1.11.0" - } - }, - "@jupyterlab/ui-components": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/ui-components/-/ui-components-3.5.2.tgz", - "integrity": "sha512-efeoq+om3w6RNYzmAcK4ETQvlQGUED2CDzrt1MgndQ5rUduCs/taT/48Sk/+6pm1QAACYBwMNJbHd6+nMafxDQ==", - "requires": { - "@blueprintjs/core": "^3.36.0", - "@blueprintjs/select": "^3.15.0", - "@jupyterlab/coreutils": "^5.5.2", - "@jupyterlab/translation": "^3.5.2", - "@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.33.0", - "@rjsf/core": "^3.1.0", - "react": "^17.0.1", - "react-dom": "^17.0.1", - "typestyle": "^2.0.4" - } - }, - "@lumino/algorithm": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-1.9.2.tgz", - "integrity": "sha512-Z06lp/yuhz8CtIir3PNTGnuk7909eXt4ukJsCzChsGuot2l5Fbs96RJ/FOHgwCedaX74CtxPjXHXoszFbUA+4A==" - }, - "@lumino/application": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@lumino/application/-/application-2.2.1.tgz", - "integrity": "sha512-oO6N0FvScnPukoxU0KxyAHMLMbPP2IQeKcurE9qSLKnjNHO7h/Yb/Zfl82CZda4rBnd3foZEkVoH/hWrtu3jpw==", - "dev": true, - "requires": { - "@lumino/commands": "^2.1.3", - "@lumino/coreutils": "^2.1.2", - "@lumino/widgets": "^2.3.0" - }, - "dependencies": { - "@lumino/algorithm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.1.tgz", - "integrity": "sha512-iA+uuvA7DeNFB0/cQpIWNgO1c6z4pOSigifjstLy+rxf1U5ZzxIq+xudnEuTbWgKSTviG02j4cKwCyx1PO6rzA==", - "dev": true - }, - "@lumino/collections": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/collections/-/collections-2.0.1.tgz", - "integrity": "sha512-8TbAU/48XVPKc/FOhGHLuugf2Gmx6vhVEx867KGG5fLwDOI8EW4gTno78yJUk8G0QpgNa+sdpB/LwbJFNIratg==", - "dev": true, - "requires": { - "@lumino/algorithm": "^2.0.1" - } - }, - "@lumino/commands": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@lumino/commands/-/commands-2.1.3.tgz", - "integrity": "sha512-F0ZYZDrfJzcPp4JqeQMC2dzi3XOobzNZD94qUJ6QBsbfghFRcPBM+rfOspghRvCEFHAZdtghw04wOp7VWgIczA==", - "dev": true, - "requires": { - "@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" - } - }, - "@lumino/coreutils": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.1.2.tgz", - "integrity": "sha512-vyz7WzchTO4HQ8iVAxvSUmb5o/8t3cz1vBo8V4ZIaPGada0Jx0xe3tKQ8bXp4pjHc+AEhMnkCnlUyVYMWbnj4A==", - "dev": true - }, - "@lumino/disposable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@lumino/disposable/-/disposable-2.1.2.tgz", - "integrity": "sha512-0qmB6zPt9+uj4SVMTfISn0wUOjYHahtKotwxDD5flfcscj2gsXaFCXO4Oqot1zcsZbg8uJmTUhEzAvFW0QhFNA==", - "dev": true, - "requires": { - "@lumino/signaling": "^2.1.2" - } - }, - "@lumino/domutils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/domutils/-/domutils-2.0.1.tgz", - "integrity": "sha512-tbcfhsdKH04AMjSgYAYGD2xE80YcjrqKnfMTeU2NHt4J294Hzxs1GvEmSMk5qJ3Bbgwx6Z4BbQ7apnFg8Gc6cA==", - "dev": true - }, - "@lumino/dragdrop": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@lumino/dragdrop/-/dragdrop-2.1.3.tgz", - "integrity": "sha512-lETk7lu+8pMfufxWGL76Dfz8kO/44CgHua0zzaLMh/eK+sRQxghMAxqKAMrEw+6eDy7EsM59R3xuynhkLrxa2A==", - "dev": true, - "requires": { - "@lumino/coreutils": "^2.1.2", - "@lumino/disposable": "^2.1.2" - } - }, - "@lumino/keyboard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/keyboard/-/keyboard-2.0.1.tgz", - "integrity": "sha512-R2mrH9HCEcv/0MSAl7bEUbjCNOnhrg49nXZBEVckg//TEG+sdayCsyrbJNMPcZ07asIPKc6mq3v7DpAmDKqh+w==", - "dev": true - }, - "@lumino/messaging": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/messaging/-/messaging-2.0.1.tgz", - "integrity": "sha512-Z1b9Sq7i2yw7BN/u9ezoBUMYK06CsQXO7BqpczSnEO0PfwFf9dWi7y9VcIySOBz9uogsT1uczZMIMtLefk+xPQ==", - "dev": true, - "requires": { - "@lumino/algorithm": "^2.0.1", - "@lumino/collections": "^2.0.1" - } - }, - "@lumino/properties": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-2.0.1.tgz", - "integrity": "sha512-RPtHrp8cQqMnTC915lOIdrmsbPDCC7PhPOZb2YY7/Jj6dEdwmGhoMthc2tBEYWoHP+tU/hVm8UR/mEQby22srQ==", - "dev": true - }, - "@lumino/signaling": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.2.tgz", - "integrity": "sha512-KtwKxx+xXkLOX/BdSqtvnsqBTPKDIENFBKeYkMTxstQc3fHRmyTzmaVoeZES+pr1EUy3e8vM4pQFVQpb8VsDdA==", - "dev": true, - "requires": { - "@lumino/algorithm": "^2.0.1", - "@lumino/coreutils": "^2.1.2" - } - }, - "@lumino/virtualdom": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@lumino/virtualdom/-/virtualdom-2.0.1.tgz", - "integrity": "sha512-WNM+uUZX7vORhlDRN9NmhEE04Tz1plDjtbwsX+i/51pQj2N2r7+gsVPY/gR4w+I5apmC3zG8/BojjJYIwi8ogA==", - "dev": true, - "requires": { - "@lumino/algorithm": "^2.0.1" - } - }, - "@lumino/widgets": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@lumino/widgets/-/widgets-2.3.0.tgz", - "integrity": "sha512-82vvNHmi1r5MzLEybq3ImJ7vAkaVxHZyw6/H+3ZlhXYasOwOIlYy7le71VsW8O4EtLLjuf/A/Wme9vsxH7Wp0w==", - "dev": true, - "requires": { - "@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" - } - } - } - }, - "@lumino/collections": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@lumino/collections/-/collections-1.9.3.tgz", - "integrity": "sha512-2i2Wf1xnfTgEgdyKEpqM16bcYRIhUOGCDzaVCEZACVG9R1CgYwOe3zfn71slBQOVSjjRgwYrgLXu4MBpt6YK+g==", - "requires": { - "@lumino/algorithm": "^1.9.2" - } - }, - "@lumino/commands": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/@lumino/commands/-/commands-1.21.1.tgz", - "integrity": "sha512-d1zJmwz5bHU0BM/Rl3tRdZ7/WgXnFB0bM7x7Bf0XDlmX++jnU9k0j3mh6/5JqCGLmIApKCRwVqSaV7jPmSJlcQ==", - "requires": { - "@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": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-1.12.1.tgz", - "integrity": "sha512-JLu3nTHzJk9N8ohZ85u75YxemMrmDzJdNgZztfP7F7T7mxND3YVNCkJG35a6aJ7edu1sIgCjBxOvV+hv27iYvQ==", - "requires": {} - }, - "@lumino/disposable": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@lumino/disposable/-/disposable-1.10.4.tgz", - "integrity": "sha512-4ZxyYcyzUS+ZeB2KAH9oAH3w0DUUceiVr+FIZHZ2TAYGWZI/85WlqJtfm0xjwEpCwLLW1TDqJrISuZu3iMmVMA==", - "requires": { - "@lumino/algorithm": "^1.9.2", - "@lumino/signaling": "^1.11.1" - } - }, - "@lumino/domutils": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@lumino/domutils/-/domutils-1.8.2.tgz", - "integrity": "sha512-QIpMfkPJrs4GrWBuJf2Sn1fpyVPmvqUUAeD8xAQo8+4V5JAT0vUDLxZ9HijefMgNCi3+Bs8Z3lQwRCrz+cFP1A==" - }, - "@lumino/dragdrop": { - "version": "1.14.5", - "resolved": "https://registry.npmjs.org/@lumino/dragdrop/-/dragdrop-1.14.5.tgz", - "integrity": "sha512-LC5xB82+xGF8hFyl716TMpV32OIMIMl+s3RU1PaqDkD6B7PkgiVk6NkJ4X9/GcEvl2igkvlGQt/3L7qxDAJNxw==", - "requires": { - "@lumino/coreutils": "^1.12.1", - "@lumino/disposable": "^1.10.4" - } - }, - "@lumino/keyboard": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@lumino/keyboard/-/keyboard-1.8.2.tgz", - "integrity": "sha512-Dy+XqQ1wXbcnuYtjys5A0pAqf4SpAFl9NY6owyIhXAo0Va7w3LYp3jgiP1xAaBAwMuUppiUAfrbjrysZuZ625g==" - }, - "@lumino/messaging": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@lumino/messaging/-/messaging-1.10.3.tgz", - "integrity": "sha512-F/KOwMCdqvdEG8CYAJcBSadzp6aI7a47Fr60zAKGqZATSRRRV41q53iXU7HjFPqQqQIvdn9Z7J32rBEAyQAzww==", - "requires": { - "@lumino/algorithm": "^1.9.2", - "@lumino/collections": "^1.9.3" - } - }, - "@lumino/polling": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@lumino/polling/-/polling-1.10.0.tgz", - "integrity": "sha512-ZNXObJQfugnS41Yrlr7yWcFiRK+xAGGOXO08JJ0Mctsg5mT30UEGFVWJY2AjZ6N5aQuLyGed/pMkBzLzrzt8OA==", - "requires": { - "@lumino/coreutils": "^1.12.0", - "@lumino/disposable": "^1.10.1", - "@lumino/signaling": "^1.10.1" - } - }, - "@lumino/properties": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-1.8.2.tgz", - "integrity": "sha512-EkjI9Cw8R0U+xC9HxdFSu7X1tz1H1vKu20cGvJ2gU+CXlMB1DvoYJCYxCThByHZ+kURTAap4SE5x8HvKwNPbig==" - }, - "@lumino/signaling": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-1.11.1.tgz", - "integrity": "sha512-YCUmgw08VoyMN5KxzqPO3KMx+cwdPv28tAN06C0K7Q/dQf+oufb1XocuhZb5selTrTmmuXeizaYxgLIQGdS1fA==", - "requires": { - "@lumino/algorithm": "^1.9.2", - "@lumino/properties": "^1.8.2" - } - }, - "@lumino/virtualdom": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/@lumino/virtualdom/-/virtualdom-1.14.3.tgz", - "integrity": "sha512-5joUC1yuxeXbpfbSBm/OR8Mu9HoTo6PDX0RKqzlJ9o97iml7zayFN/ynzcxScKGQAo9iaXOY8uVIvGUT8FnsGw==", - "requires": { - "@lumino/algorithm": "^1.9.2" - } - }, - "@lumino/widgets": { - "version": "1.37.2", - "resolved": "https://registry.npmjs.org/@lumino/widgets/-/widgets-1.37.2.tgz", - "integrity": "sha512-NHKu1NBDo6ETBDoNrqSkornfUCwc8EFFzw6+LWBfYVxn2PIwciq2SdiJGEyNqL+0h/A9eVKb5ui5z4cwpRekmQ==", - "requires": { - "@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" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/application": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@phosphor/application/-/application-1.7.3.tgz", - "integrity": "sha512-ohxrW7rv5Tms4PSyPRZT6YArZQQGQNG4MgTeFzkoLJ+7mp/BcbFuvEoaV1/CUKQArofl0DCkKDOTOIkXP+/32A==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.2", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/widgets": "^1.9.3" - } - }, - "@phosphor/collections": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/collections/-/collections-1.2.0.tgz", - "integrity": "sha512-T9/0EjSuY6+ga2LIFRZ0xupciOR3Qnyy8Q95lhGTC0FXZUFwC8fl9e8On6IcwasCszS+1n8dtZUWSIynfgdpzw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - }, - "@phosphor/commands": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@phosphor/commands/-/commands-1.7.2.tgz", - "integrity": "sha512-iSyBIWMHsus323BVEARBhuVZNnVel8USo+FIPaAxGcq+icTSSe6+NtSxVQSmZblGN6Qm4iw6I6VtiSx0e6YDgQ==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.1", - "@phosphor/domutils": "^1.1.4", - "@phosphor/keyboard": "^1.1.3", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/coreutils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/coreutils/-/coreutils-1.3.1.tgz", - "integrity": "sha512-9OHCn8LYRcPU/sbHm5v7viCA16Uev3gbdkwqoQqlV+EiauDHl70jmeL7XVDXdigl66Dz0LI11C99XOxp+s3zOA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/domutils": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@phosphor/domutils/-/domutils-1.1.4.tgz", - "integrity": "sha512-ivwq5TWjQpKcHKXO8PrMl+/cKqbgxPClPiCKc1gwbMd+6hnW5VLwNG0WBzJTxCzXK43HxX18oH+tOZ3E04wc3w==", - "dev": true - }, - "@phosphor/dragdrop": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@phosphor/dragdrop/-/dragdrop-1.4.1.tgz", - "integrity": "sha512-77paMoubIWk7pdwA2GVFkqba1WP48hTZZvS17N30+KVOeWfSqBL3flPSnW2yC4y6FnOP2PFOCtuPIbQv+pYhCA==", - "dev": true, - "requires": { - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.1" - } - }, - "@phosphor/keyboard": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@phosphor/keyboard/-/keyboard-1.1.3.tgz", - "integrity": "sha512-dzxC/PyHiD6mXaESRy6PZTd9JeK+diwG1pyngkyUf127IXOEzubTIbu52VSdpGBklszu33ws05BAGDa4oBE4mQ==", - "dev": true - }, - "@phosphor/messaging": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@phosphor/messaging/-/messaging-1.3.0.tgz", - "integrity": "sha512-k0JE+BTMKlkM335S2AmmJxoYYNRwOdW5jKBqLgjJdGRvUQkM0+2i60ahM45+J23atGJDv9esKUUBINiKHFhLew==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/collections": "^1.2.0" - } - }, - "@phosphor/properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@phosphor/properties/-/properties-1.1.3.tgz", - "integrity": "sha512-GiglqzU77s6+tFVt6zPq9uuyu/PLQPFcqZt914ZhJ4cN/7yNI/SLyMzpYZ56IRMXvzK9TUgbRna6URE3XAwFUg==", - "dev": true - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - }, - "@phosphor/virtualdom": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/virtualdom/-/virtualdom-1.2.0.tgz", - "integrity": "sha512-L9mKNhK2XtVjzjuHLG2uYuepSz8uPyu6vhF4EgCP0rt0TiLYaZeHwuNu3XeFbul9DMOn49eBpye/tfQVd4Ks+w==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - }, - "@phosphor/widgets": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@phosphor/widgets/-/widgets-1.9.3.tgz", - "integrity": "sha512-61jsxloDrW/+WWQs8wOgsS5waQ/MSsXBuhONt0o6mtdeL93HVz7CYO5krOoot5owammfF6oX1z0sDaUYIYgcPA==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/commands": "^1.7.2", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.1", - "@phosphor/domutils": "^1.1.4", - "@phosphor/dragdrop": "^1.4.1", - "@phosphor/keyboard": "^1.1.3", - "@phosphor/messaging": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.1", - "@phosphor/virtualdom": "^1.2.0" - } - }, - "@rjsf/core": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-3.2.1.tgz", - "integrity": "sha512-dk8ihvxFbcuIwU7G+HiJbFgwyIvaumPt5g5zfnuC26mwTUPlaDGFXKK2yITp8tJ3+hcwS5zEXtAN9wUkfuM4jA==", - "requires": { - "@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" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/backbone": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@types/backbone/-/backbone-1.4.15.tgz", - "integrity": "sha512-WWeKtYlsIMtDyLbbhkb96taJMEbfQBnuz7yw1u0pkphCOtksemoWhIXhK74VRCY9hbjnsH3rsJu2uUiFtnsEYg==", - "requires": { - "@types/jquery": "*", - "@types/underscore": "*" - } - }, - "@types/clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/clone/-/clone-2.1.1.tgz", - "integrity": "sha512-BZIU34bSYye0j/BFcPraiDZ5ka6MJADjcDVELGf7glr9K+iE8NYVjFslJFVWzskSxkLLyCrSPScE82/UUoBSvg==" - }, - "@types/dom4": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/dom4/-/dom4-2.0.2.tgz", - "integrity": "sha512-Rt4IC1T7xkCWa0OG1oSsPa0iqnxlDeQqKXZAHrQGLb7wFGncWm85MaxKUjAGejOrUynOgWlFi4c6S6IyJwoK4g==" - }, - "@types/eslint": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.2.tgz", - "integrity": "sha512-nQxgB8/Sg+QKhnV8e0WzPpxjIGT3tuJDDzybkDi8ItE/IgTlHo07U0shaIjzhcvQxlq9SDRE42lsJ23uvEgJ2A==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "@types/geojson": { - "version": "7946.0.10", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", - "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "26.0.24", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", - "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", - "dev": true, - "requires": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "@types/jquery": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.13.tgz", - "integrity": "sha512-ZxJrup8nz/ZxcU0vantG+TPdboMhB24jad2uSap50zE7Q9rUeYlCF25kFMSmHR33qoeOgqcdHEp3roaookC0Sg==", - "requires": { - "@types/sizzle": "*" - } - }, - "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" - }, - "@types/lodash": { - "version": "4.14.178", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz", - "integrity": "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw==" - }, - "@types/node": { - "version": "17.0.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.9.tgz", - "integrity": "sha512-5dNBXu/FOER+EXnyah7rn8xlNrfMOQb/qXnw4NQgLkCygKBKhdmF/CA5oXVOKZLBEahw8s2WP9LxIcN/oDDRgQ==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/prettier": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.3.tgz", - "integrity": "sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/react": { - "version": "17.0.44", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.44.tgz", - "integrity": "sha512-Ye0nlw09GeMp2Suh8qoOv0odfgCoowfM/9MG6WeRD60Gq9wS90bdkdRtYbRkNhXOpG4H+YXGvj4wOWhAC0LJ1g==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==" - }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/underscore": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", - "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==" - }, - "@types/webpack-env": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.3.tgz", - "integrity": "sha512-9gtOPPkfyNoEqCQgx4qJKkuNm/x0R2hKR7fdl7zvTJyHnIisuE/LfvXOsYWL0o3qq6uiBnKZNNNzi3l0y/X+xw==", - "dev": true - }, - "@types/webpack-sources": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.9.tgz", - "integrity": "sha512-bvzMnzqoK16PQIC8AYHNdW45eREJQMd6WG/msQWX5V2+vZmODCOPb4TJcbgRljTZZTwTM4wUMcsI8FftNA7new==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz", - "integrity": "sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "3.10.1", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz", - "integrity": "sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-3.10.1.tgz", - "integrity": "sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==", - "dev": true, - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "3.10.1", - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/typescript-estree": "3.10.1", - "eslint-visitor-keys": "^1.1.0" - } - }, - "@typescript-eslint/types": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", - "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz", - "integrity": "sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==", - "dev": true, - "requires": { - "@typescript-eslint/types": "3.10.1", - "@typescript-eslint/visitor-keys": "3.10.1", - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz", - "integrity": "sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", - "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", - "dev": true, - "requires": {} - }, - "@webpack-cli/info": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", - "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", - "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", - "dev": true, - "requires": {} - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "optional": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "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-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "istanbul-lib-instrument": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz", - "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==", - "dev": true, - "requires": { - "@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" - } - } - } - }, - "babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "dev": true, - "requires": { - "@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": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz", - "integrity": "sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.20.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@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": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "backbone": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.2.3.tgz", - "integrity": "sha1-wiz9B/yG676uYdGJKe0RXpmdZbk=", - "requires": { - "underscore": ">=1.7.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "optional": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "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": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001300", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001300.tgz", - "integrity": "sha512-cVjiJHWGcNlJi8TZVKNMnvMid3Z3TTdDHmLDzlOdIiZq138Exvo0G+G0wTdVYolxKb4AYwC+38pxodiInVtJSA==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "codemirror": { - "version": "5.61.1", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.61.1.tgz", - "integrity": "sha512-+D1NZjAucuzE93vJGbAaXzvoBHwp9nJZWWWF9utjv25+5AZUiah6CIlfb4ikG4MoDsFsCG8niiJH5++OO2LgIQ==" - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compute-gcd": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", - "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", - "requires": { - "validate.io-array": "^1.0.3", - "validate.io-function": "^1.0.2", - "validate.io-integer-array": "^1.0.0" - } - }, - "compute-lcm": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", - "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==", - "requires": { - "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": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js-compat": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.3.tgz", - "integrity": "sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw==", - "dev": true, - "requires": { - "browserslist": "^4.19.1", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-js-pure": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.4.tgz", - "integrity": "sha512-4iF+QZkpzIz0prAFuepmxwJ2h5t4agvE8WPYqs2mjLJMNNwJOnpch76w2Q7bUfCPEv/V7wpvOfog0w273M+ZSw==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", - "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", - "peer": true - }, - "css-loader": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz", - "integrity": "sha512-gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ==", - "dev": true, - "requires": { - "icss-utils": "^5.1.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", - "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "csstype": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", - "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==" - }, - "d3-array": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.2.tgz", - "integrity": "sha512-yEEyEAbDrF8C6Ob2myOBLjwBLck1Z89jMGFee0oPsn95GqjerpaOA4ch+vc2l0FNFFwMD5N7OCSEN5eAlsUbgQ==", - "requires": { - "internmap": "1 - 2" - } - }, - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-delaunay": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", - "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", - "requires": { - "delaunator": "5" - } - }, - "d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" - }, - "d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "requires": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - } - }, - "d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" - }, - "d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", - "requires": { - "d3-array": "2.5.0 - 3" - } - }, - "d3-geo-projection": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-4.0.0.tgz", - "integrity": "sha512-p0bK60CEzph1iqmnxut7d/1kyTmm3UWtPlwdkM31AU+LW+BXazd5zJdoCn7VFxNCHXRngPHRnsNn5uGjLRGndg==", - "requires": { - "commander": "7", - "d3-array": "1 - 3", - "d3-geo": "1.12.0 - 3" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - } - } - }, - "d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - }, - "d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==" - }, - "d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" - }, - "d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "requires": { - "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": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "requires": { - "d3-path": "^3.1.0" - } - }, - "d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "requires": { - "d3-array": "2 - 3" - } - }, - "d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "requires": { - "d3-time": "1 - 3" - } - }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "requires": { - "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": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "optional": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "requires": { - "robust-predicates": "^3.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "dom4": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/dom4/-/dom4-2.1.6.tgz", - "integrity": "sha512-JkCVGnN4ofKGbjf5Uvc8mmxaATIErKQKSgACdBXpsQ3fY6DlIpAyWfiBSrGkttATssbDCp3psiAKWXk5gmjycA==" - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "duplicate-package-checker-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/duplicate-package-checker-webpack-plugin/-/duplicate-package-checker-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-aO50/qPC7X2ChjRFniRiscxBLT/K01bALqfcDaf8Ih5OqQ1N4iT/Abx9Ofu3/ms446vHTm46FACIuJUmgUQcDQ==", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "find-root": "^1.0.0", - "lodash": "^4.17.4", - "semver": "^5.4.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "electron-to-chromium": { - "version": "1.4.46", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.46.tgz", - "integrity": "sha512-UtV0xUA/dibCKKP2JMxOpDtXR74zABevuUEH4K0tvduFSIoxRVcYmQsbB51kXsFTX8MmOyWMt8tuZAlmDOqkrQ==", - "dev": true - }, - "emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "optional": true, - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - } - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "devOptional": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } - }, - "eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "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" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "free-style": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/free-style/-/free-style-3.1.0.tgz", - "integrity": "sha512-vJujYSIyT30iDoaoeigNAxX4yB1RUrh+N2ZMhIElMr3BvCuGXOw7XNJMEEJkDUeamK2Rnb/IKFGKRKlTWIGRWA==" - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true, - "optional": true - }, - "gud": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" - }, - "harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - }, - "identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", - "dev": true, - "requires": { - "harmony-reflect": "^1.4.6" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "optional": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "optional": true - }, - "immutable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", - "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "devOptional": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "optional": true - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isomorphic.js": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz", - "integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==" - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", - "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - } - }, - "jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - } - }, - "jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "dev": true, - "requires": { - "@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": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "dev": true, - "requires": { - "@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-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "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" - } - }, - "jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "dev": true, - "requires": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true - }, - "jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - } - }, - "jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "jquery": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", - "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-compare": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", - "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", - "requires": { - "lodash": "^4.17.4" - } - }, - "json-schema-merge-allof": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.6.0.tgz", - "integrity": "sha512-LEw4VMQVRceOPLuGRWcxW5orTTiR9ZAtqTAe4rQUjNADTeR81bezBVFa0MqIwp0YmHIM1KkhSjZM7o+IQhaPbQ==", - "requires": { - "compute-lcm": "^1.1.0", - "json-schema-compare": "^0.2.2", - "lodash": "^4.17.4" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-pretty-compact": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz", - "integrity": "sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA==" - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonpointer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz", - "integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg==" - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "level": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz", - "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==", - "optional": true, - "requires": { - "level-js": "^5.0.0", - "level-packager": "^5.1.0", - "leveldown": "^5.4.0" - } - }, - "level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "optional": true, - "requires": { - "buffer": "^5.6.0" - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "optional": true - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "optional": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "optional": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "optional": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "level-js": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz", - "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==", - "optional": true, - "requires": { - "abstract-leveldown": "~6.2.3", - "buffer": "^5.5.0", - "inherits": "^2.0.3", - "ltgt": "^2.1.2" - } - }, - "level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "optional": true, - "requires": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "optional": true, - "requires": { - "xtend": "^4.0.2" - } - }, - "leveldown": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", - "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", - "optional": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "~4.1.0" - } - }, - "levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "optional": true, - "requires": { - "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": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lib0": { - "version": "0.2.58", - "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.58.tgz", - "integrity": "sha512-6ovqPaYfOKU7GkkVxz/wjMR0zsqmNsISLvH+h9Lx5YNtWDZey69aYsTGXaSVpUPpJ+ZFtIvcZHsTGL3MbwOM8A==", - "requires": { - "isomorphic.js": "^0.2.4" - } - }, - "license-webpack-plugin": { - "version": "2.3.21", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.3.21.tgz", - "integrity": "sha512-rVaYU9TddZN3ao8M/0PrRSCdTp2EW6VQymlgsuScld1vef0Ou7fALx3ePe83KLP3xAEDcPK5fkqUVqGBnbz1zQ==", - "dev": true, - "requires": { - "@types/webpack-sources": "^0.1.5", - "webpack-sources": "^1.2.0" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "optional": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "marked": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.5.tgz", - "integrity": "sha512-jPueVhumq7idETHkb203WDD4fMA3yV9emQ5vLwop58lu8bTclMghBWcYAavlDqIEMaisADinV1TooIFCfqOsYQ==" - }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true - }, - "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "requires": { - "mime-db": "1.51.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mini-css-extract-plugin": { - "version": "2.7.6", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", - "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", - "dev": true, - "requires": { - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } - } - } - }, - "mini-svg-data-uri": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "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": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "optional": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } - }, - "node-gyp-build": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", - "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", - "optional": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-notifier": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", - "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", - "dev": true, - "optional": true, - "requires": { - "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" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize.css": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", - "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" - }, - "npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse-srcset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", - "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==" - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pirates": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", - "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "8.4.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", - "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", - "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "devOptional": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "react-popper": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-1.3.11.tgz", - "integrity": "sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg==", - "requires": { - "@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": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", - "requires": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@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" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "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" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "regexpu-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", - "dev": true, - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "regjsparser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" - }, - "resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", - "dev": true, - "requires": { - "is-core-module": "^2.8.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "robust-predicates": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", - "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "devOptional": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "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" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "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" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "sanitize-html": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.7.3.tgz", - "integrity": "sha512-jMaHG29ak4miiJ8wgqA1849iInqORgNv7SLfSw9LtfOhEUQ1C0YHKH73R+hgyufBW9ZFeJrb057k9hjlfBCVlw==", - "requires": { - "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" - }, - "dependencies": { - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - } - } - }, - "sass": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.48.0.tgz", - "integrity": "sha512-hQi5g4DcfjcipotoHZ80l7GNJHGqQS5LwMBjVYB/TaT0vcSSpbgM8Ad7cgfsB2M0MinbkEQQPO9+sjjSiwxqmw==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "simple-html-tokenizer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.1.1.tgz", - "integrity": "sha1-BcLuxXn//+FFoDCsJs/qYbmA+r4=", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "source-map-loader": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.1.3.tgz", - "integrity": "sha512-6YHeF+XzDOrT/ycFJNI53cgEsp/tHTMl37hi7uVyqFAlTXW109JazaQCkbc+jjoL2637qkH1amLi+JzrIpt5lA==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.2", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "source-map": "^0.6.1", - "whatwg-mimetype": "^2.3.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "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": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "devOptional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.padend": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", - "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "style-loader": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", - "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "svg-inline-loader": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/svg-inline-loader/-/svg-inline-loader-0.8.2.tgz", - "integrity": "sha512-kbrcEh5n5JkypaSC152eGfGcnT4lkR0eSfvefaUJkLqgGjRQJyKDvvEE/CCv5aTSdfXuc+N98w16iAojhShI3g==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "object-assign": "^4.0.1", - "simple-html-tokenizer": "^0.1.1" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "topojson-client": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", - "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", - "requires": { - "commander": "2" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } - } - }, - "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "ts-jest": { - "version": "26.5.6", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", - "integrity": "sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "ts-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.3.0.tgz", - "integrity": "sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^2.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "typed-styles": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz", - "integrity": "sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.6.tgz", - "integrity": "sha512-pxnwLxeb/Z5SP80JDRzVjh58KsM6jZHRAOtTpS7sXLS4ogXNKC9ANxHHZqLLeVHZN35jCtI4JdmLLbLiC1kBow==", - "dev": true - }, - "typestyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/typestyle/-/typestyle-2.3.0.tgz", - "integrity": "sha512-JZd1R5cWxRvwXzPAKVFsbxO/QjDkFeQlqGF6ZxR7IREEXyFQrf1f1mmlx5EynOTItLLx4aBbcVpCH+CDsl5ZTw==", - "requires": { - "csstype": "3.0.10", - "free-style": "3.1.0" - }, - "dependencies": { - "csstype": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", - "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==" - } - } - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "underscore": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", - "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==" - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "devOptional": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate.io-array": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", - "integrity": "sha1-W1osr9j4uFq7L4hroVPy2Tond00=" - }, - "validate.io-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", - "integrity": "sha1-NDoZgC7TsZaCaceA5VjpNBHAutc=" - }, - "validate.io-integer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", - "integrity": "sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg=", - "requires": { - "validate.io-number": "^1.0.3" - } - }, - "validate.io-integer-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", - "integrity": "sha1-LKveAzKTpry+Bj/q/pHq9GsToIk=", - "requires": { - "validate.io-array": "^1.0.3", - "validate.io-integer": "^1.0.4" - } - }, - "validate.io-number": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", - "integrity": "sha1-9j/+2iSL8opnqNSODjtGGhZluvg=" - }, - "vega": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/vega/-/vega-5.25.0.tgz", - "integrity": "sha512-lr+uj0mhYlSN3JOKbMNp1RzZBenWp9DxJ7kR3lha58AFNCzzds7pmFa7yXPbtbaGhB7Buh/t6n+Bzk3Y0VnF5g==", - "requires": { - "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" - } - }, - "vega-canvas": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/vega-canvas/-/vega-canvas-1.2.7.tgz", - "integrity": "sha512-OkJ9CACVcN9R5Pi9uF6MZBF06pO6qFpDYHWSKBJsdHP5o724KrsgR6UvbnXFH82FdsiTOff/HqjuaG8C7FL+9Q==" - }, - "vega-crossfilter": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/vega-crossfilter/-/vega-crossfilter-4.1.1.tgz", - "integrity": "sha512-yesvlMcwRwxrtAd9IYjuxWJJuAMI0sl7JvAFfYtuDkkGDtqfLXUcCzHIATqW6igVIE7tWwGxnbfvQLhLNgK44Q==", - "requires": { - "d3-array": "^3.2.2", - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" - } - }, - "vega-dataflow": { - "version": "5.7.5", - "resolved": "https://registry.npmjs.org/vega-dataflow/-/vega-dataflow-5.7.5.tgz", - "integrity": "sha512-EdsIl6gouH67+8B0f22Owr2tKDiMPNNR8lEvJDcxmFw02nXd8juimclpLvjPQriqn6ta+3Dn5txqfD117H04YA==", - "requires": { - "vega-format": "^1.1.1", - "vega-loader": "^4.5.1", - "vega-util": "^1.17.1" - } - }, - "vega-encode": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/vega-encode/-/vega-encode-4.9.2.tgz", - "integrity": "sha512-c3J0LYkgYeXQxwnYkEzL15cCFBYPRaYUon8O2SZ6O4PhH4dfFTXBzSyT8+gh8AhBd572l2yGDfxpEYA6pOqdjg==", - "requires": { - "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": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/vega-event-selector/-/vega-event-selector-3.0.1.tgz", - "integrity": "sha512-K5zd7s5tjr1LiOOkjGpcVls8GsH/f2CWCrWcpKy74gTCp+llCdwz0Enqo013ZlGaRNjfgD/o1caJRt3GSaec4A==" - }, - "vega-expression": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/vega-expression/-/vega-expression-5.1.0.tgz", - "integrity": "sha512-u8Rzja/cn2PEUkhQN3zUj3REwNewTA92ExrcASNKUJPCciMkHJEjESwFYuI6DWMCq4hQElQ92iosOAtwzsSTqA==", - "requires": { - "@types/estree": "^1.0.0", - "vega-util": "^1.17.1" - }, - "dependencies": { - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - } - } - }, - "vega-force": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vega-force/-/vega-force-4.2.0.tgz", - "integrity": "sha512-aE2TlP264HXM1r3fl58AvZdKUWBNOGkIvn4EWyqeJdgO2vz46zSU7x7TzPG4ZLuo44cDRU5Ng3I1eQk23Asz6A==", - "requires": { - "d3-force": "^3.0.0", - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" - } - }, - "vega-format": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vega-format/-/vega-format-1.1.1.tgz", - "integrity": "sha512-Rll7YgpYbsgaAa54AmtEWrxaJqgOh5fXlvM2wewO4trb9vwM53KBv4Q/uBWCLK3LLGeBXIF6gjDt2LFuJAUtkQ==", - "requires": { - "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": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/vega-functions/-/vega-functions-5.13.2.tgz", - "integrity": "sha512-YE1Xl3Qi28kw3vdXVYgKFMo20ttd3+SdKth1jUNtBDGGdrOpvPxxFhZkVqX+7FhJ5/1UkDoAYs/cZY0nRKiYgA==", - "requires": { - "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": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/vega-geo/-/vega-geo-4.4.1.tgz", - "integrity": "sha512-s4WeZAL5M3ZUV27/eqSD3v0FyJz3PlP31XNSLFy4AJXHxHUeXT3qLiDHoVQnW5Om+uBCPDtTT1ROx1smGIf2aA==", - "requires": { - "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": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/vega-hierarchy/-/vega-hierarchy-4.1.1.tgz", - "integrity": "sha512-h5mbrDtPKHBBQ9TYbvEb/bCqmGTlUX97+4CENkyH21tJs7naza319B15KRK0NWOHuhbGhFmF8T0696tg+2c8XQ==", - "requires": { - "d3-hierarchy": "^3.1.2", - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" - } - }, - "vega-label": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/vega-label/-/vega-label-1.2.1.tgz", - "integrity": "sha512-n/ackJ5lc0Xs9PInCaGumYn2awomPjJ87EMVT47xNgk2bHmJoZV1Ve/1PUM6Eh/KauY211wPMrNp/9Im+7Ripg==", - "requires": { - "vega-canvas": "^1.2.6", - "vega-dataflow": "^5.7.3", - "vega-scenegraph": "^4.9.2", - "vega-util": "^1.15.2" - } - }, - "vega-lite": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/vega-lite/-/vega-lite-5.9.0.tgz", - "integrity": "sha512-VA3XDlF6nd/t46KDMfq8eNKOJKy9gpJuM+6CIl3jbWqS97jWXRWXp8DpUyDmbV+iq8n4hqNTaoPqDP/e03kifw==", - "requires": { - "@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.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "requires": { - "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" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - } - } - }, - "vega-loader": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vega-loader/-/vega-loader-4.5.1.tgz", - "integrity": "sha512-qy5x32SaT0YkEujQM2yKqvLGV9XWQ2aEDSugBFTdYzu/1u4bxdUSRDREOlrJ9Km3RWIOgFiCkobPmFxo47SKuA==", - "requires": { - "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": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/vega-parser/-/vega-parser-6.2.0.tgz", - "integrity": "sha512-as+QnX8Qxe9q51L1C2sVBd+YYYctP848+zEvkBT2jlI2g30aZ6Uv7sKsq7QTL6DUbhXQKR0XQtzlanckSFdaOQ==", - "requires": { - "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": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vega-projection/-/vega-projection-1.6.0.tgz", - "integrity": "sha512-LGUaO/kpOEYuTlul+x+lBzyuL9qmMwP1yShdUWYLW+zXoeyGbs5OZW+NbPPwLYqJr5lpXDr/vGztFuA/6g2xvQ==", - "requires": { - "d3-geo": "^3.1.0", - "d3-geo-projection": "^4.0.0", - "vega-scale": "^7.3.0" - } - }, - "vega-regression": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vega-regression/-/vega-regression-1.2.0.tgz", - "integrity": "sha512-6TZoPlhV/280VbxACjRKqlE0Nv48z5g4CSNf1FmGGTWS1rQtElPTranSoVW4d7ET5eVQ6f9QLxNAiALptvEq+g==", - "requires": { - "d3-array": "^3.2.2", - "vega-dataflow": "^5.7.3", - "vega-statistics": "^1.9.0", - "vega-util": "^1.15.2" - } - }, - "vega-runtime": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/vega-runtime/-/vega-runtime-6.1.4.tgz", - "integrity": "sha512-0dDYXyFLQcxPQ2OQU0WuBVYLRZnm+/CwVu6i6N4idS7R9VXIX5581EkCh3pZ20pQ/+oaA7oJ0pR9rJgJ6rukRQ==", - "requires": { - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" - } - }, - "vega-scale": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/vega-scale/-/vega-scale-7.3.0.tgz", - "integrity": "sha512-pMOAI2h+e1z7lsqKG+gMfR6NKN2sTcyjZbdJwntooW0uFHwjLGjMSY7kSd3nSEquF0HQ8qF7zR6gs1eRwlGimw==", - "requires": { - "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": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/vega-scenegraph/-/vega-scenegraph-4.10.2.tgz", - "integrity": "sha512-R8m6voDZO5+etwNMcXf45afVM3XAtokMqxuDyddRl9l1YqSJfS+3u8hpolJ50c2q6ZN20BQiJwKT1o0bB7vKkA==", - "requires": { - "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": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/vega-selections/-/vega-selections-5.4.1.tgz", - "integrity": "sha512-EtYc4DvA+wXqBg9tq+kDomSoVUPCmQfS7hUxy2qskXEed79YTimt3Hcl1e1fW226I4AVDBEqTTKebmKMzbSgAA==", - "requires": { - "d3-array": "3.2.2", - "vega-expression": "^5.0.1", - "vega-util": "^1.17.1" - } - }, - "vega-statistics": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/vega-statistics/-/vega-statistics-1.9.0.tgz", - "integrity": "sha512-GAqS7mkatpXcMCQKWtFu1eMUKLUymjInU0O8kXshWaQrVWjPIO2lllZ1VNhdgE0qGj4oOIRRS11kzuijLshGXQ==", - "requires": { - "d3-array": "^3.2.2" - } - }, - "vega-themes": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/vega-themes/-/vega-themes-2.13.0.tgz", - "integrity": "sha512-SVr/YDqGhkVDO2bRS62TeGyr1dVuXaNLJNCu42b1tbcnnmX2m9cyaq8G6gcputPeibArvHT1MsTF7MUzboOIWg==", - "requires": {} - }, - "vega-time": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vega-time/-/vega-time-2.1.1.tgz", - "integrity": "sha512-z1qbgyX0Af2kQSGFbApwBbX2meenGvsoX8Nga8uyWN8VIbiySo/xqizz1KrP6NbB6R+x5egKmkjdnyNThPeEWA==", - "requires": { - "d3-array": "^3.2.2", - "d3-time": "^3.1.0", - "vega-util": "^1.17.1" - } - }, - "vega-transforms": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/vega-transforms/-/vega-transforms-4.10.2.tgz", - "integrity": "sha512-sJELfEuYQ238PRG+GOqQch8D69RYnJevYSGLsRGQD2LxNz3j+GlUX6Pid+gUEH5HJy22Q5L0vsTl2ZNhIr4teQ==", - "requires": { - "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": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/vega-typings/-/vega-typings-0.24.0.tgz", - "integrity": "sha512-FFYf67Dn5VNPbYoYHgO2T9Z1I81qcwrXjwKEe0rlJk0MX7CNWPJr9Y3VZEWfxyEx7J9anAm69hGIv0Ehb2G85A==", - "requires": { - "@types/geojson": "^7946.0.10", - "vega-event-selector": "^3.0.1", - "vega-expression": "^5.0.1", - "vega-util": "^1.17.1" - } - }, - "vega-util": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.17.2.tgz", - "integrity": "sha512-omNmGiZBdjm/jnHjZlywyYqafscDdHaELHx1q96n5UOz/FlO9JO99P4B3jZg391EFG8dqhWjQilSf2JH6F1mIw==" - }, - "vega-view": { - "version": "5.11.1", - "resolved": "https://registry.npmjs.org/vega-view/-/vega-view-5.11.1.tgz", - "integrity": "sha512-RoWxuoEMI7xVQJhPqNeLEHCezudsf3QkVMhH5tCovBqwBADQGqq9iWyax3ZzdyX1+P3eBgm7cnLvpqtN2hU8kA==", - "requires": { - "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-view-transforms": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/vega-view-transforms/-/vega-view-transforms-4.5.9.tgz", - "integrity": "sha512-NxEq4ZD4QwWGRrl2yDLnBRXM9FgCI+vvYb3ZC2+nVDtkUxOlEIKZsMMw31op5GZpfClWLbjCT3mVvzO2xaTF+g==", - "requires": { - "vega-dataflow": "^5.7.5", - "vega-scenegraph": "^4.10.2", - "vega-util": "^1.17.1" - } - }, - "vega-voronoi": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vega-voronoi/-/vega-voronoi-4.2.1.tgz", - "integrity": "sha512-zzi+fxU/SBad4irdLLsG3yhZgXWZezraGYVQfZFWe8kl7W/EHUk+Eqk/eetn4bDeJ6ltQskX+UXH3OP5Vh0Q0Q==", - "requires": { - "d3-delaunay": "^6.0.2", - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" - } - }, - "vega-wordcloud": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/vega-wordcloud/-/vega-wordcloud-4.1.4.tgz", - "integrity": "sha512-oeZLlnjiusLAU5vhk0IIdT5QEiJE0x6cYoGNq1th+EbwgQp153t4r026fcib9oq15glHFOzf81a8hHXHSJm1Jw==", - "requires": { - "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" - } - }, - "vegafusion-embed": { - "version": "file:../../javascript/vegafusion-embed", - "requires": { - "@babel/core": "^7.5.0", - "@babel/preset-env": "^7.5.0", - "@types/node": "17.0.21", - "@typescript-eslint/eslint-plugin": "^3.6.0", - "@typescript-eslint/parser": "^3.6.0", - "acorn": "^7.2.0", - "css-loader": "6.5.1", - "eslint": "^7.4.0", - "eslint-config-prettier": "^6.11.0", - "eslint-plugin-prettier": "^3.1.4", - "fs-extra": "^7.0.0", - "grpc-web": "^1.3.1", - "identity-obj-proxy": "^3.0.0", - "mkdirp": "^0.5.1", - "npm-run-all": "^4.1.3", - "prettier": "^2.0.5", - "rimraf": "^2.6.2", - "sass": "^1.45.2", - "source-map-loader": "^1.1.3", - "style-loader": "^1.0.0", - "svg-inline-loader": "^0.8.2", - "ts-loader": "^8.0.0", - "typescript": "~4.1.3", - "vega-lite": "^4.17.0", - "vegafusion-wasm": "../../vegafusion-wasm/pkg" - } - }, - "vegafusion-wasm": { - "version": "file:../../vegafusion-wasm/pkg", - "requires": { - "bootstrap": "^5.1.3", - "grpc-web": "^1.3.1", - "lodash": "^4.17.21", - "vega": "^5.22.1", - "vega-tooltip": "^0.27.0", - "vega-util": "^1.17.0" - } - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "webpack": { - "version": "5.76.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.2.tgz", - "integrity": "sha512-Th05ggRm23rVzEOlX8y67NkYCHa9nTNcwHPBhdg+lKG+mtiW7XgggjAeeLnADAe7mLjJ6LUNfgHAuRRh+Z6J7w==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "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.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "requires": {} - }, - "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true - } - } - }, - "webpack-cli": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", - "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.0", - "@webpack-cli/info": "^1.4.0", - "@webpack-cli/serve": "^1.6.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "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" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-require-from": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/webpack-require-from/-/webpack-require-from-1.8.6.tgz", - "integrity": "sha512-QmRsOkOYPKeNXp4uVc7qxnPrFQPrP4bhOc/gl4QenTFNgXdEbF1U8VC+jM/Sljb0VzJLNgyNiHlVkuHjcmDtBQ==", - "dev": true, - "requires": {} - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "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": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "worker-loader": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-3.0.8.tgz", - "integrity": "sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", - "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", - "requires": {} - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "optional": true - }, - "y-codemirror": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/y-codemirror/-/y-codemirror-3.0.1.tgz", - "integrity": "sha512-TsLSoouAZxkxOKbmTj7qdwZNS0lZMVqIdp7/j9EgUUqYj0remZYDGl6VBABrmp9UX1QvX6RoXXqzbNhftgfCbA==", - "requires": { - "lib0": "^0.2.42" - } - }, - "y-leveldb": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/y-leveldb/-/y-leveldb-0.1.1.tgz", - "integrity": "sha512-L8Q0MQmxCQ0qWIOuPzLbWn95TNhrCI7M6LaHnilU4I2IX08e4Dmfg5Tgy4JZ3tnl2aiuZyDOJplHl/msIB/IsA==", - "optional": true, - "requires": { - "level": "^6.0.1", - "lib0": "^0.2.31" - } - }, - "y-protocols": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.5.tgz", - "integrity": "sha512-Wil92b7cGk712lRHDqS4T90IczF6RkcvCwAD0A2OPg+adKmOe+nOiT/N2hvpQIWS3zfjmtL4CPaH5sIW1Hkm/A==", - "requires": { - "lib0": "^0.2.42" - } - }, - "y-websocket": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/y-websocket/-/y-websocket-1.4.5.tgz", - "integrity": "sha512-5d9LTSy0GQKqSd/FKRo5DMBlsiTlCipbKcIgPLlno+5xHtfT8bm3uQdcbY9JvLfckojilLZWauXJu0vzDZX05w==", - "requires": { - "lib0": "^0.2.52", - "lodash.debounce": "^4.0.8", - "ws": "^6.2.1", - "y-leveldb": "^0.1.0", - "y-protocols": "^1.0.5" - }, - "dependencies": { - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "optional": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yjs": { - "version": "13.5.35", - "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.5.35.tgz", - "integrity": "sha512-vsqGmvZLiVwFcI4RlIZJeX59lGXDLXw37QrrbKVWXQJGbhMKgwAhZI4ZUVANUO54waoE1jta/NWb6gLSqNZ82Q==", - "requires": { - "lib0": "^0.2.49" - } - } - } -} \ No newline at end of file diff --git a/python/vegafusion-jupyter/package.json b/python/vegafusion-jupyter/package.json deleted file mode 100644 index a16c81288..000000000 --- a/python/vegafusion-jupyter/package.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "vegafusion-jupyter", - "version": "1.6.9", - "description": "Altair Jupyter Widget library that relies on VegaFusion for serverside calculations", - "keywords": [ - "jupyter", - "jupyterlab", - "jupyterlab-extension", - "widgets" - ], - "files": [ - "lib/**/*.js", - "dist/*.js", - "dist/*.wasm", - "css/*.css", - "css/*.scss", - "images/*.svg" - ], - "homepage": "https://github.com/hex-inc/vegafusion", - "bugs": { - "url": "https://github.com/hex-inc/vegafusion/issues" - }, - "license": "BSD-3-Clause", - "author": { - "name": "Jon Mease", - "email": "jon@vegafusion.io" - }, - "main": "lib/index.js", - "types": "./lib/index.d.ts", - "repository": { - "type": "git", - "url": "https://github.com/jonmmease/vegafusion" - }, - "scripts": { - "build:dev": "npm run build:lib && npm run build:nbextension && npm run build:labextension:dev && pip install --force-reinstall --no-deps .", - "build:prod": "npm run clean && npm run build:lib && npm run build:nbextension && npm run build:labextension", - "build:labextension": "jupyter-labextension build .", - "build:labextension:dev": "jupyter-labextension build --development True .", - "build:lib": "tsc && sass scss:css", - "build:nbextension": "webpack", - "clean": "npm run clean:lib && npm run clean:dist && npm run clean:nbextension && npm run clean:labextension", - "clean:dist": "rimraf dist", - "clean:lib": "rimraf lib", - "clean:labextension": "rimraf vegafusion_jupyter/labextension", - "clean:nbextension": "rimraf vegafusion_jupyter/nbextension/* && cp src/nbextension/extension.js vegafusion_jupyter/nbextension/", - "lint": "eslint . --ext .ts,.tsx --fix", - "lint:check": "eslint . --ext .ts,.tsx", - "prepack": "npm run build:prod", - "test": "jest", - "watch": "npm-run-all -p watch:*", - "watch:lib": "tsc -w", - "watch:nbextension": "webpack --watch --mode=development", - "watch:labextension": "jupyter-labextension watch ." - }, - "dependencies": { - "@jupyter-widgets/base": "^4 || ^5 || ^6", - "@jupyterlab/notebook": "^3 || ^4", - "marked": "^4.0.10", - "vega": "^5.25.0", - "vega-lite": "^5.8.0", - "vega-themes": "^2.13.0", - "vegafusion-embed": "../../javascript/vegafusion-embed", - "vegafusion-wasm": "../../vegafusion-wasm/pkg" - }, - "devDependencies": { - "@babel/core": "^7.5.0", - "@babel/preset-env": "^7.5.0", - "@jupyterlab/builder": "^4.0.5", - "@phosphor/application": "^1.6.0", - "@phosphor/widgets": "^1.6.0", - "@types/jest": "^26.0.0", - "@types/webpack-env": "^1.16.3", - "@typescript-eslint/eslint-plugin": "^3.6.0", - "@typescript-eslint/parser": "^3.6.0", - "acorn": "^7.2.0", - "css-loader": "6.5.1", - "eslint": "^7.4.0", - "eslint-config-prettier": "^6.11.0", - "eslint-plugin-prettier": "^3.1.4", - "fs-extra": "^7.0.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^26.0.0", - "mkdirp": "^0.5.1", - "npm-run-all": "^4.1.3", - "prettier": "^2.0.5", - "rimraf": "^2.6.2", - "sass": "^1.45.2", - "source-map-loader": "^1.1.3", - "style-loader": "^1.0.0", - "svg-inline-loader": "^0.8.2", - "ts-jest": "^26.0.0", - "ts-loader": "^8.0.0", - "typescript": "~4.1.3", - "webpack": "^5.65.0", - "webpack-cli": "^4.9.1", - "webpack-require-from": "^1.8.6" - }, - "jupyterlab": { - "extension": "lib/plugin", - "outputDir": "vegafusion_jupyter/labextension/", - "webpackConfig": "webpack.config.experimental.js", - "sharedPackages": { - "@jupyter-widgets/base": { - "bundled": false, - "singleton": true - } - } - } -} \ No newline at end of file diff --git a/python/vegafusion-jupyter/pyproject.toml b/python/vegafusion-jupyter/pyproject.toml deleted file mode 100644 index d288f0b28..000000000 --- a/python/vegafusion-jupyter/pyproject.toml +++ /dev/null @@ -1,3 +0,0 @@ -[build-system] -requires = ["jupyter_packaging==0.12.3", "jupyterlab==4.*", "setuptools>=40.8.0", "wheel"] -build-backend = "setuptools.build_meta" diff --git a/python/vegafusion-jupyter/pytest.ini b/python/vegafusion-jupyter/pytest.ini deleted file mode 100644 index 5ee647716..000000000 --- a/python/vegafusion-jupyter/pytest.ini +++ /dev/null @@ -1,2 +0,0 @@ -[pytest] -testpaths = tests diff --git a/python/vegafusion-jupyter/readthedocs.yml b/python/vegafusion-jupyter/readthedocs.yml deleted file mode 100644 index c972d9ccf..000000000 --- a/python/vegafusion-jupyter/readthedocs.yml +++ /dev/null @@ -1,9 +0,0 @@ -type: sphinx -python: - version: 3.5 - pip_install: true - extra_requirements: - - examples - - docs -conda: - file: docs/environment.yml diff --git a/python/vegafusion-jupyter/scss/vegafusion-embed.scss b/python/vegafusion-jupyter/scss/vegafusion-embed.scss deleted file mode 100644 index 289dc7326..000000000 --- a/python/vegafusion-jupyter/scss/vegafusion-embed.scss +++ /dev/null @@ -1,162 +0,0 @@ -// Taken from vega-embed: https://github.com/vega/vega-embed which is released -// under the BSD-3-Clause License: https://github.com/vega/vega-embed/blob/next/LICENSE -.vegafusion-embed { - min-height: 40px; // Ensure there's enough room for the menu button before plot is ready - position: relative; - display: inline-block; - box-sizing: border-box; - overflow: visible; - - &.has-actions { - padding-right: 38px; - } - - details:not([open]) > :not(summary) { - display: none !important; - } - - summary { - list-style: none; - position: absolute; - top: 0; - right: 0; - padding: 6px; - z-index: 1000; - background: white; - box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1); - color: #1b1e23; - border: 1px solid #aaa; - border-radius: 999px; - opacity: 0.2; - transition: opacity 0.4s ease-in; - outline: none; - cursor: pointer; - line-height: 0px; // For Safari - - &::-webkit-details-marker { - display: none; - } - - &:active { - box-shadow: #aaa 0px 0px 0px 1px inset; - } - - svg { - width: 16px; - height: 16px; - } - } - - details[open] summary { - opacity: 0.5; - } - - &:hover summary, - &:focus summary { - opacity: 0.7 !important; - transition: opacity 0.2s ease; - } - - .vegafusion-actions { - position: absolute; - z-index: 1001; - top: 35px; - right: -9px; - display: flex; - flex-direction: column; - padding-bottom: 8px; - padding-top: 8px; - border-radius: 4px; - box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2); - border: 1px solid #d9d9d9; - background: white; - animation-duration: 0.15s; - animation-name: scale-in; - animation-timing-function: cubic-bezier(0.2, 0, 0.13, 1.5); - text-align: left; // only to make sure this is not a a different value - - hr { - width: auto; - height: 1px; - border: none; - background-color: #434a56; - margin: 4px 10px 4px 10px; - opacity: 50%; - } - - .source-msg { - padding: 4px 16px; - font-family: sans-serif; - font-size: 10px; - font-weight: 400; - max-width: 180px; - color: #CD5C5C; - } - - a { - padding: 4px 16px; - font-family: sans-serif; - font-size: 12px; - font-weight: 600; - white-space: nowrap; - color: #434a56; - text-decoration: none; - - &:hover { - background-color: #f7f7f9; - color: black; - } - } - - &::before, - &::after { - content: ""; - display: inline-block; - position: absolute; - pointer-events: none; - } - - &::before { - left: auto; - right: 14px; - top: -16px; - border: 8px solid #0000; - border-bottom-color: #d9d9d9; - } - - &::after { - left: auto; - right: 15px; - top: -14px; - border: 7px solid #0000; - border-bottom-color: #fff; - } - } - - .chart-wrapper { - &.fit-x { - width: 100%; - } - &.fit-y { - height: 100%; - } - } -} - -.vegafusion-embed-wrapper { - max-width: 100%; - overflow: auto; - padding-right: 14px; -} - -@keyframes scale-in { - from { - opacity: 0; - transform: scale(0.6); - } - - to { - opacity: 1; - transform: scale(1); - } -} diff --git a/python/vegafusion-jupyter/scss/widget.scss b/python/vegafusion-jupyter/scss/widget.scss deleted file mode 100644 index d9fc50489..000000000 --- a/python/vegafusion-jupyter/scss/widget.scss +++ /dev/null @@ -1,7 +0,0 @@ -.vegafusion-loading { - color: red; - background: aqua; - .inner { - width: 100px; - } -} diff --git a/python/vegafusion-jupyter/setup.cfg b/python/vegafusion-jupyter/setup.cfg deleted file mode 100644 index 735f4a2a6..000000000 --- a/python/vegafusion-jupyter/setup.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[bdist_wheel] -universal = 0 - -[metadata] -name = vegafusion-jupyter -description = Altair Jupyter Widget library that relies on VegaFusion for serverside calculations -version = 1.6.9 -author = Jon Mease -author_email = jonmmease@gmail.com -url = https://vegafusion.io -long_description = file: README.md -long_description_content_type = text/markdown -license = BSD-3-Clause -license_files = [ LICENSE.txt ] - diff --git a/python/vegafusion-jupyter/setup.py b/python/vegafusion-jupyter/setup.py deleted file mode 100644 index 6c25ae782..000000000 --- a/python/vegafusion-jupyter/setup.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env python -# coding: utf-8 - -# Copyright (c) Jupyter Development Team. -# Distributed under the terms of the Modified BSD License. - -from __future__ import print_function -from glob import glob -import os -from os.path import join as pjoin -from setuptools import setup, find_packages - - -from jupyter_packaging import ( - create_cmdclass, - install_npm, - ensure_targets, - combine_commands, - get_version, - skip_if_exists -) - -HERE = os.path.dirname(os.path.abspath(__file__)) - -# The name of the project -name = 'vegafusion-jupyter' -module = name.replace('-', '_') - -# Get the version -version = get_version(pjoin(module, '_version.py')) - -# Representative files that should exist after a successful build -jstargets = [ - pjoin(HERE, module, 'nbextension', 'index.js'), - pjoin(HERE, module, 'labextension', 'package.json'), -] - -package_data_spec = { - name: [ - 'nbextension/**js*', - 'labextension/**' - ] -} - - -data_files_spec = [ - ('share/jupyter/nbextensions/vegafusion-jupyter', 'vegafusion_jupyter/nbextension', '**'), - ('share/jupyter/labextensions/vegafusion-jupyter', 'vegafusion_jupyter/labextension', '**'), - ('share/jupyter/labextensions/vegafusion-jupyter', '.', 'install.json'), - ('etc/jupyter/nbconfig/notebook.d', '.', 'vegafusion-jupyter.json'), -] - - -cmdclass = create_cmdclass('jsdeps', package_data_spec=package_data_spec, - data_files_spec=data_files_spec) - -npm_install = combine_commands( - install_npm(HERE, build_cmd='build:prod'), - ensure_targets(jstargets), -) - -cmdclass['jsdeps'] = skip_if_exists(jstargets, npm_install) - - -setup_args = dict( - name = name, - description = 'Altair Jupyter Widget library that relies on VegaFusion for serverside calculations', - version = version, - scripts = glob(pjoin('scripts', '*')), - cmdclass = cmdclass, - packages = find_packages(".", exclude=["tests"]), - author = 'Jon Mease', - author_email = 'jonmmease@gmail.com', - url = 'https://vegafusion.io', - license = 'BSD-3-Clause', - platforms = "Linux, Mac OS X, Windows", - keywords = ['Jupyter', 'Widgets', 'IPython'], - classifiers = [ - 'Intended Audience :: Developers', - 'Intended Audience :: Science/Research', - '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', - 'Framework :: Jupyter', - ], - include_package_data = True, - python_requires=">=3.7", - install_requires = [ - 'ipywidgets>=7.0.0,<9', - 'altair>=4.2.0', - f'vegafusion=={version}', # [vegafusion VERSION] - ], - extras_require={ - 'embed': [ - f"vegafusion-python-embed=={version}", - "vl-convert-python>=0.7.0" - ], - }, - entry_points = { - }, -) - -if __name__ == '__main__': - setup(**setup_args) diff --git a/python/vegafusion-jupyter/src/extension.ts b/python/vegafusion-jupyter/src/extension.ts deleted file mode 100644 index c54c4035b..000000000 --- a/python/vegafusion-jupyter/src/extension.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Entry point for the notebook bundle containing custom model definitions. -// -// Setup notebook base URL -// -// Some static assets may be required by the custom widget javascript. The base -// url for the notebook is not known at build time and is therefore computed -// dynamically. -// eslint-disable-next-line @typescript-eslint/no-non-null-assertion -(window as any).__webpack_public_path__ = - document.querySelector('body')!.getAttribute('data-base-url') + - 'nbextensions/vegafusion-jupyter/'; - -export * from './index'; diff --git a/python/vegafusion-jupyter/src/index.ts b/python/vegafusion-jupyter/src/index.ts deleted file mode 100644 index 41c7f0105..000000000 --- a/python/vegafusion-jupyter/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './version'; -export * from './widget'; diff --git a/python/vegafusion-jupyter/src/nbextension/extension.js b/python/vegafusion-jupyter/src/nbextension/extension.js deleted file mode 100644 index 4fa79d598..000000000 --- a/python/vegafusion-jupyter/src/nbextension/extension.js +++ /dev/null @@ -1,17 +0,0 @@ -// Entry point for the notebook bundle containing custom model definitions. -// -define(function() { - "use strict"; - - window['requirejs'].config({ - map: { - '*': { - 'vegafusion-jupyter': 'nbextensions/vegafusion-jupyter/index', - }, - } - }); - // Export the required load_ipython_extension function - return { - load_ipython_extension : function() {} - }; -}); diff --git a/python/vegafusion-jupyter/src/plugin.ts b/python/vegafusion-jupyter/src/plugin.ts deleted file mode 100644 index 7017a725d..000000000 --- a/python/vegafusion-jupyter/src/plugin.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { Application, IPlugin } from '@phosphor/application'; - -import { Widget } from '@phosphor/widgets'; - -import { IJupyterWidgetRegistry } from '@jupyter-widgets/base'; - -import * as widgetExports from './widget'; - -import { MODULE_NAME, MODULE_VERSION } from './version'; - -const EXTENSION_ID = 'vegafusion-jupyter:plugin'; - -/** - * The example plugin. - */ -const examplePlugin: IPlugin, void> = { - id: EXTENSION_ID, - requires: [IJupyterWidgetRegistry], - activate: activateWidgetExtension, - autoStart: true, -} as unknown as IPlugin, void>; -// the "as unknown as ..." typecast above is solely to support JupyterLab 1 -// and 2 in the same codebase and should be removed when we migrate to Lumino. - -export default examplePlugin; - -/** - * Activate the widget extension. - */ -function activateWidgetExtension( - app: Application, - registry: IJupyterWidgetRegistry -): void { - registry.registerWidget({ - name: MODULE_NAME, - version: MODULE_VERSION, - exports: widgetExports, - }); -} diff --git a/python/vegafusion-jupyter/src/version.ts b/python/vegafusion-jupyter/src/version.ts deleted file mode 100644 index 1e34941e7..000000000 --- a/python/vegafusion-jupyter/src/version.ts +++ /dev/null @@ -1,17 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -// eslint-disable-next-line @typescript-eslint/no-var-requires -const data = require('../package.json'); - -/** - * The _model_module_version/_view_module_version this package implements. - * - * The html widget manager assumes that this is the same as the npm package - * version number. - */ -export const MODULE_VERSION = data.version; - -/* - * The current package name. - */ -export const MODULE_NAME = data.name; diff --git a/python/vegafusion-jupyter/src/widget.ts b/python/vegafusion-jupyter/src/widget.ts deleted file mode 100644 index 84aaeaf63..000000000 --- a/python/vegafusion-jupyter/src/widget.ts +++ /dev/null @@ -1,156 +0,0 @@ -// ----------------------------------------------------------- -// Dropdown menu implementation is based heavily on vega-embed -// (https://github.com/vega/vega-embed) which is released -// under the BSD-3-Clause License: https://github.com/vega/vega-embed/blob/next/LICENSE - -import {DOMWidgetModel, DOMWidgetView, ISerializers,} from '@jupyter-widgets/base'; -import * as vegaThemes from 'vega-themes'; -import {mergeConfig} from 'vega'; -import {TopLevelSpec, Config} from 'vega-lite'; -import {MODULE_NAME, MODULE_VERSION} from './version'; - -export class VegaFusionModel extends DOMWidgetModel { - defaults() { - return { - ...super.defaults(), - _model_name: VegaFusionModel.model_name, - _model_module: VegaFusionModel.model_module, - _model_module_version: VegaFusionModel.model_module_version, - _view_name: VegaFusionModel.view_name, - _view_module: VegaFusionModel.view_module, - _view_module_version: VegaFusionModel.view_module_version, - spec: null, - full_vega_spec: null, - client_vega_spec: null, - server_vega_spec: null, - vegafusion_handle: null, - verbose: null, - debounce_wait: 30, - debounce_max_wait: 60, - _request_msg: null, - _response_msg: null, - }; - } - - static serializers: ISerializers = { - ...DOMWidgetModel.serializers, - // Add any extra serializers here - _request_msg: { - serialize: (value: any): DataView | null => { - if (value.buffer) { - return new DataView(value.buffer.slice(0)); - } else { - return null; - } - }, - }, - }; - - static model_name = 'VegaFusionModel'; - static model_module = MODULE_NAME; - static model_module_version = MODULE_VERSION; - static view_name = 'VegaFusionView'; // Set to null if no view - static view_module = MODULE_NAME; // Set to null if no view - static view_module_version = MODULE_VERSION; -} - -export class VegaFusionView extends DOMWidgetView { - vegafusion_handle: import('vegafusion-embed').MsgReceiver; - embedVegaFusion: typeof import('vegafusion-embed').embedVegaFusion; - vegalite_compile: typeof import('vega-lite').compile; - vegaThemes: Record; - - async render() { - const { embedVegaFusion } = await import('vegafusion-embed'); - this.embedVegaFusion = embedVegaFusion; - - const { compile } = await import('vega-lite'); - this.vegalite_compile = compile; - this.vegaThemes = Object.assign({}, vegaThemes) as Record; - - this.value_changed(); - this.model.on('change:spec', this.value_changed, this); - this.model.on('change:verbose', this.value_changed, this); - this.model.on('change:debounce_wait', this.value_changed, this); - this.model.on('change:debounce_max_wait', this.value_changed, this); - this.model.on('change:_response_msg', () => { - const msgBytes: DataView = this.model.get('_response_msg'); - if (msgBytes !== null) { - if (this.model.get('verbose')) { - console.log('VegaFusion(js): Received response'); - console.log(msgBytes.buffer); - } - const bytes = new Uint8Array(msgBytes.buffer); - this.vegafusion_handle.receive(bytes); - } - }); - } - - value_changed() { - const spec = this.model.get('spec'); - if (spec !== null) { - const parsed = JSON.parse(spec) as TopLevelSpec; - - // Apply Vega embed theme - const usermeta = parsed.usermeta ?? {}; - const embedOptions = (usermeta.embedOptions ?? {}) as Record< - string, - string - >; - const usermetaTheme = embedOptions.theme as string | null; - // eslint-disable-next-line eqeqeq - if (usermetaTheme != null) { - const themeConfig = this.vegaThemes[usermetaTheme]; - // eslint-disable-next-line eqeqeq - if (themeConfig != null) { - parsed['config'] = mergeConfig(parsed.config ?? {}, themeConfig); - } - } - - let vega_spec_json; - if ((parsed['$schema'] ?? '').endsWith('schema/vega/v5.json')) { - vega_spec_json = spec; - } else { - // Assume we have a Vega-Lite spec, compile to vega - const vega_spec = this.vegalite_compile(parsed); - vega_spec_json = JSON.stringify(vega_spec.spec, null, 2); - } - - const config = { - verbose: this.model.get('verbose') || false, - debounce_wait: this.model.get('debounce_wait') || 30, - debounce_max_wait: this.model.get('debounce_max_wait'), - }; - - // this.vegafusion_handle = this.embedVegaFusion( - this.vegafusion_handle = this.embedVegaFusion( - this.el, - vega_spec_json, - (request: Uint8Array) => { - if (this.model.get('verbose')) { - console.log('VegaFusion(js): Send request'); - } - - this.model.set('_request_msg', new DataView(request.buffer)); - this.touch(); - this.model.set('_request_msg', {}); - }, - config - ); - - // Update vega spec properties - this.model.set('full_vega_spec', vega_spec_json); - this.model.set( - 'client_vega_spec', - this.vegafusion_handle.client_spec_json() - ); - this.model.set( - 'server_vega_spec', - this.vegafusion_handle.server_spec_json() - ); - this.model.set('comm_plan', this.vegafusion_handle.comm_plan_json()); - - this.touch(); - } - } -} diff --git a/python/vegafusion-jupyter/tests/__init__.py b/python/vegafusion-jupyter/tests/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/python/vegafusion-jupyter/tests/conftest.py b/python/vegafusion-jupyter/tests/conftest.py deleted file mode 100644 index 25a11a14b..000000000 --- a/python/vegafusion-jupyter/tests/conftest.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python -# coding: utf-8 - -import pytest - -from ipykernel.comm import Comm -from ipywidgets import Widget - -class MockComm(Comm): - """A mock Comm object. - - Can be used to inspect calls to Comm's open/send/close methods. - """ - comm_id = 'a-b-c-d' - kernel = 'Truthy' - - def __init__(self, *args, **kwargs): - self.log_open = [] - self.log_send = [] - self.log_close = [] - super(MockComm, self).__init__(*args, **kwargs) - - def open(self, *args, **kwargs): - self.log_open.append((args, kwargs)) - - def send(self, *args, **kwargs): - self.log_send.append((args, kwargs)) - - def close(self, *args, **kwargs): - self.log_close.append((args, kwargs)) - -_widget_attrs = {} -undefined = object() - - -@pytest.fixture -def mock_comm(): - _widget_attrs['_comm_default'] = getattr(Widget, '_comm_default', undefined) - Widget._comm_default = lambda self: MockComm() - _widget_attrs['_ipython_display_'] = Widget._ipython_display_ - def raise_not_implemented(*args, **kwargs): - raise NotImplementedError() - Widget._ipython_display_ = raise_not_implemented - - yield MockComm() - - for attr, value in _widget_attrs.items(): - if value is undefined: - delattr(Widget, attr) - else: - setattr(Widget, attr, value) diff --git a/python/vegafusion-jupyter/tests/test_conext_manager.py b/python/vegafusion-jupyter/tests/test_conext_manager.py deleted file mode 100644 index cb6d50d0d..000000000 --- a/python/vegafusion-jupyter/tests/test_conext_manager.py +++ /dev/null @@ -1,52 +0,0 @@ -import altair as alt -import vegafusion as vf - - -def test_widget_enabler_context_manager(): - alt.data_transformers.enable("json") - alt.renderers.enable("mimetype") - - assert alt.data_transformers.active == "json" - assert alt.renderers.active == "mimetype" - - with vf.enable_widget(): - assert alt.data_transformers.active == "vegafusion-feather" - assert alt.renderers.active == "vegafusion-widget" - - assert alt.data_transformers.active == "json" - assert alt.renderers.active == "mimetype" - - ctx = vf.enable_widget() - assert alt.data_transformers.active == "vegafusion-feather" - assert alt.renderers.active == "vegafusion-widget" - assert repr(ctx) == "vegafusion.enable_widget()" - - -def test_widget_enabler_context_manager_preserves_options(): - # No options - with vf.enable_widget(): - assert alt.data_transformers.active == "vegafusion-feather" - assert alt.data_transformers.options == {"data_dir": "_vegafusion_data"} - - assert alt.renderers.active == "vegafusion-widget" - assert alt.renderers.options == { - 'debounce_max_wait': 60, 'debounce_wait': 30, 'download_source_link': None - } - - # Check that Widget uses default options - widget = vf.jupyter.VegaFusionWidget() - assert widget.debounce_max_wait == 60 - - # Options in the enable call - with vf.enable_widget(debounce_max_wait=200, data_dir="my_data_dir"): - assert alt.data_transformers.active == "vegafusion-feather" - assert alt.data_transformers.options == {"data_dir": "my_data_dir"} - - assert alt.renderers.active == "vegafusion-widget" - assert alt.renderers.options == { - 'debounce_max_wait': 200, 'debounce_wait': 30, 'download_source_link': None - } - - # Check that widget picks up options from context manager - widget = vf.jupyter.VegaFusionWidget() - assert widget.debounce_max_wait == 200 diff --git a/python/vegafusion-jupyter/tests/test_nbextension_path.py b/python/vegafusion-jupyter/tests/test_nbextension_path.py deleted file mode 100644 index b9bb474f3..000000000 --- a/python/vegafusion-jupyter/tests/test_nbextension_path.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python -# coding: utf-8 - -def test_nbextension_path(): - # Check that magic function can be imported from package root: - from vegafusion_jupyter import _jupyter_nbextension_paths - # Ensure that it can be called without incident: - path = _jupyter_nbextension_paths() - # Some sanity checks: - assert len(path) == 1 - assert isinstance(path[0], dict) diff --git a/python/vegafusion-jupyter/tsconfig.eslint.json b/python/vegafusion-jupyter/tsconfig.eslint.json deleted file mode 100644 index 737e3e680..000000000 --- a/python/vegafusion-jupyter/tsconfig.eslint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["src/**/*.ts", "src/**/*.tsx"], - "exclude": [] -} \ No newline at end of file diff --git a/python/vegafusion-jupyter/tsconfig.json b/python/vegafusion-jupyter/tsconfig.json deleted file mode 100644 index f7386f098..000000000 --- a/python/vegafusion-jupyter/tsconfig.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "compilerOptions": { - "declaration": true, - "esModuleInterop":true, - "lib": ["es2015", "dom"], - "module": "esnext", - "moduleResolution": "node", - "noEmitOnError": true, - "noUnusedLocals": true, - "outDir": "lib", - "resolveJsonModule": true, - "rootDir": "src", - "skipLibCheck": true, - "sourceMap": true, - "strict": true, - "strictPropertyInitialization": false, - "target": "es2017", - "types": ["jest"] - }, - "include": [ - "src/**/*.ts", - "src/**/*.tsx", - ], - "exclude": ["src/**/__tests__"] -} diff --git a/python/vegafusion-jupyter/vegafusion-jupyter.json b/python/vegafusion-jupyter/vegafusion-jupyter.json deleted file mode 100644 index 6442f642a..000000000 --- a/python/vegafusion-jupyter/vegafusion-jupyter.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "load_extensions": { - "vegafusion-jupyter/extension": true - } -} diff --git a/python/vegafusion-jupyter/vegafusion_jupyter/__init__.py b/python/vegafusion-jupyter/vegafusion_jupyter/__init__.py deleted file mode 100644 index bea9e97ba..000000000 --- a/python/vegafusion-jupyter/vegafusion_jupyter/__init__.py +++ /dev/null @@ -1,97 +0,0 @@ -import altair as alt - -from vegafusion import RendererTransformerEnabler -from . import renderer -from . import widget -from .widget import VegaFusionWidget -from ._version import __version__ - - -def enable( - download_source_link=None, - debounce_wait=30, - debounce_max_wait=60, - data_dir="_vegafusion_data" -): - """ - Enable the VegaFusion data transformer and renderer so that all Charts - are displayed using VegaFusion. - - This isn't necessary in order to use the VegaFusionWidget directly - """ - # Import vegafusion.transformer so that vegafusion-feather transform - # will be registered - import vegafusion.transformer - return RendererTransformerEnabler( - renderer_ctx=alt.renderers.enable( - 'vegafusion-widget', - debounce_wait=debounce_wait, - debounce_max_wait=debounce_max_wait, - download_source_link=download_source_link, - ), - data_transformer_ctx=alt.data_transformers.enable( - 'vegafusion-feather', data_dir=data_dir - ), - repr_str=f"vegafusion.enable_widget()" - ) - - -def disable(): - """ - Disable the VegaFusion data transformers and renderers so that Charts - are not displayed using VegaFusion - - Equivalent to - - ```python - import altair as alt - alt.renderers.enable('default') - alt.data_transformers.enable('default') - ``` - - This does not affect the behavior of VegaFusionWidget - """ - from vegafusion import disable - disable() - - -def _jupyter_labextension_paths(): - """Called by Jupyter Lab Server to detect if it is a valid labextension and - to install the widget - Returns - ======= - src: Source directory name to copy files from. Webpack outputs generated files - into this directory and Jupyter Lab copies from this directory during - widget installation - dest: Destination directory name to install widget files to. Jupyter Lab copies - from `src` directory into /labextensions/ directory - during widget installation - """ - return [{ - 'src': 'labextension', - 'dest': 'vegafusion-jupyter', - }] - - -def _jupyter_nbextension_paths(): - """Called by Jupyter Notebook Server to detect if it is a valid nbextension and - to install the widget - Returns - ======= - section: The section of the Jupyter Notebook Server to change. - Must be 'notebook' for widget extensions - src: Source directory name to copy files from. Webpack outputs generated files - into this directory and Jupyter Notebook copies from this directory during - widget installation - dest: Destination directory name to install widget files to. Jupyter Notebook copies - from `src` directory into /nbextensions/ directory - during widget installation - require: Path to importable AMD Javascript module inside the - /nbextensions/ directory - """ - return [{ - 'section': 'notebook', - 'src': 'nbextension', - 'dest': 'vegafusion_jupyter', - 'require': 'vegafusion_jupyter/extension' - }] diff --git a/python/vegafusion-jupyter/vegafusion_jupyter/_frontend.py b/python/vegafusion-jupyter/vegafusion_jupyter/_frontend.py deleted file mode 100644 index ad3309da3..000000000 --- a/python/vegafusion-jupyter/vegafusion_jupyter/_frontend.py +++ /dev/null @@ -1,5 +0,0 @@ -""" -Information about the frontend package of the widgets. -""" -module_name = "vegafusion-jupyter" -module_version = "^1.6.9" diff --git a/python/vegafusion-jupyter/vegafusion_jupyter/_version.py b/python/vegafusion-jupyter/vegafusion_jupyter/_version.py deleted file mode 100644 index 4c2dc20a7..000000000 --- a/python/vegafusion-jupyter/vegafusion_jupyter/_version.py +++ /dev/null @@ -1 +0,0 @@ -__version__ = '1.6.9' diff --git a/python/vegafusion-jupyter/vegafusion_jupyter/nbextension/extension.js b/python/vegafusion-jupyter/vegafusion_jupyter/nbextension/extension.js deleted file mode 100644 index 4fa79d598..000000000 --- a/python/vegafusion-jupyter/vegafusion_jupyter/nbextension/extension.js +++ /dev/null @@ -1,17 +0,0 @@ -// Entry point for the notebook bundle containing custom model definitions. -// -define(function() { - "use strict"; - - window['requirejs'].config({ - map: { - '*': { - 'vegafusion-jupyter': 'nbextensions/vegafusion-jupyter/index', - }, - } - }); - // Export the required load_ipython_extension function - return { - load_ipython_extension : function() {} - }; -}); diff --git a/python/vegafusion-jupyter/vegafusion_jupyter/renderer.py b/python/vegafusion-jupyter/vegafusion_jupyter/renderer.py deleted file mode 100644 index 17ba0f0e9..000000000 --- a/python/vegafusion-jupyter/vegafusion_jupyter/renderer.py +++ /dev/null @@ -1,16 +0,0 @@ -import altair as alt - -def vegafusion_renderer(spec, **widget_options): - """ - Altair renderer that displays charts using a VegaFusionWidget - """ - from IPython.display import display - from vegafusion_jupyter import VegaFusionWidget - - # Display widget as a side effect, then return empty string text representation - # so that Altair doesn't also display a string representation - widget = VegaFusionWidget(spec, **widget_options) - display(widget) - return {'text/plain': ""} - -alt.renderers.register('vegafusion-widget', vegafusion_renderer) diff --git a/python/vegafusion-jupyter/vegafusion_jupyter/widget.py b/python/vegafusion-jupyter/vegafusion_jupyter/widget.py deleted file mode 100644 index f6c5b1af1..000000000 --- a/python/vegafusion-jupyter/vegafusion_jupyter/widget.py +++ /dev/null @@ -1,107 +0,0 @@ -from ipywidgets import DOMWidget -from traitlets import Unicode, Bool, Float, CBytes, observe -import time - -import logging -logger = logging.getLogger("vegafusion") - -from ._frontend import module_name, module_version -import altair as alt -import json - - -class VegaFusionWidget(DOMWidget): - _model_name = Unicode('VegaFusionModel').tag(sync=True) - _model_module = Unicode(module_name).tag(sync=True) - _model_module_version = Unicode(module_version).tag(sync=True) - _view_name = Unicode('VegaFusionView').tag(sync=True) - _view_module = Unicode(module_name).tag(sync=True) - _view_module_version = Unicode(module_version).tag(sync=True) - - spec = Unicode(None, allow_none=True).tag(sync=True) - full_vega_spec = Unicode(None, allow_none=True, read_only=True).tag(sync=True) - client_vega_spec = Unicode(None, allow_none=True, read_only=True).tag(sync=True) - server_vega_spec = Unicode(None, allow_none=True, read_only=True).tag(sync=True) - comm_plan = Unicode(None, allow_none=True, read_only=True).tag(sync=True) - verbose = Bool(False).tag(sync=True) - debounce_wait = Float(30, allow_none=False).tag(sync=True) - debounce_max_wait = Float(60, allow_none=True).tag(sync=True) - - # Message transport properties - _request_msg = CBytes(allow_none=True, read_only=True).tag(sync=True) - _response_msg = CBytes(allow_none=True).tag(sync=True) - - def __init__(self, *args, **kwargs): - # Make sure transformer and renderer and registered - import vegafusion as vf - import vegafusion.transformer - import vegafusion_jupyter.renderer - - # Support altair object or spec as the single positional argument - if len(args) == 1: - # Use single positional argument as spec - kwargs.setdefault("spec", args[0]) - - # Handle spec as Altair chart - if isinstance(kwargs.get("spec", None), alt.TopLevelMixin): - spec = kwargs["spec"] - - # If vegafusion-feather renderer is already enabled, use the same options - if alt.data_transformers.active == "vegafusion-feather": - data_transformer_opts = alt.data_transformers.options - else: - data_transformer_opts = dict() - - with vf.enable_widget(**data_transformer_opts): - # Temporarily enable the vegafusion renderer and transformer so - # that we use them even if they are not enabled globally - spec = spec.to_dict() - - # Set spec as a dict, which will be converted to string below - kwargs["spec"] = spec - - # Handle spec as dict - if isinstance(kwargs.get("spec", None), dict): - kwargs["spec"] = json.dumps(kwargs["spec"], indent=2) - - # If vegafusion renderer is already enabled, use the configured debounce options as the default - if alt.renderers.active == "vegafusion-widget": - # Use configured debounce options, if any - renderer_opts = alt.renderers.options - for opt in ["debounce_wait", "debounce_max_wait"]: - if opt in renderer_opts: - kwargs.setdefault(opt, renderer_opts[opt]) - - super().__init__(**kwargs) - - # Wire up widget message callback - self.on_msg(self._handle_message) - - def _log(self, msg): - if self.verbose: - # Use print to show up in JupyterLab Log pane - print(f"VegaFusionWidget(py): {msg}") - - @observe("_request_msg") - def _handle_message(self, change): - from vegafusion.runtime import runtime - change_new = change["new"] - if change_new is not None: - msg_bytes = change["new"] - start = time.time() - self._log("Received request") - - # Build response - response_bytes = runtime.process_request_bytes( - msg_bytes - ) - - message_len = len(response_bytes) - self._response_msg = response_bytes - - duration = (time.time() - start) * 1000 - self._log(f"Sent response in {duration:.1f}ms ({message_len} bytes)") - - # Clean up temporary tables - if runtime._connection is not None: - runtime._connection.unregister_temporary_tables() diff --git a/python/vegafusion-jupyter/webpack.config.experimental.js b/python/vegafusion-jupyter/webpack.config.experimental.js deleted file mode 100644 index eb764a8cf..000000000 --- a/python/vegafusion-jupyter/webpack.config.experimental.js +++ /dev/null @@ -1,8 +0,0 @@ -const experiments = { - syncWebAssembly: true, - topLevelAwait: true, -}; - -module.exports = { - experiments -} \ No newline at end of file diff --git a/python/vegafusion-jupyter/webpack.config.js b/python/vegafusion-jupyter/webpack.config.js deleted file mode 100644 index d76344c71..000000000 --- a/python/vegafusion-jupyter/webpack.config.js +++ /dev/null @@ -1,97 +0,0 @@ -const path = require('path'); -const version = require('./package.json').version; -const WebpackRequireFrom = require("webpack-require-from"); - -// Custom webpack rules -const rules = [ - { test: /\.ts$/, loader: 'ts-loader' }, - { test: /\.js$/, loader: 'source-map-loader' }, - { test: /\.svg$/, loader: 'svg-inline-loader' }, - { test: /\.css$/, use: [ - // Not sure why it's necessary to not include these loaders. - // It looks like JupyterLab is automatically including these somewhere, so it's an error to duplicate - // them - 'style-loader', 'css-loader' - ] - } -]; - -// Packages that shouldn't be bundled but loaded at runtime -const externals = ['@jupyter-widgets/base']; - -const resolve = { - // Add '.ts' and '.tsx' as resolvable extensions. - extensions: [".webpack.js", ".web.js", ".ts", ".js"] -}; - -const experiments = { - syncWebAssembly: true, - topLevelAwait: true, -}; - -module.exports = [ - /** - * Notebook extension - * - * This bundle only contains the part of the JavaScript that is run on load of - * the notebook. - */ - { - entry: './src/extension.ts', - output: { - filename: 'index.js', - path: path.resolve(__dirname, 'vegafusion_jupyter', 'nbextension'), - libraryTarget: 'amd', - publicPath: '', - }, - module: { - rules: rules - }, - mode: "production", - externals, - resolve, - experiments, - plugins: [ - /** - * The __webpack_public_path__ is set in extension.ts, but for some reason - * delayed imports (await import("foo")) do not honor this path. But when - * the path is set using WebpackRequireFrom, the resource path is computed - * correctly. The embeddable bundle below, used in JupyterLab, does not - * have this issue. - * - * More investigation needed here. - * */ - new WebpackRequireFrom({ - variableName: "__webpack_public_path__" - }) - ] - }, - - /** - * Embeddable vegafusion-jupyter bundle - * - * This bundle is almost identical to the notebook extension bundle. The only - * difference is in the configuration of the webpack public path for the - * static assets. - * - * The target bundle is always `dist/index.js`, which is the path required by - * the custom widget embedder. - */ - { - entry: './src/index.ts', - output: { - filename: 'index.js', - path: path.resolve(__dirname, 'dist'), - libraryTarget: 'amd', - library: "vegafusion-jupyter", - publicPath: 'https://unpkg.com/vegafusion-jupyter@' + version + '/dist/' - }, - module: { - rules: rules - }, - mode: "production", - externals, - resolve, - experiments, - }, -]; diff --git a/python/vegafusion-jupyter/tests/test_altair_mocks.py b/python/vegafusion/tests/test_altair_mocks.py similarity index 92% rename from python/vegafusion-jupyter/tests/test_altair_mocks.py rename to python/vegafusion/tests/test_altair_mocks.py index f3f56ce29..ccab31c5a 100644 --- a/python/vegafusion-jupyter/tests/test_altair_mocks.py +++ b/python/vegafusion/tests/test_altair_mocks.py @@ -24,12 +24,12 @@ pass here = Path(__file__).parent -altair_mocks_dir = here / ".." / ".." / "vegafusion" / "tests" / "altair_mocks" -temp_notebooks_dir = here / "temp_notebooks" -temp_screenshots_dir = here / "temp_screenshot" -failure_output = here / "failures" +altair_mocks_dir = here / "altair_mocks" +temp_notebooks_dir = here / "output" / "temp_notebooks" +temp_screenshots_dir = here / "output" / "temp_screenshot" +failure_output = here / "output" / "failures" -altair_markdown_template = r""" +altair_default_template = r""" ```python import altair as alt alt.renderers.enable('default', embed_options={'actions': False}); @@ -45,11 +45,11 @@ ``` """ -vegafusion_mime_markdown_template = r""" +altair_vegafusion_jupyter_template = r""" ```python import altair as alt -import vegafusion as vf -vf.enable(mimetype="html", row_limit=None, embed_options={'actions': False}); +alt.renderers.enable('jupyter', embed_options={'actions': False}); +alt.data_transformers.enable('vegafusion'); ``` ```python @@ -57,11 +57,12 @@ ``` ```python -assert(alt.renderers.active == "vegafusion-mime") -assert(alt.data_transformers.active == 'vegafusion-inline') +assert(alt.renderers.active == "jupyter") +assert(alt.data_transformers.active == 'vegafusion') ``` """ + def setup_module(module): """ setup any state specific to the execution of the given module.""" # Initialize notebooks and screenshots to empty directories @@ -151,7 +152,9 @@ def setup_module(module): ("interactive/brush", 1.0, 1), ("interactive/multiline_tooltip", 1.0, 1), ("interactive/scatter_linked_brush", 1.0, 1), - ("interactive/casestudy-us_population_pyramid_over_time", 1.0, 1), + # Placement of slider is different + # ("interactive/casestudy-us_population_pyramid_over_time", 1.0, 1), + # ("interactive/casestudy-us_population_over_time", 1.0, 1), ("interactive/multiline_highlight", 1.0, 1), ("interactive/scatter-with_minimap", 1.0, 1), ("interactive/select_mark_area", 1.0, 1), @@ -161,7 +164,6 @@ def setup_module(module): ("interactive/scatter-with_linked_table", 1.0, 1), ("interactive/scatter_with_layered_histogram", 1.0, 1), ("interactive/casestudy-seattle_weather_interactive", 1.0, 1), - ("interactive/casestudy-us_population_over_time", 1.0, 1), ("interactive/scatter-href", 1.0, 1), ("interactive/other-image_tooltip", 1.0, 1), ("interactive/casestudy-weather_heatmap", 0.999, 2), @@ -244,12 +246,12 @@ def test_altair_mock(mock_name, img_tolerance, delay): actions = load_actions(mock_name) mock_code = mock_path.read_text() - altair_markdown = altair_markdown_template.replace("{code}", mock_code) - vegafusion_mime_markdown = vegafusion_mime_markdown_template.replace("{code}", mock_code) + altair_default_markdown = altair_default_template.replace("{code}", mock_code) + vegafusion_jupyter_markdown = altair_vegafusion_jupyter_template.replace("{code}", mock_code) # Use jupytext to convert markdown to an ipynb file - altair_notebook = jupytext.read(io.StringIO(altair_markdown), fmt="markdown") - vegafusion_mime_notebook = jupytext.read(io.StringIO(vegafusion_mime_markdown), fmt="markdown") + altair_default_notebook = jupytext.read(io.StringIO(altair_default_markdown), fmt="markdown") + vegafusion_jupyter_notebook = jupytext.read(io.StringIO(vegafusion_jupyter_markdown), fmt="markdown") # Create selenium Chrome instance chrome_opts = webdriver.ChromeOptions() @@ -274,10 +276,10 @@ def test_altair_mock(mock_name, img_tolerance, delay): try: name = mock_name.replace("/", "-") altair_imgs = export_image_sequence( - chrome_driver, altair_notebook, name + "_altair", actions, delay + chrome_driver, altair_default_notebook, name + "_altair", actions, delay ) vegafusion_mime_imgs = export_image_sequence( - chrome_driver, vegafusion_mime_notebook, name + "_vegafusion_mime", actions, delay + chrome_driver, vegafusion_jupyter_notebook, name + "_vegafusion_mime", actions, delay ) for i in range(len(altair_imgs)): From 1fc6f6bf9cf36f67b27f7e0ade9711da409f3172 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 28 Sep 2024 19:48:16 -0400 Subject: [PATCH 02/36] v2: Remove altair functionality from vegafusion package (#510) * Remove altair functionality from vegafusion package * remove altair dep * Install altair when testing --- .github/workflows/build_test.yml | 6 +- pixi.lock | 50 +++--- pixi.toml | 1 + python/vegafusion/setup.cfg | 1 - .../vegafusion/tests/test_context_manager.py | 34 ---- python/vegafusion/tests/test_row_limit.py | 32 ---- python/vegafusion/tests/test_save.py | 59 ------- .../vegafusion/tests/test_transformed_data.py | 10 +- python/vegafusion/vegafusion/__init__.py | 111 ------------- python/vegafusion/vegafusion/evaluation.py | 13 -- python/vegafusion/vegafusion/jupyter.py | 4 - python/vegafusion/vegafusion/renderer.py | 83 ---------- python/vegafusion/vegafusion/save.py | 152 ------------------ python/vegafusion/vegafusion/transformer.py | 60 ------- 14 files changed, 31 insertions(+), 585 deletions(-) delete mode 100644 python/vegafusion/tests/test_context_manager.py delete mode 100644 python/vegafusion/tests/test_row_limit.py delete mode 100644 python/vegafusion/tests/test_save.py delete mode 100644 python/vegafusion/vegafusion/evaluation.py delete mode 100644 python/vegafusion/vegafusion/jupyter.py delete mode 100644 python/vegafusion/vegafusion/renderer.py delete mode 100644 python/vegafusion/vegafusion/save.py diff --git a/.github/workflows/build_test.yml b/.github/workflows/build_test.yml index 458b30c2c..7c5520ead 100644 --- a/.github/workflows/build_test.yml +++ b/.github/workflows/build_test.yml @@ -299,7 +299,7 @@ jobs: python -m pip install polars-lts-cpu "duckdb>=1.0" "vl-convert-python>=1.0.1rc1" scikit-image "pandas>=2.2" jupytext voila anywidget ipywidgets chromedriver-binary-auto # Test dependencies - python -m pip install pytest vega-datasets scikit-image jupytext voila ipykernel anywidget ipywidgets selenium flaky tenacity chromedriver-binary-auto + python -m pip install pytest altair vega-datasets scikit-image jupytext voila ipykernel anywidget ipywidgets selenium flaky tenacity chromedriver-binary-auto - name: Test lazy imports working-directory: python/vegafusion/ run: python checks/check_lazy_imports.py @@ -347,7 +347,7 @@ jobs: python -m pip install polars "duckdb>=1.0" vl-convert-python "pandas>=2.2" # Test dependencies - python -m pip install pytest vega-datasets scikit-image + python -m pip install pytest altair vega-datasets scikit-image - name: Test vegafusion working-directory: python/vegafusion/ @@ -392,7 +392,7 @@ jobs: python -m pip install pyarrow==10.0 altair==5.1.2 polars[timezone] "duckdb>=1.0" vl-convert-python # Test dependencies - python -m pip install pytest vega-datasets scikit-image + python -m pip install pytest altair vega-datasets scikit-image - name: Test vegafusion working-directory: python/vegafusion/ run: pytest --ignore=tests/test_altair_mocks.py diff --git a/pixi.lock b/pixi.lock index 63c282373..1a7959574 100644 --- a/pixi.lock +++ b/pixi.lock @@ -816,7 +816,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/polars-0.18.15-py310had9acf8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/polars-0.18.15-py310h49106b5_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.17.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda @@ -12051,12 +12051,10 @@ packages: depends: - libgcc-ng >=12 - numpy >=1.16.0 - - packaging * + - packaging - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - typing_extensions >=4.0.0 - arch: x86_64 - platform: linux license: MIT license_family: MIT size: 16057056 @@ -12064,44 +12062,42 @@ packages: - kind: conda name: polars version: 0.18.15 - build: py310h95fa17d_1 + build: py310h49106b5_1 build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/polars-0.18.15-py310h95fa17d_1.conda - sha256: 423ebf36060323f5f145b23437dbbdf7c5735d1f5c536adcc463d2434b1812f1 - md5: ca50abd3aa922d6d8d8f1a3ff0dda332 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/polars-0.18.15-py310h49106b5_1.conda + sha256: ebc61b1e954585f492e777cd5d2caa06c2e0e28c0be364ab0c412294b72fe13b + md5: 51481d96d1b4c863662e81d075ad5d79 depends: - numpy >=1.16.0 - - packaging * + - packaging - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 - typing_extensions >=4.0.0 - arch: x86_64 - platform: osx license: MIT license_family: MIT - size: 13970392 - timestamp: 1692690680600 + size: 12963300 + timestamp: 1692690752488 - kind: conda name: polars version: 0.18.15 - build: py310had9acf8_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/polars-0.18.15-py310had9acf8_0.conda - sha256: 9d50cec48ac801a5ec4b44fb3c00d761ce55d1e1af479cef1d9cff3dd7c66dfa - md5: 9fb570a944037614daba1b125648588d + build: py310h95fa17d_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/polars-0.18.15-py310h95fa17d_1.conda + sha256: 423ebf36060323f5f145b23437dbbdf7c5735d1f5c536adcc463d2434b1812f1 + md5: ca50abd3aa922d6d8d8f1a3ff0dda332 depends: - numpy >=1.16.0 - - python >=3.10,<3.11.0a0 *_cpython + - packaging + - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - typing_extensions >=4.0.0 - - packaging * - arch: aarch64 - platform: osx license: MIT license_family: MIT - size: 12977174 - timestamp: 1692100866706 + size: 13970392 + timestamp: 1692690680600 - kind: conda name: polars version: 0.18.15 @@ -12113,15 +12109,13 @@ packages: md5: 14eed67eba855b1ddcffb7f89586875e depends: - numpy >=1.16.0 - - packaging * + - packaging - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - typing_extensions >=4.0.0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: MIT license_family: MIT size: 14328233 diff --git a/pixi.toml b/pixi.toml index c875a7307..2a369c179 100644 --- a/pixi.toml +++ b/pixi.toml @@ -139,6 +139,7 @@ ipywidgets = "8.1.0.*" rust = "1.80.*" vl-convert-python = "1.6.*" anywidget = ">=0.9.6,<0.10" +polars = "1.8.*" [target.osx-arm64.build-dependencies] # These dependencies are for building node canvas from source on apple silicon diff --git a/python/vegafusion/setup.cfg b/python/vegafusion/setup.cfg index 8da2b7153..4e5572ef1 100644 --- a/python/vegafusion/setup.cfg +++ b/python/vegafusion/setup.cfg @@ -27,7 +27,6 @@ packages = find: python_requires = >=3.7 include_package_data = True install_requires = - altair>=5.2.0 pyarrow>=5 pandas psutil diff --git a/python/vegafusion/tests/test_context_manager.py b/python/vegafusion/tests/test_context_manager.py deleted file mode 100644 index cbc8d4325..000000000 --- a/python/vegafusion/tests/test_context_manager.py +++ /dev/null @@ -1,34 +0,0 @@ -import altair as alt -import vegafusion as vf - - -def test_mime_enabler_context_manager(): - alt.data_transformers.enable("json") - alt.renderers.enable("mimetype") - - assert alt.data_transformers.active == "json" - assert alt.renderers.active == "mimetype" - - with vf.disable(): - assert alt.data_transformers.active == "default" - assert alt.renderers.active == "default" - - assert alt.data_transformers.active == "json" - assert alt.renderers.active == "mimetype" - - ctx = vf.disable() - assert alt.data_transformers.active == "default" - assert alt.renderers.active == "default" - assert repr(ctx) == "vegafusion.disable()" - - with vf.enable(): - assert alt.data_transformers.active == "vegafusion-inline" - assert alt.renderers.active == "vegafusion-mime" - - assert alt.data_transformers.active == "default" - assert alt.renderers.active == "default" - - ctx = vf.enable() - assert alt.data_transformers.active == "vegafusion-inline" - assert alt.renderers.active == "vegafusion-mime" - assert repr(ctx) == "vegafusion.enable(mimetype='html', row_limit=10000, embed_options={})" diff --git a/python/vegafusion/tests/test_row_limit.py b/python/vegafusion/tests/test_row_limit.py deleted file mode 100644 index f9bbbd1a5..000000000 --- a/python/vegafusion/tests/test_row_limit.py +++ /dev/null @@ -1,32 +0,0 @@ -import pytest -import vegafusion as vf -import altair as alt -from altair.utils.execeval import eval_block -from pathlib import Path -here = Path(__file__).parent -altair_mocks_dir = here / "altair_mocks" - - -def test_row_limit(): - mock_path = altair_mocks_dir / "scatter" / "bubble_plot" / "mock.py" - mock_src = mock_path.read_text("utf8") - chart = eval_block(mock_src) - - # Dataset has 406 rows (before filtering out nulls) and this chart is not aggregated. - # Limit of 500 rows should be fine - with vf.enable(row_limit=500): - chart._repr_mimebundle_() - - # Limit of 300 rows should raise RowLimitError - with vf.enable(row_limit=300): - with pytest.raises(vf.RowLimitError): - chart._repr_mimebundle_() - - # Adding an aggregation should allow row limit to be much lower - chart = chart.encode( - alt.X("Horsepower", bin=True), - alt.Y("Miles_per_Gallon", bin=True), - alt.Size("count()") - ) - with vf.enable(row_limit=50): - chart._repr_mimebundle_() diff --git a/python/vegafusion/tests/test_save.py b/python/vegafusion/tests/test_save.py deleted file mode 100644 index 1c639a2d0..000000000 --- a/python/vegafusion/tests/test_save.py +++ /dev/null @@ -1,59 +0,0 @@ -import altair as alt -from vega_datasets import data -import vegafusion as vf -from io import StringIO, BytesIO -import json - - -def make_histogram(): - source = data.movies.url - return alt.Chart(source).mark_bar().encode( - alt.X("IMDB_Rating:Q", bin=True), - y='count()', - ) - - -def test_save_html(): - chart = make_histogram() - f = StringIO() - vf.save_html(chart, f) - html = f.getvalue().strip() - assert html.startswith("") - assert "https://cdn.jsdelivr.net/npm/vega@5" in html - assert "https://cdn.jsdelivr.net/npm/vega-embed@6" in html - - -# We can't test inline HTML until after a new release of Altair Viewer -# def test_save_html_inline(): -# chart = make_histogram() -# f = StringIO() -# vf.save_html(chart, f, inline=True) -# html = f.getvalue().strip() -# assert html.startswith("") -# assert " + + diff --git a/examples/editor-demo/src/index.js b/examples/editor-demo/src/index.js new file mode 100644 index 000000000..ab2c56860 --- /dev/null +++ b/examples/editor-demo/src/index.js @@ -0,0 +1,1430 @@ +import * as vfEmbed from "vegafusion-embed"; +import * as Monaco from 'monaco-editor/esm/vs/editor/editor.api'; +import _ from "lodash" +import * as grpcWeb from 'grpc-web'; +import 'bootstrap'; +import 'bootstrap/dist/css/bootstrap.min.css'; +import './style.css'; + +async function init() { + monaco_init() + + let initial_spec = JSON.stringify(flights_spec, null, 2); + + let editor = Monaco.editor.create(document.getElementById('editor-monaco'), { + value: initial_spec, + language: 'json', + theme: 'vs-dark', + automaticLayout: true, + fixedOverflowWidgets: true, + }); + let spec_model = editor.getModel(); + + let server_spec_monaco = Monaco.editor.create(document.getElementById('server-spec-monaco'), { + value: "", + language: 'json', + theme: 'vs-dark', + automaticLayout: true, + readOnly: true, + }); + + let client_spec_monaco = Monaco.editor.create(document.getElementById('client-spec-monaco'), { + value: "", + language: 'json', + theme: 'vs-dark', + automaticLayout: true, + readOnly: true, + }); + + let comm_plan_monaco = Monaco.editor.create(document.getElementById('comm-plan-monaco'), { + value: "", + language: 'json', + theme: 'vs-dark', + automaticLayout: true, + readOnly: true, + }); + + const hostname = 'http://127.0.0.1:50051'; + let client = new grpcWeb.GrpcWebClientBase({format: "binary"}); + let send_message_grpc = vfEmbed.makeGrpcSendMessageFn(client, hostname); + + async function update_chart() { + let msg_receiver; + try { + let element = document.getElementById("vega-chart"); + let config = { + verbose: false, + debounce_wait: 30, + debounce_max_wait: 60, + }; + msg_receiver = await vfEmbed.embedVegaFusion( + element, + editor.getValue(), + send_message_grpc, + config + ); + server_spec_monaco.setValue(msg_receiver.server_spec_json()); + client_spec_monaco.setValue(msg_receiver.client_spec_json()); + comm_plan_monaco.setValue(msg_receiver.comm_plan_json()); + } catch (e) { + console.error("Failed to render spec"); + server_spec_monaco.setValue(""); + client_spec_monaco.setValue(""); + comm_plan_monaco.setValue(""); + console.log(e); + return + } + } + + // Update chart (with debounce) when editor value changes + await update_chart() + let content_change_listener = _.debounce(async (content) => { + await update_chart() + }, 750); + + spec_model.onDidChangeContent(content_change_listener) +} + +function monaco_init() { + Monaco.languages.json.jsonDefaults.setDiagnosticsOptions( + { + validate: true, + allowComments: true, + trailingCommas: true, + schemas: [], + enableSchemaRequest: true + } + ); +} + +let flights_spec = { + "$schema": "https://vega.github.io/schema/vega/v5.json", + "background": "white", + "padding": 5, + "data": [ + {"name": "brush_store"}, + { + "name": "source_0", + "url": "https://raw.githubusercontent.com/vega/vega-datasets/main/data/flights-2k.json", + "format": {"type": "json", "parse": {"date": "date"}}, + "transform": [ + { + "type": "extent", + "field": "delay", + "signal": "child__column_delay_layer_1_bin_maxbins_20_delay_extent" + }, + { + "type": "bin", + "field": "delay", + "as": ["bin_maxbins_20_delay", "bin_maxbins_20_delay_end"], + "signal": "child__column_delay_layer_1_bin_maxbins_20_delay_bins", + "extent": { + "signal": "child__column_delay_layer_1_bin_maxbins_20_delay_extent" + }, + "maxbins": 20 + }, + { + "type": "extent", + "field": "distance", + "signal": "child__column_distance_layer_0_bin_maxbins_20_distance_extent" + }, + { + "type": "bin", + "field": "distance", + "as": ["bin_maxbins_20_distance", "bin_maxbins_20_distance_end"], + "signal": "child__column_distance_layer_0_bin_maxbins_20_distance_bins", + "extent": { + "signal": "child__column_distance_layer_0_bin_maxbins_20_distance_extent" + }, + "maxbins": 20 + }, + {"type": "formula", "expr": "hours(datum.date)", "as": "time"} + ] + }, + { + "name": "data_0", + "source": "source_0", + "transform": [ + { + "type": "extent", + "field": "time", + "signal": "child__column_time_layer_1_bin_maxbins_20_time_extent" + }, + { + "type": "bin", + "field": "time", + "as": ["bin_maxbins_20_time", "bin_maxbins_20_time_end"], + "signal": "child__column_time_layer_1_bin_maxbins_20_time_bins", + "extent": { + "signal": "child__column_time_layer_1_bin_maxbins_20_time_extent" + }, + "maxbins": 20 + } + ] + }, + { + "name": "data_1", + "source": "data_0", + "transform": [ + { + "type": "filter", + "expr": "!length(data(\"brush_store\")) || vlSelectionTest(\"brush_store\", datum)" + }, + { + "type": "aggregate", + "groupby": ["bin_maxbins_20_time", "bin_maxbins_20_time_end"], + "ops": ["count"], + "fields": [null], + "as": ["__count"] + }, + { + "type": "filter", + "expr": "isValid(datum[\"bin_maxbins_20_time\"]) && isFinite(+datum[\"bin_maxbins_20_time\"])" + } + ] + }, + { + "name": "data_2", + "source": "data_0", + "transform": [ + { + "type": "aggregate", + "groupby": ["bin_maxbins_20_time", "bin_maxbins_20_time_end"], + "ops": ["count"], + "fields": [null], + "as": ["__count"] + }, + { + "type": "filter", + "expr": "isValid(datum[\"bin_maxbins_20_time\"]) && isFinite(+datum[\"bin_maxbins_20_time\"])" + } + ] + }, + { + "name": "data_3", + "source": "source_0", + "transform": [ + { + "type": "filter", + "expr": "!length(data(\"brush_store\")) || vlSelectionTest(\"brush_store\", datum)" + } + ] + }, + { + "name": "data_4", + "source": "data_3", + "transform": [ + { + "type": "aggregate", + "groupby": ["bin_maxbins_20_delay", "bin_maxbins_20_delay_end"], + "ops": ["count"], + "fields": [null], + "as": ["__count"] + }, + { + "type": "filter", + "expr": "isValid(datum[\"bin_maxbins_20_delay\"]) && isFinite(+datum[\"bin_maxbins_20_delay\"])" + } + ] + }, + { + "name": "data_5", + "source": "data_3", + "transform": [ + { + "type": "aggregate", + "groupby": ["bin_maxbins_20_distance", "bin_maxbins_20_distance_end"], + "ops": ["count"], + "fields": [null], + "as": ["__count"] + }, + { + "type": "filter", + "expr": "isValid(datum[\"bin_maxbins_20_distance\"]) && isFinite(+datum[\"bin_maxbins_20_distance\"])" + } + ] + }, + { + "name": "data_6", + "source": "source_0", + "transform": [ + { + "type": "aggregate", + "groupby": ["bin_maxbins_20_distance", "bin_maxbins_20_distance_end"], + "ops": ["count"], + "fields": [null], + "as": ["__count"] + }, + { + "type": "filter", + "expr": "isValid(datum[\"bin_maxbins_20_distance\"]) && isFinite(+datum[\"bin_maxbins_20_distance\"])" + } + ] + }, + { + "name": "data_7", + "source": "source_0", + "transform": [ + { + "type": "aggregate", + "groupby": ["bin_maxbins_20_delay", "bin_maxbins_20_delay_end"], + "ops": ["count"], + "fields": [null], + "as": ["__count"] + }, + { + "type": "filter", + "expr": "isValid(datum[\"bin_maxbins_20_delay\"]) && isFinite(+datum[\"bin_maxbins_20_delay\"])" + } + ] + } + ], + "signals": [ + {"name": "childWidth", "value": 200}, + {"name": "childHeight", "value": 200}, + { + "name": "unit", + "value": {}, + "on": [ + {"events": "mousemove", "update": "isTuple(group()) ? group() : unit"} + ] + }, + { + "name": "brush", + "update": "vlSelectionResolve(\"brush_store\", \"union\")" + } + ], + "layout": {"padding": 20, "columns": 3, "bounds": "full", "align": "all"}, + "marks": [ + { + "type": "group", + "name": "child__column_distance_group", + "style": "cell", + "encode": { + "update": { + "width": {"signal": "childWidth"}, + "height": {"signal": "childHeight"} + } + }, + "signals": [ + { + "name": "brush_x", + "value": [], + "on": [ + { + "events": { + "source": "scope", + "type": "mousedown", + "filter": [ + "!event.item || event.item.mark.name !== \"brush_brush\"" + ] + }, + "update": "[x(unit), x(unit)]" + }, + { + "events": { + "source": "window", + "type": "mousemove", + "consume": true, + "between": [ + { + "source": "scope", + "type": "mousedown", + "filter": [ + "!event.item || event.item.mark.name !== \"brush_brush\"" + ] + }, + {"source": "window", "type": "mouseup"} + ] + }, + "update": "[brush_x[0], clamp(x(unit), 0, childWidth)]" + }, + { + "events": {"signal": "brush_scale_trigger"}, + "update": "[scale(\"child__column_distance_x\", brush_distance[0]), scale(\"child__column_distance_x\", brush_distance[1])]" + }, + { + "events": [{"source": "view", "type": "dblclick"}], + "update": "[0, 0]" + }, + { + "events": {"signal": "brush_translate_delta"}, + "update": "clampRange(panLinear(brush_translate_anchor.extent_x, brush_translate_delta.x / span(brush_translate_anchor.extent_x)), 0, childWidth)" + }, + { + "events": {"signal": "brush_zoom_delta"}, + "update": "clampRange(zoomLinear(brush_x, brush_zoom_anchor.x, brush_zoom_delta), 0, childWidth)" + } + ] + }, + { + "name": "brush_distance", + "on": [ + { + "events": {"signal": "brush_x"}, + "update": "brush_x[0] === brush_x[1] ? null : invert(\"child__column_distance_x\", brush_x)" + } + ] + }, + { + "name": "brush_scale_trigger", + "value": {}, + "on": [ + { + "events": [{"scale": "child__column_distance_x"}], + "update": "(!isArray(brush_distance) || (+invert(\"child__column_distance_x\", brush_x)[0] === +brush_distance[0] && +invert(\"child__column_distance_x\", brush_x)[1] === +brush_distance[1])) ? brush_scale_trigger : {}" + } + ] + }, + { + "name": "brush_tuple", + "on": [ + { + "events": [{"signal": "brush_distance"}], + "update": "brush_distance ? {unit: \"child__column_distance_layer_0\", fields: brush_tuple_fields, values: [brush_distance]} : null" + } + ] + }, + { + "name": "brush_tuple_fields", + "value": [{"field": "distance", "channel": "x", "type": "R"}] + }, + { + "name": "brush_translate_anchor", + "value": {}, + "on": [ + { + "events": [ + { + "source": "scope", + "type": "mousedown", + "markname": "brush_brush" + } + ], + "update": "{x: x(unit), y: y(unit), extent_x: slice(brush_x)}" + } + ] + }, + { + "name": "brush_translate_delta", + "value": {}, + "on": [ + { + "events": [ + { + "source": "window", + "type": "mousemove", + "consume": true, + "between": [ + { + "source": "scope", + "type": "mousedown", + "markname": "brush_brush" + }, + {"source": "window", "type": "mouseup"} + ] + } + ], + "update": "{x: brush_translate_anchor.x - x(unit), y: brush_translate_anchor.y - y(unit)}" + } + ] + }, + { + "name": "brush_zoom_anchor", + "on": [ + { + "events": [ + { + "source": "scope", + "type": "wheel", + "consume": true, + "markname": "brush_brush" + } + ], + "update": "{x: x(unit), y: y(unit)}" + } + ] + }, + { + "name": "brush_zoom_delta", + "on": [ + { + "events": [ + { + "source": "scope", + "type": "wheel", + "consume": true, + "markname": "brush_brush" + } + ], + "force": true, + "update": "pow(1.001, event.deltaY * pow(16, event.deltaMode))" + } + ] + }, + { + "name": "brush_modify", + "on": [ + { + "events": {"signal": "brush_tuple"}, + "update": "modify(\"brush_store\", brush_tuple, true)" + } + ] + } + ], + "marks": [ + { + "name": "brush_brush_bg", + "type": "rect", + "clip": true, + "encode": { + "enter": { + "fill": {"value": "#333"}, + "fillOpacity": {"value": 0.125} + }, + "update": { + "x": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_distance_layer_0\"", + "signal": "brush_x[0]" + }, + {"value": 0} + ], + "y": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_distance_layer_0\"", + "value": 0 + }, + {"value": 0} + ], + "x2": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_distance_layer_0\"", + "signal": "brush_x[1]" + }, + {"value": 0} + ], + "y2": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_distance_layer_0\"", + "field": {"group": "height"} + }, + {"value": 0} + ] + } + } + }, + { + "name": "child__column_distance_layer_0_marks", + "type": "rect", + "style": ["bar"], + "interactive": true, + "from": {"data": "data_6"}, + "encode": { + "update": { + "fill": {"value": "#ddd"}, + "ariaRoleDescription": {"value": "bar"}, + "description": { + "signal": "\"distance (binned): \" + (!isValid(datum[\"bin_maxbins_20_distance\"]) || !isFinite(+datum[\"bin_maxbins_20_distance\"]) ? \"null\" : format(datum[\"bin_maxbins_20_distance\"], \"\") + \" – \" + format(datum[\"bin_maxbins_20_distance_end\"], \"\")) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" + }, + "x2": { + "scale": "child__column_distance_x", + "field": "bin_maxbins_20_distance", + "offset": 1 + }, + "x": { + "scale": "child__column_distance_x", + "field": "bin_maxbins_20_distance_end" + }, + "y": {"scale": "child__column_distance_y", "field": "__count"}, + "y2": {"scale": "child__column_distance_y", "value": 0} + } + } + }, + { + "name": "child__column_distance_layer_1_marks", + "type": "rect", + "style": ["bar"], + "interactive": false, + "from": {"data": "data_5"}, + "encode": { + "update": { + "fill": {"value": "#4c78a8"}, + "ariaRoleDescription": {"value": "bar"}, + "description": { + "signal": "\"distance (binned): \" + (!isValid(datum[\"bin_maxbins_20_distance\"]) || !isFinite(+datum[\"bin_maxbins_20_distance\"]) ? \"null\" : format(datum[\"bin_maxbins_20_distance\"], \"\") + \" – \" + format(datum[\"bin_maxbins_20_distance_end\"], \"\")) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" + }, + "x2": { + "scale": "child__column_distance_x", + "field": "bin_maxbins_20_distance", + "offset": 1 + }, + "x": { + "scale": "child__column_distance_x", + "field": "bin_maxbins_20_distance_end" + }, + "y": {"scale": "child__column_distance_y", "field": "__count"}, + "y2": {"scale": "child__column_distance_y", "value": 0} + } + } + }, + { + "name": "brush_brush", + "type": "rect", + "clip": true, + "encode": { + "enter": {"fill": {"value": "transparent"}}, + "update": { + "x": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_distance_layer_0\"", + "signal": "brush_x[0]" + }, + {"value": 0} + ], + "y": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_distance_layer_0\"", + "value": 0 + }, + {"value": 0} + ], + "x2": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_distance_layer_0\"", + "signal": "brush_x[1]" + }, + {"value": 0} + ], + "y2": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_distance_layer_0\"", + "field": {"group": "height"} + }, + {"value": 0} + ], + "stroke": [ + {"test": "brush_x[0] !== brush_x[1]", "value": "white"}, + {"value": null} + ] + } + } + } + ], + "axes": [ + { + "scale": "child__column_distance_y", + "orient": "left", + "gridScale": "child__column_distance_x", + "grid": true, + "tickCount": {"signal": "ceil(childHeight/40)"}, + "domain": false, + "labels": false, + "aria": false, + "maxExtent": 0, + "minExtent": 0, + "ticks": false, + "zindex": 0 + }, + { + "scale": "child__column_distance_x", + "orient": "bottom", + "grid": false, + "title": "distance (binned)", + "labelFlush": true, + "labelOverlap": true, + "tickCount": {"signal": "ceil(childWidth/10)"}, + "zindex": 0 + }, + { + "scale": "child__column_distance_y", + "orient": "left", + "grid": false, + "title": "Count of Records", + "labelOverlap": true, + "tickCount": {"signal": "ceil(childHeight/40)"}, + "zindex": 0 + } + ] + }, + { + "type": "group", + "name": "child__column_delay_group", + "style": "cell", + "encode": { + "update": { + "width": {"signal": "childWidth"}, + "height": {"signal": "childHeight"} + } + }, + "signals": [ + { + "name": "brush_x", + "value": [], + "on": [ + { + "events": { + "source": "scope", + "type": "mousedown", + "filter": [ + "!event.item || event.item.mark.name !== \"brush_brush\"" + ] + }, + "update": "[x(unit), x(unit)]" + }, + { + "events": { + "source": "window", + "type": "mousemove", + "consume": true, + "between": [ + { + "source": "scope", + "type": "mousedown", + "filter": [ + "!event.item || event.item.mark.name !== \"brush_brush\"" + ] + }, + {"source": "window", "type": "mouseup"} + ] + }, + "update": "[brush_x[0], clamp(x(unit), 0, childWidth)]" + }, + { + "events": {"signal": "brush_scale_trigger"}, + "update": "[scale(\"child__column_delay_x\", brush_delay[0]), scale(\"child__column_delay_x\", brush_delay[1])]" + }, + { + "events": [{"source": "view", "type": "dblclick"}], + "update": "[0, 0]" + }, + { + "events": {"signal": "brush_translate_delta"}, + "update": "clampRange(panLinear(brush_translate_anchor.extent_x, brush_translate_delta.x / span(brush_translate_anchor.extent_x)), 0, childWidth)" + }, + { + "events": {"signal": "brush_zoom_delta"}, + "update": "clampRange(zoomLinear(brush_x, brush_zoom_anchor.x, brush_zoom_delta), 0, childWidth)" + } + ] + }, + { + "name": "brush_delay", + "on": [ + { + "events": {"signal": "brush_x"}, + "update": "brush_x[0] === brush_x[1] ? null : invert(\"child__column_delay_x\", brush_x)" + } + ] + }, + { + "name": "brush_scale_trigger", + "value": {}, + "on": [ + { + "events": [{"scale": "child__column_delay_x"}], + "update": "(!isArray(brush_delay) || (+invert(\"child__column_delay_x\", brush_x)[0] === +brush_delay[0] && +invert(\"child__column_delay_x\", brush_x)[1] === +brush_delay[1])) ? brush_scale_trigger : {}" + } + ] + }, + { + "name": "brush_tuple", + "on": [ + { + "events": [{"signal": "brush_delay"}], + "update": "brush_delay ? {unit: \"child__column_delay_layer_0\", fields: brush_tuple_fields, values: [brush_delay]} : null" + } + ] + }, + { + "name": "brush_tuple_fields", + "value": [{"field": "delay", "channel": "x", "type": "R"}] + }, + { + "name": "brush_translate_anchor", + "value": {}, + "on": [ + { + "events": [ + { + "source": "scope", + "type": "mousedown", + "markname": "brush_brush" + } + ], + "update": "{x: x(unit), y: y(unit), extent_x: slice(brush_x)}" + } + ] + }, + { + "name": "brush_translate_delta", + "value": {}, + "on": [ + { + "events": [ + { + "source": "window", + "type": "mousemove", + "consume": true, + "between": [ + { + "source": "scope", + "type": "mousedown", + "markname": "brush_brush" + }, + {"source": "window", "type": "mouseup"} + ] + } + ], + "update": "{x: brush_translate_anchor.x - x(unit), y: brush_translate_anchor.y - y(unit)}" + } + ] + }, + { + "name": "brush_zoom_anchor", + "on": [ + { + "events": [ + { + "source": "scope", + "type": "wheel", + "consume": true, + "markname": "brush_brush" + } + ], + "update": "{x: x(unit), y: y(unit)}" + } + ] + }, + { + "name": "brush_zoom_delta", + "on": [ + { + "events": [ + { + "source": "scope", + "type": "wheel", + "consume": true, + "markname": "brush_brush" + } + ], + "force": true, + "update": "pow(1.001, event.deltaY * pow(16, event.deltaMode))" + } + ] + }, + { + "name": "brush_modify", + "on": [ + { + "events": {"signal": "brush_tuple"}, + "update": "modify(\"brush_store\", brush_tuple, true)" + } + ] + } + ], + "marks": [ + { + "name": "brush_brush_bg", + "type": "rect", + "clip": true, + "encode": { + "enter": { + "fill": {"value": "#333"}, + "fillOpacity": {"value": 0.125} + }, + "update": { + "x": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_delay_layer_0\"", + "signal": "brush_x[0]" + }, + {"value": 0} + ], + "y": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_delay_layer_0\"", + "value": 0 + }, + {"value": 0} + ], + "x2": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_delay_layer_0\"", + "signal": "brush_x[1]" + }, + {"value": 0} + ], + "y2": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_delay_layer_0\"", + "field": {"group": "height"} + }, + {"value": 0} + ] + } + } + }, + { + "name": "child__column_delay_layer_0_marks", + "type": "rect", + "style": ["bar"], + "interactive": true, + "from": {"data": "data_7"}, + "encode": { + "update": { + "fill": {"value": "#ddd"}, + "ariaRoleDescription": {"value": "bar"}, + "description": { + "signal": "\"delay (binned): \" + (!isValid(datum[\"bin_maxbins_20_delay\"]) || !isFinite(+datum[\"bin_maxbins_20_delay\"]) ? \"null\" : format(datum[\"bin_maxbins_20_delay\"], \"\") + \" – \" + format(datum[\"bin_maxbins_20_delay_end\"], \"\")) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" + }, + "x2": { + "scale": "child__column_delay_x", + "field": "bin_maxbins_20_delay", + "offset": 1 + }, + "x": { + "scale": "child__column_delay_x", + "field": "bin_maxbins_20_delay_end" + }, + "y": {"scale": "child__column_delay_y", "field": "__count"}, + "y2": {"scale": "child__column_delay_y", "value": 0} + } + } + }, + { + "name": "child__column_delay_layer_1_marks", + "type": "rect", + "style": ["bar"], + "interactive": false, + "from": {"data": "data_4"}, + "encode": { + "update": { + "fill": {"value": "#4c78a8"}, + "ariaRoleDescription": {"value": "bar"}, + "description": { + "signal": "\"delay (binned): \" + (!isValid(datum[\"bin_maxbins_20_delay\"]) || !isFinite(+datum[\"bin_maxbins_20_delay\"]) ? \"null\" : format(datum[\"bin_maxbins_20_delay\"], \"\") + \" – \" + format(datum[\"bin_maxbins_20_delay_end\"], \"\")) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" + }, + "x2": { + "scale": "child__column_delay_x", + "field": "bin_maxbins_20_delay", + "offset": 1 + }, + "x": { + "scale": "child__column_delay_x", + "field": "bin_maxbins_20_delay_end" + }, + "y": {"scale": "child__column_delay_y", "field": "__count"}, + "y2": {"scale": "child__column_delay_y", "value": 0} + } + } + }, + { + "name": "brush_brush", + "type": "rect", + "clip": true, + "encode": { + "enter": {"fill": {"value": "transparent"}}, + "update": { + "x": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_delay_layer_0\"", + "signal": "brush_x[0]" + }, + {"value": 0} + ], + "y": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_delay_layer_0\"", + "value": 0 + }, + {"value": 0} + ], + "x2": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_delay_layer_0\"", + "signal": "brush_x[1]" + }, + {"value": 0} + ], + "y2": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_delay_layer_0\"", + "field": {"group": "height"} + }, + {"value": 0} + ], + "stroke": [ + {"test": "brush_x[0] !== brush_x[1]", "value": "white"}, + {"value": null} + ] + } + } + } + ], + "axes": [ + { + "scale": "child__column_delay_y", + "orient": "left", + "gridScale": "child__column_delay_x", + "grid": true, + "tickCount": {"signal": "ceil(childHeight/40)"}, + "domain": false, + "labels": false, + "aria": false, + "maxExtent": 0, + "minExtent": 0, + "ticks": false, + "zindex": 0 + }, + { + "scale": "child__column_delay_x", + "orient": "bottom", + "grid": false, + "title": "delay (binned)", + "labelFlush": true, + "labelOverlap": true, + "tickCount": {"signal": "ceil(childWidth/10)"}, + "zindex": 0 + }, + { + "scale": "child__column_delay_y", + "orient": "left", + "grid": false, + "title": "Count of Records", + "labelOverlap": true, + "tickCount": {"signal": "ceil(childHeight/40)"}, + "zindex": 0 + } + ] + }, + { + "type": "group", + "name": "child__column_time_group", + "style": "cell", + "encode": { + "update": { + "width": {"signal": "childWidth"}, + "height": {"signal": "childHeight"} + } + }, + "signals": [ + { + "name": "brush_x", + "value": [], + "on": [ + { + "events": { + "source": "scope", + "type": "mousedown", + "filter": [ + "!event.item || event.item.mark.name !== \"brush_brush\"" + ] + }, + "update": "[x(unit), x(unit)]" + }, + { + "events": { + "source": "window", + "type": "mousemove", + "consume": true, + "between": [ + { + "source": "scope", + "type": "mousedown", + "filter": [ + "!event.item || event.item.mark.name !== \"brush_brush\"" + ] + }, + {"source": "window", "type": "mouseup"} + ] + }, + "update": "[brush_x[0], clamp(x(unit), 0, childWidth)]" + }, + { + "events": {"signal": "brush_scale_trigger"}, + "update": "[scale(\"child__column_time_x\", brush_time[0]), scale(\"child__column_time_x\", brush_time[1])]" + }, + { + "events": [{"source": "view", "type": "dblclick"}], + "update": "[0, 0]" + }, + { + "events": {"signal": "brush_translate_delta"}, + "update": "clampRange(panLinear(brush_translate_anchor.extent_x, brush_translate_delta.x / span(brush_translate_anchor.extent_x)), 0, childWidth)" + }, + { + "events": {"signal": "brush_zoom_delta"}, + "update": "clampRange(zoomLinear(brush_x, brush_zoom_anchor.x, brush_zoom_delta), 0, childWidth)" + } + ] + }, + { + "name": "brush_time", + "on": [ + { + "events": {"signal": "brush_x"}, + "update": "brush_x[0] === brush_x[1] ? null : invert(\"child__column_time_x\", brush_x)" + } + ] + }, + { + "name": "brush_scale_trigger", + "value": {}, + "on": [ + { + "events": [{"scale": "child__column_time_x"}], + "update": "(!isArray(brush_time) || (+invert(\"child__column_time_x\", brush_x)[0] === +brush_time[0] && +invert(\"child__column_time_x\", brush_x)[1] === +brush_time[1])) ? brush_scale_trigger : {}" + } + ] + }, + { + "name": "brush_tuple", + "on": [ + { + "events": [{"signal": "brush_time"}], + "update": "brush_time ? {unit: \"child__column_time_layer_0\", fields: brush_tuple_fields, values: [brush_time]} : null" + } + ] + }, + { + "name": "brush_tuple_fields", + "value": [{"field": "time", "channel": "x", "type": "R"}] + }, + { + "name": "brush_translate_anchor", + "value": {}, + "on": [ + { + "events": [ + { + "source": "scope", + "type": "mousedown", + "markname": "brush_brush" + } + ], + "update": "{x: x(unit), y: y(unit), extent_x: slice(brush_x)}" + } + ] + }, + { + "name": "brush_translate_delta", + "value": {}, + "on": [ + { + "events": [ + { + "source": "window", + "type": "mousemove", + "consume": true, + "between": [ + { + "source": "scope", + "type": "mousedown", + "markname": "brush_brush" + }, + {"source": "window", "type": "mouseup"} + ] + } + ], + "update": "{x: brush_translate_anchor.x - x(unit), y: brush_translate_anchor.y - y(unit)}" + } + ] + }, + { + "name": "brush_zoom_anchor", + "on": [ + { + "events": [ + { + "source": "scope", + "type": "wheel", + "consume": true, + "markname": "brush_brush" + } + ], + "update": "{x: x(unit), y: y(unit)}" + } + ] + }, + { + "name": "brush_zoom_delta", + "on": [ + { + "events": [ + { + "source": "scope", + "type": "wheel", + "consume": true, + "markname": "brush_brush" + } + ], + "force": true, + "update": "pow(1.001, event.deltaY * pow(16, event.deltaMode))" + } + ] + }, + { + "name": "brush_modify", + "on": [ + { + "events": {"signal": "brush_tuple"}, + "update": "modify(\"brush_store\", brush_tuple, true)" + } + ] + } + ], + "marks": [ + { + "name": "brush_brush_bg", + "type": "rect", + "clip": true, + "encode": { + "enter": { + "fill": {"value": "#333"}, + "fillOpacity": {"value": 0.125} + }, + "update": { + "x": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_time_layer_0\"", + "signal": "brush_x[0]" + }, + {"value": 0} + ], + "y": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_time_layer_0\"", + "value": 0 + }, + {"value": 0} + ], + "x2": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_time_layer_0\"", + "signal": "brush_x[1]" + }, + {"value": 0} + ], + "y2": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_time_layer_0\"", + "field": {"group": "height"} + }, + {"value": 0} + ] + } + } + }, + { + "name": "child__column_time_layer_0_marks", + "type": "rect", + "style": ["bar"], + "interactive": true, + "from": {"data": "data_2"}, + "encode": { + "update": { + "fill": {"value": "#ddd"}, + "ariaRoleDescription": {"value": "bar"}, + "description": { + "signal": "\"time (binned): \" + (!isValid(datum[\"bin_maxbins_20_time\"]) || !isFinite(+datum[\"bin_maxbins_20_time\"]) ? \"null\" : format(datum[\"bin_maxbins_20_time\"], \"\") + \" – \" + format(datum[\"bin_maxbins_20_time_end\"], \"\")) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" + }, + "x2": { + "scale": "child__column_time_x", + "field": "bin_maxbins_20_time", + "offset": 1 + }, + "x": { + "scale": "child__column_time_x", + "field": "bin_maxbins_20_time_end" + }, + "y": {"scale": "child__column_time_y", "field": "__count"}, + "y2": {"scale": "child__column_time_y", "value": 0} + } + } + }, + { + "name": "child__column_time_layer_1_marks", + "type": "rect", + "style": ["bar"], + "interactive": false, + "from": {"data": "data_1"}, + "encode": { + "update": { + "fill": {"value": "#4c78a8"}, + "ariaRoleDescription": {"value": "bar"}, + "description": { + "signal": "\"time (binned): \" + (!isValid(datum[\"bin_maxbins_20_time\"]) || !isFinite(+datum[\"bin_maxbins_20_time\"]) ? \"null\" : format(datum[\"bin_maxbins_20_time\"], \"\") + \" – \" + format(datum[\"bin_maxbins_20_time_end\"], \"\")) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" + }, + "x2": { + "scale": "child__column_time_x", + "field": "bin_maxbins_20_time", + "offset": 1 + }, + "x": { + "scale": "child__column_time_x", + "field": "bin_maxbins_20_time_end" + }, + "y": {"scale": "child__column_time_y", "field": "__count"}, + "y2": {"scale": "child__column_time_y", "value": 0} + } + } + }, + { + "name": "brush_brush", + "type": "rect", + "clip": true, + "encode": { + "enter": {"fill": {"value": "transparent"}}, + "update": { + "x": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_time_layer_0\"", + "signal": "brush_x[0]" + }, + {"value": 0} + ], + "y": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_time_layer_0\"", + "value": 0 + }, + {"value": 0} + ], + "x2": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_time_layer_0\"", + "signal": "brush_x[1]" + }, + {"value": 0} + ], + "y2": [ + { + "test": "data(\"brush_store\").length && data(\"brush_store\")[0].unit === \"child__column_time_layer_0\"", + "field": {"group": "height"} + }, + {"value": 0} + ], + "stroke": [ + {"test": "brush_x[0] !== brush_x[1]", "value": "white"}, + {"value": null} + ] + } + } + } + ], + "axes": [ + { + "scale": "child__column_time_y", + "orient": "left", + "gridScale": "child__column_time_x", + "grid": true, + "tickCount": {"signal": "ceil(childHeight/40)"}, + "domain": false, + "labels": false, + "aria": false, + "maxExtent": 0, + "minExtent": 0, + "ticks": false, + "zindex": 0 + }, + { + "scale": "child__column_time_x", + "orient": "bottom", + "grid": false, + "title": "time (binned)", + "labelFlush": true, + "labelOverlap": true, + "tickCount": {"signal": "ceil(childWidth/10)"}, + "zindex": 0 + }, + { + "scale": "child__column_time_y", + "orient": "left", + "grid": false, + "title": "Count of Records", + "labelOverlap": true, + "tickCount": {"signal": "ceil(childHeight/40)"}, + "zindex": 0 + } + ] + } + ], + "scales": [ + { + "name": "child__column_distance_x", + "type": "linear", + "domain": { + "signal": "[child__column_distance_layer_0_bin_maxbins_20_distance_bins.start, child__column_distance_layer_0_bin_maxbins_20_distance_bins.stop]" + }, + "range": [0, {"signal": "childWidth"}], + "bins": { + "signal": "child__column_distance_layer_0_bin_maxbins_20_distance_bins" + }, + "zero": false + }, + { + "name": "child__column_distance_y", + "type": "linear", + "domain": { + "fields": [ + {"data": "data_6", "field": "__count"}, + {"data": "data_5", "field": "__count"} + ] + }, + "range": [{"signal": "childHeight"}, 0], + "nice": true, + "zero": true + }, + { + "name": "child__column_delay_x", + "type": "linear", + "domain": { + "signal": "[child__column_delay_layer_1_bin_maxbins_20_delay_bins.start, child__column_delay_layer_1_bin_maxbins_20_delay_bins.stop]" + }, + "range": [0, {"signal": "childWidth"}], + "bins": { + "signal": "child__column_delay_layer_1_bin_maxbins_20_delay_bins" + }, + "zero": false + }, + { + "name": "child__column_delay_y", + "type": "linear", + "domain": { + "fields": [ + {"data": "data_7", "field": "__count"}, + {"data": "data_4", "field": "__count"} + ] + }, + "range": [{"signal": "childHeight"}, 0], + "nice": true, + "zero": true + }, + { + "name": "child__column_time_x", + "type": "linear", + "domain": { + "signal": "[child__column_time_layer_1_bin_maxbins_20_time_bins.start, child__column_time_layer_1_bin_maxbins_20_time_bins.stop]" + }, + "range": [0, {"signal": "childWidth"}], + "bins": {"signal": "child__column_time_layer_1_bin_maxbins_20_time_bins"}, + "zero": false + }, + { + "name": "child__column_time_y", + "type": "linear", + "domain": { + "fields": [ + {"data": "data_2", "field": "__count"}, + {"data": "data_1", "field": "__count"} + ] + }, + "range": [{"signal": "childHeight"}, 0], + "nice": true, + "zero": true + } + ] +} + +await init(); \ No newline at end of file diff --git a/examples/editor-demo/src/style.css b/examples/editor-demo/src/style.css new file mode 100644 index 000000000..80f0430da --- /dev/null +++ b/examples/editor-demo/src/style.css @@ -0,0 +1,3 @@ +.tab-pane .monaco-editor { + height: 500px; +} diff --git a/examples/editor-demo/webpack.config.js b/examples/editor-demo/webpack.config.js new file mode 100644 index 000000000..27ace46c0 --- /dev/null +++ b/examples/editor-demo/webpack.config.js @@ -0,0 +1,33 @@ +const CopyWebpackPlugin = require("copy-webpack-plugin"); +const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); +const path = require('path'); + +module.exports = { + entry: "./src/bootstrap.js", + output: { + path: path.resolve(__dirname, "dist"), + filename: "bootstrap.js", + }, + mode: "development", + module: { + rules: [ + { + test: /\.css$/, + use: ['style-loader', 'css-loader'] + }, { + test: /\.svg$/, + loader: 'svg-inline-loader' + }, + ] + }, + plugins: [ + new CopyWebpackPlugin({patterns: ['src/index.html']}), + new MonacoWebpackPlugin({ + languages: ['typescript', 'javascript', 'css', "json"] + }) + ], + experiments: { + topLevelAwait: true, + asyncWebAssembly: true, + } +}; diff --git a/javascript/vegafusion-embed/package-lock.json b/javascript/vegafusion-embed/package-lock.json index 9f828c8af..7e44b52ea 100644 --- a/javascript/vegafusion-embed/package-lock.json +++ b/javascript/vegafusion-embed/package-lock.json @@ -6,7 +6,7 @@ "packages": { "": { "name": "vegafusion-embed", - "version": "1.5.0", + "version": "1.6.9", "license": "BSD-3-Clause", "dependencies": { "grpc-web": "^1.3.1", @@ -40,7 +40,7 @@ }, "../../vegafusion-wasm/pkg": { "name": "vegafusion-wasm", - "version": "1.5.0", + "version": "1.6.9", "license": "BSD-3-Clause", "dependencies": { "bootstrap": "^5.1.3", @@ -10339,4 +10339,4 @@ "version": "20.2.9" } } -} \ No newline at end of file +} diff --git a/javascript/vegafusion-embed/src/embed.ts b/javascript/vegafusion-embed/src/embed.ts index 7b1ea8160..ab0dabe06 100644 --- a/javascript/vegafusion-embed/src/embed.ts +++ b/javascript/vegafusion-embed/src/embed.ts @@ -1,5 +1,5 @@ import {MODULE_NAME, MODULE_VERSION} from './version'; -import {MsgReceiver} from 'vegafusion-wasm' +import {ChartHandle} from 'vegafusion-wasm' const { render_vegafusion } = await import("vegafusion-wasm"); import '../css/vegafusion-embed.css'; @@ -29,12 +29,12 @@ const defaultEmbedConfig: EmbedConfig = { verbose: false, debounce_wait: 30, debounce_max_wait: 60 } -export function embedVegaFusion( +export async function embedVegaFusion( element: Element, spec_str: string, - send_msg_fn: Function, + query_fn: Function, config: EmbedConfig | undefined, -): MsgReceiver { +): Promise { // Clear existing children from element // Eventually we should detect when element is already setup and just make the necessary // changes @@ -48,26 +48,27 @@ export function embedVegaFusion( // Handle null config config = config || defaultEmbedConfig; + // Build container element that will hold the vegafusion chart + let containerElement = document.createElement("div"); + containerElement.appendChild(chartElement) + containerElement.classList.add(CHART_WRAPPER_CLASS); + + // Add children to top-level element + element.appendChild(containerElement); + // Render to chart element - let receiver = render_vegafusion( + let receiver = await render_vegafusion( chartElement, spec_str, config.verbose || defaultEmbedConfig.verbose, config.debounce_wait || defaultEmbedConfig.debounce_wait, config.debounce_max_wait || defaultEmbedConfig.debounce_max_wait, - send_msg_fn + query_fn ); - // Build container element that will hold the vegafusion chart - let containerElement = document.createElement("div"); - containerElement.appendChild(chartElement) - containerElement.classList.add(CHART_WRAPPER_CLASS); - // Element that holds the dropdown menu let menuElement = document.createElement("div"); menuElement.appendChild(buildMenu(receiver)); - // Add children to top-level element - element.appendChild(containerElement); element.appendChild(menuElement); element.classList.add("vegafusion-embed"); element.classList.add("has-actions"); @@ -75,7 +76,7 @@ export function embedVegaFusion( return receiver } -function buildMenu(receiver: MsgReceiver): Element { +function buildMenu(receiver: ChartHandle): Element { const details = document.createElement('details'); details.title = I18N.CLICK_TO_VIEW_ACTIONS; diff --git a/javascript/vegafusion-embed/src/grpc.ts b/javascript/vegafusion-embed/src/grpc.ts index 81e532ad8..ea719f922 100644 --- a/javascript/vegafusion-embed/src/grpc.ts +++ b/javascript/vegafusion-embed/src/grpc.ts @@ -1,9 +1,8 @@ import grpcWeb, {GrpcWebClientBase} from "grpc-web" -import {MsgReceiver} from "./index"; // Other utility functions export function makeGrpcSendMessageFn(client: GrpcWebClientBase, hostname: string) { - let sendMessageGrpc = (send_msg_bytes: Uint8Array, receiver: MsgReceiver) => { + let sendMessageGrpc = async (send_msg_bytes: Uint8Array) => { let grpc_route = '/services.VegaFusionRuntime/TaskGraphQuery' // Make custom MethodDescriptor that does not perform serialization @@ -16,15 +15,12 @@ export function makeGrpcSendMessageFn(client: GrpcWebClientBase, hostname: strin (v: any) => v, ); - let promise = client.thenableCall( + return await client.thenableCall( hostname + grpc_route, send_msg_bytes, {}, methodDescriptor, ); - promise.then((response: any) => { - receiver.receive(response) - }) } return sendMessageGrpc } diff --git a/javascript/vegafusion-embed/src/index.ts b/javascript/vegafusion-embed/src/index.ts index 656aa14dd..7856feb0a 100644 --- a/javascript/vegafusion-embed/src/index.ts +++ b/javascript/vegafusion-embed/src/index.ts @@ -1,6 +1,3 @@ -import {MsgReceiver as MsgReceiver2} from "vegafusion-wasm"; -export type MsgReceiver = MsgReceiver2; - export * from './version'; export * from './embed'; export * from './grpc'; diff --git a/pixi.lock b/pixi.lock index 07c7381a0..71950a633 100644 --- a/pixi.lock +++ b/pixi.lock @@ -19,6 +19,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.4-hc8144f4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.2-h09139f6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.3-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h184a658_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.2-hd6ebb48_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.13-hc690213_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.32-h161b759_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.6-h32970c0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.17-hb5e3142_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.12-h184a658_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h184a658_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.23.1-h94c364a_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.156-h6600424_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.13.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda @@ -32,7 +45,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/build-0.7.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.21.0-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.2-heb4867d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.10.5-hb4ffafa_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 @@ -67,9 +80,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/future-0.18.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.2.0-h338b0a0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.1-h0b41bf4_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.6.0-h6f12383_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.57.0-py310h1b8f574_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.56.2-py310h1b8f574_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.2.1-h3d44ed6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda @@ -112,15 +127,20 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.2-h59595ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-13.0.0-h1ed0495_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.0.1-h87da1f6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-19_linux64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-19_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.8.0-hca28451_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.1.0-h77fa898_1.conda @@ -131,20 +151,26 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.3-h315aac3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.57.0-h3905398_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-h840a212_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.56.2-h3905398_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-19_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-h4ab18f5_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.24-pthreads_h413a1c8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.43-h2797004_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.23.3-hd1fb520_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.2.0-h7e041cc_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.1-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.1.0-hc0a3c3a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.19.0-hb90f79a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h29866fb_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.8.0-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.44.2-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.2-hd590300_0.conda @@ -180,6 +206,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/openjdk-20.0.0-hfea2f88_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.0-h385abfd_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda @@ -208,6 +235,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-13.0.0-py310hf9e7431_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 @@ -225,6 +253,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py310ha75aee5_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py310h71f11fc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.6.6-he8a937b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-28.9-h59595ed_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2023.03.02-h8c504da_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda @@ -235,6 +264,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.6.9-py310h624018c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rust-1.80.1-h0a17960_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-unknown-linux-gnu-1.80.1-h2c6d0dc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.54-h06160fa_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.24.0-py310h0cd1892_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py310ha3fb0e1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/selenium-4.11.2-pyhd8ed1ab_1.conda @@ -266,6 +296,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.14.1-h64cca9d_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/vega_datasets-0.9.0-pyhd3deb0d_0.tar.bz2 @@ -320,6 +351,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.7.4-h7fea801_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.6.2-hfc10710_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.9.3-h0dc2134_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.2.17-hd41bdd4_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.3.2-hab6341b_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.7.13-h868b204_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.13.32-h2566903_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.9.6-he6da789_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.3.17-h5997705_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.1.12-hd41bdd4_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.1.17-hd41bdd4_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.23.1-h4e3dc9b_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.156-h99d1da1_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.13.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda @@ -332,7 +376,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/brunsli-0.1-h046ec9c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/build-0.7.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h0d85af4_4.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.21.0-h10d778d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.2-h32b1619_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/c-blosc2-2.14.3-h0ae8482_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2023.7.22-h8857fd0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 @@ -357,8 +401,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/freetype-2.12.1-h60636b9_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/future-0.18.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hac325c4_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.1-hb7f2c08_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/grpcio-1.57.0-py310h0d4bf3c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.6.0-h8ac2a54_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/grpcio-1.56.2-py310h0d4bf3c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-73.2-hf5e326d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2 @@ -397,29 +443,39 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/lerc-4.0.0-hb486fe8_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20230125.3-cxx17_h000cb23_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libaec-1.1.2-he965462_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-13.0.0-hca2412d_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libavif16-1.0.1-h4fa63ff_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-19_osx64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.1.0-h00291cd_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.1.0-h00291cd_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.1.0-h00291cd_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-19_osx64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcrc32c-1.1.2-he49afe7_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.7.1-h726d00d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.1-hf95d169_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.19-ha4e1b8e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20191231-h0678c8f_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libevent-2.1.12-ha90c15b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-13_2_0_h97931a8_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-13.2.0-h2873a65_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.57.0-he6801ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.12.0-h37a168a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.56.2-he6801ca_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libhwy-1.1.0-h7728843_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.0.0-h0dc2134_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.10.3-hfb90b89_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-19_osx64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.58.0-h64cf6d3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.24-openmp_h48a4ad5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.43-h92b6c6a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-4.23.3-h5feb325_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.20-hfdf4475_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.0-h1b8f9f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.0-hd019ec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.19.0-h064b379_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.6.0-h684deea_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.8.0-hb7f2c08_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.44.2-h0dc2134_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.3.2-h0dc2134_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.15-hb7f2c08_0.conda @@ -454,6 +510,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/openjdk-20.0.0-h7d26f99_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.2-h7310d3a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.3.2-hd23fc13_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/orc-1.9.0-hef23039_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda @@ -480,6 +537,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-hc929b4f_1001.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-13.0.0-py310h6eef95f_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pyobjc-core-10.3.1-py310h1c7075f_1.conda @@ -577,6 +635,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.3-hab8b942_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.6.2-he70778a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.9.0-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.2.17-he70778a_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.3.2-hcf14f3f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.7.12-he297698_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.13.32-h3c776e5_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.9.5-h83b98fe_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.3.14-h24e141d_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.1.12-he70778a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.17-he70778a_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.23.0-h04fc39a_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.10.57-h0092a47_21.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.12.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda @@ -629,11 +700,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/future-0.18.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdk-pixbuf-2.42.10-h9bcf4fe_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gettext-0.21.1-h0186832_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.1-h1a8c8d9_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-2.76.4-ha614eb4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.76.4-ha614eb4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.6.0-h6da1cb0_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.13-h9f76cd9_1001.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/grpcio-1.57.0-py310h95b248a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/grpcio-1.56.2-py310h95b248a_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-7.3.0-h46e5fef_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-72.1-he12128b_0.conda @@ -674,23 +747,27 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20230125.3-cxx17_h13dd4ca_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.0.6-hb7217d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-13.0.0-h6e4acf5_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif-0.11.1-h9f83d30_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-17_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.0.9-h1a8c8d9_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.0.9-h1a8c8d9_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.0.9-h1a8c8d9_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-17_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.2.1-hc52a3a8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.1-ha82da77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.17-h1a8c8d9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20191231-hc8eb9b7_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h642e427_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.76.4-h24e9cb9_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.57.0-h9075ed4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.12.0-h05652e3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.56.2-h9075ed4_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-he4db4b2_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-17_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.52.0-hae82a92_0.conda @@ -701,7 +778,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.18-h27ca646_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.0-hfb93653_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.0-h7a5bd25_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.18.1-ha061701_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.5.0-h5dffbdd_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.8.0-h1a8c8d9_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.44.2-hb547adb_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.3.1-hb547adb_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.13-h9b22ae9_1004.tar.bz2 @@ -737,6 +816,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjdk-20.0.0-hbe7ddab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.0-hbc2ba62_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-1.9.0-h858f345_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.2.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.1-pyhd8ed1ab_0.conda @@ -767,6 +847,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-h27ca646_1001.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-13.0.0-py310h382c99a_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-10.3.1-py310hb3dec1a_1.conda @@ -850,28 +931,40 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.0.7-h1a8c8d9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.2-h4f39d0f_7.conda win-64: - - conda: https://conda.anaconda.org/conda-forge/win-64/_libavif_api-1.1.1-h57928b3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.13-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.9.1-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.7.1-h63175ca_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-21.2.0-py310ha8f682b_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.7.4-hc10d58f_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.6.2-hd5965a7_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.9.3-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.2.17-hd5965a7_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-event-stream-0.3.2-hea44b67_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.7.13-h6dd44e3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.13.32-ha16e049_6.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-mqtt-0.9.6-h5e85a83_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.3.17-ha8f72b6_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.1.12-hd5965a7_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.1.17-hd5965a7_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.23.1-h70f7a23_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aws-sdk-cpp-1.11.156-h02852bd_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.13.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/blosc-1.21.6-h85f69ea_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/blosc-1.21.5-hdccc3a2_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py310h00ffb61_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/build-0.7.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h8ffe710_4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/c-ares-1.21.0-hcfcfb64_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/c-blosc2-2.15.1-hb461149_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/c-blosc2-2.14.3-h183a6f4_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2023.7.22-h56e8100_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 @@ -897,10 +990,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/future-0.18.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/giflib-5.2.2-h64bf75a_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/grpcio-1.57.0-py310hb84602e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/grpcio-1.56.2-py310hb84602e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/imagecodecs-2024.6.1-py310h40cd1a8_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/imagecodecs-2024.1.1-py310hda7f504_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.31.5-pyh8c1a49c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda @@ -936,15 +1029,20 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/libabseil-20230125.3-cxx17_h63175ca_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libaec-1.1.3-h63175ca_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libavif16-1.1.1-h4e96d62_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-13.0.0-hba3d5be_3_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libavif-1.0.1-h7a9aacb_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-19_win64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.1.0-hcfcfb64_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.1.0-hcfcfb64_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.1.0-hcfcfb64_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-19_win64_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.10.1-h1ee3ff0_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.20-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libevent-2.1.12-h3671451_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.57.0-hea2d5f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.12.0-hbc1b25b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.56.2-hea2d5f7_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.9.3-default_haede6df_1009.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-h8ffe710_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda @@ -953,7 +1051,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-4.23.3-h1975477_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.20-hc70643c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.46.1-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.0-h7dfc565_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libthrift-0.19.0-ha2b3283_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.6.0-hddb2be6_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libutf8proc-2.8.0-h82a8f57_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.4.0-hcfcfb64_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.11.6-hc3477c8_0.conda @@ -989,10 +1090,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-20.5.1-h57928b3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.1.2-py310hb9d903e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-1.26.4-py310hf667824_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openjdk-20.0.0-h57928b3_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/orc-1.9.0-hf2b8f0d_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda @@ -1018,6 +1120,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-hfa6e2cd_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-13.0.0-py310hd0bb7c2_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh0701188_6.tar.bz2 @@ -1053,12 +1156,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyh08f2357_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/snappy-1.2.1-h23299a8_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/snappy-1.1.10-hfb803bf_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/svt-av1-2.2.1-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/svt-av1-1.7.0-h63175ca_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/symlink-exe-runtime-1.0-hcfcfb64_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/taplo-0.9.3-h823019e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.10.0-h91493d7_2.conda @@ -1107,20 +1210,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-ha9f60a1_6.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zfp-1.0.1-he0c23c2_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.2.2-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.0.7-hcfcfb64_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda packages: -- kind: conda - name: _libavif_api - version: 1.1.1 - build: h57928b3_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/_libavif_api-1.1.1-h57928b3_1.conda - sha256: 1a133c072264589452927dac6f7a804a544b0c4b362e4add2497ac76ef8787f1 - md5: fe3d820ded73ef5bd7415cb821f0f77e - size: 9201 - timestamp: 1724672649849 - kind: conda name: _libgcc_mutex version: '0.1' @@ -1322,20 +1414,20 @@ packages: timestamp: 1694226514540 - kind: conda name: aom - version: 3.9.1 - build: he0c23c2_0 + version: 3.7.1 + build: h63175ca_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/aom-3.9.1-he0c23c2_0.conda - sha256: 0524d0c0b61dacd0c22ac7a8067f977b1d52380210933b04141f5099c5b6fec7 - md5: 3d7c14285d3eb3239a76ff79063f27a5 + url: https://conda.anaconda.org/conda-forge/win-64/aom-3.7.1-h63175ca_0.conda + sha256: aa317fd3271b4fabbfe3b800cc0d55a9bbfb9b5aa7f91bfb08c86f2da08d2729 + md5: 1b52cb3995f780a5c0a52fc1bb81b337 depends: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: BSD-2-Clause license_family: BSD - size: 1958151 - timestamp: 1718551737234 + size: 1955945 + timestamp: 1700530921759 - kind: conda name: appnope version: 0.1.3 @@ -1513,83 +1605,1037 @@ packages: platform: win license: Apache-2.0 license_family: Apache - size: 100096 - timestamp: 1696129131844 + size: 100096 + timestamp: 1696129131844 +- kind: conda + name: asttokens + version: 2.2.1 + build: pyhd8ed1ab_0 + subdir: osx-arm64 + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.2.1-pyhd8ed1ab_0.conda + sha256: 7ed530efddd47a96c11197906b4008405b90e3bc2f4e0df722a36e0e6103fd9c + md5: bf7f54dd0f25c3f06ecb82a07341841a + depends: + - python >=3.5 + - six * + arch: aarch64 + platform: osx + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/asttokens + size: 27831 + timestamp: 1670264089059 +- kind: conda + name: asttokens + version: 2.4.1 + build: pyhd8ed1ab_0 + subdir: win-64 + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda + sha256: 708168f026df19a0344983754d27d1f7b28bb21afc7b97a82f02c4798a3d2111 + md5: 5f25798dcefd8252ce5f9dc494d5f571 + depends: + - python >=3.5 + - six >=1.12.0 + arch: x86_64 + platform: win + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/asttokens + size: 28922 + timestamp: 1698341257884 +- kind: conda + name: async-lru + version: 2.0.4 + build: pyhd8ed1ab_0 + subdir: win-64 + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda + sha256: 7ed83731979fe5b046c157730e50af0e24454468bbba1ed8fc1a3107db5d7518 + md5: 3d081de3a6ea9f894bbb585e8e3a4dcb + depends: + - python >=3.8 + - typing_extensions >=4.0.0 + arch: x86_64 + platform: win + license: MIT + license_family: MIT + purls: + - pkg:pypi/async-lru + size: 15342 + timestamp: 1690563152778 +- kind: conda + name: attrs + version: 24.2.0 + build: pyh71513ae_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + sha256: 28dba85a7e0f7fb57d7315e13f603d1e41b83c5b88aa2a602596b52c833a2ff8 + md5: 6732fa52eb8e66e5afeb32db8701a791 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 56048 + timestamp: 1722977241383 +- kind: conda + name: aws-c-auth + version: 0.7.3 + build: hab8b942_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.3-hab8b942_3.conda + sha256: f27b21ba66bfdccd6e892c78f83d53cbc21ce8fdf594c3d677eede9f225b3820 + md5: 8c9ad5cf200ddc532d73cd63a4458b76 + depends: + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.0,<0.9.1.0a0 + - aws-c-http >=0.7.12,<0.7.13.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - aws-c-sdkutils >=0.1.12,<0.1.13.0a0 + license: Apache-2.0 + license_family: Apache + size: 92315 + timestamp: 1692935723694 +- kind: conda + name: aws-c-auth + version: 0.7.4 + build: h7fea801_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.7.4-h7fea801_1.conda + sha256: 316b595cd5491b68b890cfd8ec9f5401a78274774667f9be7bbb9c1498c4bcd0 + md5: 6a391ec90c3efedcd4e29eecdc10198a + depends: + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-http >=0.7.13,<0.7.14.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - aws-c-sdkutils >=0.1.12,<0.1.13.0a0 + license: Apache-2.0 + license_family: Apache + size: 89157 + timestamp: 1695806962937 +- kind: conda + name: aws-c-auth + version: 0.7.4 + build: hc10d58f_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.7.4-hc10d58f_1.conda + sha256: beea4633962b493cb6b19e54331b3a3cdfff006ee92fcd8bf80fe432ef1eb254 + md5: 7ed6baf38798ebb4152b821c6b04f061 + depends: + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-http >=0.7.13,<0.7.14.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - aws-c-sdkutils >=0.1.12,<0.1.13.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 98155 + timestamp: 1695807069215 +- kind: conda + name: aws-c-auth + version: 0.7.4 + build: hc8144f4_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.4-hc8144f4_1.conda + sha256: a41d33da5f25bb6666805a8ac72ff7f03742ce6d311c4241de7beb94681c1289 + md5: 81b00630260ff8c9388ee3913465b208 + depends: + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-http >=0.7.13,<0.7.14.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - aws-c-sdkutils >=0.1.12,<0.1.13.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 101876 + timestamp: 1695806693576 +- kind: conda + name: aws-c-cal + version: 0.6.2 + build: h09139f6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.2-h09139f6_2.conda + sha256: f6f91c7d04be3888365499628f3369fc94dada451360bd82e5e3c61abeb7fc3e + md5: 29c3112841eee851f6f5451f6d705782 + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - libgcc-ng >=12 + - openssl >=3.1.3,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 50982 + timestamp: 1695755343237 +- kind: conda + name: aws-c-cal + version: 0.6.2 + build: hd5965a7_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.6.2-hd5965a7_2.conda + sha256: bf8bc4eae5baacc4a12bef32c25a7f43129b79cf167d2e45c5c5b8672af50815 + md5: cbfd6b62693f67233f205e72e505109a + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 51212 + timestamp: 1695756000021 +- kind: conda + name: aws-c-cal + version: 0.6.2 + build: he70778a_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.6.2-he70778a_1.conda + sha256: a79d40403b1e07f16c7631b1de255a5852f8181a8109d07ee14c3f03b1d050c1 + md5: 83a5e6490ab433f6045dfeb096f93c17 + depends: + - aws-c-common >=0.9.0,<0.9.1.0a0 + license: Apache-2.0 + license_family: Apache + size: 36212 + timestamp: 1695089175156 +- kind: conda + name: aws-c-cal + version: 0.6.2 + build: hfc10710_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.6.2-hfc10710_2.conda + sha256: 8752777b77fdb1a8b60ec2903916fd4397ad0ddff8618ee8e5156a3cbfe4095a + md5: a340450b9351a8979cc1130fece3cc9f + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + license: Apache-2.0 + license_family: Apache + size: 40963 + timestamp: 1695755654862 +- kind: conda + name: aws-c-common + version: 0.9.0 + build: hb547adb_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.9.0-hb547adb_0.conda + sha256: ec15d841f362e6a4468e06117d985f7f6007568ba832416ff146d239b2f7f0c0 + md5: 7d7f91d3daa8d7bbf1da8c97038e336f + license: Apache-2.0 + license_family: Apache + size: 182127 + timestamp: 1691436103004 +- kind: conda + name: aws-c-common + version: 0.9.3 + build: h0dc2134_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.9.3-h0dc2134_0.conda + sha256: cd186a847486ecc6f4c90f321552422a148b30bde40c1984cb3c2cdedb5b6842 + md5: 08315e4f10bb6df0b6457dd2c4aefe04 + license: Apache-2.0 + license_family: Apache + size: 203404 + timestamp: 1695654891068 +- kind: conda + name: aws-c-common + version: 0.9.3 + build: hcfcfb64_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.9.3-hcfcfb64_0.conda + sha256: 4a83811c573c965c55f3f67c149f232ce81c157391b651699a8c8ad22b743ead + md5: ef7faef92f32551745303430e45d61d8 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 217632 + timestamp: 1695654879342 +- kind: conda + name: aws-c-common + version: 0.9.3 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.3-hd590300_0.conda + sha256: 6f3a9c285199f828ac1917112495b4e5f4ca578d385442f33aae282bd95618ac + md5: 434466e97a4174b0c4de114eb7100550 + depends: + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 220352 + timestamp: 1695654440131 +- kind: conda + name: aws-c-compression + version: 0.2.17 + build: h184a658_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h184a658_3.conda + sha256: 07f3431f097f64c1ee916c27ac7745bbf27a9b06768fa0449d9e0eaea1b6f4d2 + md5: c62775b5028b5a4eda25037f9af7f5b3 + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 19162 + timestamp: 1695755217636 +- kind: conda + name: aws-c-compression + version: 0.2.17 + build: hd41bdd4_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.2.17-hd41bdd4_3.conda + sha256: 922f2be31994d2ba277f2452c801a35c4695335938788bd280f73ab1cbd189df + md5: 8477d925cf7a7972e85139c385ec6f45 + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + license: Apache-2.0 + license_family: Apache + size: 18078 + timestamp: 1695755408655 +- kind: conda + name: aws-c-compression + version: 0.2.17 + build: hd5965a7_3 + build_number: 3 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.2.17-hd5965a7_3.conda + sha256: 5d63e840b6ba0f737503584e14ed94b94397e68e1768f1d76b263dee771a07dd + md5: b0e3df9a002b961bf5fa2400235a8f74 + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 22691 + timestamp: 1695755699057 +- kind: conda + name: aws-c-compression + version: 0.2.17 + build: he70778a_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.2.17-he70778a_2.conda + sha256: 0e5a93b88d77405af89586f4b776f68a3cfd1c9ed44da57ac2a6b042dc96a26c + md5: d7a30e85a98d14dcd2d0ca8ae8ca4372 + depends: + - aws-c-common >=0.9.0,<0.9.1.0a0 + license: Apache-2.0 + license_family: Apache + size: 18406 + timestamp: 1691607429629 +- kind: conda + name: aws-c-event-stream + version: 0.3.2 + build: hab6341b_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.3.2-hab6341b_1.conda + sha256: ed52fda59f2c42a50a53055f909189d48169fa875f9fdcf4aa280c326aac3123 + md5: ea7090c6dce0f098e6f27531204ae9c3 + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - aws-checksums >=0.1.17,<0.1.18.0a0 + - libcxx >=15.0.7 + license: Apache-2.0 + license_family: Apache + size: 46908 + timestamp: 1695787042268 +- kind: conda + name: aws-c-event-stream + version: 0.3.2 + build: hcf14f3f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.3.2-hcf14f3f_0.conda + sha256: 1923838df400cf19d21a54dc7f19afe5a949339cd998725504c936fe0b24d68a + md5: 6c6fc8e9f1fa171136e58a33ffb95d5f + depends: + - aws-c-common >=0.9.0,<0.9.1.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - aws-checksums >=0.1.17,<0.1.18.0a0 + - libcxx >=15.0.7 + license: Apache-2.0 + license_family: Apache + size: 48862 + timestamp: 1692836283506 +- kind: conda + name: aws-c-event-stream + version: 0.3.2 + build: hd6ebb48_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.2-hd6ebb48_1.conda + sha256: 32385f297271fcbdfa97adeceea56c1317ffb96d94a681933805f97ef30bda12 + md5: ef9692e74f437004ef47a4363552bcb6 + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - aws-checksums >=0.1.17,<0.1.18.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 53665 + timestamp: 1695786768147 +- kind: conda + name: aws-c-event-stream + version: 0.3.2 + build: hea44b67_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-event-stream-0.3.2-hea44b67_1.conda + sha256: 9aa0bb1e4417b17935094e8fadfba1bc9e00f7e20a9e36f04d790ea7ab4cf308 + md5: 8714f7f7c40e43d9830f41b8f010b9d6 + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - aws-checksums >=0.1.17,<0.1.18.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 54351 + timestamp: 1695787146551 +- kind: conda + name: aws-c-http + version: 0.7.12 + build: he297698_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.7.12-he297698_1.conda + sha256: 5afb1a690124d76a6771b52567fe38a348e5feb113a0c6ea173123dbaaa51f51 + md5: 8d952fa86e3c02043e85650080ba817b + depends: + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.0,<0.9.1.0a0 + - aws-c-compression >=0.2.17,<0.2.18.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + license: Apache-2.0 + license_family: Apache + size: 157732 + timestamp: 1692913796109 +- kind: conda + name: aws-c-http + version: 0.7.13 + build: h6dd44e3_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.7.13-h6dd44e3_1.conda + sha256: 536f6e1153fd374ed75632bb568a7b9ab106e8634084235b56f128e9be65175e + md5: cf2be4ecb54d59f946b6041859051b66 + depends: + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-compression >=0.2.17,<0.2.18.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 179477 + timestamp: 1695787045722 +- kind: conda + name: aws-c-http + version: 0.7.13 + build: h868b204_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.7.13-h868b204_1.conda + sha256: f3db9629daee50f27f86676a2d4dec58c9aa2d6d4a6d0f32433928bac7d58dcd + md5: f43a2a8cae0408db86d4461359a0dbe2 + depends: + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-compression >=0.2.17,<0.2.18.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + license: Apache-2.0 + license_family: Apache + size: 164664 + timestamp: 1695786938189 +- kind: conda + name: aws-c-http + version: 0.7.13 + build: hc690213_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.13-hc690213_1.conda + sha256: 609016dcb4c3480362ba6307759b9dabc59fd02f936d6c09f299c46964c19a7c + md5: c912831e92c565598072243266073161 + depends: + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-compression >=0.2.17,<0.2.18.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 193066 + timestamp: 1695786758113 +- kind: conda + name: aws-c-io + version: 0.13.32 + build: h161b759_6 + build_number: 6 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.32-h161b759_6.conda + sha256: 76b51d2b2911ee0acb79692fefd524ae91b92e92dd5ddf4d89958d29fc1460ee + md5: 26c909c7fc3fddc015a9ab4ebfcaed41 + depends: + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.3,<0.9.4.0a0 + - libgcc-ng >=12 + - s2n >=1.3.54,<1.3.55.0a0 + license: Apache-2.0 + license_family: Apache + size: 153867 + timestamp: 1696719447343 +- kind: conda + name: aws-c-io + version: 0.13.32 + build: h2566903_6 + build_number: 6 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.13.32-h2566903_6.conda + sha256: 196f33bf7304c08c913b652d58463772a7db6c47d0d2a9c1be9d92b14094ff0a + md5: da6927252893084bf95269d745eedada + depends: + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.3,<0.9.4.0a0 + license: Apache-2.0 + license_family: Apache + size: 135831 + timestamp: 1696719527 +- kind: conda + name: aws-c-io + version: 0.13.32 + build: h3c776e5_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.13.32-h3c776e5_3.conda + sha256: 5600008b82bdf1d3b025a99e6a39ca9b6cedf901c2c98357cccc7b4fb94237ba + md5: f88f5e6e0dbe5e19d55344b8c2cfc900 + depends: + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.0,<0.9.1.0a0 + license: Apache-2.0 + license_family: Apache + size: 139753 + timestamp: 1694551424429 +- kind: conda + name: aws-c-io + version: 0.13.32 + build: ha16e049_6 + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.13.32-ha16e049_6.conda + sha256: 2ff7e7c16c04e4bdd4e96bf02239afabcc071aa96f199a58c8a57881886148b8 + md5: 75cb3bc0a2d05063bda6a900eb926b9d + depends: + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.3,<0.9.4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 158041 + timestamp: 1696720098642 +- kind: conda + name: aws-c-mqtt + version: 0.9.5 + build: h83b98fe_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.9.5-h83b98fe_1.conda + sha256: 1e02fdc8853eaf607093930d6696f0eedd3f4caf65addf2ebcb12a48b438b984 + md5: 2b1cf8c40fe264f66c51ddfbf4a6c643 + depends: + - aws-c-common >=0.9.0,<0.9.1.0a0 + - aws-c-http >=0.7.12,<0.7.13.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + license: Apache-2.0 + license_family: Apache + size: 123424 + timestamp: 1692895315126 +- kind: conda + name: aws-c-mqtt + version: 0.9.6 + build: h32970c0_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.6-h32970c0_2.conda + sha256: ff961111d41afc107bcb263d1ce727a2900b4546adbb7bae03046e1473157e64 + md5: 21dd1cb1e73b0ce2ea31e9f9f692e051 + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-http >=0.7.13,<0.7.14.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 162703 + timestamp: 1695917197677 +- kind: conda + name: aws-c-mqtt + version: 0.9.6 + build: h5e85a83_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-mqtt-0.9.6-h5e85a83_2.conda + sha256: 8f6e103b8a5c85275b541fe52d69b879aa96c9996f5edc81fd6a21d662bc7392 + md5: 348bde350e6eee35c3dd310cef20775f + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-http >=0.7.13,<0.7.14.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 157202 + timestamp: 1695917786835 +- kind: conda + name: aws-c-mqtt + version: 0.9.6 + build: he6da789_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.9.6-he6da789_2.conda + sha256: 343781159bb6bc47dd8e69c41eaeaacfc4d146cfa18fd01bf2c75e8b7bd45ba6 + md5: 4b30f7acb9cf20c7570b000213484f52 + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-http >=0.7.13,<0.7.14.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + license: Apache-2.0 + license_family: Apache + size: 139336 + timestamp: 1695917405265 +- kind: conda + name: aws-c-s3 + version: 0.3.14 + build: h24e141d_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.3.14-h24e141d_3.conda + sha256: f9bf1668f323197268f9239722cc9273f2ebb4329ab48c469d0798958a952bb3 + md5: 0fbd1f360ec8b6b08669e900cf31a2bd + depends: + - aws-c-auth >=0.7.3,<0.7.4.0a0 + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.0,<0.9.1.0a0 + - aws-c-http >=0.7.12,<0.7.13.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - aws-checksums >=0.1.17,<0.1.18.0a0 + license: Apache-2.0 + license_family: Apache + size: 78329 + timestamp: 1692950426132 +- kind: conda + name: aws-c-s3 + version: 0.3.17 + build: h5997705_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.3.17-h5997705_3.conda + sha256: 4146f40b392860c1bb9c76e39d5a6aa95a8429da4d5a7e10b30318147faddfe8 + md5: e4e8a0ea0385a06a83944f603e56320e + depends: + - aws-c-auth >=0.7.4,<0.7.5.0a0 + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-http >=0.7.13,<0.7.14.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - aws-checksums >=0.1.17,<0.1.18.0a0 + license: Apache-2.0 + license_family: Apache + size: 74663 + timestamp: 1695816593583 +- kind: conda + name: aws-c-s3 + version: 0.3.17 + build: ha8f72b6_3 + build_number: 3 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.3.17-ha8f72b6_3.conda + sha256: ee731c295a74363afae65e3268d524e3a3d8d198aaaf0b0ab6af4c0cbfd56756 + md5: e6e98f522c89d8b02766d09468d790f3 + depends: + - aws-c-auth >=0.7.4,<0.7.5.0a0 + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-http >=0.7.13,<0.7.14.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - aws-checksums >=0.1.17,<0.1.18.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 83349 + timestamp: 1695817009484 +- kind: conda + name: aws-c-s3 + version: 0.3.17 + build: hb5e3142_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.17-hb5e3142_3.conda + sha256: e2735df82153f7bc29d9d118453349b8d1fdd565e43764188af502fbcd32635a + md5: f0eeadc3f7fc9a29b7ce416897056826 + depends: + - aws-c-auth >=0.7.4,<0.7.5.0a0 + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-http >=0.7.13,<0.7.14.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - aws-checksums >=0.1.17,<0.1.18.0a0 + - libgcc-ng >=12 + - openssl >=3.1.3,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 86367 + timestamp: 1695816475381 +- kind: conda + name: aws-c-sdkutils + version: 0.1.12 + build: h184a658_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.12-h184a658_2.conda + sha256: f8cea4495d2d6c622aa65257aa24958fde6e5f5d518772036ba1fe5dfd0666ad + md5: ba06d81b81ec3eaf4ee83cd47f808134 + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 53021 + timestamp: 1695742870649 +- kind: conda + name: aws-c-sdkutils + version: 0.1.12 + build: hd41bdd4_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.1.12-hd41bdd4_2.conda + sha256: 763f1091d0abae8ec74ffe6077788e4a558e88e0a0c9aaba69c66b88f91f9b14 + md5: ca04a04205202fee021697f614bd59dd + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + license: Apache-2.0 + license_family: Apache + size: 47319 + timestamp: 1695743229851 +- kind: conda + name: aws-c-sdkutils + version: 0.1.12 + build: hd5965a7_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.1.12-hd5965a7_2.conda + sha256: 029e039ff2bc526d5f31637a5525192787b3457b03cf33e479cd07641a9b5430 + md5: 5ac1b07dec55938a5f410e04aba2e27a + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 51875 + timestamp: 1695743449932 +- kind: conda + name: aws-c-sdkutils + version: 0.1.12 + build: he70778a_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.1.12-he70778a_1.conda + sha256: 60bf0d3e7bd7bb368bbbc03f917b2a97198642ce8ed491f80c5cacbb6498c566 + md5: a90a6413bbf361584033773c19cecb65 + depends: + - aws-c-common >=0.9.0,<0.9.1.0a0 + license: Apache-2.0 + license_family: Apache + size: 48721 + timestamp: 1691457290683 +- kind: conda + name: aws-checksums + version: 0.1.17 + build: h184a658_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h184a658_2.conda + sha256: feeea13a9a15c4dd27a2244fedbe439ee7548192b21e5e6cf6c07142af5a92d1 + md5: 10fcdbd02ba7fa0827fb8f7d94f8375b + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - libgcc-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 50130 + timestamp: 1695743103287 +- kind: conda + name: aws-checksums + version: 0.1.17 + build: hd41bdd4_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.1.17-hd41bdd4_2.conda + sha256: d59f0b77d02fe275f0d758148c5705c72dfca85d97b55c9a227579eb284dd6a2 + md5: e4d679bf261bafcf215804bcbcd63e6f + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + license: Apache-2.0 + license_family: Apache + size: 48675 + timestamp: 1695743318668 +- kind: conda + name: aws-checksums + version: 0.1.17 + build: hd5965a7_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.1.17-hd5965a7_2.conda + sha256: 0c9e36f6b0729e8b0507b16fd10ab01b6bf59afd99d7d3b6fa93151485ac481f + md5: 750eaf78f1354c70743cb15c1e2ad4ac + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 52214 + timestamp: 1695743755136 +- kind: conda + name: aws-checksums + version: 0.1.17 + build: he70778a_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.17-he70778a_1.conda + sha256: 52606dcecd60ccc587d3c8f100cc30b7a8101f655e8d9b26a90dac9996030f52 + md5: 5892420ce138d63e1f6e08c9915f0308 + depends: + - aws-c-common >=0.9.0,<0.9.1.0a0 + license: Apache-2.0 + license_family: Apache + size: 49182 + timestamp: 1691457138566 +- kind: conda + name: aws-crt-cpp + version: 0.23.0 + build: h04fc39a_5 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.23.0-h04fc39a_5.conda + sha256: fdce32ae99b57e0fe9d1b52e56d4dea40c641d9bfa3b38239a9f22c69def37f7 + md5: 9bfad48efc52d9142f7416978b960ffe + depends: + - aws-c-auth >=0.7.3,<0.7.4.0a0 + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.0,<0.9.1.0a0 + - aws-c-event-stream >=0.3.2,<0.3.3.0a0 + - aws-c-http >=0.7.12,<0.7.13.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - aws-c-mqtt >=0.9.5,<0.9.6.0a0 + - aws-c-s3 >=0.3.14,<0.3.15.0a0 + - aws-c-sdkutils >=0.1.12,<0.1.13.0a0 + - libcxx >=15.0.7 + license: Apache-2.0 + license_family: Apache + size: 223696 + timestamp: 1692969704783 +- kind: conda + name: aws-crt-cpp + version: 0.23.1 + build: h4e3dc9b_5 + build_number: 5 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.23.1-h4e3dc9b_5.conda + sha256: 63d6022f15f57422243065b09d940cb7c336883bd3d581ce8d8e0a9ae19bc64d + md5: 327a1a3776bb737a8de1a02203b67c18 + depends: + - aws-c-auth >=0.7.4,<0.7.5.0a0 + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-event-stream >=0.3.2,<0.3.3.0a0 + - aws-c-http >=0.7.13,<0.7.14.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - aws-c-mqtt >=0.9.6,<0.9.7.0a0 + - aws-c-s3 >=0.3.17,<0.3.18.0a0 + - aws-c-sdkutils >=0.1.12,<0.1.13.0a0 + - libcxx >=15.0.7 + license: Apache-2.0 + license_family: Apache + size: 275005 + timestamp: 1695993989586 +- kind: conda + name: aws-crt-cpp + version: 0.23.1 + build: h70f7a23_5 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.23.1-h70f7a23_5.conda + sha256: 7b39b5bbd278838543655068f8779e538b6cd2b7931689762127082b544eea4e + md5: c0c9016cd7385ad14dcd575ef349c620 + depends: + - aws-c-auth >=0.7.4,<0.7.5.0a0 + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-event-stream >=0.3.2,<0.3.3.0a0 + - aws-c-http >=0.7.13,<0.7.14.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - aws-c-mqtt >=0.9.6,<0.9.7.0a0 + - aws-c-s3 >=0.3.17,<0.3.18.0a0 + - aws-c-sdkutils >=0.1.12,<0.1.13.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 236477 + timestamp: 1695993950546 +- kind: conda + name: aws-crt-cpp + version: 0.23.1 + build: h94c364a_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.23.1-h94c364a_5.conda + sha256: 2c3af3148c4625a9f4bc8cd46b0d55f6e39f7381ee54095752c62f1c1598c24b + md5: 0d9257d4ebe9af80677c178f172d3c39 + depends: + - aws-c-auth >=0.7.4,<0.7.5.0a0 + - aws-c-cal >=0.6.2,<0.6.3.0a0 + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-event-stream >=0.3.2,<0.3.3.0a0 + - aws-c-http >=0.7.13,<0.7.14.0a0 + - aws-c-io >=0.13.32,<0.13.33.0a0 + - aws-c-mqtt >=0.9.6,<0.9.7.0a0 + - aws-c-s3 >=0.3.17,<0.3.18.0a0 + - aws-c-sdkutils >=0.1.12,<0.1.13.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 323319 + timestamp: 1695993507703 - kind: conda - name: asttokens - version: 2.2.1 - build: pyhd8ed1ab_0 + name: aws-sdk-cpp + version: 1.10.57 + build: h0092a47_21 + build_number: 21 subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.2.1-pyhd8ed1ab_0.conda - sha256: 7ed530efddd47a96c11197906b4008405b90e3bc2f4e0df722a36e0e6103fd9c - md5: bf7f54dd0f25c3f06ecb82a07341841a - depends: - - python >=3.5 - - six * - arch: aarch64 - platform: osx + url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.10.57-h0092a47_21.conda + sha256: b11bcb92ea37c422f3fa5939ad953a7eff10c711f2e83082351d38f1a1aad8c8 + md5: e2e6eecb276e5faa419c1ecfc6a831b1 + depends: + - aws-c-common >=0.9.0,<0.9.1.0a0 + - aws-c-event-stream >=0.3.2,<0.3.3.0a0 + - aws-crt-cpp >=0.23.0,<0.23.1.0a0 + - libcurl >=8.2.1,<9.0a0 + - libcxx >=15.0.7 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.2,<4.0a0 license: Apache-2.0 license_family: Apache - purls: - - pkg:pypi/asttokens - size: 27831 - timestamp: 1670264089059 + size: 3363572 + timestamp: 1692911449964 - kind: conda - name: asttokens - version: 2.4.1 - build: pyhd8ed1ab_0 + name: aws-sdk-cpp + version: 1.11.156 + build: h02852bd_3 + build_number: 3 subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - sha256: 708168f026df19a0344983754d27d1f7b28bb21afc7b97a82f02c4798a3d2111 - md5: 5f25798dcefd8252ce5f9dc494d5f571 - depends: - - python >=3.5 - - six >=1.12.0 - arch: x86_64 - platform: win + url: https://conda.anaconda.org/conda-forge/win-64/aws-sdk-cpp-1.11.156-h02852bd_3.conda + sha256: e183eda509e1079ef8e72927c68ed3108a3006b67d8a07a39edad49dc79636e3 + md5: 1a232e6d0c8b7ce34b0f819e072fbf7c + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-event-stream >=0.3.2,<0.3.3.0a0 + - aws-checksums >=0.1.17,<0.1.18.0a0 + - aws-crt-cpp >=0.23.1,<0.23.2.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: Apache - purls: - - pkg:pypi/asttokens - size: 28922 - timestamp: 1698341257884 + size: 3228453 + timestamp: 1696018718586 - kind: conda - name: async-lru - version: 2.0.4 - build: pyhd8ed1ab_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda - sha256: 7ed83731979fe5b046c157730e50af0e24454468bbba1ed8fc1a3107db5d7518 - md5: 3d081de3a6ea9f894bbb585e8e3a4dcb - depends: - - python >=3.8 - - typing_extensions >=4.0.0 - arch: x86_64 - platform: win - license: MIT - license_family: MIT - purls: - - pkg:pypi/async-lru - size: 15342 - timestamp: 1690563152778 + name: aws-sdk-cpp + version: 1.11.156 + build: h6600424_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.156-h6600424_3.conda + sha256: ed42d559b18025f422d4b4ae81e0574eae200c3e321b9f97e3b269a6d064994a + md5: 6caecdec46acbd4743807b4be6efce33 + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-event-stream >=0.3.2,<0.3.3.0a0 + - aws-checksums >=0.1.17,<0.1.18.0a0 + - aws-crt-cpp >=0.23.1,<0.23.2.0a0 + - libcurl >=8.3.0,<9.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.3,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 3432093 + timestamp: 1696017730687 - kind: conda - name: attrs - version: 24.2.0 - build: pyh71513ae_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda - sha256: 28dba85a7e0f7fb57d7315e13f603d1e41b83c5b88aa2a602596b52c833a2ff8 - md5: 6732fa52eb8e66e5afeb32db8701a791 - depends: - - python >=3.7 - license: MIT - license_family: MIT - size: 56048 - timestamp: 1722977241383 + name: aws-sdk-cpp + version: 1.11.156 + build: h99d1da1_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.156-h99d1da1_3.conda + sha256: b757126d923fb4bf78c4d97025d0b636579a7814d319e493219e36e8f0ab8439 + md5: c2fed554b5b634befb8849c87dc193c4 + depends: + - aws-c-common >=0.9.3,<0.9.4.0a0 + - aws-c-event-stream >=0.3.2,<0.3.3.0a0 + - aws-checksums >=0.1.17,<0.1.18.0a0 + - aws-crt-cpp >=0.23.1,<0.23.2.0a0 + - libcurl >=8.3.0,<9.0a0 + - libcxx >=15.0.7 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.3,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 3190406 + timestamp: 1696018395381 - kind: conda name: babel version: 2.12.1 @@ -1810,6 +2856,26 @@ packages: license_family: BSD size: 48692 timestamp: 1693657088079 +- kind: conda + name: blosc + version: 1.21.5 + build: hdccc3a2_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/blosc-1.21.5-hdccc3a2_0.conda + sha256: 73cee35e5366ce998ef36ccccb4c11ef9ead297886cc08269379f91539131288 + md5: 77a5cea2ce92907b7d1e7954457a526a + depends: + - libzlib >=1.2.13,<2.0.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - snappy >=1.1.10,<1.2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.5,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 50069 + timestamp: 1693657396550 - kind: conda name: blosc version: 1.21.5 @@ -1830,26 +2896,6 @@ packages: license_family: BSD size: 49891 timestamp: 1693657206065 -- kind: conda - name: blosc - version: 1.21.6 - build: h85f69ea_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/blosc-1.21.6-h85f69ea_0.conda - sha256: 1289853b41df5355f45664f1cb015c868df1f570cf743e9e4a5bda8efe8c42fa - md5: 2390269374fded230fcbca8332a4adc0 - depends: - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - snappy >=1.2.0,<1.3.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - - zstd >=1.5.6,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD - size: 50135 - timestamp: 1719266616208 - kind: conda name: brotli version: 1.0.9 @@ -2193,20 +3239,6 @@ packages: license_family: MIT size: 101998 timestamp: 1684783026131 -- kind: conda - name: c-ares - version: 1.21.0 - build: h10d778d_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.21.0-h10d778d_0.conda - sha256: 7450d861c07e74b10dfcf3ba680b384cf22f1c2dd34c3eba763ab5920376bf79 - md5: 88426162f781739069a6bd178841ed5d - arch: x86_64 - platform: osx - license: MIT - license_family: MIT - size: 108924 - timestamp: 1698936476851 - kind: conda name: c-ares version: 1.21.0 @@ -2227,20 +3259,33 @@ packages: timestamp: 1698936959417 - kind: conda name: c-ares - version: 1.21.0 - build: hd590300_0 + version: 1.34.2 + build: h32b1619_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.2-h32b1619_0.conda + sha256: 972d0403c92c9cd1d1c60e34d80991258125ee880cf5a9289ae83a443d8970cd + md5: 724edfea6dde646c1faf2ce1423e0faa + depends: + - __osx >=10.13 + license: MIT + license_family: MIT + size: 182342 + timestamp: 1729006698430 +- kind: conda + name: c-ares + version: 1.34.2 + build: heb4867d_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.21.0-hd590300_0.conda - sha256: dfe0e81d5462fced79fd0f99edeec94c9b27268cb04238638180981af2f889f1 - md5: c06fa0440048270817b9e3142cc661bf + url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.2-heb4867d_0.conda + sha256: c2a515e623ac3e17a56027c06098fbd5ab47afefefbd386b4c21289f2ec55139 + md5: 2b780c0338fc0ffa678ac82c54af51fd depends: - - libgcc-ng >=12 - arch: x86_64 - platform: linux + - __glibc >=2.28,<3.0.a0 + - libgcc >=13 license: MIT license_family: MIT - size: 121680 - timestamp: 1698936210587 + size: 205797 + timestamp: 1729006575652 - kind: conda name: c-blosc2 version: 2.10.0 @@ -2299,23 +3344,23 @@ packages: timestamp: 1712415524207 - kind: conda name: c-blosc2 - version: 2.15.1 - build: hb461149_0 + version: 2.14.3 + build: h183a6f4_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/c-blosc2-2.15.1-hb461149_0.conda - sha256: a380bc3f2bbc423fec963e9ab9284eb67deb8d3d67a0676fc3f5ccce8497685c - md5: a84e7df0bc9dc85a9e3db6c2870c9dcf + url: https://conda.anaconda.org/conda-forge/win-64/c-blosc2-2.14.3-h183a6f4_0.conda + sha256: 32aa27a47c96975f28fce8618d57d5d0b2a00cc4dc60836a214732fa1c0e4993 + md5: cb3c2e859ac57ae26fe5b0b35546fda9 depends: - lz4-c >=1.9.3,<1.10.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - - zlib-ng >=2.2.1,<2.3.0a0 - - zstd >=1.5.6,<1.6.0a0 + - zlib-ng >=2.0.7,<2.1.0a0 + - zstd >=1.5.5,<1.6.0a0 license: BSD-3-Clause license_family: BSD - size: 214945 - timestamp: 1722389176912 + size: 210505 + timestamp: 1712415661052 - kind: conda name: ca-certificates version: 2023.7.22 @@ -3477,6 +4522,55 @@ packages: license: LGPL-2.1-or-later AND GPL-3.0-or-later size: 4021036 timestamp: 1665674192347 +- kind: conda + name: gflags + version: 2.2.2 + build: h5888daf_1005 + build_number: 1005 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda + sha256: 6c33bf0c4d8f418546ba9c250db4e4221040936aef8956353bc764d4877bc39a + md5: d411fc29e338efb48c5fd4576d71d881 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + license: BSD-3-Clause + license_family: BSD + size: 119654 + timestamp: 1726600001928 +- kind: conda + name: gflags + version: 2.2.2 + build: hac325c4_1005 + build_number: 1005 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hac325c4_1005.conda + sha256: c0bea66f71a6f4baa8d4f0248e17f65033d558d9e882c0af571b38bcca3e4b46 + md5: a26de8814083a6971f14f9c8c3cb36c2 + depends: + - __osx >=10.13 + - libcxx >=17 + license: BSD-3-Clause + license_family: BSD + size: 84946 + timestamp: 1726600054963 +- kind: conda + name: gflags + version: 2.2.2 + build: hf9b8971_1005 + build_number: 1005 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda + sha256: fd56ed8a1dab72ab90d8a8929b6f916a6d9220ca297ff077f8f04c5ed3408e20 + md5: 57a511a5905caa37540eb914dfcbf1fb + depends: + - __osx >=11.0 + - libcxx >=17 + license: BSD-3-Clause + license_family: BSD + size: 82090 + timestamp: 1726600145480 - kind: conda name: giflib version: 5.2.1 @@ -3577,6 +4671,52 @@ packages: license: LGPL-2.1-or-later size: 100669 timestamp: 1688694886885 +- kind: conda + name: glog + version: 0.6.0 + build: h6da1cb0_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.6.0-h6da1cb0_0.tar.bz2 + sha256: 4d772c42477f64be708594ac45870feba3e838977871118eb25e00deb0e9a73c + md5: 5a570729c7709399cf8511aeeda6f989 + depends: + - gflags >=2.2.2,<2.3.0a0 + - libcxx >=12.0.1 + license: BSD-3-Clause + license_family: BSD + size: 97658 + timestamp: 1649144191039 +- kind: conda + name: glog + version: 0.6.0 + build: h6f12383_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/glog-0.6.0-h6f12383_0.tar.bz2 + sha256: 888cbcfb67f6e3d88a4c4ab9d26c9a406f620c4101a35dc6d2dbadb95f2221d4 + md5: b31f3565cb84435407594e548a2fb7b2 + depends: + - gflags >=2.2.2,<2.3.0a0 + - libgcc-ng >=10.3.0 + - libstdcxx-ng >=10.3.0 + license: BSD-3-Clause + license_family: BSD + size: 114321 + timestamp: 1649143789233 +- kind: conda + name: glog + version: 0.6.0 + build: h8ac2a54_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/glog-0.6.0-h8ac2a54_0.tar.bz2 + sha256: fdb38560094fb4a952346dc72a79b3cb09e23e4d0cae9ba4f524e6e88203d3c8 + md5: 69eb97ca709a136c53fdca1f2fd33ddf + depends: + - gflags >=2.2.2,<2.3.0a0 + - libcxx >=12.0.1 + license: BSD-3-Clause + license_family: BSD + size: 100624 + timestamp: 1649143914155 - kind: conda name: graphite2 version: 1.3.13 @@ -3612,71 +4752,75 @@ packages: timestamp: 1604365687923 - kind: conda name: grpcio - version: 1.57.0 - build: py310h0d4bf3c_0 + version: 1.56.2 + build: py310h0d4bf3c_1 + build_number: 1 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/grpcio-1.57.0-py310h0d4bf3c_0.conda - sha256: 9bc83558d5549f1954eb8f58c935208b07fb1f8efe7521bcb9511ea402f9ff8c - md5: 6c00328d9d7ef79d0eb72b299b11c4da + url: https://conda.anaconda.org/conda-forge/osx-64/grpcio-1.56.2-py310h0d4bf3c_1.conda + sha256: ab9c89203aaa5e32cbfbc955ab8fdb6e36a59827f8658f072e148205f9daf082 + md5: 07b3f0664ef56646ee40424ee7657e78 depends: - __osx >=10.13 - libcxx >=15.0.7 - - libgrpc 1.57.0 he6801ca_0 + - libgrpc 1.56.2 he6801ca_1 - libzlib >=1.2.13,<2.0.0a0 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 license: Apache-2.0 license_family: APACHE - size: 720760 - timestamp: 1691555629789 + size: 710917 + timestamp: 1692025409041 - kind: conda name: grpcio - version: 1.57.0 - build: py310h1b8f574_0 + version: 1.56.2 + build: py310h1b8f574_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.57.0-py310h1b8f574_0.conda - sha256: b8395d54798d3a78d8459f64cc6e7ed07cbcac5583de939da98c3d5fa41169ea - md5: 09604cfeaf57738389cfee793abea361 + url: https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.56.2-py310h1b8f574_1.conda + sha256: c2eda195f4de3210c1798439a37c075337d331ab2fe0cc9e4a6acb115a15a1ab + md5: 08d2538a6907851ea70d8f7cddc2f0d3 depends: - libgcc-ng >=12 - - libgrpc 1.57.0 h3905398_0 + - libgrpc 1.56.2 h3905398_1 - libstdcxx-ng >=12 - libzlib >=1.2.13,<2.0.0a0 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 license: Apache-2.0 license_family: APACHE - size: 776889 - timestamp: 1691554371116 + size: 764791 + timestamp: 1692023633876 - kind: conda name: grpcio - version: 1.57.0 - build: py310h95b248a_0 + version: 1.56.2 + build: py310h95b248a_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/grpcio-1.57.0-py310h95b248a_0.conda - sha256: 6bb0fa69336e4aabda112a0fbe852968ee811cf9ca52048579b1fb02a49eba02 - md5: 607c040e411cc7c54d67f235140f1484 + url: https://conda.anaconda.org/conda-forge/osx-arm64/grpcio-1.56.2-py310h95b248a_1.conda + sha256: f1b22c8492fcbb41021e909c75786a6c864eb29115098076a8af0a5efe45288e + md5: ed8ce58613462ac09ebe53a3606a74d5 depends: - libcxx >=15.0.7 - - libgrpc 1.57.0 h9075ed4_0 + - libgrpc 1.56.2 h9075ed4_1 - libzlib >=1.2.13,<2.0.0a0 - python >=3.10,<3.11.0a0 - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 license: Apache-2.0 license_family: APACHE - size: 703519 - timestamp: 1691555367514 + size: 695887 + timestamp: 1692025592968 - kind: conda name: grpcio - version: 1.57.0 - build: py310hb84602e_0 + version: 1.56.2 + build: py310hb84602e_1 + build_number: 1 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/grpcio-1.57.0-py310hb84602e_0.conda - sha256: a76c2ea9bbfe34de626a342bb301571513f705182f025bb1e5ee6f379a136754 - md5: c79a99fcc156b529f5a23385bfb55333 + url: https://conda.anaconda.org/conda-forge/win-64/grpcio-1.56.2-py310hb84602e_1.conda + sha256: bc0bcd5a1aa53f87ae6d2ca35f2a1b5f38145fc337c18e4e0f77bc275aa0a669 + md5: 9a0b9fafd6453839c986d8d876ce202a depends: - - libgrpc 1.57.0 hea2d5f7_0 + - libgrpc 1.56.2 hea2d5f7_1 - libzlib >=1.2.13,<2.0.0a0 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 @@ -3685,8 +4829,8 @@ packages: - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: APACHE - size: 612997 - timestamp: 1691555450261 + size: 607527 + timestamp: 1692025811162 - kind: conda name: h11 version: 0.14.0 @@ -3953,24 +5097,24 @@ packages: timestamp: 1709943425798 - kind: conda name: imagecodecs - version: 2024.6.1 - build: py310h40cd1a8_2 - build_number: 2 + version: 2024.1.1 + build: py310hda7f504_3 + build_number: 3 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/imagecodecs-2024.6.1-py310h40cd1a8_2.conda - sha256: e9219ddb4c00a4bab6278219b17dcfacf8a66f085e40f62fd67b5ea86a99be50 - md5: b25b6a978244e40c1c73c9881df33a02 + url: https://conda.anaconda.org/conda-forge/win-64/imagecodecs-2024.1.1-py310hda7f504_3.conda + sha256: 9f5fc6486ae2e1c15280f220998dbc4e8dce4957796bb9d3be47facbd86d2e0f + md5: 7283584a831c8cd864181437d8ea9709 depends: - blosc >=1.21.5,<2.0a0 - bzip2 >=1.0.8,<2.0a0 - - c-blosc2 >=2.15.0,<2.16.0a0 + - c-blosc2 >=2.13.2,<2.14.4.0a0 - charls >=2.4.2,<2.5.0a0 - - giflib >=5.2.2,<5.3.0a0 + - giflib >=5.2.1,<5.3.0a0 - jxrlib >=1.1,<1.2.0a0 - lcms2 >=2.16,<3.0a0 - lerc >=4.0.0,<5.0a0 - libaec >=1.1.3,<2.0a0 - - libavif16 >=1.0.4,<2.0a0 + - libavif >=1.0.1,<1.0.2.0a0 - libbrotlicommon >=1.1.0,<1.2.0a0 - libbrotlidec >=1.1.0,<1.2.0a0 - libbrotlienc >=1.1.0,<1.2.0a0 @@ -3978,25 +5122,25 @@ packages: - libjpeg-turbo >=3.0.0,<4.0a0 - libpng >=1.6.43,<1.7.0a0 - libtiff >=4.6.0,<4.8.0a0 - - libwebp-base >=1.4.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 + - libwebp-base >=1.3.2,<2.0a0 + - libzlib >=1.2.13,<2.0.0a0 - libzopfli >=1.0.3,<1.1.0a0 - lz4-c >=1.9.3,<1.10.0a0 - - numpy >=1.19,<3 + - numpy >=1.22.4,<2.0a0 - openjpeg >=2.5.2,<3.0a0 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - - snappy >=1.2.0,<1.3.0a0 + - snappy >=1.1.10,<1.2.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - xz >=5.2.6,<6.0a0 - zfp >=1.0.1,<2.0a0 - - zstd >=1.5.6,<1.6.0a0 + - zstd >=1.5.5,<1.6.0a0 license: BSD-3-Clause license_family: BSD - size: 1581531 - timestamp: 1719237014473 + size: 1579418 + timestamp: 1711243735862 - kind: conda name: imageio version: 2.31.1 @@ -5641,10 +6785,170 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - license: BSD-2-Clause - license_family: BSD - size: 32567 - timestamp: 1711021603471 + license: BSD-2-Clause + license_family: BSD + size: 32567 + timestamp: 1711021603471 +- kind: conda + name: libarrow + version: 13.0.0 + build: h1ed0495_3_cpu + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-13.0.0-h1ed0495_3_cpu.conda + sha256: 629859e3e182c68a7500cb3197aeb3379117dfcea6e90da729d38886f6688c7c + md5: 4abe40cdbe46985f6d90840e58338883 + depends: + - aws-crt-cpp >=0.23.1,<0.23.2.0a0 + - aws-sdk-cpp >=1.11.156,<1.11.157.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.6.0,<0.7.0a0 + - libabseil * cxx17* + - libabseil >=20230125.3,<20230126.0a0 + - libbrotlidec >=1.1.0,<1.2.0a0 + - libbrotlienc >=1.1.0,<1.2.0a0 + - libgcc-ng >=12 + - libgoogle-cloud >=2.12.0,<2.13.0a0 + - libgrpc >=1.56.2,<1.57.0a0 + - libprotobuf >=4.23.3,<4.23.4.0a0 + - libstdcxx-ng >=12 + - libthrift >=0.19.0,<0.19.1.0a0 + - libutf8proc >=2.8.0,<3.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - openssl >=3.1.2,<4.0a0 + - orc >=1.9.0,<1.9.1.0a0 + - re2 >=2023.3.2,<2023.3.3.0a0 + - snappy >=1.1.10,<1.2.0a0 + - ucx >=1.14.0,<1.15.0a0 + - zstd >=1.5.5,<1.6.0a0 + constrains: + - parquet-cpp <0.0a0 + - apache-arrow-proc =*=cpu + - arrow-cpp =13.0.0 + license: Apache-2.0 + license_family: APACHE + size: 27851078 + timestamp: 1694166246163 +- kind: conda + name: libarrow + version: 13.0.0 + build: h6e4acf5_0_cpu + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-13.0.0-h6e4acf5_0_cpu.conda + sha256: 826aaaa5b2e18b139330aa00d1f5bf61f0389da9e270eddfd77c54c4a4c6aa58 + md5: ae56a47c174940e94f77877fea626429 + depends: + - aws-crt-cpp >=0.23.0,<0.23.1.0a0 + - aws-sdk-cpp >=1.10.57,<1.10.58.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.6.0,<0.7.0a0 + - libabseil * cxx17* + - libabseil >=20230125.3,<20230126.0a0 + - libbrotlidec >=1.0.9,<1.1.0a0 + - libbrotlienc >=1.0.9,<1.1.0a0 + - libcxx >=15.0.7 + - libgoogle-cloud >=2.12.0,<2.13.0a0 + - libgrpc >=1.56.2,<1.57.0a0 + - libprotobuf >=4.23.3,<4.23.4.0a0 + - libthrift >=0.18.1,<0.18.2.0a0 + - libutf8proc >=2.8.0,<3.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - openssl >=3.1.2,<4.0a0 + - orc >=1.9.0,<1.9.1.0a0 + - re2 >=2023.3.2,<2023.3.3.0a0 + - snappy >=1.1.10,<1.2.0a0 + - zstd >=1.5.2,<1.6.0a0 + constrains: + - apache-arrow-proc =*=cpu + - arrow-cpp =13.0.0 + - parquet-cpp <0.0a0 + license: Apache-2.0 + license_family: APACHE + size: 17983892 + timestamp: 1692869320462 +- kind: conda + name: libarrow + version: 13.0.0 + build: hba3d5be_3_cpu + build_number: 3 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libarrow-13.0.0-hba3d5be_3_cpu.conda + sha256: 29cfc816e479dd19a10ff84444f7aa1b0946347113700efb10422da06de42cde + md5: 250bd749a621453aff938e26873fb836 + depends: + - aws-crt-cpp >=0.23.1,<0.23.2.0a0 + - aws-sdk-cpp >=1.11.156,<1.11.157.0a0 + - bzip2 >=1.0.8,<2.0a0 + - libabseil * cxx17* + - libabseil >=20230125.3,<20230126.0a0 + - libbrotlidec >=1.1.0,<1.2.0a0 + - libbrotlienc >=1.1.0,<1.2.0a0 + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl >=8.2.1,<9.0a0 + - libgoogle-cloud >=2.12.0,<2.13.0a0 + - libgrpc >=1.56.2,<1.57.0a0 + - libprotobuf >=4.23.3,<4.23.4.0a0 + - libthrift >=0.19.0,<0.19.1.0a0 + - libutf8proc >=2.8.0,<3.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - openssl >=3.1.2,<4.0a0 + - orc >=1.9.0,<1.9.1.0a0 + - re2 >=2023.3.2,<2023.3.3.0a0 + - snappy >=1.1.10,<1.2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.5,<1.6.0a0 + constrains: + - apache-arrow-proc =*=cpu + - parquet-cpp <0.0a0 + - arrow-cpp =13.0.0 + license: Apache-2.0 + license_family: APACHE + size: 16625414 + timestamp: 1694167097111 +- kind: conda + name: libarrow + version: 13.0.0 + build: hca2412d_3_cpu + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libarrow-13.0.0-hca2412d_3_cpu.conda + sha256: 6a3bf63ec9baff0d578aa4cd2e2f3aee7cd7aee42bf1aa75889eec55d70f06b6 + md5: 68a4f678ba48a1d230dea777d5201c31 + depends: + - aws-crt-cpp >=0.23.1,<0.23.2.0a0 + - aws-sdk-cpp >=1.11.156,<1.11.157.0a0 + - bzip2 >=1.0.8,<2.0a0 + - glog >=0.6.0,<0.7.0a0 + - libabseil * cxx17* + - libabseil >=20230125.3,<20230126.0a0 + - libbrotlidec >=1.1.0,<1.2.0a0 + - libbrotlienc >=1.1.0,<1.2.0a0 + - libcxx >=15.0.7 + - libgoogle-cloud >=2.12.0,<2.13.0a0 + - libgrpc >=1.56.2,<1.57.0a0 + - libprotobuf >=4.23.3,<4.23.4.0a0 + - libthrift >=0.19.0,<0.19.1.0a0 + - libutf8proc >=2.8.0,<3.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - openssl >=3.1.2,<4.0a0 + - orc >=1.9.0,<1.9.1.0a0 + - re2 >=2023.3.2,<2023.3.3.0a0 + - snappy >=1.1.10,<1.2.0a0 + - zstd >=1.5.5,<1.6.0a0 + constrains: + - parquet-cpp <0.0a0 + - apache-arrow-proc =*=cpu + - arrow-cpp =13.0.0 + license: Apache-2.0 + license_family: APACHE + size: 20017156 + timestamp: 1694167350734 - kind: conda name: libavif version: 0.11.1 @@ -5663,6 +6967,27 @@ packages: license_family: BSD size: 88849 timestamp: 1685725242079 +- kind: conda + name: libavif + version: 1.0.1 + build: h7a9aacb_3 + build_number: 3 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libavif-1.0.1-h7a9aacb_3.conda + sha256: 7a02658e292c40e1d99aa9b587a02cb5807cce7a784bd17f196a6ce74e24ced7 + md5: 105425ab3c95efc316bb3277bbc4a75f + depends: + - aom >=3.7.0,<3.8.0a0 + - dav1d >=1.2.1,<1.2.2.0a0 + - rav1e >=0.6.6,<1.0a0 + - svt-av1 >=1.7.0,<1.7.1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-2-Clause + license_family: BSD + size: 104651 + timestamp: 1699878685050 - kind: conda name: libavif16 version: 1.0.1 @@ -5704,28 +7029,6 @@ packages: license_family: BSD size: 95735 timestamp: 1696226088455 -- kind: conda - name: libavif16 - version: 1.1.1 - build: h4e96d62_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libavif16-1.1.1-h4e96d62_1.conda - sha256: 503e281f3998333d423eb66ca2fa4e0a502e1b8544ade639f481c06aa41405de - md5: ddb3ed901b5faf1ae63b44b2464c7777 - depends: - - _libavif_api >=1.1.1,<1.1.2.0a0 - - aom >=3.9.1,<3.10.0a0 - - dav1d >=1.2.1,<1.2.2.0a0 - - rav1e >=0.6.6,<1.0a0 - - svt-av1 >=2.2.1,<2.2.2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-2-Clause - license_family: BSD - size: 97779 - timestamp: 1724672767195 - kind: conda name: libblas version: 3.9.0 @@ -6103,6 +7406,64 @@ packages: license_family: BSD size: 4984046 timestamp: 1697485351545 +- kind: conda + name: libcrc32c + version: 1.1.2 + build: h0e60522_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2 + sha256: 75e60fbe436ba8a11c170c89af5213e8bec0418f88b7771ab7e3d9710b70c54e + md5: cd4cc2d0c610c8cb5419ccc979f2d6ce + depends: + - vc >=14.1,<15.0a0 + - vs2015_runtime >=14.16.27012 + license: BSD-3-Clause + license_family: BSD + size: 25694 + timestamp: 1633684287072 +- kind: conda + name: libcrc32c + version: 1.1.2 + build: h9c3ff4c_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 + sha256: fd1d153962764433fe6233f34a72cdeed5dcf8a883a85769e8295ce940b5b0c5 + md5: c965a5aa0d5c1c37ffc62dff36e28400 + depends: + - libgcc-ng >=9.4.0 + - libstdcxx-ng >=9.4.0 + license: BSD-3-Clause + license_family: BSD + size: 20440 + timestamp: 1633683576494 +- kind: conda + name: libcrc32c + version: 1.1.2 + build: hbdafb3b_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 + sha256: 58477b67cc719060b5b069ba57161e20ba69b8695d154a719cb4b60caf577929 + md5: 32bd82a6a625ea6ce090a81c3d34edeb + depends: + - libcxx >=11.1.0 + license: BSD-3-Clause + license_family: BSD + size: 18765 + timestamp: 1633683992603 +- kind: conda + name: libcrc32c + version: 1.1.2 + build: he49afe7_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libcrc32c-1.1.2-he49afe7_0.tar.bz2 + sha256: 3043869ac1ee84554f177695e92f2f3c2c507b260edad38a0bf3981fce1632ff + md5: 23d6d5a69918a438355d7cbc4c3d54c9 + depends: + - libcxx >=11.1.0 + license: BSD-3-Clause + license_family: BSD + size: 20128 + timestamp: 1633683906221 - kind: conda name: libcups version: 2.3.3 @@ -6142,6 +7503,64 @@ packages: license_family: MIT size: 346914 timestamp: 1690401885066 +- kind: conda + name: libcurl + version: 8.7.1 + build: h726d00d_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.7.1-h726d00d_0.conda + sha256: 06cb1bd3bbaf905213777d6ade190ac4c7fb7a20dfe0cf901c977dbbc6cec265 + md5: fa58e5eaa12006bc3289a71357bef167 + depends: + - krb5 >=1.21.2,<1.22.0a0 + - libnghttp2 >=1.58.0,<2.0a0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.2.1,<4.0a0 + - zstd >=1.5.5,<1.6.0a0 + license: curl + license_family: MIT + size: 378176 + timestamp: 1711548390530 +- kind: conda + name: libcurl + version: 8.8.0 + build: hca28451_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.8.0-hca28451_0.conda + sha256: 45aec0ffc6fe3fd4c0083b815aa102b8103380acc2b6714fb272d921acc68ab2 + md5: f21c27f076a07907e70c49bb57bd0f20 + depends: + - krb5 >=1.21.2,<1.22.0a0 + - libgcc-ng >=12 + - libnghttp2 >=1.58.0,<2.0a0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.3.0,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: curl + license_family: MIT + size: 405535 + timestamp: 1716378550673 +- kind: conda + name: libcurl + version: 8.10.1 + build: h1ee3ff0_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.10.1-h1ee3ff0_0.conda + sha256: dfbac497c4fee74f67391f9c4a40cab559468b7d04ff9fad4b404a26b5e1d5b8 + md5: 7ead800e22ff7b4bccb73e42a8f7a0f4 + depends: + - krb5 >=1.21.3,<1.22.0a0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: curl + license_family: MIT + size: 342388 + timestamp: 1726660508261 - kind: conda name: libcxx version: 19.1.1 @@ -6280,6 +7699,19 @@ packages: license_family: BSD size: 123878 timestamp: 1597616541093 +- kind: conda + name: libev + version: '4.33' + build: h10d778d_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda + sha256: 0d238488564a7992942aa165ff994eca540f687753b4f0998b29b4e4d030ff43 + md5: 899db79329439820b7e8f8de41bca902 + license: BSD-2-Clause + license_family: BSD + size: 106663 + timestamp: 1702146352558 - kind: conda name: libev version: '4.33' @@ -6295,6 +7727,85 @@ packages: license_family: BSD size: 100668 timestamp: 1598868103393 +- kind: conda + name: libev + version: '4.33' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 + md5: 172bf1cd1ff8629f2b1179945ed45055 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + size: 112766 + timestamp: 1702146165126 +- kind: conda + name: libevent + version: 2.1.12 + build: h2757513_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda + sha256: 8c136d7586259bb5c0d2b913aaadc5b9737787ae4f40e3ad1beaf96c80b919b7 + md5: 1a109764bff3bdc7bdd84088347d71dc + depends: + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + size: 368167 + timestamp: 1685726248899 +- kind: conda + name: libevent + version: 2.1.12 + build: h3671451_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libevent-2.1.12-h3671451_1.conda + sha256: af03882afb7a7135288becf340c2f0cf8aa8221138a9a7b108aaeb308a486da1 + md5: 25efbd786caceef438be46da78a7b5ef + depends: + - openssl >=3.1.1,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + size: 410555 + timestamp: 1685726568668 +- kind: conda + name: libevent + version: 2.1.12 + build: ha90c15b_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libevent-2.1.12-ha90c15b_1.conda + sha256: e0bd9af2a29f8dd74309c0ae4f17a7c2b8c4b89f875ff1d6540c941eefbd07fb + md5: e38e467e577bd193a7d5de7c2c540b04 + depends: + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + size: 372661 + timestamp: 1685726378869 +- kind: conda + name: libevent + version: 2.1.12 + build: hf998b51_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda + sha256: 2e14399d81fb348e9d231a82ca4d816bf855206923759b69ad006ba482764131 + md5: a1cfcc585f0c42bf8d5546bb1dfb668d + depends: + - libgcc-ng >=12 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + size: 427426 + timestamp: 1685725977222 - kind: conda name: libexpat version: 2.6.3 @@ -6617,14 +8128,114 @@ packages: license_family: GPL size: 460218 timestamp: 1724801743478 +- kind: conda + name: libgoogle-cloud + version: 2.12.0 + build: h05652e3_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.12.0-h05652e3_1.conda + sha256: 1b1ea2a351322f5b5444db2064032bd6ba6954711b3f097c293a3b9f9c5c8904 + md5: 56d7dcffacd67cd1efeffc86c32e4f22 + depends: + - libabseil * cxx17* + - libabseil >=20230125.3,<20230126.0a0 + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl >=8.1.2,<9.0a0 + - libcxx >=15.0.7 + - libgrpc >=1.56.0,<1.57.0a0 + - libprotobuf >=4.23.3,<4.23.4.0a0 + - openssl >=3.1.1,<4.0a0 + constrains: + - google-cloud-cpp 2.12.0 *_1 + license: Apache-2.0 + license_family: Apache + size: 36570433 + timestamp: 1688288627184 +- kind: conda + name: libgoogle-cloud + version: 2.12.0 + build: h37a168a_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.12.0-h37a168a_1.conda + sha256: da74766c1670824677a2dbe97da86b8ed751decc50621be86c021fdac0fc5b70 + md5: 52442c1cd6eabf4b18a470f69ccaa6f5 + depends: + - libabseil * cxx17* + - libabseil >=20230125.3,<20230126.0a0 + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl >=8.1.2,<9.0a0 + - libcxx >=15.0.7 + - libgrpc >=1.56.0,<1.57.0a0 + - libprotobuf >=4.23.3,<4.23.4.0a0 + - openssl >=3.1.1,<4.0a0 + constrains: + - google-cloud-cpp 2.12.0 *_1 + license: Apache-2.0 + license_family: Apache + size: 32557767 + timestamp: 1688288193643 +- kind: conda + name: libgoogle-cloud + version: 2.12.0 + build: h840a212_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-h840a212_1.conda + sha256: 18d9050dced23e4b3a1e5f77956d11ef8d98bb34e007647de5a1aa0e2c099bc9 + md5: 03c225a73835f5aa68c13e62eb360406 + depends: + - libabseil * cxx17* + - libabseil >=20230125.3,<20230126.0a0 + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl >=8.1.2,<9.0a0 + - libgcc-ng >=12 + - libgrpc >=1.56.0,<1.57.0a0 + - libprotobuf >=4.23.3,<4.23.4.0a0 + - libstdcxx-ng >=12 + - openssl >=3.1.1,<4.0a0 + constrains: + - google-cloud-cpp 2.12.0 *_1 + license: Apache-2.0 + license_family: Apache + size: 46106632 + timestamp: 1688284832753 +- kind: conda + name: libgoogle-cloud + version: 2.12.0 + build: hbc1b25b_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.12.0-hbc1b25b_1.conda + sha256: a8bdedad9a6568f229d4111861fb3c5294febe333c24180c3a59bf02fa66ab14 + md5: 204576c98cf2226c0423c6eeb387889e + depends: + - libabseil * cxx17* + - libabseil >=20230125.3,<20230126.0a0 + - libcrc32c >=1.1.2,<1.2.0a0 + - libcurl >=8.1.2,<9.0a0 + - libgrpc >=1.56.0,<1.57.0a0 + - libprotobuf >=4.23.3,<4.23.4.0a0 + - openssl >=3.1.1,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - google-cloud-cpp 2.12.0 *_1 + license: Apache-2.0 + license_family: Apache + size: 13228 + timestamp: 1688283247784 - kind: conda name: libgrpc - version: 1.57.0 - build: h3905398_0 + version: 1.56.2 + build: h3905398_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.57.0-h3905398_0.conda - sha256: aaf6b80d30825d94dd6cc6fa922ff7d1962e93e618ce785752d3679e97f2dd1c - md5: 41e2a5f193a40322c3872f28fc1a024e + url: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.56.2-h3905398_1.conda + sha256: 587c14bd5969d49f3a0a94dd933efbeabe77864319306d91714905b5caa5aa35 + md5: 0b01e6ff8002994bd4ddbffcdbec7856 depends: - c-ares >=1.19.1,<2.0a0 - libabseil * cxx17* @@ -6636,19 +8247,20 @@ packages: - openssl >=3.1.2,<4.0a0 - re2 >=2023.3.2,<2023.3.3.0a0 constrains: - - grpc-cpp =1.57.0 + - grpc-cpp =1.56.2 license: Apache-2.0 license_family: APACHE - size: 5983084 - timestamp: 1691554161260 + size: 6331805 + timestamp: 1692023574803 - kind: conda name: libgrpc - version: 1.57.0 - build: h9075ed4_0 + version: 1.56.2 + build: h9075ed4_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.57.0-h9075ed4_0.conda - sha256: f41bf9ddf126cf5dadedf8c1c85394a027aa209cdf7fac78483aba1f17b4a5a9 - md5: 440c7e050563ec74550d90c19e26e304 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.56.2-h9075ed4_1.conda + sha256: 1bbc06147fe298b95a7b7dcb22db0c9f95fe7383195fa9eb05e23ca73548f225 + md5: 7d9c580f8d0379e8b5cb7e78a357bf60 depends: - c-ares >=1.19.1,<2.0a0 - libabseil * cxx17* @@ -6659,19 +8271,20 @@ packages: - openssl >=3.1.2,<4.0a0 - re2 >=2023.3.2,<2023.3.3.0a0 constrains: - - grpc-cpp =1.57.0 + - grpc-cpp =1.56.2 license: Apache-2.0 license_family: APACHE - size: 4475402 - timestamp: 1691555209943 + size: 4357621 + timestamp: 1692025115126 - kind: conda name: libgrpc - version: 1.57.0 - build: he6801ca_0 + version: 1.56.2 + build: he6801ca_1 + build_number: 1 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.57.0-he6801ca_0.conda - sha256: 314698fe9513b3de482281df444182898b17a3321887d0a57bfed500d53e58ef - md5: bf367a220789d4ce93e03d44386e8bd9 + url: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.56.2-he6801ca_1.conda + sha256: 26d86fe9037c5f85f68ef46710d11f94c4d1b3795ff94231892f199cd5c625cd + md5: 23e94509afba7c596f4e854054f4b267 depends: - __osx >=10.13 - c-ares >=1.19.1,<2.0a0 @@ -6683,19 +8296,20 @@ packages: - openssl >=3.1.2,<4.0a0 - re2 >=2023.3.2,<2023.3.3.0a0 constrains: - - grpc-cpp =1.57.0 + - grpc-cpp =1.56.2 license: Apache-2.0 license_family: APACHE - size: 4353122 - timestamp: 1691555518062 + size: 4311474 + timestamp: 1692025032875 - kind: conda name: libgrpc - version: 1.57.0 - build: hea2d5f7_0 + version: 1.56.2 + build: hea2d5f7_1 + build_number: 1 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.57.0-hea2d5f7_0.conda - sha256: 75acd2ea4d021b88ccee67f39e7c1d8e247d218730a8775297b791f1f2b3f5b2 - md5: 3ba8d18d45287fc3c68b0d5cff8c85ba + url: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.56.2-hea2d5f7_1.conda + sha256: 2371c46e341052cb21b2148418f35127baf129939bb169bb5a233ecb265ca323 + md5: 706baf79d5928afd39e7b747dc43b5ae depends: - c-ares >=1.19.1,<2.0a0 - libabseil * cxx17* @@ -6708,11 +8322,11 @@ packages: - vc >=14.2,<15 - vc14_runtime >=14.29.30139 constrains: - - grpc-cpp =1.57.0 + - grpc-cpp =1.56.2 license: Apache-2.0 license_family: APACHE - size: 12938908 - timestamp: 1691555247186 + size: 12851376 + timestamp: 1692025226820 - kind: conda name: libhwloc version: 2.9.3 @@ -6968,6 +8582,48 @@ packages: license_family: MIT size: 564295 timestamp: 1677678452375 +- kind: conda + name: libnghttp2 + version: 1.58.0 + build: h47da74e_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda + sha256: 1910c5306c6aa5bcbd623c3c930c440e9c77a5a019008e1487810e3c1d3716cb + md5: 700ac6ea6d53d5510591c4344d5c989a + depends: + - c-ares >=1.23.0,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.2.0,<4.0a0 + license: MIT + license_family: MIT + size: 631936 + timestamp: 1702130036271 +- kind: conda + name: libnghttp2 + version: 1.58.0 + build: h64cf6d3_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.58.0-h64cf6d3_1.conda + sha256: 412fd768e787e586602f8e9ea52bf089f3460fc630f6987f0cbd89b70e9a4380 + md5: faecc55c2a8155d9ff1c0ff9a0fef64f + depends: + - __osx >=10.9 + - c-ares >=1.23.0,<2.0a0 + - libcxx >=16.0.6 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.2.0,<4.0a0 + license: MIT + license_family: MIT + size: 599736 + timestamp: 1702130398536 - kind: conda name: libnsl version: 2.0.1 @@ -6981,9 +8637,23 @@ packages: arch: x86_64 platform: linux license: LGPL-2.1-only - license_family: GPL - size: 33408 - timestamp: 1697359010159 + license_family: GPL + size: 33408 + timestamp: 1697359010159 +- kind: conda + name: libnuma + version: 2.0.18 + build: h4ab18f5_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-h4ab18f5_2.conda + sha256: cef7d073a3f40876e6184bb5d269a99fa72de58b1106409510f81a1cd5f3d83c + md5: a263760479dbc7bc1f3df12707bd90dc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + size: 43346 + timestamp: 1714593927305 - kind: conda name: libopenblas version: 0.3.23 @@ -7331,6 +9001,22 @@ packages: license: Unlicense size: 865214 timestamp: 1725353659783 +- kind: conda + name: libssh2 + version: 1.11.0 + build: h0841786_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda + sha256: 50e47fd9c4f7bf841a11647ae7486f65220cfc988ec422a4475fe8d5a823824d + md5: 1f5a58e686b13bcfde88b93f547d23fe + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + size: 271133 + timestamp: 1685837707056 - kind: conda name: libssh2 version: 1.11.0 @@ -7348,6 +9034,39 @@ packages: license_family: BSD size: 255610 timestamp: 1685837894256 +- kind: conda + name: libssh2 + version: 1.11.0 + build: h7dfc565_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.0-h7dfc565_0.conda + sha256: 813fd04eed2a2d5d9c36e53c554f9c1f08e9324e2922bd60c9c52dbbed2dbcec + md5: dc262d03aae04fe26825062879141a41 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.1,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + size: 266806 + timestamp: 1685838242099 +- kind: conda + name: libssh2 + version: 1.11.0 + build: hd019ec5_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.0-hd019ec5_0.conda + sha256: f3886763b88f4b24265db6036535ef77b7b77ce91b1cbe588c0fbdd861eec515 + md5: ca3a72efba692c59a90d4b9fc0dfe774 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + size: 259556 + timestamp: 1685837820566 - kind: conda name: libstdcxx version: 14.1.0 @@ -7378,6 +9097,81 @@ packages: license_family: GPL size: 3842773 timestamp: 1695219454837 +- kind: conda + name: libthrift + version: 0.18.1 + build: ha061701_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.18.1-ha061701_2.conda + sha256: 4b3cbe168c7fb070a79960fd20bdc60b309d79805619ed93cdf93f71bdc88bf6 + md5: c1a4bb91d705cc903de58a95aa35ab5b + depends: + - libcxx >=15.0.7 + - libevent >=2.1.12,<2.1.13.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.1,<4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 329212 + timestamp: 1685891755482 +- kind: conda + name: libthrift + version: 0.19.0 + build: h064b379_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.19.0-h064b379_1.conda + sha256: 4346c25ef6e2ff3d0fc93074238508531188ecd0dbea6414f6cb93a7775072c4 + md5: b152655bfad7c2374ff03be0596052b6 + depends: + - libcxx >=15.0.7 + - libevent >=2.1.12,<2.1.13.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.3,<4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 325415 + timestamp: 1695958330036 +- kind: conda + name: libthrift + version: 0.19.0 + build: ha2b3283_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libthrift-0.19.0-ha2b3283_1.conda + sha256: 89bbc59898c827429a52315c9c0dd888ea73ab1157a8c86098aeae7d13454ac4 + md5: d3432b9d4950e91d2fdf3bed91248ee0 + depends: + - libevent >=2.1.12,<2.1.13.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.3,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: APACHE + size: 612342 + timestamp: 1695958519927 +- kind: conda + name: libthrift + version: 0.19.0 + build: hb90f79a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.19.0-hb90f79a_1.conda + sha256: 719add2cf20d144ef9962c57cd0f77178259bdb3aae1cded2e2b2b7c646092f5 + md5: 8cdb7d41faa0260875ba92414c487e2d + depends: + - libevent >=2.1.12,<2.1.13.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.3,<4.0a0 + license: Apache-2.0 + license_family: APACHE + size: 409409 + timestamp: 1695958011498 - kind: conda name: libtiff version: 4.5.0 @@ -7468,6 +9262,60 @@ packages: license: HPND size: 787198 timestamp: 1711218639912 +- kind: conda + name: libutf8proc + version: 2.8.0 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.8.0-h166bdaf_0.tar.bz2 + sha256: 49082ee8d01339b225f7f8c60f32a2a2c05fe3b16f31b554b4fb2c1dea237d1c + md5: ede4266dc02e875fe1ea77b25dd43747 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 101070 + timestamp: 1667316029302 +- kind: conda + name: libutf8proc + version: 2.8.0 + build: h1a8c8d9_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.8.0-h1a8c8d9_0.tar.bz2 + sha256: a3faddac08efd930fa3a1cc254b5053b4ed9428c49a888d437bf084d403c931a + md5: f8c9c41a122ab3abdf8943b13f4957ee + license: MIT + license_family: MIT + size: 103492 + timestamp: 1667316405233 +- kind: conda + name: libutf8proc + version: 2.8.0 + build: h82a8f57_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libutf8proc-2.8.0-h82a8f57_0.tar.bz2 + sha256: 6efa83e3f2fb9acaf096a18d21d0f679d110934798348c5defc780d4b759a76c + md5: 076894846fe9f068f91c57d158c90cba + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vs2015_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 104389 + timestamp: 1667316359211 +- kind: conda + name: libutf8proc + version: 2.8.0 + build: hb7f2c08_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.8.0-hb7f2c08_0.tar.bz2 + sha256: 55a7f96b2802e94def207fdfe92bc52c24d705d139bb6cdb3d936cbe85e1c505 + md5: db98dc3e58cbc11583180609c429c17d + license: MIT + license_family: MIT + size: 98942 + timestamp: 1667316472080 - kind: conda name: libuuid version: 2.38.1 @@ -9052,12 +10900,12 @@ packages: timestamp: 1707226187124 - kind: conda name: numpy - version: 2.1.2 - build: py310hb9d903e_0 + version: 1.26.4 + build: py310hf667824_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/numpy-2.1.2-py310hb9d903e_0.conda - sha256: 383409a36fa1bc5ef4ea29c980d6bac016816d7bc3b78a5c2394dc648e48eed6 - md5: dd75b8747730f68301487421f0d19bbf + url: https://conda.anaconda.org/conda-forge/win-64/numpy-1.26.4-py310hf667824_0.conda + sha256: 20ca447a8f840c01961f2bdf0847fc7b7785a62968e867d7aa4ca8a66d70f9ad + md5: 93e881c391880df90e74e43a4b67c16d depends: - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 @@ -9071,8 +10919,8 @@ packages: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD - size: 6562663 - timestamp: 1728665315648 + size: 5977469 + timestamp: 1707226445438 - kind: conda name: openjdk version: 20.0.0 @@ -9296,6 +11144,89 @@ packages: license_family: Apache size: 2544654 timestamp: 1725410973572 +- kind: conda + name: orc + version: 1.9.0 + build: h385abfd_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.0-h385abfd_1.conda + sha256: bfd6af35afe7b8dfcc24721f05d5e3f9e8577105429c768f423a61f0fcc65105 + md5: 2cd5aac7ef1b4c6ac51bf521251a89b3 + depends: + - libgcc-ng >=12 + - libprotobuf >=4.23.3,<4.23.4.0a0 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - snappy >=1.1.10,<1.2.0a0 + - zstd >=1.5.2,<1.6.0a0 + license: Apache-2.0 + license_family: Apache + size: 1020883 + timestamp: 1688234533243 +- kind: conda + name: orc + version: 1.9.0 + build: h858f345_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/orc-1.9.0-h858f345_1.conda + sha256: d0d43507d5f651529f814ed800d37eca1abebc87d654afb9ff75b6921c85d224 + md5: fca38d4f87f6d92751ee07189cf0f9c3 + depends: + - libcxx >=15.0.7 + - libprotobuf >=4.23.3,<4.23.4.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - snappy >=1.1.10,<1.2.0a0 + - zstd >=1.5.2,<1.6.0a0 + license: Apache-2.0 + license_family: Apache + size: 440491 + timestamp: 1688235037695 +- kind: conda + name: orc + version: 1.9.0 + build: hef23039_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/orc-1.9.0-hef23039_1.conda + sha256: 8fc1f3cd45716559a6a875d15ed0ff06372c0e64934f63cf54450ddba2dc20f9 + md5: 6a24a185108c2e075a0e80b300003c26 + depends: + - libcxx >=15.0.7 + - libprotobuf >=4.23.3,<4.23.4.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - snappy >=1.1.10,<1.2.0a0 + - zstd >=1.5.2,<1.6.0a0 + license: Apache-2.0 + license_family: Apache + size: 441342 + timestamp: 1688234737518 +- kind: conda + name: orc + version: 1.9.0 + build: hf2b8f0d_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/orc-1.9.0-hf2b8f0d_1.conda + sha256: 05d5c8075c7b96868f056b6f38ffaf63bb9a119928f926f6913caade5b60db5e + md5: 2d5dfd05e0d6673662f21342caed3d0f + depends: + - libprotobuf >=4.23.3,<4.23.4.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - snappy >=1.1.10,<1.2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.2,<1.6.0a0 + license: Apache-2.0 + license_family: Apache + size: 874908 + timestamp: 1688234815207 - kind: conda name: outcome version: 1.2.0 @@ -10462,6 +12393,93 @@ packages: - pkg:pypi/pure-eval size: 14551 timestamp: 1642876055775 +- kind: conda + name: pyarrow + version: 13.0.0 + build: py310h382c99a_0_cpu + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-13.0.0-py310h382c99a_0_cpu.conda + sha256: 22a2575bf616298a34a61d1d5b513e7a77e2d69a6e23d230c886495a8e5ddbac + md5: ba3da2d3bacf00993d827ee682d73406 + depends: + - libarrow 13.0.0 h6e4acf5_0_cpu + - libcxx >=15.0.7 + - numpy >=1.22.4,<2.0a0 + - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython + - python_abi 3.10.* *_cp310 + constrains: + - apache-arrow-proc =*=cpu + license: Apache-2.0 + license_family: APACHE + size: 3668280 + timestamp: 1692869942766 +- kind: conda + name: pyarrow + version: 13.0.0 + build: py310h6eef95f_3_cpu + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-13.0.0-py310h6eef95f_3_cpu.conda + sha256: 14a3fcabdef8e372993ad0af5074b5a39464f01e4583e46feb1f05a952778d0c + md5: e617083ad4d644cdd0c7fb8222448a54 + depends: + - libarrow 13.0.0 hca2412d_3_cpu + - libcxx >=15.0.7 + - numpy >=1.22.4,<2.0a0 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + constrains: + - apache-arrow-proc =*=cpu + license: Apache-2.0 + license_family: APACHE + size: 3625282 + timestamp: 1694168931927 +- kind: conda + name: pyarrow + version: 13.0.0 + build: py310hd0bb7c2_3_cpu + build_number: 3 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pyarrow-13.0.0-py310hd0bb7c2_3_cpu.conda + sha256: 72942b7653cebfeed9889ac23b42ff5e3c374c1c14885670c62cabcc5e35edec + md5: b3d1f6c2d4b44299bd7762b79651dd17 + depends: + - libarrow 13.0.0 hba3d5be_3_cpu + - numpy >=1.22.4,<2.0a0 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - apache-arrow-proc =*=cpu + license: Apache-2.0 + license_family: APACHE + size: 2991846 + timestamp: 1694170082892 +- kind: conda + name: pyarrow + version: 13.0.0 + build: py310hf9e7431_3_cpu + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-13.0.0-py310hf9e7431_3_cpu.conda + sha256: bec4783484feab07d9b9138ed943d452f720c2f4d5bb75b91598a2c15fd06c22 + md5: 8d00baa18cc3a8bc986b6081c15f681c + depends: + - libarrow 13.0.0 h1ed0495_3_cpu + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - numpy >=1.22.4,<2.0a0 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + constrains: + - apache-arrow-proc =*=cpu + license: Apache-2.0 + license_family: APACHE + size: 4016600 + timestamp: 1694167295169 - kind: conda name: pycparser version: '2.21' @@ -11393,6 +13411,23 @@ packages: license_family: BSD size: 15423721 timestamp: 1694329261357 +- kind: conda + name: rdma-core + version: '28.9' + build: h59595ed_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-28.9-h59595ed_1.conda + sha256: 832f9393ab3144ce6468c6f150db9d398fad4451e96a8879afb3059f0c9902f6 + md5: aeffb7c06b5f65e55e6c637408dc4100 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Linux-OpenIB + license_family: BSD + size: 3735644 + timestamp: 1684785130341 - kind: conda name: re2 version: 2023.03.02 @@ -11871,6 +13906,21 @@ packages: license: MIT size: 33938994 timestamp: 1723153507938 +- kind: conda + name: s2n + version: 1.3.54 + build: h06160fa_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.54-h06160fa_0.conda + sha256: 21941b4cc007fe556ce0ec66b590f2038fecf89ce850549a8bd072ba09d1a1a7 + md5: 149520612b92991a7de6f17550a19739 + depends: + - libgcc-ng >=12 + - openssl >=3.1.3,<4.0a0 + license: Apache-2.0 + license_family: Apache + size: 387091 + timestamp: 1696545067741 - kind: conda name: scikit-image version: 0.24.0 @@ -12378,20 +14428,21 @@ packages: timestamp: 1678534590321 - kind: conda name: snappy - version: 1.2.1 - build: h23299a8_0 + version: 1.1.10 + build: hfb803bf_1 + build_number: 1 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/snappy-1.2.1-h23299a8_0.conda - sha256: 5b9450f619aabcfbf3d284a272964250b2e1971ab0f7a7ef9143dda0ecc537b8 - md5: 7635a408509e20dcfc7653ca305ad799 + url: https://conda.anaconda.org/conda-forge/win-64/snappy-1.1.10-hfb803bf_1.conda + sha256: a96f79a6ed5714ff3d2daebccdb9296a9c08394ed934ff78cec1a31dd15e29ec + md5: c6837784f15b2dd7a1927c4e8b8dcecd depends: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD - size: 59350 - timestamp: 1720004197144 + size: 57651 + timestamp: 1712591561466 - kind: conda name: sniffio version: 1.3.0 @@ -12508,6 +14559,22 @@ packages: license_family: BSD size: 2641420 timestamp: 1692966629866 +- kind: conda + name: svt-av1 + version: 1.7.0 + build: h63175ca_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/svt-av1-1.7.0-h63175ca_0.conda + sha256: 3d52d959e9b4e4654c36d03765fb4e8dbebfc1d17f271a46033bf301737a25cc + md5: fe5d2314e6fc3be8f8e3e2e73c14ab02 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-2-Clause + license_family: BSD + size: 2353906 + timestamp: 1692967156046 - kind: conda name: svt-av1 version: 1.7.0 @@ -12524,22 +14591,6 @@ packages: license_family: BSD size: 2429529 timestamp: 1692967052961 -- kind: conda - name: svt-av1 - version: 2.2.1 - build: he0c23c2_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/svt-av1-2.2.1-he0c23c2_0.conda - sha256: 79985e6ea3e93f8e6a71f06dbe7ca1f5f61c1948b7a45d1d5ac7e71f46461cad - md5: c34bbf7ec0696702f361d1c791ed3246 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-2-Clause - license_family: BSD - size: 1704957 - timestamp: 1724459941490 - kind: conda name: symlink-exe-runtime version: '1.0' @@ -13252,6 +15303,26 @@ packages: license_family: PROPRIETARY size: 1283972 timestamp: 1666630199266 +- kind: conda + name: ucx + version: 1.14.1 + build: h64cca9d_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.14.1-h64cca9d_5.conda + sha256: a62f3fb56849dc37270f9078e1c8ba32328bc3ba4d32cf1f7dace48b431d5abe + md5: 39aa3b356d10d7e5add0c540945a0944 + depends: + - libgcc-ng >=12 + - libnuma >=2.0.16,<3.0a0 + - libstdcxx-ng >=12 + - rdma-core >=28.9,<29.0a0 + constrains: + - cuda-version >=11.2,<12 + license: BSD-3-Clause + license_family: BSD + size: 15210025 + timestamp: 1695214404131 - kind: conda name: uri-template version: 1.3.0 @@ -14825,20 +16896,20 @@ packages: timestamp: 1679095009343 - kind: conda name: zlib-ng - version: 2.2.2 - build: he0c23c2_0 + version: 2.0.7 + build: hcfcfb64_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.2.2-he0c23c2_0.conda - sha256: 90c6e86dc30a1f768fd5b131464644bedd4ebd52e80e75595066cd37facf6b01 - md5: ba337fbdf9bdfe84ed0030329069d405 + url: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.0.7-hcfcfb64_0.conda + sha256: 61a4e4c209f04d3f426213a187686262ebc2dccac9a97a0743c2ebbf6e3e3dd8 + md5: c72bb979d406650d3a78743ff888c451 depends: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vs2015_runtime >=14.29.30139 license: Zlib license_family: Other - size: 108763 - timestamp: 1726591296481 + size: 90788 + timestamp: 1679095380986 - kind: conda name: zstd version: 1.5.2 diff --git a/pixi.toml b/pixi.toml index 1d482f401..760c9f508 100644 --- a/pixi.toml +++ b/pixi.toml @@ -132,6 +132,8 @@ ruff = ">=0.6.9,<0.7" mypy = ">=1.11.2,<2" pixi-pycharm = ">=0.0.8,<0.0.9" scipy = "1.14.1.*" +pandas = ">=2.2.3,<3" +pyarrow = ">=13.0.0,<14" # Dependencies are those required at runtime by the Python packages [dependencies] diff --git a/vegafusion-core/Cargo.toml b/vegafusion-core/Cargo.toml index 093c997c0..3f7ecd75a 100644 --- a/vegafusion-core/Cargo.toml +++ b/vegafusion-core/Cargo.toml @@ -33,6 +33,12 @@ workspace = true [dependencies.prost-types] workspace = true +[dependencies.chrono-tz] +workspace = true + +[dependencies.async-trait] +workspace = true + [dependencies.sqlparser] workspace = true optional = true @@ -49,6 +55,10 @@ version = "1.6.9" [dependencies.datafusion-common] workspace = true +[dependencies.vegafusion-dataframe] +path = "../vegafusion-dataframe" +version = "1.6.9" + [dependencies.pyo3] workspace = true optional = true diff --git a/vegafusion-core/src/chart_state.rs b/vegafusion-core/src/chart_state.rs new file mode 100644 index 000000000..02a9032f1 --- /dev/null +++ b/vegafusion-core/src/chart_state.rs @@ -0,0 +1,236 @@ +use crate::{ + data::dataset::VegaFusionDataset, + planning::{ + apply_pre_transform::apply_pre_transform_datasets, + plan::SpecPlan, + stitch::CommPlan, + watch::{ExportUpdateArrow, ExportUpdateJSON, ExportUpdateNamespace}, + }, + proto::gen::{ + pretransform::PreTransformSpecWarning, + tasks::{NodeValueIndex, TaskGraph, TzConfig, Variable, VariableNamespace}, + }, + runtime::VegaFusionRuntimeTrait, + spec::chart::ChartSpec, + task_graph::{graph::ScopedVariable, task_value::TaskValue}, +}; +use datafusion_common::ScalarValue; +use std::{ + collections::{HashMap, HashSet}, + sync::{Arc, Mutex}, +}; +use vegafusion_common::{ + data::{scalar::ScalarValueHelpers, table::VegaFusionTable}, + error::{Result, ResultWithContext, VegaFusionError}, +}; + +#[derive(Clone)] +pub struct ChartState { + input_spec: ChartSpec, + transformed_spec: ChartSpec, + plan: SpecPlan, + inline_datasets: HashMap, + task_graph: Arc>, + task_graph_mapping: Arc>, + server_to_client_value_indices: Arc>, + warnings: Vec, +} + +impl ChartState { + pub async fn try_new( + runtime: &dyn VegaFusionRuntimeTrait, + spec: ChartSpec, + inline_datasets: HashMap, + tz_config: TzConfig, + row_limit: Option, + ) -> Result { + let dataset_fingerprints = inline_datasets + .iter() + .map(|(k, ds)| (k.clone(), ds.fingerprint())) + .collect::>(); + + let plan = SpecPlan::try_new(&spec, &Default::default())?; + + let task_scope = plan + .server_spec + .to_task_scope() + .with_context(|| "Failed to create task scope for server spec")?; + let tasks = plan + .server_spec + .to_tasks(&tz_config, &dataset_fingerprints) + .unwrap(); + let task_graph = TaskGraph::new(tasks, &task_scope).unwrap(); + let task_graph_mapping = task_graph.build_mapping(); + let server_to_client_value_indices: Arc> = Arc::new( + plan.comm_plan + .server_to_client + .iter() + .map(|scoped_var| task_graph_mapping.get(scoped_var).unwrap().clone()) + .collect(), + ); + + // Gather values of server-to-client values using query_request + let indices: Vec = plan + .comm_plan + .server_to_client + .iter() + .map(|var| task_graph_mapping.get(var).unwrap().clone()) + .collect(); + + let response_task_values = runtime + .query_request(Arc::new(task_graph.clone()), &indices, &inline_datasets) + .await?; + + let mut init = Vec::new(); + for response_value in response_task_values { + let variable = response_value + .variable + .with_context(|| "Missing variable for response value".to_string())?; + + let scope = response_value.scope; + let proto_value = response_value + .value + .with_context(|| "Missing value for response value".to_string())?; + + let value = TaskValue::try_from(&proto_value).with_context(|| { + "Deserialization failed for value of response value".to_string() + })?; + + init.push(ExportUpdateArrow { + namespace: ExportUpdateNamespace::try_from(variable.ns()).unwrap(), + name: variable.name.clone(), + scope, + value, + }); + } + + let (transformed_spec, warnings) = + apply_pre_transform_datasets(&spec, &plan, init, row_limit)?; + + Ok(Self { + input_spec: spec, + transformed_spec, + plan, + inline_datasets, + task_graph: Arc::new(Mutex::new(task_graph)), + task_graph_mapping: Arc::new(task_graph_mapping), + server_to_client_value_indices, + warnings, + }) + } + + pub async fn update( + &self, + runtime: &dyn VegaFusionRuntimeTrait, + updates: Vec, + ) -> Result> { + let mut task_graph = self.task_graph.lock().map_err(|err| { + VegaFusionError::internal(format!("Failed to acquire task graph lock: {:?}", err)) + })?; + let server_to_client = self.server_to_client_value_indices.clone(); + let mut indices: Vec = Vec::new(); + for export_update in &updates { + let var = match export_update.namespace { + ExportUpdateNamespace::Signal => Variable::new_signal(&export_update.name), + ExportUpdateNamespace::Data => Variable::new_data(&export_update.name), + }; + let scoped_var: ScopedVariable = (var, export_update.scope.clone()); + let node_value_index = self + .task_graph_mapping + .get(&scoped_var) + .with_context(|| format!("No task graph node found for {scoped_var:?}"))? + .clone(); + + let value = match export_update.namespace { + ExportUpdateNamespace::Signal => { + TaskValue::Scalar(ScalarValue::from_json(&export_update.value)?) + } + ExportUpdateNamespace::Data => { + TaskValue::Table(VegaFusionTable::from_json(&export_update.value)?) + } + }; + + indices.extend(task_graph.update_value(node_value_index.node_index as usize, value)?); + } + + // Filter to update nodes in the comm plan + let indices: Vec<_> = indices + .iter() + .filter(|&node| server_to_client.contains(node)) + .cloned() + .collect(); + + let cloned_task_graph = task_graph.clone(); + + // Drop the MutexGuard before await call to avoid warning + drop(task_graph); + + let response_task_values = runtime + .query_request( + Arc::new(cloned_task_graph), + indices.as_slice(), + &self.inline_datasets, + ) + .await?; + + let mut response_updates = response_task_values + .into_iter() + .map(|response_value| { + let variable = response_value + .variable + .with_context(|| "Missing variable for response value".to_string())?; + + let scope = response_value.scope; + let proto_value = response_value + .value + .with_context(|| "missing value for response value: {:?}".to_string())?; + + let value = TaskValue::try_from(&proto_value).with_context(|| { + "Deserialization failed for value of response value: {:?}".to_string() + })?; + + Ok(ExportUpdateJSON { + namespace: match variable.ns() { + VariableNamespace::Signal => ExportUpdateNamespace::Signal, + VariableNamespace::Data => ExportUpdateNamespace::Data, + VariableNamespace::Scale => { + return Err(VegaFusionError::internal("Unexpected scale variable")) + } + }, + name: variable.name.clone(), + scope: scope.clone(), + value: value.to_json()?, + }) + }) + .collect::>>()?; + + // Sort for deterministic ordering + response_updates.sort_by_key(|update| update.name.clone()); + + Ok(response_updates) + } + + pub fn get_input_spec(&self) -> &ChartSpec { + &self.input_spec + } + + pub fn get_server_spec(&self) -> &ChartSpec { + &self.plan.server_spec + } + + pub fn get_client_spec(&self) -> &ChartSpec { + &self.plan.client_spec + } + + pub fn get_transformed_spec(&self) -> &ChartSpec { + &self.transformed_spec + } + + pub fn get_comm_plan(&self) -> &CommPlan { + &self.plan.comm_plan + } + + pub fn get_warnings(&self) -> &Vec { + &self.warnings + } +} diff --git a/vegafusion-runtime/src/data/dataset.rs b/vegafusion-core/src/data/dataset.rs similarity index 96% rename from vegafusion-runtime/src/data/dataset.rs rename to vegafusion-core/src/data/dataset.rs index 422957293..02f0f2876 100644 --- a/vegafusion-runtime/src/data/dataset.rs +++ b/vegafusion-core/src/data/dataset.rs @@ -1,8 +1,8 @@ +use crate::error::Result; use std::collections::hash_map::DefaultHasher; use std::hash::{Hash, Hasher}; use std::sync::Arc; use vegafusion_common::data::table::VegaFusionTable; -use vegafusion_core::error::Result; use vegafusion_dataframe::dataframe::DataFrame; #[derive(Clone)] diff --git a/vegafusion-core/src/data/mod.rs b/vegafusion-core/src/data/mod.rs index f053a00b2..f311152c4 100644 --- a/vegafusion-core/src/data/mod.rs +++ b/vegafusion-core/src/data/mod.rs @@ -1 +1,2 @@ +pub mod dataset; pub mod tasks; diff --git a/vegafusion-core/src/lib.rs b/vegafusion-core/src/lib.rs index beb6891c3..d95d14195 100644 --- a/vegafusion-core/src/lib.rs +++ b/vegafusion-core/src/lib.rs @@ -2,11 +2,13 @@ extern crate lazy_static; extern crate core; +pub mod chart_state; pub mod data; pub mod expression; pub mod patch; pub mod planning; pub mod proto; +pub mod runtime; pub mod spec; pub mod task_graph; pub mod transform; diff --git a/vegafusion-core/src/planning/apply_pre_transform.rs b/vegafusion-core/src/planning/apply_pre_transform.rs new file mode 100644 index 000000000..a5c05b60d --- /dev/null +++ b/vegafusion-core/src/planning/apply_pre_transform.rs @@ -0,0 +1,129 @@ +use super::{ + destringify_selection_datetimes::destringify_selection_datetimes, + plan::SpecPlan, + watch::{ExportUpdateArrow, ExportUpdateNamespace}, +}; +use crate::{ + proto::gen::{ + pretransform::{ + pre_transform_spec_warning::WarningType, PlannerWarning, + PreTransformBrokenInteractivityWarning, PreTransformRowLimitWarning, + PreTransformSpecWarning, PreTransformUnsupportedWarning, + }, + tasks::Variable, + }, + spec::{chart::ChartSpec, values::MissingNullOrValue}, +}; +use serde_json::Value; +use vegafusion_common::error::{Result, VegaFusionError}; + +pub fn apply_pre_transform_datasets( + input_spec: &ChartSpec, + plan: &SpecPlan, + init: Vec, + row_limit: Option, +) -> Result<(ChartSpec, Vec)> { + // Update client spec with server values + let mut spec = plan.client_spec.clone(); + let mut limited_datasets: Vec = Vec::new(); + for export_update in init { + let scope = export_update.scope.clone(); + let name = export_update.name.as_str(); + let export_update = export_update.to_json()?; + match export_update.namespace { + ExportUpdateNamespace::Signal => { + let signal = spec.get_nested_signal_mut(&scope, name)?; + signal.value = MissingNullOrValue::Value(export_update.value); + } + ExportUpdateNamespace::Data => { + let data = spec.get_nested_data_mut(&scope, name)?; + + // If the input dataset includes inline values and no transforms, + // copy the input JSON directly to avoid the case where round-tripping + // through Arrow homogenizes mixed type arrays. + // E.g. round tripping may turn [1, "two"] into ["1", "two"] + let input_values = input_spec + .get_nested_data(&scope, name) + .ok() + .and_then(|data| { + if data.transform.is_empty() { + data.values.clone() + } else { + None + } + }); + let value = if let Some(input_values) = input_values { + input_values + } else if let Value::Array(values) = &export_update.value { + if let Some(row_limit) = row_limit { + let row_limit = row_limit as usize; + if values.len() > row_limit { + limited_datasets.push(export_update.to_scoped_var().0); + Value::Array(Vec::from(&values[..row_limit])) + } else { + Value::Array(values.clone()) + } + } else { + Value::Array(values.clone()) + } + } else { + return Err(VegaFusionError::internal( + "Expected Data value to be an Array", + )); + }; + + // Set inline value + // Other properties are cleared by planning process so we don't alter them here + data.values = Some(value); + } + } + } + + // Destringify datetime strings in selection store datasets + destringify_selection_datetimes(&mut spec)?; + + // Build warnings + let mut warnings: Vec = Vec::new(); + + // Add unsupported warning ( + if plan.comm_plan.server_to_client.is_empty() { + warnings.push(PreTransformSpecWarning { + warning_type: Some(WarningType::Unsupported(PreTransformUnsupportedWarning {})), + }); + } + + // Add Row Limit warning + if !limited_datasets.is_empty() { + warnings.push(PreTransformSpecWarning { + warning_type: Some(WarningType::RowLimit(PreTransformRowLimitWarning { + datasets: limited_datasets, + })), + }); + } + + // Add Broken Interactivity warning + if !plan.comm_plan.client_to_server.is_empty() { + let vars: Vec<_> = plan + .comm_plan + .client_to_server + .iter() + .map(|var| var.0.clone()) + .collect(); + warnings.push(PreTransformSpecWarning { + warning_type: Some(WarningType::BrokenInteractivity( + PreTransformBrokenInteractivityWarning { vars }, + )), + }); + } + + // Add planner warnings + for planner_warning in &plan.warnings { + warnings.push(PreTransformSpecWarning { + warning_type: Some(WarningType::Planner(PlannerWarning { + message: planner_warning.message(), + })), + }); + } + + Ok((spec, warnings)) +} diff --git a/vegafusion-runtime/src/pre_transform/destringify_selection_datetimes.rs b/vegafusion-core/src/planning/destringify_selection_datetimes.rs similarity index 93% rename from vegafusion-runtime/src/pre_transform/destringify_selection_datetimes.rs rename to vegafusion-core/src/planning/destringify_selection_datetimes.rs index a32183aa0..dc0d830ac 100644 --- a/vegafusion-runtime/src/pre_transform/destringify_selection_datetimes.rs +++ b/vegafusion-core/src/planning/destringify_selection_datetimes.rs @@ -1,11 +1,11 @@ +use crate::error::Result; +use crate::planning::parse_datetime::parse_datetime; +use crate::spec::chart::{ChartSpec, MutChartVisitor}; +use crate::spec::data::DataSpec; +use crate::spec::transform::formula::FormulaTransformSpec; +use crate::spec::transform::TransformSpec; use serde_json::Value; use std::collections::HashSet; -use vegafusion_core::error::Result; -use vegafusion_core::spec::chart::{ChartSpec, MutChartVisitor}; -use vegafusion_core::spec::data::DataSpec; -use vegafusion_core::spec::transform::formula::FormulaTransformSpec; -use vegafusion_core::spec::transform::TransformSpec; -use vegafusion_datafusion_udfs::udfs::datetime::str_to_utc_timestamp::parse_datetime; /// Post pre-transform transformation that detects the use of datetime strings in /// Vega-Lite style selection "_store" datasets, and adds a transform to convert diff --git a/vegafusion-core/src/planning/mod.rs b/vegafusion-core/src/planning/mod.rs index a52258e12..1f2ade300 100644 --- a/vegafusion-core/src/planning/mod.rs +++ b/vegafusion-core/src/planning/mod.rs @@ -1,8 +1,11 @@ +pub mod apply_pre_transform; pub mod dependency_graph; +pub mod destringify_selection_datetimes; pub mod extract; pub mod fuse; pub mod lift_facet_aggregations; pub mod optimize_server; +pub mod parse_datetime; pub mod plan; pub mod projection_pushdown; pub mod split_domain_data; diff --git a/vegafusion-core/src/planning/parse_datetime.rs b/vegafusion-core/src/planning/parse_datetime.rs new file mode 100644 index 000000000..5c1b462c6 --- /dev/null +++ b/vegafusion-core/src/planning/parse_datetime.rs @@ -0,0 +1,324 @@ +use chrono::{ + format::{parse, Parsed, StrftimeItems}, + {DateTime, FixedOffset, NaiveDate, NaiveDateTime, NaiveTime, Offset, TimeZone, Timelike, Utc}, +}; +use regex::Regex; +use std::sync::Arc; +use vegafusion_common::arrow::array::{ArrayRef, StringArray, TimestampMillisecondArray}; + +lazy_static! { + pub static ref ALL_STRF_DATETIME_ITEMS: Vec> = vec![ + // ISO 8601 / RFC 3339 + // e.g. 2001-07-08T00:34:60.026490+09:30 + StrftimeItems::new("%Y-%m-%dT%H:%M:%S%.f%:z"), + + // Like ISO 8601 with space instead of T + // e.g. 2001-07-08 00:34:60.026490+09:30 + StrftimeItems::new("%Y-%m-%d %H:%M:%S%.f%:z"), + + // Like ISO 8601 with space, but forward slashes in date + // e.g. 2001/07/08 00:34:60.026490+09:30 + StrftimeItems::new("%Y/%m/%d %H:%M:%S%.f%:z"), + + // month, day, year with slashes + // e.g. 2001/07/08 00:34:60.026490+09:30 + StrftimeItems::new("%m/%d/%Y %H:%M:%S%.f%:z"), + + // ctime format + // e.g. Sun Jul 8 00:34:60 2001 + StrftimeItems::new("%a %b %e %T %Y"), + + // e.g. 01 Jan 2012 00:00:00 + StrftimeItems::new("%d %b %Y %T"), + + // e.g. Sun, 01 Jan 2012 00:00:00 + StrftimeItems::new("%a, %d %b %Y %T"), + + // e.g. December 17, 1995 03:00:00 + StrftimeItems::new("%B %d, %Y %T"), + ]; + + pub static ref ALL_STRF_DATE_ITEMS: Vec> = vec![ + // // e.g. 1995/02/04 + // StrftimeItems::new("%Y/%m/%d"), + + // e.g. July 15, 2010 + StrftimeItems::new("%B %d, %Y"), + + // e.g. 01 Jan 2012 + StrftimeItems::new("%d %b %Y"), + ]; +} + +pub fn parse_datetime( + date_str: &str, + default_input_tz: &Option, +) -> Option> { + for strf_item in &*ALL_STRF_DATETIME_ITEMS { + let mut parsed = Parsed::new(); + parse(&mut parsed, date_str, strf_item.clone()).ok(); + + if let Ok(datetime) = parsed.to_datetime() { + return Some(datetime.with_timezone(&chrono::Utc)); + } else if let (Ok(date), Ok(time)) = (parsed.to_naive_date(), parsed.to_naive_time()) { + let datetime = NaiveDateTime::new(date, time); + if date_str.ends_with('Z') { + // UTC + if let Some(datetime) = chrono::Utc.from_local_datetime(&datetime).earliest() { + return Some(datetime); + } + } else { + // Local + let local_tz = (*default_input_tz)?; + let dt = if let Some(dt) = local_tz.from_local_datetime(&datetime).earliest() { + dt + } else { + // Handle positive timezone transition by adding 1 hour + let datetime = datetime.with_hour(datetime.hour() + 1)?; + local_tz.from_local_datetime(&datetime).earliest()? + }; + let dt_utc = dt.with_timezone(&chrono::Utc); + return Some(dt_utc); + } + } + } + + // Try plain dates + if let Ok(date) = NaiveDate::parse_from_str(date_str, r#"%Y-%m-%d"#) { + // UTC midnight to follow JavaScript convention + let datetime = date.and_hms_opt(0, 0, 0).expect("Invalid date"); + return Some(chrono::Utc.from_utc_datetime(&datetime)); + } else { + for strf_item in &*ALL_STRF_DATE_ITEMS { + let mut parsed = Parsed::new(); + parse(&mut parsed, date_str, strf_item.clone()).ok(); + if let Ok(date) = parsed.to_naive_date() { + // Local midnight to follow JavaScript convention + let datetime = date.and_hms_opt(0, 0, 0).expect("Invalid date"); + let default_input_tz = (*default_input_tz)?; + let datetime = default_input_tz.from_local_datetime(&datetime).earliest()?; + return Some(datetime.with_timezone(&chrono::Utc)); + } + } + } + + parse_datetime_fallback(date_str, default_input_tz) +} + +/// Parse a more generous specification of the iso 8601 date standard +/// Allow omission of time components +pub fn parse_datetime_fallback( + date_str: &str, + default_input_tz: &Option, +) -> Option> { + let mut date_tokens = [String::from(""), String::from(""), String::from("")]; + let mut time_tokens = [ + String::from(""), + String::from(""), + String::from(""), + String::from(""), + ]; + let mut timezone_tokens = [String::from(""), String::from("")]; + let mut timezone_sign = ' '; + let mut date_ind = 0; + let mut time_ind = 0; + let mut timezone_ind = 0; + let mut stage = 0; + let mut has_time = false; + let mut date_split = '-'; + + // tokenize date string + for c in date_str.trim().chars() { + match stage { + 0 => { + // Parsing date + if date_ind < 2 && (c == '-' || c == '/' || c == ' ') { + date_split = c; + date_ind += 1; + } else if date_ind == 2 && (c == 'T' || c == ' ') { + // Move on to time portion + stage += 1; + } else if c.is_ascii_alphanumeric() { + date_tokens[date_ind].push(c) + } else { + return None; + } + } + 1 => { + // Parsing time + if c.is_whitespace() { + continue; + } else if c.is_ascii_digit() { + has_time = true; + time_tokens[time_ind].push(c) + } else if (time_ind < 2 && c == ':') || (time_ind == 2 && c == '.') { + // Move on to next portion + time_ind += 1; + } else if c == '+' || c == '-' { + // Move on to time zone + stage += 1; + + // Save sign of offset hour + timezone_sign = c; + } else if c == 'Z' { + // Done, UTC 0 + timezone_tokens[0].push('0'); + timezone_tokens[1].push('0'); + break; + } else { + return None; + } + } + 2 => { + // Parsing timezone + if c.is_ascii_digit() { + timezone_tokens[timezone_ind].push(c) + } else if timezone_ind == 0 && c == ':' { + timezone_ind += 1; + } else { + // String should have ended + return None; + } + } + _ => return None, + } + } + + // determine which date token holds year, month, and date + let year_re = Regex::new(r"\d{4}").unwrap(); + + let (year, month, day, iso8601_date) = if year_re.is_match(&date_tokens[0]) { + // Assume YYYY-MM-DD (where '-' can also be '/' or ' ') + // Year parsing needs to succeed, or we fail. All other components are optional + let year: i32 = date_tokens[0].parse().ok()?; + let month: u32 = parse_month_str(&date_tokens[1]).unwrap_or(1); + let day: u32 = date_tokens[2].parse().unwrap_or(1); + (year, month, day, date_split == '-') + } else if year_re.is_match(&date_tokens[2]) { + // Assume MM/DD/YYYY (where '/' can also be '-' or ' ') + let year: i32 = date_tokens[2].parse().ok()?; + let month: u32 = parse_month_str(&date_tokens[0]).unwrap_or(1); + let day: u32 = date_tokens[1].parse().ok()?; + (year, month, day, false) + } else { + // 4-digit year may be the first of third date component + return None; + }; + + let hour: u32 = time_tokens[0].parse().unwrap_or(0); + let minute: u32 = time_tokens[1].parse().unwrap_or(0); + let second: u32 = time_tokens[2].parse().unwrap_or(0); + let milliseconds: u32 = if time_tokens[3].is_empty() { + 0 + } else if time_tokens[3].len() == 3 { + time_tokens[3].parse().ok()? + } else { + return None; + }; + + let offset = if timezone_tokens[0].is_empty() { + if iso8601_date && !has_time { + FixedOffset::east_opt(0).expect("FixedOffset::east out of bounds") + } else { + // Treat date as in local timezone + let local_tz = (*default_input_tz)?; + + // No timezone specified, build NaiveDateTime + let naive_date = + NaiveDate::from_ymd_opt(year, month, day).expect("invalid or out-of-range date"); + let naive_time = NaiveTime::from_hms_milli_opt(hour, minute, second, milliseconds) + .expect("invalid or out-of-range date"); + let naive_datetime = NaiveDateTime::new(naive_date, naive_time); + + local_tz + .offset_from_local_datetime(&naive_datetime) + .single()? + .fix() + } + } else { + let timezone_hours: i32 = timezone_tokens[0].parse().unwrap_or(0); + let timezone_minutes: i32 = timezone_tokens[1].parse().unwrap_or(0); + let time_offset_seconds = timezone_hours * 3600 + timezone_minutes * 60; + + if timezone_sign == '-' { + FixedOffset::west_opt(time_offset_seconds).expect("FixedOffset::west out of bounds") + } else { + FixedOffset::east_opt(time_offset_seconds).expect("FixedOffset::east out of bounds") + } + }; + + let parsed = offset + .with_ymd_and_hms(year, month, day, hour, minute, second) + .earliest()? + .with_nanosecond(milliseconds * 1_000_000)? + .with_timezone(&chrono::Utc); + + Some(parsed) +} + +fn parse_month_str(month_str: &str) -> Option { + // try parsing as integer + let month_str = month_str.to_lowercase(); + if let Ok(month) = month_str.parse::() { + Some(month) + } else if month_str.len() > 2 { + // Try parsing as month name + if "january"[..month_str.len()] == month_str { + Some(1) + } else if "february"[..month_str.len()] == month_str { + Some(2) + } else if "march"[..month_str.len()] == month_str { + Some(3) + } else if "april"[..month_str.len()] == month_str { + Some(4) + } else if "may"[..month_str.len()] == month_str { + Some(5) + } else if "june"[..month_str.len()] == month_str { + Some(6) + } else if "july"[..month_str.len()] == month_str { + Some(7) + } else if "august"[..month_str.len()] == month_str { + Some(8) + } else if "september"[..month_str.len()] == month_str { + Some(9) + } else if "october"[..month_str.len()] == month_str { + Some(10) + } else if "november"[..month_str.len()] == month_str { + Some(11) + } else if "december"[..month_str.len()] == month_str { + Some(12) + } else { + None + } + } else { + None + } +} + +pub fn parse_datetime_to_utc_millis( + date_str: &str, + default_input_tz: &Option, +) -> Option { + // Parse to datetime + let parsed_utc = parse_datetime(date_str, default_input_tz)?; + + // Extract milliseconds + Some(parsed_utc.timestamp_millis()) +} + +pub fn datetime_strs_to_timestamp_millis( + date_strs: &StringArray, + default_input_tz: &Option, +) -> ArrayRef { + let millis_array = TimestampMillisecondArray::from( + date_strs + .iter() + .map(|date_str| -> Option { + date_str + .and_then(|date_str| parse_datetime_to_utc_millis(date_str, default_input_tz)) + }) + .collect::>>(), + ); + + Arc::new(millis_array) as ArrayRef +} diff --git a/vegafusion-core/src/runtime.rs b/vegafusion-core/src/runtime.rs new file mode 100644 index 000000000..04f1ba24a --- /dev/null +++ b/vegafusion-core/src/runtime.rs @@ -0,0 +1,19 @@ +use std::{collections::HashMap, sync::Arc}; + +use async_trait::async_trait; +use vegafusion_common::error::Result; + +use crate::{ + data::dataset::VegaFusionDataset, + proto::gen::tasks::{NodeValueIndex, ResponseTaskValue, TaskGraph}, +}; + +#[async_trait] +pub trait VegaFusionRuntimeTrait { + async fn query_request( + &self, + task_graph: Arc, + indices: &[NodeValueIndex], + inline_datasets: &HashMap, + ) -> Result>; +} diff --git a/vegafusion-dataframe/Cargo.toml b/vegafusion-dataframe/Cargo.toml index f4bdeb7bb..ca133af78 100644 --- a/vegafusion-dataframe/Cargo.toml +++ b/vegafusion-dataframe/Cargo.toml @@ -5,8 +5,9 @@ version = "1.6.9" edition = "2021" description = "VegaFusion's DataFrame and Connection traits" -[dependencies] -async-trait = "0.1.73" + +[dependencies.async-trait] +workspace = true [dependencies.vegafusion-common] path = "../vegafusion-common" diff --git a/vegafusion-datafusion-udfs/Cargo.toml b/vegafusion-datafusion-udfs/Cargo.toml index 700cae4a4..6d949f551 100644 --- a/vegafusion-datafusion-udfs/Cargo.toml +++ b/vegafusion-datafusion-udfs/Cargo.toml @@ -22,6 +22,10 @@ workspace = true path = "../vegafusion-common" version = "1.6.9" +[dependencies.vegafusion-core] +path = "../vegafusion-core" +version = "1.6.9" + [dependencies.datafusion-physical-expr] workspace = true diff --git a/vegafusion-datafusion-udfs/src/udfs/datetime/str_to_utc_timestamp.rs b/vegafusion-datafusion-udfs/src/udfs/datetime/str_to_utc_timestamp.rs index cc6f3333c..7a5e9d450 100644 --- a/vegafusion-datafusion-udfs/src/udfs/datetime/str_to_utc_timestamp.rs +++ b/vegafusion-datafusion-udfs/src/udfs/datetime/str_to_utc_timestamp.rs @@ -1,8 +1,3 @@ -use chrono::{ - format::{parse, Parsed, StrftimeItems}, - {DateTime, FixedOffset, NaiveDate, NaiveDateTime, NaiveTime, Offset, TimeZone, Timelike, Utc}, -}; -use regex::Regex; use std::any::Any; use std::{str::FromStr, sync::Arc}; use vegafusion_common::arrow::array::{ArrayRef, StringArray, TimestampMillisecondArray}; @@ -11,295 +6,7 @@ use vegafusion_common::datafusion_common::{DataFusionError, ScalarValue}; use vegafusion_common::datafusion_expr::{ ColumnarValue, ScalarUDF, ScalarUDFImpl, Signature, Volatility, }; - -lazy_static! { - pub static ref ALL_STRF_DATETIME_ITEMS: Vec> = vec![ - // ISO 8601 / RFC 3339 - // e.g. 2001-07-08T00:34:60.026490+09:30 - StrftimeItems::new("%Y-%m-%dT%H:%M:%S%.f%:z"), - - // Like ISO 8601 with space instead of T - // e.g. 2001-07-08 00:34:60.026490+09:30 - StrftimeItems::new("%Y-%m-%d %H:%M:%S%.f%:z"), - - // Like ISO 8601 with space, but forward slashes in date - // e.g. 2001/07/08 00:34:60.026490+09:30 - StrftimeItems::new("%Y/%m/%d %H:%M:%S%.f%:z"), - - // month, day, year with slashes - // e.g. 2001/07/08 00:34:60.026490+09:30 - StrftimeItems::new("%m/%d/%Y %H:%M:%S%.f%:z"), - - // ctime format - // e.g. Sun Jul 8 00:34:60 2001 - StrftimeItems::new("%a %b %e %T %Y"), - - // e.g. 01 Jan 2012 00:00:00 - StrftimeItems::new("%d %b %Y %T"), - - // e.g. Sun, 01 Jan 2012 00:00:00 - StrftimeItems::new("%a, %d %b %Y %T"), - - // e.g. December 17, 1995 03:00:00 - StrftimeItems::new("%B %d, %Y %T"), - ]; - - pub static ref ALL_STRF_DATE_ITEMS: Vec> = vec![ - // // e.g. 1995/02/04 - // StrftimeItems::new("%Y/%m/%d"), - - // e.g. July 15, 2010 - StrftimeItems::new("%B %d, %Y"), - - // e.g. 01 Jan 2012 - StrftimeItems::new("%d %b %Y"), - ]; -} - -pub fn parse_datetime( - date_str: &str, - default_input_tz: &Option, -) -> Option> { - for strf_item in &*ALL_STRF_DATETIME_ITEMS { - let mut parsed = Parsed::new(); - parse(&mut parsed, date_str, strf_item.clone()).ok(); - - if let Ok(datetime) = parsed.to_datetime() { - return Some(datetime.with_timezone(&chrono::Utc)); - } else if let (Ok(date), Ok(time)) = (parsed.to_naive_date(), parsed.to_naive_time()) { - let datetime = NaiveDateTime::new(date, time); - if date_str.ends_with('Z') { - // UTC - if let Some(datetime) = chrono::Utc.from_local_datetime(&datetime).earliest() { - return Some(datetime); - } - } else { - // Local - let local_tz = (*default_input_tz)?; - let dt = if let Some(dt) = local_tz.from_local_datetime(&datetime).earliest() { - dt - } else { - // Handle positive timezone transition by adding 1 hour - let datetime = datetime.with_hour(datetime.hour() + 1)?; - local_tz.from_local_datetime(&datetime).earliest()? - }; - let dt_utc = dt.with_timezone(&chrono::Utc); - return Some(dt_utc); - } - } - } - - // Try plain dates - if let Ok(date) = NaiveDate::parse_from_str(date_str, r#"%Y-%m-%d"#) { - // UTC midnight to follow JavaScript convention - let datetime = date.and_hms_opt(0, 0, 0).expect("Invalid date"); - return Some(chrono::Utc.from_utc_datetime(&datetime)); - } else { - for strf_item in &*ALL_STRF_DATE_ITEMS { - let mut parsed = Parsed::new(); - parse(&mut parsed, date_str, strf_item.clone()).ok(); - if let Ok(date) = parsed.to_naive_date() { - // Local midnight to follow JavaScript convention - let datetime = date.and_hms_opt(0, 0, 0).expect("Invalid date"); - let default_input_tz = (*default_input_tz)?; - let datetime = default_input_tz.from_local_datetime(&datetime).earliest()?; - return Some(datetime.with_timezone(&chrono::Utc)); - } - } - } - - parse_datetime_fallback(date_str, default_input_tz) -} - -/// Parse a more generous specification of the iso 8601 date standard -/// Allow omission of time components -pub fn parse_datetime_fallback( - date_str: &str, - default_input_tz: &Option, -) -> Option> { - let mut date_tokens = [String::from(""), String::from(""), String::from("")]; - let mut time_tokens = [ - String::from(""), - String::from(""), - String::from(""), - String::from(""), - ]; - let mut timezone_tokens = [String::from(""), String::from("")]; - let mut timezone_sign = ' '; - let mut date_ind = 0; - let mut time_ind = 0; - let mut timezone_ind = 0; - let mut stage = 0; - let mut has_time = false; - let mut date_split = '-'; - - // tokenize date string - for c in date_str.trim().chars() { - match stage { - 0 => { - // Parsing date - if date_ind < 2 && (c == '-' || c == '/' || c == ' ') { - date_split = c; - date_ind += 1; - } else if date_ind == 2 && (c == 'T' || c == ' ') { - // Move on to time portion - stage += 1; - } else if c.is_ascii_alphanumeric() { - date_tokens[date_ind].push(c) - } else { - return None; - } - } - 1 => { - // Parsing time - if c.is_whitespace() { - continue; - } else if c.is_ascii_digit() { - has_time = true; - time_tokens[time_ind].push(c) - } else if (time_ind < 2 && c == ':') || (time_ind == 2 && c == '.') { - // Move on to next portion - time_ind += 1; - } else if c == '+' || c == '-' { - // Move on to time zone - stage += 1; - - // Save sign of offset hour - timezone_sign = c; - } else if c == 'Z' { - // Done, UTC 0 - timezone_tokens[0].push('0'); - timezone_tokens[1].push('0'); - break; - } else { - return None; - } - } - 2 => { - // Parsing timezone - if c.is_ascii_digit() { - timezone_tokens[timezone_ind].push(c) - } else if timezone_ind == 0 && c == ':' { - timezone_ind += 1; - } else { - // String should have ended - return None; - } - } - _ => return None, - } - } - - // determine which date token holds year, month, and date - let year_re = Regex::new(r"\d{4}").unwrap(); - - let (year, month, day, iso8601_date) = if year_re.is_match(&date_tokens[0]) { - // Assume YYYY-MM-DD (where '-' can also be '/' or ' ') - // Year parsing needs to succeed, or we fail. All other components are optional - let year: i32 = date_tokens[0].parse().ok()?; - let month: u32 = parse_month_str(&date_tokens[1]).unwrap_or(1); - let day: u32 = date_tokens[2].parse().unwrap_or(1); - (year, month, day, date_split == '-') - } else if year_re.is_match(&date_tokens[2]) { - // Assume MM/DD/YYYY (where '/' can also be '-' or ' ') - let year: i32 = date_tokens[2].parse().ok()?; - let month: u32 = parse_month_str(&date_tokens[0]).unwrap_or(1); - let day: u32 = date_tokens[1].parse().ok()?; - (year, month, day, false) - } else { - // 4-digit year may be the first of third date component - return None; - }; - - let hour: u32 = time_tokens[0].parse().unwrap_or(0); - let minute: u32 = time_tokens[1].parse().unwrap_or(0); - let second: u32 = time_tokens[2].parse().unwrap_or(0); - let milliseconds: u32 = if time_tokens[3].is_empty() { - 0 - } else if time_tokens[3].len() == 3 { - time_tokens[3].parse().ok()? - } else { - return None; - }; - - let offset = if timezone_tokens[0].is_empty() { - if iso8601_date && !has_time { - FixedOffset::east_opt(0).expect("FixedOffset::east out of bounds") - } else { - // Treat date as in local timezone - let local_tz = (*default_input_tz)?; - - // No timezone specified, build NaiveDateTime - let naive_date = - NaiveDate::from_ymd_opt(year, month, day).expect("invalid or out-of-range date"); - let naive_time = NaiveTime::from_hms_milli_opt(hour, minute, second, milliseconds) - .expect("invalid or out-of-range date"); - let naive_datetime = NaiveDateTime::new(naive_date, naive_time); - - local_tz - .offset_from_local_datetime(&naive_datetime) - .single()? - .fix() - } - } else { - let timezone_hours: i32 = timezone_tokens[0].parse().unwrap_or(0); - let timezone_minutes: i32 = timezone_tokens[1].parse().unwrap_or(0); - let time_offset_seconds = timezone_hours * 3600 + timezone_minutes * 60; - - if timezone_sign == '-' { - FixedOffset::west_opt(time_offset_seconds).expect("FixedOffset::west out of bounds") - } else { - FixedOffset::east_opt(time_offset_seconds).expect("FixedOffset::east out of bounds") - } - }; - - let parsed = offset - .with_ymd_and_hms(year, month, day, hour, minute, second) - .earliest()? - .with_nanosecond(milliseconds * 1_000_000)? - .with_timezone(&chrono::Utc); - - Some(parsed) -} - -fn parse_month_str(month_str: &str) -> Option { - // try parsing as integer - let month_str = month_str.to_lowercase(); - if let Ok(month) = month_str.parse::() { - Some(month) - } else if month_str.len() > 2 { - // Try parsing as month name - if "january"[..month_str.len()] == month_str { - Some(1) - } else if "february"[..month_str.len()] == month_str { - Some(2) - } else if "march"[..month_str.len()] == month_str { - Some(3) - } else if "april"[..month_str.len()] == month_str { - Some(4) - } else if "may"[..month_str.len()] == month_str { - Some(5) - } else if "june"[..month_str.len()] == month_str { - Some(6) - } else if "july"[..month_str.len()] == month_str { - Some(7) - } else if "august"[..month_str.len()] == month_str { - Some(8) - } else if "september"[..month_str.len()] == month_str { - Some(9) - } else if "october"[..month_str.len()] == month_str { - Some(10) - } else if "november"[..month_str.len()] == month_str { - Some(11) - } else if "december"[..month_str.len()] == month_str { - Some(12) - } else { - None - } - } else { - None - } -} +use vegafusion_core::planning::parse_datetime::parse_datetime; pub fn parse_datetime_to_utc_millis( date_str: &str, @@ -407,38 +114,43 @@ lazy_static! { pub static ref STR_TO_UTC_TIMESTAMP_UDF: ScalarUDF = ScalarUDF::from(StrToUtcTimestampUDF::new()); } - -#[test] -fn test_parse_datetime() { - let local_tz = Some(chrono_tz::Tz::America__New_York); - let utc = Some(chrono_tz::Tz::UTC); - let res = parse_datetime("2020-05-16T09:30:00+05:00", &utc).unwrap(); - let utc_res = res.with_timezone(&Utc); - println!("res: {res}"); - println!("utc_res: {utc_res}"); - - let res = parse_datetime("2020-05-16T09:30:00", &utc).unwrap(); - let utc_res = res.with_timezone(&Utc); - println!("res: {res}"); - println!("utc_res: {utc_res}"); - - let res = parse_datetime("2020-05-16T09:30:00", &local_tz).unwrap(); - let utc_res = res.with_timezone(&Utc); - println!("res: {res}"); - println!("utc_res: {utc_res}"); - - let res = parse_datetime("2001/02/05 06:20", &local_tz).unwrap(); - let utc_res = res.with_timezone(&Utc); - println!("res: {res}"); - println!("utc_res: {utc_res}"); - - let res = parse_datetime("2001/02/05 06:20", &utc).unwrap(); - let utc_res = res.with_timezone(&Utc); - println!("res: {res}"); - println!("utc_res: {utc_res}"); - - let res = parse_datetime("2000-01-01T08:00:00.000Z", &utc).unwrap(); - let utc_res = res.with_timezone(&Utc); - println!("res: {res}"); - println!("utc_res: {utc_res}"); +#[cfg(test)] +mod tests { + use super::*; + use chrono::Utc; + + #[test] + fn test_parse_datetime() { + let local_tz = Some(chrono_tz::Tz::America__New_York); + let utc = Some(chrono_tz::Tz::UTC); + let res = parse_datetime("2020-05-16T09:30:00+05:00", &utc).unwrap(); + let utc_res = res.with_timezone(&Utc); + println!("res: {res}"); + println!("utc_res: {utc_res}"); + + let res = parse_datetime("2020-05-16T09:30:00", &utc).unwrap(); + let utc_res = res.with_timezone(&Utc); + println!("res: {res}"); + println!("utc_res: {utc_res}"); + + let res = parse_datetime("2020-05-16T09:30:00", &local_tz).unwrap(); + let utc_res = res.with_timezone(&Utc); + println!("res: {res}"); + println!("utc_res: {utc_res}"); + + let res = parse_datetime("2001/02/05 06:20", &local_tz).unwrap(); + let utc_res = res.with_timezone(&Utc); + println!("res: {res}"); + println!("utc_res: {utc_res}"); + + let res = parse_datetime("2001/02/05 06:20", &utc).unwrap(); + let utc_res = res.with_timezone(&Utc); + println!("res: {res}"); + println!("utc_res: {utc_res}"); + + let res = parse_datetime("2000-01-01T08:00:00.000Z", &utc).unwrap(); + let utc_res = res.with_timezone(&Utc); + println!("res: {res}"); + println!("utc_res: {utc_res}"); + } } diff --git a/vegafusion-python/Cargo.toml b/vegafusion-python/Cargo.toml index 525950af0..b13efcbf6 100644 --- a/vegafusion-python/Cargo.toml +++ b/vegafusion-python/Cargo.toml @@ -15,10 +15,12 @@ protobuf-src = ["vegafusion-core/protobuf-src"] [dependencies] log = "0.4.17" env_logger = "0.10.0" -async-trait = "0.1.73" uuid = "1.3.0" sysinfo = "0.32.0" +[dependencies.async-trait] +workspace = true + [dependencies.lazy_static] workspace = true diff --git a/vegafusion-python/src/lib.rs b/vegafusion-python/src/lib.rs index 43225510f..bdc914488 100644 --- a/vegafusion-python/src/lib.rs +++ b/vegafusion-python/src/lib.rs @@ -9,16 +9,18 @@ use std::borrow::Cow; use std::collections::HashMap; use std::sync::{Arc, Once}; use tokio::runtime::Runtime; +use vegafusion_core::chart_state::ChartState as RsChartState; use vegafusion_core::error::{ToExternalError, VegaFusionError}; use vegafusion_core::proto::gen::pretransform::pre_transform_extract_warning::WarningType as ExtractWarningType; use vegafusion_core::proto::gen::pretransform::pre_transform_values_warning::WarningType as ValueWarningType; -use vegafusion_runtime::task_graph::runtime::{ChartState as RsChartState, VegaFusionRuntime}; +use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; use crate::connection::{PySqlConnection, PySqlDataset}; use env_logger::{Builder, Target}; use pythonize::{depythonize, pythonize}; use serde_json::json; use vegafusion_common::data::table::VegaFusionTable; +use vegafusion_core::data::dataset::VegaFusionDataset; use vegafusion_core::patch::patch_pre_transformed_spec; use vegafusion_core::planning::plan::{PlannerConfig, PreTransformSpecWarningSpec, SpecPlan}; use vegafusion_core::planning::projection_pushdown::get_column_usage as rs_get_column_usage; @@ -27,7 +29,6 @@ use vegafusion_core::proto::gen::tasks::{TzConfig, Variable}; use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::task_graph::graph::ScopedVariable; use vegafusion_core::task_graph::task_value::TaskValue; -use vegafusion_runtime::data::dataset::VegaFusionDataset; use vegafusion_runtime::tokio_runtime::TOKIO_THREAD_STACK_SIZE; use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; use vegafusion_sql::connection::Connection; @@ -64,7 +65,7 @@ impl PyChartState { row_limit: Option, ) -> PyResult { let state = tokio_runtime.block_on(RsChartState::try_new( - &runtime, + runtime.as_ref(), spec, inline_datasets, tz_config, @@ -89,7 +90,7 @@ impl PyChartState { let result_updates = py.allow_threads(|| { self.tokio_runtime - .block_on(self.state.update(&self.runtime, updates)) + .block_on(self.state.update(self.runtime.as_ref(), updates)) })?; let a = result_updates diff --git a/vegafusion-python/vegafusion/runtime.py b/vegafusion-python/vegafusion/runtime.py index cd6a77f56..7c7265d9a 100644 --- a/vegafusion-python/vegafusion/runtime.py +++ b/vegafusion-python/vegafusion/runtime.py @@ -157,9 +157,9 @@ def get_client_spec(self) -> dict[str, Any]: class VegaFusionRuntime: def __init__( self, - cache_capacity: int, - memory_limit: int, - worker_threads: int, + cache_capacity: int = 64, + memory_limit: int | None = None, + worker_threads: int | None = None, connection: SqlConnection | None = None, ) -> None: """ @@ -191,6 +191,11 @@ def embedded_runtime(self) -> PyVegaFusionRuntime: # Try to initialize an embedded runtime from vegafusion._vegafusion import PyVegaFusionRuntime + if self.memory_limit is None: + self.memory_limit = get_virtual_memory() // 2 + if self.worker_threads is None: + self.worker_threads = get_cpu_count() + self._embedded_runtime = PyVegaFusionRuntime( self.cache_capacity, self.memory_limit, @@ -335,7 +340,7 @@ def _import_or_register_inline_datasets( columns = inline_dataset_usage.get(name) if isinstance(value, SqlDataset): imported_inline_datasets[name] = value - elif pd is not None and isinstance(value, pd.DataFrame): + elif pd is not None and pa is not None and isinstance(value, pd.DataFrame): # rename to help mypy inner_value: pd.DataFrame = value del value @@ -366,7 +371,6 @@ def _import_or_register_inline_datasets( inner_value = inner_value.assign( **{col: inner_value[col].astype("string[pyarrow]")} ) - if self._connection is not None: try: # Try registering DataFrame if supported @@ -376,7 +380,12 @@ def _import_or_register_inline_datasets( continue except ValueError: pass - imported_inline_datasets[name] = Table(inner_value) + if hasattr(inner_value, "__arrow_c_stream__"): + # TODO: this requires pyarrow 14.0.0 or later + imported_inline_datasets[name] = Table(inner_value) + else: + # Older pandas, convert through pyarrow + imported_inline_datasets[name] = Table(pa.from_pandas(inner_value)) elif isinstance(value, dict): # Let narwhals import the dict using a default backend df_nw = nw.from_dict(value, native_namespace=_get_default_namespace()) @@ -887,7 +896,7 @@ def patch_pre_transformed_spec( return cast(dict[str, Any], pre_transformed_spec2) @property - def worker_threads(self) -> int: + def worker_threads(self) -> int | None: """ Get the number of worker threads for the runtime. @@ -1071,4 +1080,4 @@ def get_inline_column_usage( } -runtime = VegaFusionRuntime(64, get_virtual_memory() // 2, get_cpu_count()) +runtime = VegaFusionRuntime(64, None, None) diff --git a/vegafusion-runtime/Cargo.toml b/vegafusion-runtime/Cargo.toml index 118d0a58c..c9b496f36 100644 --- a/vegafusion-runtime/Cargo.toml +++ b/vegafusion-runtime/Cargo.toml @@ -20,8 +20,6 @@ num-traits = "0.2.15" itertools = "0.11.0" float-cmp = "0.9.0" lru = "0.11.1" -futures = "0.3.21" -async-trait = "0.1.73" async-recursion = "1.0.5" async-lock = "2.8.0" tempfile = "3.3.0" @@ -35,7 +33,6 @@ reqwest-retry = "0.3.0" reqwest-middleware = "0.2.0" [dev-dependencies] -futures = "0.3.21" futures-util = "0.3.21" rstest = "0.18.2" test-case = "3.1.0" @@ -44,6 +41,12 @@ pixelmatch = "0.1.0" rgb = "0.8.32" lodepng = "3.6.1" +[dependencies.async-trait] +workspace = true + +[dependencies.futures] +workspace = true + [dependencies.lazy_static] workspace = true diff --git a/vegafusion-runtime/src/data/mod.rs b/vegafusion-runtime/src/data/mod.rs index f311152c4..f053a00b2 100644 --- a/vegafusion-runtime/src/data/mod.rs +++ b/vegafusion-runtime/src/data/mod.rs @@ -1,2 +1 @@ -pub mod dataset; pub mod tasks; diff --git a/vegafusion-runtime/src/data/tasks.rs b/vegafusion-runtime/src/data/tasks.rs index 6e8983a9e..7dbb54d21 100644 --- a/vegafusion-runtime/src/data/tasks.rs +++ b/vegafusion-runtime/src/data/tasks.rs @@ -8,11 +8,11 @@ use async_trait::async_trait; use datafusion_expr::{expr, lit, Expr}; use std::collections::{HashMap, HashSet}; use std::path::Path; +use vegafusion_core::data::dataset::VegaFusionDataset; use std::sync::Arc; use tokio::io::AsyncReadExt; -use crate::data::dataset::VegaFusionDataset; use crate::task_graph::timezone::RuntimeTzConfig; use crate::transform::pipeline::TransformPipelineUtils; diff --git a/vegafusion-runtime/src/expression/compiler/builtin_functions/data/vl_selection_test.rs b/vegafusion-runtime/src/expression/compiler/builtin_functions/data/vl_selection_test.rs index 985557975..e29c32f5e 100644 --- a/vegafusion-runtime/src/expression/compiler/builtin_functions/data/vl_selection_test.rs +++ b/vegafusion-runtime/src/expression/compiler/builtin_functions/data/vl_selection_test.rs @@ -18,13 +18,12 @@ use vegafusion_common::datatypes::{ cast_to, is_float_datatype, is_integer_datatype, is_numeric_datatype, is_string_datatype, }; use vegafusion_common::error::{Result, ResultWithContext, VegaFusionError}; +use vegafusion_core::planning::parse_datetime::parse_datetime; use vegafusion_core::proto::gen::expression::literal::Value; use vegafusion_core::proto::gen::{ expression::expression::Expr as ProtoExpr, expression::Expression, expression::Literal, }; -use vegafusion_datafusion_udfs::udfs::datetime::str_to_utc_timestamp::{ - parse_datetime, STR_TO_UTC_TIMESTAMP_UDF, -}; +use vegafusion_datafusion_udfs::udfs::datetime::str_to_utc_timestamp::STR_TO_UTC_TIMESTAMP_UDF; use vegafusion_datafusion_udfs::udfs::datetime::utc_timestamp_to_epoch::UTC_TIMESTAMP_TO_EPOCH_MS; /// Op diff --git a/vegafusion-runtime/src/lib.rs b/vegafusion-runtime/src/lib.rs index 01b6506c6..0e2835524 100644 --- a/vegafusion-runtime/src/lib.rs +++ b/vegafusion-runtime/src/lib.rs @@ -4,7 +4,6 @@ extern crate core; pub mod data; pub mod expression; -pub mod pre_transform; pub mod signal; pub mod task_graph; pub mod tokio_runtime; diff --git a/vegafusion-runtime/src/pre_transform/mod.rs b/vegafusion-runtime/src/pre_transform/mod.rs deleted file mode 100644 index 44bc8766a..000000000 --- a/vegafusion-runtime/src/pre_transform/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod destringify_selection_datetimes; diff --git a/vegafusion-runtime/src/signal/mod.rs b/vegafusion-runtime/src/signal/mod.rs index 22d7cdfd5..161f9f83d 100644 --- a/vegafusion-runtime/src/signal/mod.rs +++ b/vegafusion-runtime/src/signal/mod.rs @@ -5,8 +5,8 @@ use crate::task_graph::task::TaskCall; use async_trait::async_trait; use std::collections::HashMap; use std::sync::Arc; +use vegafusion_core::data::dataset::VegaFusionDataset; -use crate::data::dataset::VegaFusionDataset; use crate::task_graph::timezone::RuntimeTzConfig; use vegafusion_core::error::Result; use vegafusion_core::proto::gen::tasks::SignalTask; diff --git a/vegafusion-runtime/src/task_graph/runtime.rs b/vegafusion-runtime/src/task_graph/runtime.rs index 26edad1f1..abb5dfc1f 100644 --- a/vegafusion-runtime/src/task_graph/runtime.rs +++ b/vegafusion-runtime/src/task_graph/runtime.rs @@ -1,30 +1,22 @@ -use async_recursion::async_recursion; -use std::collections::{HashMap, HashSet}; -use vegafusion_core::error::{Result, ResultWithContext, ToExternalError, VegaFusionError}; -use vegafusion_core::task_graph::task_value::TaskValue; - -use crate::data::dataset::VegaFusionDataset; -use crate::pre_transform::destringify_selection_datetimes::destringify_selection_datetimes; use crate::task_graph::cache::VegaFusionCache; use crate::task_graph::task::TaskCall; use crate::task_graph::timezone::RuntimeTzConfig; -use datafusion_common::ScalarValue; +use async_recursion::async_recursion; use futures_util::{future, FutureExt}; use prost::Message as ProstMessage; -use serde_json::Value; +use std::collections::HashMap; use std::convert::{TryFrom, TryInto}; use std::panic::AssertUnwindSafe; -use std::sync::{Arc, Mutex}; -use vegafusion_common::data::scalar::ScalarValueHelpers; +use std::sync::Arc; use vegafusion_common::data::table::VegaFusionTable; +use vegafusion_core::data::dataset::VegaFusionDataset; +use vegafusion_core::error::{Result, ResultWithContext, ToExternalError, VegaFusionError}; +use vegafusion_core::planning::apply_pre_transform::apply_pre_transform_datasets; +use vegafusion_core::planning::destringify_selection_datetimes::destringify_selection_datetimes; use vegafusion_core::planning::plan::{PlannerConfig, SpecPlan}; -use vegafusion_core::planning::stitch::CommPlan; -use vegafusion_core::planning::watch::{ - ExportUpdateArrow, ExportUpdateJSON, ExportUpdateNamespace, -}; +use vegafusion_core::planning::watch::{ExportUpdateArrow, ExportUpdateNamespace}; use vegafusion_core::proto::gen::errors::error::Errorkind; use vegafusion_core::proto::gen::errors::{Error, TaskGraphValueError}; -use vegafusion_core::proto::gen::pretransform::pre_transform_spec_warning::WarningType; use vegafusion_core::proto::gen::pretransform::pre_transform_values_warning::WarningType as ValuesWarningType; use vegafusion_core::proto::gen::pretransform::{ pre_transform_extract_warning, PlannerWarning, @@ -33,8 +25,7 @@ use vegafusion_core::proto::gen::pretransform::{ PreTransformValuesRequest, PreTransformValuesResponse, PreTransformValuesWarning, }; use vegafusion_core::proto::gen::pretransform::{ - PreTransformBrokenInteractivityWarning, PreTransformRowLimitWarning, PreTransformSpecRequest, - PreTransformSpecResponse, PreTransformUnsupportedWarning, + PreTransformRowLimitWarning, PreTransformSpecRequest, PreTransformSpecResponse, }; use vegafusion_core::proto::gen::services::{ pre_transform_extract_result, pre_transform_spec_result, pre_transform_values_result, @@ -43,11 +34,13 @@ use vegafusion_core::proto::gen::services::{ }; use vegafusion_core::proto::gen::tasks::{ task::TaskKind, InlineDataset, NodeValueIndex, ResponseTaskValue, TaskGraph, - TaskGraphValueResponse, TaskValue as ProtoTaskValue, TzConfig, Variable, VariableNamespace, + TaskGraphValueResponse, TaskValue as ProtoTaskValue, TzConfig, VariableNamespace, }; +use vegafusion_core::runtime::VegaFusionRuntimeTrait; use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::spec::values::MissingNullOrValue; use vegafusion_core::task_graph::graph::ScopedVariable; +use vegafusion_core::task_graph::task_value::TaskValue; use vegafusion_dataframe::connection::Connection; type CacheValue = (TaskValue, Vec); @@ -716,6 +709,60 @@ impl VegaFusionRuntime { } } +#[async_trait::async_trait] +impl VegaFusionRuntimeTrait for VegaFusionRuntime { + async fn query_request( + &self, + task_graph: Arc, + indices: &[NodeValueIndex], + inline_datasets: &HashMap, + ) -> Result> { + // Clone task_graph and task_graph_runtime for use in closure + let task_graph_runtime = self.clone(); + let response_value_futures: Vec<_> = indices + .iter() + .map(|node_value_index| { + let node = task_graph + .nodes + .get(node_value_index.node_index as usize) + .with_context(|| { + format!( + "Node index {} out of bounds for graph with size {}", + node_value_index.node_index, + task_graph.nodes.len() + ) + })?; + let task = node.task(); + let var = match node_value_index.output_index { + None => task.variable().clone(), + Some(output_index) => task.output_vars()[output_index as usize].clone(), + }; + + let scope = node.task().scope.clone(); + + // Clone task_graph and task_graph_runtime for use in closure + let task_graph_runtime = task_graph_runtime.clone(); + let task_graph = task_graph.clone(); + + Ok(async move { + let value = task_graph_runtime + .clone() + .get_node_value(task_graph, node_value_index, inline_datasets.clone()) + .await?; + + Ok::<_, VegaFusionError>(ResponseTaskValue { + variable: Some(var), + scope, + value: Some(ProtoTaskValue::try_from(&value).unwrap()), + }) + }) + }) + .collect::>>()?; + + future::try_join_all(response_value_futures).await + } +} + #[async_recursion] async fn get_or_compute_node_value( task_graph: Arc, @@ -790,313 +837,3 @@ async fn get_or_compute_node_value( cache.get_or_try_insert_with(cache_key, fut).await } } - -fn apply_pre_transform_datasets( - input_spec: &ChartSpec, - plan: &SpecPlan, - init: Vec, - row_limit: Option, -) -> Result<(ChartSpec, Vec)> { - // Update client spec with server values - let mut spec = plan.client_spec.clone(); - let mut limited_datasets: Vec = Vec::new(); - for export_update in init { - let scope = export_update.scope.clone(); - let name = export_update.name.as_str(); - let export_update = export_update.to_json()?; - match export_update.namespace { - ExportUpdateNamespace::Signal => { - let signal = spec.get_nested_signal_mut(&scope, name)?; - signal.value = MissingNullOrValue::Value(export_update.value); - } - ExportUpdateNamespace::Data => { - let data = spec.get_nested_data_mut(&scope, name)?; - - // If the input dataset includes inline values and no transforms, - // copy the input JSON directly to avoid the case where round-tripping - // through Arrow homogenizes mixed type arrays. - // E.g. round tripping may turn [1, "two"] into ["1", "two"] - let input_values = input_spec - .get_nested_data(&scope, name) - .ok() - .and_then(|data| { - if data.transform.is_empty() { - data.values.clone() - } else { - None - } - }); - let value = if let Some(input_values) = input_values { - input_values - } else if let Value::Array(values) = &export_update.value { - if let Some(row_limit) = row_limit { - let row_limit = row_limit as usize; - if values.len() > row_limit { - limited_datasets.push(export_update.to_scoped_var().0); - Value::Array(Vec::from(&values[..row_limit])) - } else { - Value::Array(values.clone()) - } - } else { - Value::Array(values.clone()) - } - } else { - return Err(VegaFusionError::internal( - "Expected Data value to be an Array", - )); - }; - - // Set inline value - // Other properties are cleared by planning process so we don't alter them here - data.values = Some(value); - } - } - } - - // Destringify datetime strings in selection store datasets - destringify_selection_datetimes(&mut spec)?; - - // Build warnings - let mut warnings: Vec = Vec::new(); - - // Add unsupported warning ( - if plan.comm_plan.server_to_client.is_empty() { - warnings.push(PreTransformSpecWarning { - warning_type: Some(WarningType::Unsupported(PreTransformUnsupportedWarning {})), - }); - } - - // Add Row Limit warning - if !limited_datasets.is_empty() { - warnings.push(PreTransformSpecWarning { - warning_type: Some(WarningType::RowLimit(PreTransformRowLimitWarning { - datasets: limited_datasets, - })), - }); - } - - // Add Broken Interactivity warning - if !plan.comm_plan.client_to_server.is_empty() { - let vars: Vec<_> = plan - .comm_plan - .client_to_server - .iter() - .map(|var| var.0.clone()) - .collect(); - warnings.push(PreTransformSpecWarning { - warning_type: Some(WarningType::BrokenInteractivity( - PreTransformBrokenInteractivityWarning { vars }, - )), - }); - } - - // Add planner warnings - for planner_warning in &plan.warnings { - warnings.push(PreTransformSpecWarning { - warning_type: Some(WarningType::Planner(PlannerWarning { - message: planner_warning.message(), - })), - }); - } - - Ok((spec, warnings)) -} - -#[derive(Clone)] -pub struct ChartState { - input_spec: ChartSpec, - transformed_spec: ChartSpec, - plan: SpecPlan, - inline_datasets: HashMap, - task_graph: Arc>, - task_graph_mapping: Arc>, - server_to_client_value_indices: Arc>, - warnings: Vec, -} - -impl ChartState { - pub async fn try_new( - runtime: &VegaFusionRuntime, - spec: ChartSpec, - inline_datasets: HashMap, - tz_config: TzConfig, - row_limit: Option, - ) -> Result { - let dataset_fingerprints = inline_datasets - .iter() - .map(|(k, ds)| (k.clone(), ds.fingerprint())) - .collect::>(); - - let plan = SpecPlan::try_new(&spec, &Default::default())?; - - let task_scope = plan - .server_spec - .to_task_scope() - .with_context(|| "Failed to create task scope for server spec")?; - let tasks = plan - .server_spec - .to_tasks(&tz_config, &dataset_fingerprints) - .unwrap(); - let task_graph = TaskGraph::new(tasks, &task_scope).unwrap(); - let task_graph_mapping = task_graph.build_mapping(); - let server_to_client_value_indices: Arc> = Arc::new( - plan.comm_plan - .server_to_client - .iter() - .map(|scoped_var| task_graph_mapping.get(scoped_var).unwrap().clone()) - .collect(), - ); - - // Gather values of server-to-client values - let mut init = Vec::new(); - for var in &plan.comm_plan.server_to_client { - let node_index = task_graph_mapping - .get(var) - .with_context(|| format!("Failed to lookup variable '{var:?}'"))?; - let value = runtime - .get_node_value( - Arc::new(task_graph.clone()), - node_index, - inline_datasets.clone(), - ) - .await - .with_context(|| "Failed to get node value")?; - - init.push(ExportUpdateArrow { - namespace: ExportUpdateNamespace::try_from(var.0.namespace()).unwrap(), - name: var.0.name.clone(), - scope: var.1.clone(), - value, - }); - } - - let (transformed_spec, warnings) = - apply_pre_transform_datasets(&spec, &plan, init, row_limit)?; - - Ok(Self { - input_spec: spec, - transformed_spec, - plan, - inline_datasets, - task_graph: Arc::new(Mutex::new(task_graph)), - task_graph_mapping: Arc::new(task_graph_mapping), - server_to_client_value_indices, - warnings, - }) - } - - pub async fn update( - &self, - runtime: &VegaFusionRuntime, - updates: Vec, - ) -> Result> { - let mut task_graph = self.task_graph.lock().map_err(|err| { - VegaFusionError::internal(format!("Failed to acquire task graph lock: {:?}", err)) - })?; - let server_to_client = self.server_to_client_value_indices.clone(); - let mut indices: Vec = Vec::new(); - for export_update in &updates { - let var = match export_update.namespace { - ExportUpdateNamespace::Signal => Variable::new_signal(&export_update.name), - ExportUpdateNamespace::Data => Variable::new_data(&export_update.name), - }; - let scoped_var: ScopedVariable = (var, export_update.scope.clone()); - let node_value_index = self - .task_graph_mapping - .get(&scoped_var) - .with_context(|| format!("No task graph node found for {scoped_var:?}"))? - .clone(); - - let value = match export_update.namespace { - ExportUpdateNamespace::Signal => { - TaskValue::Scalar(ScalarValue::from_json(&export_update.value)?) - } - ExportUpdateNamespace::Data => { - TaskValue::Table(VegaFusionTable::from_json(&export_update.value)?) - } - }; - - indices.extend(task_graph.update_value(node_value_index.node_index as usize, value)?); - } - - // Filter to update nodes in the comm plan - let indices: Vec<_> = indices - .iter() - .filter(|&node| server_to_client.contains(node)) - .cloned() - .collect(); - - let cloned_task_graph = task_graph.clone(); - - // Drop the MutexGuard before await call to avoid warning - drop(task_graph); - - let response_task_values = runtime - .query_request( - Arc::new(cloned_task_graph), - indices.as_slice(), - &self.inline_datasets, - ) - .await?; - - let mut response_updates = response_task_values - .into_iter() - .map(|response_value| { - let variable = response_value - .variable - .with_context(|| "Missing variable for response value".to_string())?; - - let scope = response_value.scope; - let proto_value = response_value - .value - .with_context(|| "missing value for response value: {:?}".to_string())?; - - let value = TaskValue::try_from(&proto_value).with_context(|| { - "Deserialization failed for value of response value: {:?}".to_string() - })?; - - Ok(ExportUpdateJSON { - namespace: match variable.ns() { - VariableNamespace::Signal => ExportUpdateNamespace::Signal, - VariableNamespace::Data => ExportUpdateNamespace::Data, - VariableNamespace::Scale => { - return Err(VegaFusionError::internal("Unexpected scale variable")) - } - }, - name: variable.name.clone(), - scope: scope.clone(), - value: value.to_json()?, - }) - }) - .collect::>>()?; - - // Sort for deterministic ordering - response_updates.sort_by_key(|update| update.name.clone()); - - Ok(response_updates) - } - - pub fn get_input_spec(&self) -> &ChartSpec { - &self.input_spec - } - - pub fn get_server_spec(&self) -> &ChartSpec { - &self.plan.server_spec - } - - pub fn get_client_spec(&self) -> &ChartSpec { - &self.plan.client_spec - } - - pub fn get_transformed_spec(&self) -> &ChartSpec { - &self.transformed_spec - } - - pub fn get_comm_plan(&self) -> &CommPlan { - &self.plan.comm_plan - } - - pub fn get_warnings(&self) -> &Vec { - &self.warnings - } -} diff --git a/vegafusion-runtime/src/task_graph/task.rs b/vegafusion-runtime/src/task_graph/task.rs index 48a85ba44..fc54b7809 100644 --- a/vegafusion-runtime/src/task_graph/task.rs +++ b/vegafusion-runtime/src/task_graph/task.rs @@ -1,9 +1,9 @@ -use crate::data::dataset::VegaFusionDataset; use crate::task_graph::timezone::RuntimeTzConfig; use async_trait::async_trait; use std::collections::HashMap; use std::convert::TryInto; use std::sync::Arc; +use vegafusion_core::data::dataset::VegaFusionDataset; use vegafusion_core::error::Result; use vegafusion_core::proto::gen::tasks::task::TaskKind; use vegafusion_core::proto::gen::tasks::Task; diff --git a/vegafusion-runtime/tests/test_chart_state.rs b/vegafusion-runtime/tests/test_chart_state.rs index 82ef107c1..73a35628d 100644 --- a/vegafusion-runtime/tests/test_chart_state.rs +++ b/vegafusion-runtime/tests/test_chart_state.rs @@ -9,10 +9,11 @@ mod tests { use serde_json::json; use std::fs; use std::sync::Arc; + use vegafusion_core::chart_state::ChartState; use vegafusion_core::planning::watch::{ExportUpdateJSON, ExportUpdateNamespace}; use vegafusion_core::proto::gen::tasks::TzConfig; use vegafusion_core::spec::chart::ChartSpec; - use vegafusion_runtime::task_graph::runtime::{ChartState, VegaFusionRuntime}; + use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; #[tokio::test] diff --git a/vegafusion-runtime/tests/test_pre_transform_values.rs b/vegafusion-runtime/tests/test_pre_transform_values.rs index f9ffa6284..ae9742309 100644 --- a/vegafusion-runtime/tests/test_pre_transform_values.rs +++ b/vegafusion-runtime/tests/test_pre_transform_values.rs @@ -23,11 +23,11 @@ mod tests { use std::sync::Arc; use vegafusion_common::data::table::VegaFusionTable; use vegafusion_common::error::VegaFusionError; + use vegafusion_core::data::dataset::VegaFusionDataset; use vegafusion_core::proto::gen::pretransform::pre_transform_values_warning::WarningType; use vegafusion_core::proto::gen::tasks::Variable; use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::spec::values::StringOrSignalSpec; - use vegafusion_runtime::data::dataset::VegaFusionDataset; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; diff --git a/vegafusion-sql/Cargo.toml b/vegafusion-sql/Cargo.toml index 6163c5410..cc32fa929 100644 --- a/vegafusion-sql/Cargo.toml +++ b/vegafusion-sql/Cargo.toml @@ -20,7 +20,6 @@ datafusion-conn = [ ] [dependencies] -async-trait = "0.1.73" deterministic-hash = "1.0.1" log = "0.4.17" uuid = "1.4.1" @@ -33,6 +32,9 @@ toml = "0.7.2" [dev-dependencies.lazy_static] workspace = true +[dependencies.async-trait] +workspace = true + [dependencies.chrono] workspace = true diff --git a/vegafusion-wasm/Cargo.toml b/vegafusion-wasm/Cargo.toml index 3c16fe18d..dda7586bc 100644 --- a/vegafusion-wasm/Cargo.toml +++ b/vegafusion-wasm/Cargo.toml @@ -18,6 +18,7 @@ wasm-bindgen-futures = "0.4.28" js-sys = "0.3.55" indexmap = "1.9.2" + [dev-dependencies] wasm-bindgen-test = "0.3.13" @@ -27,6 +28,9 @@ workspace = true [dependencies.prost-types] workspace = true +[dependencies.futures] +workspace = true + [dependencies.vegafusion-common] path = "../vegafusion-common" features = ["json"] @@ -59,6 +63,9 @@ optional = true version = "0.3.55" features = ["Document", "Element", "HtmlElement", "Node", "Window"] +[dependencies.async-trait] +workspace = true + [package.metadata.wasm-pack.profile.release] wasm-opt = ["-Os"] diff --git a/vegafusion-wasm/js/vega_utils.js b/vegafusion-wasm/js/vega_utils.js index 85f445782..871f47a47 100644 --- a/vegafusion-wasm/js/vega_utils.js +++ b/vegafusion-wasm/js/vega_utils.js @@ -123,7 +123,7 @@ function trap(view, fn) { // Other utility functions export function make_grpc_send_message_fn(client, hostname) { - let send_message_grpc = (send_msg_bytes, receiver) => { + let send_message_grpc = async (send_msg_bytes, receiver) => { let grpc_route = '/services.VegaFusionRuntime/TaskGraphQuery' // Make custom MethodDescriptor that does not perform serialization @@ -136,15 +136,12 @@ export function make_grpc_send_message_fn(client, hostname) { (v) => v, ); - let promise = client.unaryCall( + return await client.unaryCall( hostname + grpc_route, send_msg_bytes, {}, methodDescriptor, - ); - promise.then((response) => { - receiver.receive(response) - }) + ) } return send_message_grpc } diff --git a/vegafusion-wasm/src/lib.rs b/vegafusion-wasm/src/lib.rs index dc8b9c24b..455a08c08 100644 --- a/vegafusion-wasm/src/lib.rs +++ b/vegafusion-wasm/src/lib.rs @@ -1,28 +1,34 @@ +use futures::{SinkExt, StreamExt}; use prost::Message; -use vegafusion_common::data::scalar::{ScalarValue, ScalarValueHelpers}; use vegafusion_core::proto::gen::tasks::{ - NodeValueIndex, TaskGraph, TaskGraphValueRequest, TzConfig, VariableNamespace, + NodeValueIndex, ResponseTaskValue, TaskGraph, TaskGraphValueRequest, TzConfig, + VariableNamespace, }; -use vegafusion_core::task_graph::task_value::TaskValue; use wasm_bindgen::prelude::*; use js_sys::Promise; -use std::collections::{HashMap, HashSet}; +use std::collections::HashMap; use std::rc::Rc; -use std::sync::Mutex; -use vegafusion_common::data::table::VegaFusionTable; +use std::sync::Arc; +// use std::sync::mpsc; +use futures::channel::{mpsc as async_mpsc, oneshot}; -use vegafusion_core::planning::stitch::CommPlan; -use vegafusion_core::planning::watch::WatchPlan; +use wasm_bindgen_futures::JsFuture; + +use serde_json::Value; +use wasm_bindgen_futures::spawn_local; + +use vegafusion_core::planning::watch::{ExportUpdateJSON, ExportUpdateNamespace, WatchPlan}; use vegafusion_core::proto::gen::services::{ query_request, query_result, QueryRequest, QueryResult, }; use vegafusion_core::spec::chart::ChartSpec; -use vegafusion_core::task_graph::graph::ScopedVariable; -use vegafusion_core::planning::plan::SpecPlan; +use vegafusion_core::chart_state::ChartState; +use vegafusion_core::data::dataset::VegaFusionDataset; +use vegafusion_core::runtime::VegaFusionRuntimeTrait; use web_sys::Element; pub fn set_panic_hook() { @@ -44,80 +50,103 @@ extern "C" { fn log(s: &str); } +pub struct VegaFusionWasmRuntime { + sender: async_mpsc::Sender<( + QueryRequest, + oneshot::Sender>>, + )>, +} + +impl VegaFusionWasmRuntime { + pub fn new(query_fn: js_sys::Function) -> Self { + let (sender, mut receiver) = async_mpsc::channel::<( + QueryRequest, + oneshot::Sender>>, + )>(32); + + // Spawn a task to process incoming requests + spawn_local(async move { + while let Some((request_msg, response_tx)) = receiver.next().await { + let mut buf: Vec = Vec::with_capacity(request_msg.encoded_len()); + request_msg.encode(&mut buf).unwrap(); + + let context = + js_sys::JSON::parse(&serde_json::to_string(&serde_json::Value::Null).unwrap()) + .unwrap(); + + let js_buffer = js_sys::Uint8Array::from(buf.as_slice()); + let promise = query_fn + .call1(&context, &js_buffer) + .expect("query_fn function call failed"); + let promise = promise.dyn_into::().unwrap(); + let response = JsFuture::from(promise).await.unwrap(); + let response_array = response.dyn_into::().unwrap(); + let response_bytes = response_array.to_vec(); + + let response = QueryResult::decode(response_bytes.as_slice()).unwrap(); + + match response.response.unwrap() { + query_result::Response::Error(error) => { + response_tx + .send(Err(vegafusion_common::error::VegaFusionError::internal( + format!("{error:?}"), + ))) + .unwrap(); + } + query_result::Response::TaskGraphValues(task_graph_value_response) => { + response_tx + .send(Ok(task_graph_value_response.response_values)) + .unwrap(); + } + } + } + }); + + VegaFusionWasmRuntime { sender } + } +} +#[async_trait::async_trait] +impl VegaFusionRuntimeTrait for VegaFusionWasmRuntime { + async fn query_request( + &self, + task_graph: Arc, + indices: &[NodeValueIndex], + _inline_datasets: &HashMap, + ) -> vegafusion_common::error::Result> { + // Request initial values + let request_msg = QueryRequest { + request: Some(query_request::Request::TaskGraphValues( + TaskGraphValueRequest { + task_graph: Some(task_graph.as_ref().clone()), + indices: Vec::from(indices), + inline_datasets: vec![], // TODO: inline datasets + }, + )), + }; + + let (tx, rx) = oneshot::channel(); + self.sender.clone().send((request_msg, tx)).await.unwrap(); + let response = rx.await.unwrap(); + + response + } +} + #[wasm_bindgen] #[derive(Clone)] -pub struct MsgReceiver { - spec: Rc, - server_spec: Rc, - comm_plan: CommPlan, - send_msg_fn: Rc, - task_graph: Rc>, - task_graph_mapping: Rc>, - server_to_client_value_indices: Rc>, +pub struct ChartHandle { + state: ChartState, view: Rc, verbose: bool, debounce_wait: f64, debounce_max_wait: Option, + sender: async_mpsc::Sender, } #[wasm_bindgen] -impl MsgReceiver { - #[allow(clippy::too_many_arguments)] - fn new( - element: Element, - spec: ChartSpec, - server_spec: ChartSpec, - comm_plan: CommPlan, - task_graph: TaskGraph, - send_msg_fn: js_sys::Function, - verbose: bool, - debounce_wait: f64, - debounce_max_wait: Option, - ) -> Self { - set_panic_hook(); - - let task_graph_mapping = task_graph.build_mapping(); - - let server_to_client_value_indices: Rc> = Rc::new( - comm_plan - .server_to_client - .iter() - .map(|scoped_var| task_graph_mapping.get(scoped_var).unwrap().clone()) - .collect(), - ); - - // Mount vega chart - let window = web_sys::window().expect("no global `window` exists"); - let _document = window.document().expect("should have a document on window"); - let dataflow = parse( - js_sys::JSON::parse( - &serde_json::to_string(&spec).expect("Failed to parse spec as JSON"), - ) - .unwrap(), - ); - - let view = View::new(dataflow); - view.initialize(element); - view.hover(); - setup_tooltip(&view); - - let this = Self { - spec: Rc::new(spec), - server_spec: Rc::new(server_spec), - comm_plan, - task_graph: Rc::new(Mutex::new(task_graph)), - task_graph_mapping: Rc::new(task_graph_mapping), - send_msg_fn: Rc::new(send_msg_fn), - server_to_client_value_indices, - view: Rc::new(view), - verbose, - debounce_wait, - debounce_max_wait, - }; - - this.register_callbacks(); - - this +impl ChartHandle { + fn view(&self) -> &View { + &self.view } pub fn get_signal(&self, name: &str, scope: &[u32]) -> JsValue { @@ -174,78 +203,39 @@ impl MsgReceiver { ); } - pub fn receive(&mut self, bytes: Vec) { - // Decode message - let response = QueryResult::decode(bytes.as_slice()).unwrap(); - - if let Some(response) = response.response { - match response { - query_result::Response::TaskGraphValues(task_graph_vals) => { - for (var, scope, value) in task_graph_vals - .deserialize() - .expect("Failed to deserialize response") - { - match &value { - TaskValue::Scalar(value) => { - let json = value.to_json().unwrap(); - if self.verbose { - log(&format!("VegaFusion(wasm): Received {}", var.name)); - log(&serde_json::to_string_pretty(&json).unwrap()); - log(&format!("DataType: {:#?}", &value.data_type())); - } - - let js_value = - js_sys::JSON::parse(&serde_json::to_string(&json).unwrap()) - .unwrap(); - self.set_signal(&var.name, scope.as_slice(), js_value); - } - TaskValue::Table(value) => { - let json = value.to_json().expect("Failed to serialize table"); - if self.verbose { - log(&format!("VegaFusion(wasm): Received {}", var.name)); - log(&serde_json::to_string_pretty(&json).unwrap()); - log(&format!("Schema: {:#?}", &value.schema)); - } - - let js_value = - js_sys::JSON::parse(&serde_json::to_string(&json).unwrap()) - .unwrap(); - self.set_data(&var.name, scope.as_slice(), js_value); - } - } - } - let view = self.view(); - view.run(); + fn update_view(&self, updates: &[ExportUpdateJSON]) { + for update in updates { + match update.namespace { + ExportUpdateNamespace::Signal => { + let js_value = + js_sys::JSON::parse(&serde_json::to_string(&update.value).unwrap()) + .unwrap(); + self.set_signal(&update.name, update.scope.as_slice(), js_value); } - query_result::Response::Error(error) => { - log(&format!("{error:?}")); + ExportUpdateNamespace::Data => { + let js_value = + js_sys::JSON::parse(&serde_json::to_string(&update.value).unwrap()) + .unwrap(); + self.set_data(&update.name, update.scope.as_slice(), js_value); } } } } - fn view(&self) -> &View { - &self.view - } - - fn register_callbacks(&self) { - for scoped_var in &self.comm_plan.client_to_server { + pub fn register_callbacks(&self) { + for scoped_var in &self.state.get_comm_plan().client_to_server { let var_name = scoped_var.0.name.clone(); - let scope = scoped_var.1.as_slice(); - let node_value_index = self.task_graph_mapping.get(scoped_var).unwrap().clone(); - let server_to_client = self.server_to_client_value_indices.clone(); + let scope = Vec::from(scoped_var.1.as_slice()); - let task_graph = self.task_graph.clone(); - let send_msg_fn = self.send_msg_fn.clone(); + let sender = self.sender.clone(); let verbose = self.verbose; - - // Register callbacks - let this = self.clone(); + // let this = self.clone(); match scoped_var.0.namespace() { VariableNamespace::Signal => { let closure = Closure::wrap(Box::new(move |name: String, val: JsValue| { - let val: serde_json::Value = if val.is_undefined() { - serde_json::Value::Null + let mut sender = sender.clone(); + let val: Value = if val.is_undefined() { + Value::Null } else { serde_json::from_str( &js_sys::JSON::stringify(&val).unwrap().as_string().unwrap(), @@ -258,42 +248,26 @@ impl MsgReceiver { log(&serde_json::to_string_pretty(&val).unwrap()); } - let mut task_graph = task_graph.lock().unwrap(); - let updated_nodes = &task_graph - .update_value( - node_value_index.node_index as usize, - TaskValue::Scalar(ScalarValue::from_json(&val).unwrap()), - ) - .unwrap(); - - // Filter to update nodes in the comm plan - let updated_nodes: Vec<_> = updated_nodes - .iter() - .filter(|&node| server_to_client.contains(node)) - .cloned() - .collect(); - - let request_msg = QueryRequest { - request: Some(query_request::Request::TaskGraphValues( - TaskGraphValueRequest { - task_graph: Some(task_graph.clone()), - indices: updated_nodes, - inline_datasets: vec![], - }, - )), + let update = ExportUpdateJSON { + namespace: ExportUpdateNamespace::Signal, + name, + scope: scope.clone(), + value: val, }; - - this.send_request(send_msg_fn.as_ref(), request_msg); + spawn_local(async move { + sender.send(update).await.unwrap(); + }); }) as Box); let ret_cb = closure.as_ref().clone(); closure.forget(); - self.add_signal_listener(&var_name, scope, ret_cb); + self.add_signal_listener(&var_name, scoped_var.1.as_slice(), ret_cb); } VariableNamespace::Data => { let closure = Closure::wrap(Box::new(move |name: String, val: JsValue| { + let mut sender = sender.clone(); let val: serde_json::Value = serde_json::from_str( &js_sys::JSON::stringify(&val).unwrap().as_string().unwrap(), ) @@ -303,79 +277,38 @@ impl MsgReceiver { log(&serde_json::to_string_pretty(&val).unwrap()); } - let mut task_graph = task_graph.lock().expect("lock task graph"); - - let updated_nodes = &task_graph - .update_value( - node_value_index.node_index as usize, - TaskValue::Table(VegaFusionTable::from_json(&val).unwrap()), - ) - .unwrap(); - - // Filter to update nodes in the comm plan - let updated_nodes: Vec<_> = updated_nodes - .iter() - .filter(|&node| server_to_client.contains(node)) - .cloned() - .collect(); - - if !updated_nodes.is_empty() { - let request_msg = QueryRequest { - request: Some(query_request::Request::TaskGraphValues( - TaskGraphValueRequest { - task_graph: Some(task_graph.clone()), - indices: updated_nodes, - inline_datasets: vec![], - }, - )), - }; - - this.send_request(send_msg_fn.as_ref(), request_msg); - } + let update = ExportUpdateJSON { + namespace: ExportUpdateNamespace::Data, + name, + scope: scope.clone(), + value: val, + }; + spawn_local(async move { + sender.send(update).await.unwrap(); + }); }) as Box); let ret_cb = closure.as_ref().clone(); closure.forget(); - self.add_data_listener(&var_name, scope, ret_cb); + self.add_data_listener(&var_name, scoped_var.1.as_slice(), ret_cb); } VariableNamespace::Scale => {} } } } - fn send_request(&self, send_msg_fn: &js_sys::Function, request_msg: QueryRequest) { - let mut buf: Vec = Vec::with_capacity(request_msg.encoded_len()); - request_msg.encode(&mut buf).unwrap(); - - let context = - js_sys::JSON::parse(&serde_json::to_string(&serde_json::Value::Null).unwrap()).unwrap(); - - let js_buffer = js_sys::Uint8Array::from(buf.as_slice()); - send_msg_fn - .call2(&context, &js_buffer, &self.clone().into()) - .expect("send_request function call failed"); - } - - fn initial_node_value_indices(&self) -> Vec { - self.comm_plan - .server_to_client - .iter() - .map(|scoped_var| self.task_graph_mapping.get(scoped_var).unwrap().clone()) - .collect() - } - pub fn client_spec_json(&self) -> String { - serde_json::to_string_pretty(self.spec.as_ref()).unwrap() + serde_json::to_string_pretty(self.state.get_client_spec()).unwrap() } pub fn server_spec_json(&self) -> String { - serde_json::to_string_pretty(self.server_spec.as_ref()).unwrap() + serde_json::to_string_pretty(self.state.get_server_spec()).unwrap() } pub fn comm_plan_json(&self) -> String { - serde_json::to_string_pretty(&WatchPlan::from(self.comm_plan.clone())).unwrap() + serde_json::to_string_pretty(&WatchPlan::from(self.state.get_comm_plan().clone())).unwrap() } pub fn to_image_url(&self, img_type: &str, scale_factor: Option) -> Promise { @@ -385,62 +318,70 @@ impl MsgReceiver { } #[wasm_bindgen] -pub fn render_vegafusion( +pub async fn render_vegafusion( element: Element, spec_str: &str, verbose: bool, debounce_wait: f64, debounce_max_wait: Option, - send_msg_fn: js_sys::Function, -) -> MsgReceiver { + query_fn: js_sys::Function, +) -> ChartHandle { + set_panic_hook(); let spec: ChartSpec = serde_json::from_str(spec_str).unwrap(); - let spec_plan = SpecPlan::try_new(&spec, &Default::default()).unwrap(); - - let task_scope = spec_plan - .server_spec - .to_task_scope() - .expect("Failed to create task scope for server spec"); let local_tz = local_timezone(); let tz_config = TzConfig { local_tz, default_input_tz: None, }; - let tasks = spec_plan - .server_spec - .to_tasks(&tz_config, &Default::default()) + + let runtime = VegaFusionWasmRuntime::new(query_fn); + let chart_state = ChartState::try_new(&runtime, spec, Default::default(), tz_config, None) + .await .unwrap(); - let task_graph = TaskGraph::new(tasks, &task_scope).unwrap(); - - // Create closure to update chart from received messages - let receiver = MsgReceiver::new( - element, - spec_plan.client_spec, - spec_plan.server_spec, - spec_plan.comm_plan, - task_graph.clone(), - send_msg_fn, + // Mount vega chart + let dataflow = parse( + js_sys::JSON::parse( + &serde_json::to_string(chart_state.get_transformed_spec()) + .expect("Failed to parse spec as JSON"), + ) + .unwrap(), + ); + + let view = View::new(dataflow); + view.initialize(element); + view.hover(); + setup_tooltip(&view); + + let (sender, mut receiver) = async_mpsc::channel::(16); + + let view_rc = Rc::new(view); + let handle = ChartHandle { + state: chart_state, + view: view_rc.clone(), verbose, debounce_wait, debounce_max_wait, - ); - - // Request initial values - let updated_node_indices: Vec<_> = receiver.initial_node_value_indices(); - - let request_msg = QueryRequest { - request: Some(query_request::Request::TaskGraphValues( - TaskGraphValueRequest { - task_graph: Some(task_graph), - indices: updated_node_indices, - inline_datasets: vec![], - }, - )), + sender, }; + handle.register_callbacks(); + let inner_handle = handle.clone(); + + // listen for callback updates + spawn_local(async move { + while let Some(update) = receiver.next().await { + let response_update = inner_handle + .state + .update(&runtime, vec![update]) + .await + .unwrap(); + inner_handle.update_view(&response_update); + } + }); - receiver.send_request(receiver.send_msg_fn.as_ref(), request_msg); + view_rc.run(); - receiver + handle } #[wasm_bindgen] From 96ca282df0b9fd87c0760ae254af8e05be20d0e0 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 19 Oct 2024 11:03:12 -0400 Subject: [PATCH 14/36] Revamp grpc support (#522) * Add grpc VegaFusionRuntimeTraim implementation, use from Python * include inline datasets in query_request * fix tests * fix tests * Add unimplemented stubs in wasm implementation * fmt * Move methods up to VegaFusionRuntimeTrait * fmt/fix * handle inline datasets in vegafusion-wasm * warning / format * fix requested indices * fix python lint * fix expected error message * relock, mypy fixes * bring back ignores for CI? --- Cargo.lock | 11 + Cargo.toml | 4 + pixi.lock | 9337 +++++++---------- pixi.toml | 1 - vegafusion-common/Cargo.toml | 2 +- vegafusion-core/Cargo.toml | 3 +- vegafusion-core/src/chart_state.rs | 24 +- vegafusion-core/src/proto/pretransform.proto | 38 +- .../src/proto/prost_gen/pretransform.rs | 62 +- .../src/proto/tonic_gen/pretransform.rs | 62 +- vegafusion-core/src/runtime.rs | 19 - vegafusion-core/src/runtime/grpc_runtime.rs | 197 + vegafusion-core/src/runtime/mod.rs | 10 + vegafusion-core/src/runtime/runtime.rs | 414 + vegafusion-core/src/task_graph/task_value.rs | 28 + vegafusion-python/Cargo.toml | 8 +- vegafusion-python/src/lib.rs | 296 +- vegafusion-python/vegafusion/runtime.py | 489 +- vegafusion-python/vegafusion/utils.py | 94 +- vegafusion-runtime/Cargo.toml | 4 +- vegafusion-runtime/benches/spec_benchmarks.rs | 48 +- vegafusion-runtime/src/task_graph/runtime.rs | 665 +- .../test_destringify_selection_datasets.rs | 16 +- .../tests/test_image_comparison.rs | 62 +- .../tests/test_pre_transform_extract.rs | 24 +- .../test_pre_transform_keep_variables.rs | 55 +- .../tests/test_pre_transform_values.rs | 134 +- .../tests/test_stringify_datetimes.rs | 72 +- vegafusion-server/Cargo.toml | 3 + vegafusion-server/src/main.rs | 234 +- vegafusion-sql/Cargo.toml | 2 +- vegafusion-wasm/Cargo.toml | 3 +- vegafusion-wasm/src/lib.rs | 22 +- 33 files changed, 5480 insertions(+), 6963 deletions(-) delete mode 100644 vegafusion-core/src/runtime.rs create mode 100644 vegafusion-core/src/runtime/grpc_runtime.rs create mode 100644 vegafusion-core/src/runtime/mod.rs create mode 100644 vegafusion-core/src/runtime/runtime.rs diff --git a/Cargo.lock b/Cargo.lock index b35f5819b..1e6c086f9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -515,6 +515,15 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-mutex" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" +dependencies = [ + "event-listener 2.5.3", +] + [[package]] name = "async-recursion" version = "1.1.1" @@ -4934,6 +4943,7 @@ dependencies = [ "serde_json", "sysinfo", "tokio", + "tonic", "uuid", "vegafusion-common", "vegafusion-core", @@ -4968,6 +4978,7 @@ dependencies = [ name = "vegafusion-core" version = "1.6.9" dependencies = [ + "async-mutex", "async-trait", "bytes", "chrono", diff --git a/Cargo.toml b/Cargo.toml index 4158f33a0..ab101667a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,6 +34,10 @@ lazy_static = { version = "1.5" } async-trait = "0.1.73" futures = "0.3.21" +[workspace.dependencies.serde_json] +version = "1.0.91" +default-features = false + [workspace.dependencies.datafusion] version = "42.0.0" diff --git a/pixi.lock b/pixi.lock index 71950a633..8225ceac5 100644 --- a/pixi.lock +++ b/pixi.lock @@ -7,12 +7,11 @@ environments: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/_sysroot_linux-64_curr_repodata_hack-3-h69a702a_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.10-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.12-h4ab18f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.13-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.6.1-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py310ha75aee5_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda @@ -32,232 +31,231 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h184a658_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.23.1-h94c364a_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.156-h6600424_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.13.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.40-hf600244_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.43-h4bf12b8_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-h0f2a231_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hf71b8c6_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-h9c3ff4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/build-0.7.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.2-heb4867d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.10.5-hb4ffafa_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.12.0-hb4ffafa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-h3faef2a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py310h8deb56e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.2-h59595ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.6-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/configparser-5.3.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.6.3-py310ha75aee5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/configparser-7.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.6.3-py310h89163eb_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.7-py310hf71b8c6_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flaky-3.7.0-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/future-0.18.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.2.0-h338b0a0_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.2.0-h6b349bd_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.1-h0b41bf4_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.6.0-h6f12383_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.56.2-py310h1b8f574_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.2.1-h3d44ed6_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.5.0-hfac3d4d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2023.9.18-py310h3a85d3a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.31.5-pyh8c1a49c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.36.0-pyh12aca89_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.26.0-pyhf8b6a83_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.17.2-pyh41d4057_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.28.0-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-3.0.0-py310hff52083_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.8.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.9.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.4.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.14.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.0.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.25.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.15.0-pyhcff175f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-h7f98852_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-h4a8ded7_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_17.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-h7f713cb_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.2-h59595ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-13.0.0-h1ed0495_3_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.0.1-h87da1f6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-19_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.1.1-h104a339_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-24_linux64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-19_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-24_linux64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.8.0-hca28451_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.10.1-hbbe4b11_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.1.0-h77fa898_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-devel_linux-64-13.2.0-ha9c7c90_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h69a702a_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.1.0-h69a702a_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.1.0-h69a702a_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.3-h315aac3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.2.0-h41c2201_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-h840a212_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.56.2-h3905398_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-19_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-24_linux64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-h4ab18f5_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.24-pthreads_h413a1c8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.43-h2797004_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.27-pthreads_hac2b453_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.23.3-hd1fb520_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.2.0-h7e041cc_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.2.0-h2a3dede_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.1-hadc24fc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.1.0-hc0a3c3a_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.19.0-hb90f79a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h29866fb_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.8.0-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.44.2-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.2-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.1-py310h89163eb_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/maturin-1.2.3-py310h75e40e8_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/minio-7.1.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/minio-server-2023.09.23.03.47.50-hbcca054_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mypy-1.12.0-py310ha75aee5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.8.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.9.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.7.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.10.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.10.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.10.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.4-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.4-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbval-0.9.6-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-20.5.1-hb753e55_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py310hb13e2d6_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjdk-20.0.0-hfea2f88_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.0-h385abfd_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.3-py310h5eaa309_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.5-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-h0f59acf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pep517-0.13.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.1-py310h29da1c1_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-pycharm-0.0.8-unix_1234567_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.42.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/polars-1.8.2-py310h4a863d9_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.39-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/protobuf-4.23.3-py310hb875b13_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py310h2372a71_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/psygnal-0.11.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/psygnal-0.11.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-13.0.0-py310hf9e7431_3_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.15-h4a871b0_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.15-h4a871b0_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-duckdb-1.0.0-py310hea249c9_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.18.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-5_cp310.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.7.0-py310hf462985_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py310ha75aee5_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py310h71f11fc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py310h71f11fc_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.6.6-he8a937b_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-28.9-h59595ed_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2023.03.02-h8c504da_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.20.0-py310h505e2c1_1.conda @@ -269,82 +267,83 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py310ha3fb0e1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/selenium-4.11.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/selenium-manager-4.11.0-he8a937b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyh41d4057_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh0d859eb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-hdb0a2a9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-1.7.0-h59595ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h4a8ded7_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/taplo-0.9.3-h1de38c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-2.2.1-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h4a8ded7_17.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/taplo-0.9.3-h53e704d_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.1-pyh41d4057_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2023.9.26-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh0d859eb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.9.20-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.1-py310ha75aee5_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/trio-0.26.2-py310hff52083_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/trio-0.27.0-py310hff52083_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/trio-websocket-0.11.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20241003-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.14.1-h64cca9d_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/vega_datasets-0.9.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/vl-convert-python-1.7.0-py310ha75aee5_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/voila-0.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-0.24.0-py310h505e2c1_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-1.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-24.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-13.1-py310ha75aee5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.16.0-py310ha75aee5_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wsproto-1.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-fixesproto-5.0-h7f98852_1002.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-inputproto-2.3.2-h7f98852_1002.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.7-h8ee46fc_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-fixesproto-5.0-hb9d3cd8_1003.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-inputproto-2.3.2-hb9d3cd8_1003.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-hb9d3cd8_1003.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-he73a12e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.9-h8ee46fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-5.0.3-h7f98852_1004.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.7.10-h7f98852_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.7.10-h4bc722e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxt-1.3.0-hd590300_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.3-h7f98852_1002.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-recordproto-1.14.2-h7f98852_1002.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h7f98852_1002.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-h0b41bf4_1003.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-recordproto-1.14.2-hb9d3cd8_1003.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-hb9d3cd8_1003.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-hb9d3cd8_1004.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-hb9d3cd8_1008.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/yarn-3.6.1-h31011fe_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h59595ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.0-h59595ed_4.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-h4ab18f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h5888daf_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.0.7-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha39cb0e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda osx-64: - - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.13-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/aom-3.6.1-he965462_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.3-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/aom-3.9.1-hf036a51_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/argon2-cffi-bindings-21.2.0-py310h837254d_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda @@ -364,203 +363,202 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.1.17-hd41bdd4_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.23.1-h4e3dc9b_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.156-h99d1da1_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.13.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/blosc-1.21.5-heccf04b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-1.1.0-h00291cd_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-bin-1.1.0-h00291cd_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.1.0-py310h53e7c6a_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/brunsli-0.1-h046ec9c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/build-0.7.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h0d85af4_4.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/c-ares-1.34.2-h32b1619_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/c-blosc2-2.14.3-h0ae8482_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2023.7.22-h8857fd0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2024.8.30-h8857fd0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cffi-1.17.1-py310hfce808e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/charls-2.4.2-he965462_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.6-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/configparser-5.3.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.6.3-py310hb9d19b6_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/configparser-7.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.6.3-py310h72eadd2_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/dav1d-1.2.1-h0dc2134_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/debugpy-1.8.7-py310h53e7c6a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flaky-3.7.0-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/freetype-2.12.1-h60636b9_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/future-0.18.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hac325c4_1005.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.1-hb7f2c08_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.2-h10d778d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.6.0-h8ac2a54_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/grpcio-1.56.2-py310h0d4bf3c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/icu-73.2-hf5e326d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/imagecodecs-2024.1.1-py310ha229065_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.31.5-pyh8c1a49c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/imagecodecs-2024.1.1-py310h89a1481_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.36.0-pyh12aca89_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.26.0-pyh3cd1d5f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.17.2-pyh31c8845_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh57ce528_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.28.0-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/jsonpointer-3.0.0-py310h2ec42d9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.8.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.9.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.4.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.14.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.0.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.25.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.15.0-pyhcff175f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/jxrlib-1.1-h35c211d_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/jxrlib-1.1-h10d778d_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/krb5-1.21.3-h37d8d59_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.16-ha2f27b4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lerc-4.0.0-hb486fe8_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20230125.3-cxx17_h000cb23_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libaec-1.1.2-he965462_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libaec-1.1.3-h73e2aa4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-13.0.0-hca2412d_3_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libavif16-1.0.1-h4fa63ff_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-19_osx64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libavif16-1.1.1-ha49a9e2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-22_osx64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.1.0-h00291cd_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.1.0-h00291cd_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.1.0-h00291cd_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-19_osx64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-22_osx64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libcrc32c-1.1.2-he49afe7_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.7.1-h726d00d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.1-hf95d169_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.19-ha4e1b8e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.10.1-h58e7537_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.2-hf95d169_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.20-h49d49c5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20191231-h0678c8f_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libevent-2.1.12-ha90c15b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-13_2_0_h97931a8_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-13.2.0-h2873a65_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-13_2_0_h97931a8_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-13.2.0-h2873a65_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.12.0-h37a168a_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.56.2-he6801ca_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libhwy-1.1.0-h7728843_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.0.0-h0dc2134_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.10.3-hfb90b89_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-19_osx64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-22_osx64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.58.0-h64cf6d3_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.24-openmp_h48a4ad5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.43-h92b6c6a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.27-openmp_h8869122_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.44-h4b8f8c9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-4.23.3-h5feb325_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.20-hfdf4475_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.0-h1b8f9f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.1-h4b8f8c9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.0-hd019ec5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.19.0-h064b379_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.6.0-h684deea_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.6.0-h129831d_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.8.0-hb7f2c08_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.44.2-h0dc2134_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.3.2-h0dc2134_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.15-hb7f2c08_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h8a1eda9_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.4.0-h10d778d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.17.0-hf1f96e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libzopfli-1.0.3-h046ec9c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-19.1.1-h545e0da_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-19.1.2-hf78d878_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/lz4-c-1.9.4-hf0c8a7f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-3.0.1-py310h618ceed_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/maturin-1.2.3-py310hcdf1ef2_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/minio-7.1.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/minio-server-2023.09.23.03.47.50-h8857fd0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mypy-1.12.0-py310hb9d19b6_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.8.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.9.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.7.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.10.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.10.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.10.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.4-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.4-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbval-0.9.6-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-hf036a51_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/nodejs-20.5.1-h119ffd7_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/numpy-1.26.4-py310h4bfa8fc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openjdk-20.0.0-h7d26f99_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.2-h7310d3a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.3.2-hd23fc13_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/orc-1.9.0-hef23039_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pandas-2.2.3-py310ha53a654_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/pandoc-3.1.3-h9d075a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pandoc-3.5-h694c41f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pep517-0.13.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/pillow-10.3.0-py310h99295b8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pillow-10.4.0-py310h4e5c94f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-pycharm-0.0.8-unix_1234567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/polars-1.8.2-py310h5ef5ada_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.39-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/protobuf-4.23.3-py310h4e8a696_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/psutil-5.9.5-py310h6729b98_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/psygnal-0.11.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-hc929b4f_1001.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/psygnal-0.11.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-h00291cd_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-13.0.0-py310h6eef95f_3_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pyobjc-core-10.3.1-py310h1c7075f_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pyobjc-framework-cocoa-10.3.1-py310h1c7075f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.10.14-h00d2728_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.10.15-hd8744da_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python-duckdb-1.0.0-py310he0a0c5d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.18.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python_abi-3.10-5_cp310.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pywavelets-1.7.0-py310hcda71e8_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.2-py310h837254d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pyzmq-26.2.0-py310h0c870a2_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/rav1e-0.6.6-h7205ca4_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/re2-2023.03.02-h096449b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h9e318b2_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-0.20.0-py310h4bd000d_1.conda @@ -571,68 +569,69 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.14.1-py310h59907b9_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/selenium-4.11.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/selenium-manager-4.11.0-h7205ca4_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyhd1c38e8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh31c8845_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.1.10-h225ccf5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.1.10-h6dc393e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/svt-av1-1.7.0-he965462_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/taplo-0.9.3-hd264b5c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/svt-av1-2.2.1-hac325c4_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/taplo-0.9.3-hf3953a5_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.1-pyhd1c38e8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2023.9.26-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-hef22860_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh31c8845_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.9.20-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tornado-6.4.1-py310h837254d_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/trio-0.26.2-py310h2ec42d9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/trio-0.27.0-py310h2ec42d9_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/trio-websocket-0.11.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20241003-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/vega_datasets-0.9.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/vl-convert-python-1.7.0-py310h837254d_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/voila-0.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/watchfiles-0.24.0-py310h4bd000d_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-1.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-24.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/websockets-13.1-py310h837254d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/wrapt-1.16.0-py310h837254d_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wsproto-1.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.11-h0dc2134_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.3-h35c211d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.11-h00291cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.5-h00291cd_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h0d85af4_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/yarn-3.6.1-h31011fe_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zeromq-4.3.5-he4ceba3_6.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zfp-1.0.1-h469392a_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.2.13-h8a1eda9_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.1-hd23fc13_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.0.7-hb7f2c08_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.5-h829000d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.23.0-py310h41d873f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.6-h915ae27_0.conda osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.5.0-h7ea286d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.3-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-21.3.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/argon2-cffi-bindings-21.2.0-py310h493c2e1_5.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.2.3-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.3-hab8b942_3.conda @@ -648,228 +647,232 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.17-he70778a_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.23.0-h04fc39a_5.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.10.57-h0092a47_21.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.12.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.4-hc338f07_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.5-hc338f07_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-1.0.9-h1a8c8d9_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-bin-1.0.9-h1a8c8d9_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.0.9-py310h0f1eb42_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brunsli-0.1-h9f76cd9_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/build-0.7.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h3422bc3_4.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.19.1-hb547adb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.10.0-h068da5f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2023.7.22-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.2-h7ab814d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.12.0-ha57e6be_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.16.0-h1e71087_1016.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.16.0-hc5b65c1_1017.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py310h497396d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cfitsio-4.2.0-h2f961c4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/charls-2.4.2-h13dd4ca_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.6-unix_pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/configparser-5.3.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.6.3-py310hf9df320_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/configparser-7.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.6.3-py310h5799be4_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/debugpy-1.8.7-py310hb4ad77e_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/expat-2.6.3-hf9b8971_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flaky-3.7.0-pyh9f0ad1d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/flit-core-3.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fontconfig-2.14.2-h82840c6_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hd633e50_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/fribidi-1.0.10-h27ca646_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/future-0.18.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdk-pixbuf-2.42.10-h9bcf4fe_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gettext-0.21.1-h0186832_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gettext-0.22.5-h8414b35_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gettext-tools-0.22.5-h8414b35_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.1-h1a8c8d9_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-2.76.4-ha614eb4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.76.4-ha614eb4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.6.0-h6da1cb0_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.13-h9f76cd9_1001.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.13-hebf3989_1003.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/grpcio-1.56.2-py310h95b248a_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-7.3.0-h46e5fef_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-72.1-he12128b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-8.2.0-hf1a6348_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-73.2-hc8870d7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/imagecodecs-2023.1.23-py310hd30fb6a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.31.1-pyh24c5eb1_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.36.0-pyh12aca89_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.25.1-pyh5fb750a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.14.0-pyhd1c38e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh57ce528_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.28.0-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jpeg-9e-h1a8c8d9_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.14-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-2.0-py_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.19.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jsonpointer-3.0.0-py310hbe9552e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.7.0-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.7.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.4.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.14.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.0.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.24.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.15.0-pyhcff175f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h27ca646_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.2-h92f50d5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h93a5062_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.15-h481adae_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20230125.3-cxx17_h13dd4ca_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.0.6-hb7217d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.3-hebf3989_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-13.0.0-h6e4acf5_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libasprintf-0.22.5-h8414b35_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libasprintf-devel-0.22.5-h8414b35_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif-0.11.1-h9f83d30_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-17_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-24_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.0.9-h1a8c8d9_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.0.9-h1a8c8d9_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.0.9-h1a8c8d9_9.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-17_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-24_osxarm64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.2.1-hc52a3a8_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.1-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.10.1-h13a7ad3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.17-h1a8c8d9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20191231-hc8eb9b7_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h642e427_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgettextpo-0.22.5-h8414b35_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgettextpo-devel-0.22.5-h8414b35_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.76.4-h24e9cb9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.12.0-h05652e3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.56.2-h9075ed4_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-he4db4b2_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-17_osxarm64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.52.0-hae82a92_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.23-openmp_hc731615_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.22.5-h8414b35_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-devel-0.22.5-h8414b35_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-24_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.58.0-ha4dd798_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.27-openmp_h517c56d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.39-h76d750c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-4.23.3-hf32f9b9_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-4.23.3-hf32f9b9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librsvg-2.56.3-h0db3404_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.18-h27ca646_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.0-hfb93653_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.1-hc14010f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.0-h7a5bd25_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.18.1-ha061701_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.5.0-h5dffbdd_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.8.0-h1a8c8d9_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.44.2-hb547adb_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.3.1-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.13-h9b22ae9_1004.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.11.5-he3bdae6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.2.13-h53f4e23_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.7-h9a80f22_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzopfli-1.0.3-h9f76cd9_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-16.0.6-h1c12783_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.2-hb52a8e5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.9.4-hb7217d7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.1-py310h6a095d7_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/maturin-1.2.3-py310hdd3b5e7_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/minio-7.1.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minio-server-2023.09.23.03.47.50-hf0a4a13_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mypy-1.12.0-py310hf9df320_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.8.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.9.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.7.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.7.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.7.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.7.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.4-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.4-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbval-0.9.6-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.6-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-20.5.1-ha2ed473_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-20.5.1-h5f47a4d_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-1.26.4-py310hd45542a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjdk-20.0.0-hbe7ddab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjdk-20.0.0-hbe7ddab_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.0-hbc2ba62_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-1.9.0-h858f345_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandas-2.2.3-py310hfd37619_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandoc-3.1.3-hce30654_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pandoc-3.5-hce30654_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pango-1.50.14-h9f7e0c6_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pango-1.50.14-hcf40dda_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.40-hb34f9b4_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pep517-0.13.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pillow-9.4.0-py310h5a7539a_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-pycharm-0.0.8-unix_1234567_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.40.0-h27ca646_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.43.4-hebf3989_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pkg-config-0.29.2-hab62308_1008.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/polars-1.8.2-py310hb6ae7db_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.17.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.39-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/protobuf-4.23.3-py310hf4e154e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-5.9.5-py310h2aa6e3c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/psygnal-0.11.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-h27ca646_1001.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/psygnal-0.11.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-13.0.0-py310h382c99a_0_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-10.3.1-py310hb3dec1a_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-framework-cocoa-10.3.1-py310hb3dec1a_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.14-h2469fbe_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.15-hdce6c4c_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-duckdb-1.0.0-py310hcf9f62a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.10-5_cp310.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pywavelets-1.7.0-py310h003b70b_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py310h493c2e1_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-26.2.0-py310hcab215c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-26.2.0-py310h82ef58e_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/re2-2023.03.02-hc5e2d97_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-0.20.0-py310h7a930dc_1.conda @@ -880,59 +883,61 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.14.1-py310h35b72dc_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/selenium-4.11.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/selenium-manager-4.11.0-h69fbcac_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyhd1c38e8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh31c8845_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.1.10-h17c5cce_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.1.10-hd04f947_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.3.2.post1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/taplo-0.9.3-h563f0a8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/taplo-0.9.3-hdf53557_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.1-pyhd1c38e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh31c8845_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2023.8.12-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.1-py310h493c2e1_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/trio-0.26.2-py310hbe9552e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/trio-websocket-0.10.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/trio-0.27.0-py310hbe9552e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trio-websocket-0.11.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20241003-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/vega_datasets-0.9.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/vl-convert-python-1.7.0-py310h493c2e1_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/voila-0.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-0.24.0-py310h7a930dc_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-1.13-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-py_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-24.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-13.1-py310h493c2e1_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.8-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-1.16.0-py310h493c2e1_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wsproto-1.2.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hb547adb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.3-h27ca646_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hd74edd7_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/yarn-3.6.1-h31011fe_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-hcc0f68c_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.0-hb6e4faa_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.2.13-h53f4e23_5.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h9f5b81c_6.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.1-h1c5d8ea_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.0.7-h1a8c8d9_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.2-h4f39d0f_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py310h2665a74_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda win-64: - - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anywidget-0.9.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.7.1-h63175ca_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda @@ -954,88 +959,89 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.1.17-hd5965a7_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.23.1-h70f7a23_5.conda - conda: https://conda.anaconda.org/conda-forge/win-64/aws-sdk-cpp-1.11.156-h02852bd_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.13.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/blosc-1.21.5-hdccc3a2_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py310h00ffb61_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/build-0.7.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h8ffe710_4.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/c-ares-1.21.0-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py310h9e98ed7_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/c-ares-1.34.2-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/c-blosc2-2.14.3-h183a6f4_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2023.7.22-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py310ha8f682b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/charls-2.4.2-h1537add_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.6-win_pyh7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/configparser-5.3.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/coverage-7.6.3-py310ha8f682b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.10.15-py310hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/configparser-7.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/coverage-7.6.3-py310h38315fa_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.10.15-py310hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/dav1d-1.2.1-hcfcfb64_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.7-py310h9e98ed7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/flaky-3.7.0-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/future-0.18.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/giflib-5.2.2-h64bf75a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/grpcio-1.56.2-py310hb84602e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/imagecodecs-2024.1.1-py310hda7f504_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.31.5-pyh8c1a49c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imageio-2.36.0-pyh12aca89_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2023.2.0-h57928b3_50497.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.26.0-pyha63f2e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.17.2-pyh5737063_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh4bbf305_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.28.0-pyh7428d3b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/jsonpointer-3.0.0-py310h5588dad_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh5737063_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.8.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.9.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.4.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.14.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.0.5-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.25.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.15.0-pyhcff175f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/jxrlib-1.1-h8ffe710_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/jxrlib-1.1-hcfcfb64_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/libabseil-20230125.3-cxx17_h63175ca_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libaec-1.1.3-h63175ca_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-13.0.0-hba3d5be_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libavif-1.0.1-h7a9aacb_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-19_win64_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.1.0-hcfcfb64_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.1.0-hcfcfb64_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.1.0-hcfcfb64_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-19_win64_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-24_win64_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.1.0-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-24_win64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.10.1-h1ee3ff0_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.20-hcfcfb64_0.conda @@ -1043,10 +1049,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.12.0-hbc1b25b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.56.2-hea2d5f7_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.9.3-default_haede6df_1009.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-h8ffe710_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.11.1-default_h8125262_1000.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-19_win64_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-24_win64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.44-h3ca93ac_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-4.23.3-h1975477_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.20-hc70643c_0.conda @@ -1057,7 +1063,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libutf8proc-2.8.0-h82a8f57_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.4.0-hcfcfb64_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.11.6-hc3477c8_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.12.7-h0f24e4e_4.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzopfli-1.0.3-h0e60522_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/lz4-c-1.9.4-hcfcfb64_0.conda @@ -1068,81 +1074,79 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.1-py310h38315fa_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/maturin-1.2.3-py310he2c049f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/minio-7.1.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/minio-server-2023.09.23.03.47.50-h56e8100_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2023.2.0-h6a75c08_50496.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2024.1.0-h66d3029_694.conda - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/mypy-1.12.0-py310ha8f682b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.8.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.9.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.7.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.10.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.10.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.10.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.9.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.4-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.4-hd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbval-0.9.6-pyh9f0ad1d_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.8-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/nodejs-20.5.1-h57928b3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-1.26.4-py310hf667824_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openjdk-20.0.0-h57928b3_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/orc-1.9.0-hf2b8f0d_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pandas-2.2.3-py310hb4db72f_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pandoc-3.1.3-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pandoc-3.5-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pep517-0.13.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-10.4.0-py310h3e38d90_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pixi-pycharm-0.0.8-win_1234567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/polars-1.8.2-py310hc41e00b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.18.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.39-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/protobuf-4.23.3-py310ha3d488f_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-5.9.5-py310h8d17308_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/psygnal-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/psygnal-0.11.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-hfa6e2cd_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-h2466b09_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-13.0.0-py310hd0bb7c2_3_cpu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh0701188_6.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.10.15-hfaddaf0_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.10.15-hfaddaf0_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-duckdb-1.0.0-py310h9e98ed7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.18.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.10-5_cp310.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pywavelets-1.7.0-py310hb0944cc_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-307-py310h9e98ed7_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.13-py310h9e98ed7_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.14-py310h9e98ed7_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.2-py310ha8f682b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-26.2.0-py310h656833d_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/rav1e-0.6.6-h975169c_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/re2-2023.03.02-hd4eee63_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.20.0-py310hc226416_1.conda @@ -1153,52 +1157,52 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.14.1-py310h46043a1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/selenium-4.11.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/selenium-manager-4.11.0-h975169c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyh08f2357_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh5737063_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/snappy-1.1.10-hfb803bf_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/svt-av1-1.7.0-h63175ca_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/symlink-exe-runtime-1.0-hcfcfb64_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/taplo-0.9.3-h823019e_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.10.0-h91493d7_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/taplo-0.9.3-ha073cba_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.13.0-hc790b64_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.0-pyh08f2357_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2023.9.26-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh5737063_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.9.20-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.4.1-py310ha8f682b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/trio-0.26.2-py310h5588dad_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/trio-0.27.0-py310h5588dad_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/trio-websocket-0.11.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20241003-pyhff2d567_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h64f974e_17.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-ha82c5b3_20.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda - conda: https://conda.anaconda.org/conda-forge/noarch/vega_datasets-0.9.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/vl-convert-python-1.7.0-py310hdfd1e6a_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/voila-0.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_20.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda - conda: https://conda.anaconda.org/conda-forge/win-64/watchfiles-0.24.0-py310hc226416_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-1.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-24.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/websockets-13.1-py310ha8f682b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.9-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyhd8ed1ab_6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_7.conda - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/wrapt-1.16.0-py310ha8f682b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wsproto-1.2.0-pyhd8ed1ab_0.tar.bz2 @@ -1209,8 +1213,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/yarn-3.6.1-h5737063_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-ha9f60a1_6.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zfp-1.0.1-he0c23c2_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.0.7-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py310he5e10e1_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda packages: - kind: conda @@ -1221,8 +1226,6 @@ packages: url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 md5: d7c89558ba9fa0495403155b64376d81 - arch: x86_64 - platform: linux license: None size: 2562 timestamp: 1578324546067 @@ -1236,55 +1239,38 @@ packages: sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 md5: 73aaf86a425cc6e73fcf236a5a46396d depends: - - _libgcc_mutex ==0.1 conda_forge + - _libgcc_mutex 0.1 conda_forge - libgomp >=7.5.0 constrains: - openmp_impl 9999 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD size: 23621 timestamp: 1650670423406 -- kind: conda - name: _sysroot_linux-64_curr_repodata_hack - version: '3' - build: h69a702a_16 - build_number: 16 - subdir: noarch - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/_sysroot_linux-64_curr_repodata_hack-3-h69a702a_16.conda - sha256: 6ac30acdbfd3136ee7a1de28af4355165291627e905715611726e674499b0786 - md5: 1c005af0c6ff22814b7c52ee448d4bea - license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later AND MPL-2.0 - license_family: GPL - size: 20798 - timestamp: 1720621358501 - kind: conda name: alsa-lib - version: 1.2.10 - build: hd590300_0 + version: 1.2.12 + build: h4ab18f5_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.10-hd590300_0.conda - sha256: 51147922bad9d3176e780eb26f748f380cd3184896a9f9125d8ac64fe330158b - md5: 75dae9a4201732aa78a530b826ee5fe0 + url: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.12-h4ab18f5_0.conda + sha256: 64b95dd06d7ca6b54cea03b02da8f1657b9899ca376d0ca7b47823064f55fb16 + md5: 7ed427f0871fd41cb1d9c17727c17589 depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: LGPL-2.1-or-later license_family: GPL - size: 554938 - timestamp: 1693607226431 + size: 555868 + timestamp: 1718118368236 - kind: conda name: altair version: 5.4.1 - build: pyhd8ed1ab_0 + build: pyhd8ed1ab_1 + build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_0.conda - sha256: 242d548dd4465b52b5be41be3f4c5366b2b322dd2df3fbfa8aef59571b51b921 - md5: 8c32c3e09ecd8bf038fef2cafa68ccfb + url: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_1.conda + sha256: adc8a0ff6052c11e9addbcf329d15180aa5481376f0d5048cfefe314354a2c9e + md5: 8431a457f055d4f89569d60583623c6e depends: - importlib-metadata - jinja2 @@ -1295,42 +1281,17 @@ packages: - typing-extensions >=4.10.0 license: BSD-3-Clause license_family: BSD - size: 463447 - timestamp: 1724754076209 + size: 462954 + timestamp: 1727892152911 - kind: conda name: anyio - version: 4.0.0 + version: 4.6.2.post1 build: pyhd8ed1ab_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.0.0-pyhd8ed1ab_0.conda - sha256: 64125775b2e724db5c72e431dd180495d5d509d0a2d1228a122e6af9f1b60e33 - md5: 3c4e99d3ae4ec033d4dd99fb5220e540 - depends: - - exceptiongroup * - - idna >=2.8 - - python >=3.8 - - sniffio >=1.1 - constrains: - - trio >=0.22 - arch: x86_64 - platform: win - license: MIT - license_family: MIT - purls: - - pkg:pypi/anyio - size: 98958 - timestamp: 1693488730301 -- kind: conda - name: anyio - version: 4.6.0 - build: pyhd8ed1ab_1 - build_number: 1 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.0-pyhd8ed1ab_1.conda - sha256: d05493abca6ac1b0cb15f5d48c3117bddd73cc21e48bfcb460570cfa2ea2f909 - md5: bc13891a047f50728b03595531f7f92e + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + sha256: 4b54b7ce79d818e3cce54ae4d552dba51b7afac160ceecdefd04b3917a37c502 + md5: 688697ec5e9588bdded167d19577625b depends: - exceptiongroup >=1.0.2 - idna >=2.8 @@ -1342,8 +1303,8 @@ packages: - trio >=0.26.1 license: MIT license_family: MIT - size: 108445 - timestamp: 1726931347728 + size: 109864 + timestamp: 1728935803440 - kind: conda name: anywidget version: 0.9.13 @@ -1373,45 +1334,10 @@ packages: md5: afb32d2a714ef2c3268508fdc85fc7c4 depends: - libcxx >=14.0.4 - arch: aarch64 - platform: osx license: BSD-2-Clause license_family: BSD size: 2485267 timestamp: 1663808577638 -- kind: conda - name: aom - version: 3.6.1 - build: h59595ed_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aom-3.6.1-h59595ed_0.conda - sha256: 006d10fe845374e71fb15a6c1f58ae4b3efef69be02b0992265abfb5c4c2e026 - md5: 8457db6d1175ee86c8e077f6ac60ff55 - depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 - arch: x86_64 - platform: linux - license: BSD-2-Clause - license_family: BSD - size: 2678249 - timestamp: 1694225960207 -- kind: conda - name: aom - version: 3.6.1 - build: he965462_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/aom-3.6.1-he965462_0.conda - sha256: 254f15bbfda2e474c63f9a30bfc7f2d4d30ff49d6543481bf6a5bf414ec9bcd7 - md5: 3685ccc84e1b901601331f1aecead92c - depends: - - libcxx >=15.0.7 - arch: x86_64 - platform: osx - license: BSD-2-Clause - license_family: BSD - size: 2855123 - timestamp: 1694226514540 - kind: conda name: aom version: 3.7.1 @@ -1429,68 +1355,67 @@ packages: size: 1955945 timestamp: 1700530921759 - kind: conda - name: appnope - version: 0.1.3 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.3-pyhd8ed1ab_0.tar.bz2 - sha256: b209a68ac55eb9ecad7042f0d4eedef5da924699f6cdf54ac1826869cfdae742 - md5: 54ac328d703bff191256ffa1183126d1 + name: aom + version: 3.9.1 + build: hac33072_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda + sha256: b08ef033817b5f9f76ce62dfcac7694e7b6b4006420372de22494503decac855 + md5: 346722a0be40f6edc53f12640d301338 depends: - - python >=2.7 - arch: aarch64 - platform: osx + - libgcc-ng >=12 + - libstdcxx-ng >=12 license: BSD-2-Clause license_family: BSD - purls: - - pkg:pypi/appnope - size: 8095 - timestamp: 1649077760928 + size: 2706396 + timestamp: 1718551242397 - kind: conda - name: argon2-cffi - version: 21.3.0 + name: aom + version: 3.9.1 + build: hf036a51_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/aom-3.9.1-hf036a51_0.conda + sha256: 3032f2f55d6eceb10d53217c2a7f43e1eac83603d91e21ce502e8179e63a75f5 + md5: 3f17bc32cb7fcb2b4bf3d8d37f656eb8 + depends: + - __osx >=10.13 + - libcxx >=16 + license: BSD-2-Clause + license_family: BSD + size: 2749186 + timestamp: 1718551450314 +- kind: conda + name: appnope + version: 0.1.4 build: pyhd8ed1ab_0 - subdir: osx-arm64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-21.3.0-pyhd8ed1ab_0.tar.bz2 - sha256: 3a53cfd674641d9ff9901f5d4e1cc5e9a3ce9bb8b6a7dca826db840c2e39bc23 - md5: a0b402db58f73aaab8ee0ca1025a362e + url: https://conda.anaconda.org/conda-forge/noarch/appnope-0.1.4-pyhd8ed1ab_0.conda + sha256: 45ae2d41f4a4dcf8707633d3d7ae376fc62f0c09b1d063c3049c3f6f8c911670 + md5: cc4834a9ee7cc49ce8d25177c47b10d8 depends: - - python >=3.6 - - flit-core >=3.4,<4 - - argon2-cffi-bindings * - constrains: - - argon2_cffi ==999 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - purls: - - pkg:pypi/argon2-cffi - size: 15708 - timestamp: 1640817831095 + - python >=3.7 + license: BSD-2-Clause + license_family: BSD + size: 10241 + timestamp: 1707233195627 - kind: conda name: argon2-cffi version: 23.1.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda sha256: 130766446f5507bd44df957b6b5c898a8bd98f024bb426ed6cb9ff1ad67fc677 md5: 3afef1f55a1366b4d3b6a0d92e2235e4 depends: - - argon2-cffi-bindings * + - argon2-cffi-bindings - python >=3.7 - - typing-extensions * + - typing-extensions constrains: - argon2_cffi ==999 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/argon2-cffi size: 18602 timestamp: 1692818472638 - kind: conda @@ -1569,30 +1494,11 @@ packages: license_family: MIT size: 33837 timestamp: 1725357171155 -- kind: conda - name: arrow - version: 1.2.3 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/arrow-1.2.3-pyhd8ed1ab_0.tar.bz2 - sha256: a0434c2770cf5b0ab5a33913c0b202b1521bc13f755b762d16a86b110425cdc2 - md5: fd1967c76eda3a3dd9e8e6cb7a15a028 - depends: - - typing_extensions * - - python >=3.6 - - python-dateutil >=2.7.0 - arch: aarch64 - platform: osx - license: Apache-2.0 - license_family: Apache - size: 93703 - timestamp: 1662382594353 - kind: conda name: arrow version: 1.3.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda sha256: ff49825c7f9e29e09afa6284300810e7a8640d621740efb47c4541f4dc4969db @@ -1601,37 +1507,15 @@ packages: - python >=3.8 - python-dateutil >=2.7.0 - types-python-dateutil >=2.8.10 - arch: x86_64 - platform: win license: Apache-2.0 license_family: Apache size: 100096 timestamp: 1696129131844 -- kind: conda - name: asttokens - version: 2.2.1 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.2.1-pyhd8ed1ab_0.conda - sha256: 7ed530efddd47a96c11197906b4008405b90e3bc2f4e0df722a36e0e6103fd9c - md5: bf7f54dd0f25c3f06ecb82a07341841a - depends: - - python >=3.5 - - six * - arch: aarch64 - platform: osx - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/asttokens - size: 27831 - timestamp: 1670264089059 - kind: conda name: asttokens version: 2.4.1 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda sha256: 708168f026df19a0344983754d27d1f7b28bb21afc7b97a82f02c4798a3d2111 @@ -1639,19 +1523,15 @@ packages: depends: - python >=3.5 - six >=1.12.0 - arch: x86_64 - platform: win license: Apache-2.0 license_family: Apache - purls: - - pkg:pypi/asttokens size: 28922 timestamp: 1698341257884 - kind: conda name: async-lru version: 2.0.4 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda sha256: 7ed83731979fe5b046c157730e50af0e24454468bbba1ed8fc1a3107db5d7518 @@ -1659,12 +1539,8 @@ packages: depends: - python >=3.8 - typing_extensions >=4.0.0 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/async-lru size: 15342 timestamp: 1690563152778 - kind: conda @@ -2638,205 +2514,72 @@ packages: timestamp: 1696018395381 - kind: conda name: babel - version: 2.12.1 - build: pyhd8ed1ab_1 - build_number: 1 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/babel-2.12.1-pyhd8ed1ab_1.conda - sha256: 2d9b8768bf8b45073830f7104278c6eb17d78b0f509c9d818ff06b9c4d60283a - md5: ac432e732804a81ddcf29c92ead57cde - depends: - - python >=3.7 - - pytz * - arch: aarch64 - platform: osx - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/babel - size: 6886728 - timestamp: 1677767201771 -- kind: conda - name: babel - version: 2.13.1 + version: 2.14.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/babel-2.13.1-pyhd8ed1ab_0.conda - sha256: 1f955c700db16f65b16c9e9c1613436480d5497970b8030b7a9ebe1620cc2147 - md5: 3ccff479c246692468f604df9c85ef26 + url: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda + sha256: 8584e3da58e92b72641c89ff9b98c51f0d5dbe76e527867804cbdf03ac91d8e6 + md5: 9669586875baeced8fc30c0826c3270e depends: - python >=3.7 - - pytz * - - setuptools * - arch: x86_64 - platform: win - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/babel - size: 6948100 - timestamp: 1698174685067 -- kind: conda - name: backcall - version: 0.2.0 - build: pyh9f0ad1d_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2 - sha256: ee62d6434090c1327a48551734e06bd10e65a64ef7f3b6e68719500dab0e42b9 - md5: 6006a6d08a3fa99268a2681c7fb55213 - depends: - - python * - arch: aarch64 - platform: osx - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/backcall - size: 13705 - timestamp: 1592338491389 -- kind: conda - name: backports - version: '1.0' - build: pyhd8ed1ab_3 - build_number: 3 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda - sha256: 711602276ae39276cb0faaca6fd0ac851fff0ca17151917569174841ef830bbd - md5: 54ca2e08b3220c148a1d8329c2678e02 - depends: - - python >=2.7 - arch: x86_64 - platform: win + - pytz + - setuptools license: BSD-3-Clause license_family: BSD - size: 5950 - timestamp: 1669158729416 -- kind: conda - name: backports.functools_lru_cache - version: 1.6.5 - build: pyhd8ed1ab_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda - sha256: 7027bb689dd4ca4a08e3b25805de9d04239be6b31125993558f21f102a9d2700 - md5: 6b1b907661838a75d067a22f87996b2e - depends: - - backports * - - python >=3.6 - - setuptools * - arch: x86_64 - platform: win - license: MIT - license_family: MIT - purls: - - pkg:pypi/backports-functools-lru-cache - size: 11519 - timestamp: 1687772319931 + size: 7609750 + timestamp: 1702422720584 - kind: conda name: beautifulsoup4 - version: 4.12.2 + version: 4.12.3 build: pyha770c72_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda - sha256: 52d3e6bcd442537e22699cd227d8fdcfd54b708eeb8ee5b4c671a6a9b9cd74da - md5: a362ff7d976217f8fa78c0f1c4f59717 + url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda + sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317 + md5: 332493000404d8411859539a5a630865 depends: - python >=3.6 - soupsieve >=1.2 - arch: x86_64 - platform: win license: MIT license_family: MIT - size: 115011 - timestamp: 1680888259061 + size: 118200 + timestamp: 1705564819537 - kind: conda name: binutils_impl_linux-64 - version: '2.40' - build: hf600244_0 + version: '2.43' + build: h4bf12b8_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.40-hf600244_0.conda - sha256: a7e0ea2b71a5b03d82e5a58fb6b612ab1c44d72ce161f9aa441f7ba467cd4c8d - md5: 33084421a8c0af6aef1b439707f7662a + url: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.43-h4bf12b8_1.conda + sha256: 6f945b3b150112c7c6e4783e6c3132410a7b226f2a8965adfd23895318151d46 + md5: 5f354010f194e85dc681dec92405ef9e depends: - - ld_impl_linux-64 ==2.40 h41732ed_0 - - sysroot_linux-64 * - arch: x86_64 - platform: linux + - ld_impl_linux-64 2.43 h712a8e2_1 + - sysroot_linux-64 license: GPL-3.0-only license_family: GPL - size: 5414922 - timestamp: 1674833958334 -- kind: conda - name: bleach - version: 6.0.0 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.0.0-pyhd8ed1ab_0.conda - sha256: 59da02f550ec546f9375fa309bc7712f50b478bad67b99fbebbb5b57ee3a67d3 - md5: d48b143d01385872a88ef8417e96c30e - depends: - - setuptools * - - python >=3.6 - - webencodings * - - packaging * - - six >=1.9.0 - arch: aarch64 - platform: osx - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/bleach - size: 130677 - timestamp: 1674535450476 + size: 6233238 + timestamp: 1727304698672 - kind: conda name: bleach version: 6.1.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda sha256: 845e77ef495376c5c3c328ccfd746ca0ef1978150cae8eae61a300fe7755fb08 md5: 0ed9d7c0e9afa7c025807a9a8136ea3e depends: - - packaging * + - packaging - python >=3.6 - - setuptools * + - setuptools - six >=1.9.0 - - webencodings * - arch: x86_64 - platform: win + - webencodings license: Apache-2.0 license_family: Apache - purls: - - pkg:pypi/bleach size: 131220 timestamp: 1696630354218 -- kind: conda - name: blosc - version: 1.21.4 - build: hc338f07_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.4-hc338f07_0.conda - sha256: b1d1f554a9bcfd67f444335933fe3c5b2014fe9c812d1690419db42f5760ee31 - md5: ff8fa8606741993b6bf57e411293f446 - depends: - - snappy >=1.1.10,<2.0a0 - - libcxx >=15.0.7 - - lz4-c >=1.9.3,<1.10.0a0 - - libzlib >=1.2.13,<1.3.0a0 - - zstd >=1.5.2,<1.6.0a0 - arch: aarch64 - platform: osx - license: BSD-3-Clause - license_family: BSD - size: 33470 - timestamp: 1684235351868 - kind: conda name: blosc version: 1.21.5 @@ -2856,6 +2599,24 @@ packages: license_family: BSD size: 48692 timestamp: 1693657088079 +- kind: conda + name: blosc + version: 1.21.5 + build: hc338f07_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.5-hc338f07_0.conda + sha256: 81f206dd843fe0da894d0480ea9d689fe948fa4b3cad060f97b016af4ac7b3a1 + md5: 93fccb1150aa377576107ecd0ad375b3 + depends: + - libcxx >=15.0.7 + - libzlib >=1.2.13,<2.0.0a0 + - lz4-c >=1.9.3,<1.10.0a0 + - snappy >=1.1.10,<1.2.0a0 + - zstd >=1.5.5,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 33450 + timestamp: 1693657320331 - kind: conda name: blosc version: 1.21.5 @@ -2886,12 +2647,10 @@ packages: md5: 3003fa6dd18769db1a616982dcee5b40 depends: - libcxx >=15.0.7 - - libzlib >=1.2.13,<1.3.0a0 + - libzlib >=1.2.13,<2.0.0a0 - lz4-c >=1.9.3,<1.10.0a0 - - snappy >=1.1.10,<2.0a0 + - snappy >=1.1.10,<1.2.0a0 - zstd >=1.5.5,<1.6.0a0 - arch: x86_64 - platform: osx license: BSD-3-Clause license_family: BSD size: 49891 @@ -2906,11 +2665,9 @@ packages: sha256: 92c3062dd7e593a502c2f8d12e9ccca7ae1ef0363eb0b12faa47e1bb4fae42c7 md5: 856692dff5e450c269465e3256e1277b depends: - - brotli-bin ==1.0.9 h1a8c8d9_9 - - libbrotlienc ==1.0.9 h1a8c8d9_9 - - libbrotlidec ==1.0.9 h1a8c8d9_9 - arch: aarch64 - platform: osx + - brotli-bin 1.0.9 h1a8c8d9_9 + - libbrotlidec 1.0.9 h1a8c8d9_9 + - libbrotlienc 1.0.9 h1a8c8d9_9 license: MIT license_family: MIT size: 20228 @@ -2962,10 +2719,8 @@ packages: sha256: 4731892fb855f5993129515c5b63b36d049cc64e70611c6afa8f64aae5f51323 md5: 19ad562adca69541e67613022b41df5b depends: - - libbrotlienc ==1.0.9 h1a8c8d9_9 - - libbrotlidec ==1.0.9 h1a8c8d9_9 - arch: aarch64 - platform: osx + - libbrotlidec 1.0.9 h1a8c8d9_9 + - libbrotlienc 1.0.9 h1a8c8d9_9 license: MIT license_family: MIT size: 18182 @@ -3025,27 +2780,6 @@ packages: license_family: MIT size: 325644 timestamp: 1687884931491 -- kind: conda - name: brotli-python - version: 1.1.0 - build: py310h00ffb61_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py310h00ffb61_1.conda - sha256: 8de77cf62a653dd6ffe19927b92c421f5fa73c078d7799181f5211a1bac2883b - md5: 42bfbc1d41cbe2696a3c9d8b0342324f - depends: - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - libbrotlicommon 1.1.0 hcfcfb64_1 - license: MIT - license_family: MIT - size: 321672 - timestamp: 1695990897641 - kind: conda name: brotli-python version: 1.1.0 @@ -3066,6 +2800,27 @@ packages: license_family: MIT size: 362793 timestamp: 1725268121746 +- kind: conda + name: brotli-python + version: 1.1.0 + build: py310h9e98ed7_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py310h9e98ed7_2.conda + sha256: 1b7893a07f2323410b09b63b4627103efa86163be835ac94966333b37741cdc7 + md5: 3a10a1d0cf3ece273195f26191fd6cc6 + depends: + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - libbrotlicommon 1.1.0 h2466b09_2 + license: MIT + license_family: MIT + size: 321576 + timestamp: 1725268612274 - kind: conda name: brotli-python version: 1.1.0 @@ -3098,8 +2853,6 @@ packages: depends: - brotli >=1.0.9,<2.0a0 - libcxx >=11.0.0 - arch: x86_64 - platform: osx license: MIT license_family: MIT size: 183140 @@ -3116,8 +2869,6 @@ packages: - brotli >=1.0.9,<2.0a0 - libgcc-ng >=9.3.0 - libstdcxx-ng >=9.3.0 - arch: x86_64 - platform: linux license: MIT license_family: MIT size: 204879 @@ -3131,132 +2882,91 @@ packages: sha256: 816f929193a614b9a663e76e4267994ad99d04812b8a8e513e957d750deb4b04 md5: 37a072dad6b844df1b5a32428bb08692 depends: - - libcxx >=11.0.0 - brotli >=1.0.9,<2.0a0 - arch: aarch64 - platform: osx + - libcxx >=11.0.0 license: MIT license_family: MIT size: 178300 timestamp: 1607309265926 -- kind: conda - name: build - version: 0.7.0 - build: pyhd8ed1ab_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/build-0.7.0-pyhd8ed1ab_0.tar.bz2 - sha256: 44e2d3270209d1f10b8adec2a159699ed66914e851ec34775902e856ea04afeb - md5: add7f31586d03678695b32b78a1337a1 - depends: - - importlib-metadata * - - packaging * - - pep517 >=0.9.1 - - python >=3.6 - - tomli * - arch: x86_64 - platform: win - license: MIT - license_family: MIT - size: 17759 - timestamp: 1631843776429 - kind: conda name: bzip2 version: 1.0.8 - build: h0d85af4_4 - build_number: 4 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-h0d85af4_4.tar.bz2 - sha256: 60ba4c64f5d0afca0d283c7addba577d3e2efc0db86002808dadb0498661b2f2 - md5: 37edc4e6304ca87316e160f5ca0bd1b5 - arch: x86_64 - platform: osx + build: h2466b09_7 + build_number: 7 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + sha256: 35a5dad92e88fdd7fc405e864ec239486f4f31eec229e31686e61a140a8e573b + md5: 276e7ffe9ffe39688abc665ef0f45596 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: bzip2-1.0.6 license_family: BSD - size: 158829 - timestamp: 1618862580095 + size: 54927 + timestamp: 1720974860185 - kind: conda name: bzip2 version: 1.0.8 - build: h3422bc3_4 - build_number: 4 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h3422bc3_4.tar.bz2 - sha256: a3efbd06ad1432edb0163c48225421f34c2660f5cc002283a8d27e791320b549 - md5: fc76ace7b94fb1f694988ab1b14dd248 - arch: aarch64 - platform: osx + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 license: bzip2-1.0.6 license_family: BSD - size: 151850 - timestamp: 1618862645215 + size: 252783 + timestamp: 1720974456583 - kind: conda name: bzip2 version: 1.0.8 - build: h7f98852_4 - build_number: 4 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2 - sha256: cb521319804640ff2ad6a9f118d972ed76d86bea44e5626c09a13d38f562e1fa - md5: a1fd65c7ccbf10880423d82bca54eb54 + build: h99b78c6_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab depends: - - libgcc-ng >=9.3.0 - arch: x86_64 - platform: linux + - __osx >=11.0 license: bzip2-1.0.6 license_family: BSD - size: 495686 - timestamp: 1606604745109 + size: 122909 + timestamp: 1720974522888 - kind: conda name: bzip2 version: 1.0.8 - build: h8ffe710_4 - build_number: 4 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h8ffe710_4.tar.bz2 - sha256: 5389dad4e73e4865bb485f460fc60b120bae74404003d457ecb1a62eb7abf0c1 - md5: 7c03c66026944073040cb19a4f3ec3c9 + build: hfdf4475_7 + build_number: 7 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda + sha256: cad153608b81fb24fc8c509357daa9ae4e49dfc535b2cb49b91e23dbd68fc3c5 + md5: 7ed4301d437b59045be7e051a0308211 depends: - - vc >=14.1,<15.0a0 - - vs2015_runtime >=14.16.27012 - arch: x86_64 - platform: win + - __osx >=10.13 license: bzip2-1.0.6 license_family: BSD - size: 152247 - timestamp: 1606605223049 -- kind: conda - name: c-ares - version: 1.19.1 - build: hb547adb_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.19.1-hb547adb_0.conda - sha256: fc9d0fcfb30c20c0032b294120b6ba9c01078ddb372c34dd491214c598aecc06 - md5: e7fc7430440d255e3a9c7e5a52f7b294 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - size: 101998 - timestamp: 1684783026131 + size: 134188 + timestamp: 1720974491916 - kind: conda name: c-ares - version: 1.21.0 - build: hcfcfb64_0 + version: 1.34.2 + build: h2466b09_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/c-ares-1.21.0-hcfcfb64_0.conda - sha256: 7a261653adc286949de3aa5bf742dff978f2f1355330b00687500a18022e6e2d - md5: 834ab09083aa903a2a22574d92ab872e + url: https://conda.anaconda.org/conda-forge/win-64/c-ares-1.34.2-h2466b09_0.conda + sha256: 5b7a6bb814bc2df92c0c08d7f2f63ae5bc4d71efdc6131130bdc230a8db936fc + md5: 6fcf481938188279f28757a4814a4b73 depends: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: MIT license_family: MIT - size: 115123 - timestamp: 1698936959417 + size: 192859 + timestamp: 1729006899124 - kind: conda name: c-ares version: 1.34.2 @@ -3271,6 +2981,20 @@ packages: license_family: MIT size: 182342 timestamp: 1729006698430 +- kind: conda + name: c-ares + version: 1.34.2 + build: h7ab814d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.2-h7ab814d_0.conda + sha256: 24d53d27397f9c2f0c168992690b5ec1bd62593fb4fc1f1e906ab91b10fd06c3 + md5: 8a8cfc11064b521bc54bd2d8591cb137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 177487 + timestamp: 1729006763496 - kind: conda name: c-ares version: 1.34.2 @@ -3288,43 +3012,39 @@ packages: timestamp: 1729006575652 - kind: conda name: c-blosc2 - version: 2.10.0 - build: h068da5f_0 + version: 2.12.0 + build: ha57e6be_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.10.0-h068da5f_0.conda - sha256: 2d49f9a6b2dd5c66a91bbe74171e8645963ee6bd7cc966cbe946694ef135d6a3 - md5: 28cb2c13b3143b72468ceffa5b0fd718 + url: https://conda.anaconda.org/conda-forge/osx-arm64/c-blosc2-2.12.0-ha57e6be_0.conda + sha256: d111fbf3f73c55ae2d199b94b15f75eb9d363704196698767e7e105134fa2f9f + md5: c8ff2be7193a43f105c1cab36f5f39a0 depends: - - libcxx >=15.0.7 + - libcxx >=15 - lz4-c >=1.9.3,<1.10.0a0 - zlib-ng >=2.0.7,<2.1.0a0 - - zstd >=1.5.2,<1.6.0a0 - arch: aarch64 - platform: osx + - zstd >=1.5.5,<1.6.0a0 license: BSD-3-Clause license_family: BSD - size: 237014 - timestamp: 1688470467497 + size: 237019 + timestamp: 1703769395331 - kind: conda name: c-blosc2 - version: 2.10.5 + version: 2.12.0 build: hb4ffafa_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.10.5-hb4ffafa_0.conda - sha256: d9bd10789c709ea1ac9d984f4a9cfddf6a4625d252dbb5cb04e07ca43c9c7ffd - md5: 831974f6788127baf502fca9001a5fb4 + url: https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.12.0-hb4ffafa_0.conda + sha256: 68ae377f7baeb616e5a24facadebd8bf7a9cd48a297124be9d814ba92ff5e40f + md5: 1a9b16afb84d734a1bb2d196c308d477 depends: - libgcc-ng >=12 - libstdcxx-ng >=12 - lz4-c >=1.9.3,<1.10.0a0 - zlib-ng >=2.0.7,<2.1.0a0 - zstd >=1.5.5,<1.6.0a0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD - size: 312140 - timestamp: 1696539380773 + size: 333736 + timestamp: 1703769067617 - kind: conda name: c-blosc2 version: 2.14.3 @@ -3363,70 +3083,60 @@ packages: timestamp: 1712415661052 - kind: conda name: ca-certificates - version: 2023.7.22 + version: 2024.8.30 build: h56e8100_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2023.7.22-h56e8100_0.conda - sha256: b85a6f307f8e1c803cb570bdfb9e4d811a361417873ecd2ecf687587405a72e0 - md5: b1c2327b36f1a25d96f2039b0d3e3739 - arch: x86_64 - platform: win + url: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + sha256: 0fcac3a7ffcc556649e034a1802aedf795e64227eaa7194d207b01eaf26454c4 + md5: 4c4fd67c18619be5aa65dc5b6c72e490 license: ISC - size: 150013 - timestamp: 1690026269050 + size: 158773 + timestamp: 1725019107649 - kind: conda name: ca-certificates - version: 2023.7.22 + version: 2024.8.30 build: h8857fd0_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2023.7.22-h8857fd0_0.conda - sha256: 27de15e18a12117e83ac1eb8a8e52eb65731cc7f0b607a7922206a15e2460c7b - md5: bf2c54c18997bf3542af074c10191771 - arch: x86_64 - platform: osx + url: https://conda.anaconda.org/conda-forge/osx-64/ca-certificates-2024.8.30-h8857fd0_0.conda + sha256: 593f302d0f44c2c771e1614ee6d56fffdc7d616e6f187669c8b0e34ffce3e1ae + md5: b7e5424e7f06547a903d28e4651dbb21 license: ISC - size: 149911 - timestamp: 1690026363769 + size: 158665 + timestamp: 1725019059295 - kind: conda name: ca-certificates - version: 2023.7.22 + version: 2024.8.30 build: hbcca054_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda - sha256: 525b7b6b5135b952ec1808de84e5eca57c7c7ff144e29ef3e96ae4040ff432c1 - md5: a73ecd2988327ad4c8f2c331482917f2 - arch: x86_64 - platform: linux + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea + md5: c27d1c142233b5bc9ca570c6e2e0c244 license: ISC - size: 149515 - timestamp: 1690026108541 + size: 159003 + timestamp: 1725018903918 - kind: conda name: ca-certificates - version: 2023.7.22 + version: 2024.8.30 build: hf0a4a13_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2023.7.22-hf0a4a13_0.conda - sha256: b220c001b0c1448a47cc49b42a622e06a540ec60b3f7a1e057fca1f37ce515e4 - md5: e1b99ac4dbcee71a71682996f67f7965 - arch: aarch64 - platform: osx + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 + md5: 40dec13fd8348dbe303e57be74bd3d35 license: ISC - size: 149918 - timestamp: 1690026385821 + size: 158482 + timestamp: 1725019034582 - kind: conda name: cached-property version: 1.5.2 build: hd8ed1ab_1 build_number: 1 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 md5: 9b347a7ec10940d3f7941ff6c460b551 depends: - cached_property >=1.5.2,<1.5.3.0a0 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD size: 4134 @@ -3436,45 +3146,39 @@ packages: version: 1.5.2 build: pyha770c72_1 build_number: 1 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 md5: 576d629e47797577ab0f1b351297ef4a depends: - python >=3.6 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/cached-property size: 11065 timestamp: 1615209567874 - kind: conda name: cairo version: 1.16.0 - build: h1e71087_1016 - build_number: 1016 + build: hc5b65c1_1017 + build_number: 1017 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.16.0-h1e71087_1016.conda - sha256: 318cad8770aa5aa14a5808e1d6b39458e11d2c2411254e795269986467f864ea - md5: be77f5630cabe6a116a033f6fd241aa2 + url: https://conda.anaconda.org/conda-forge/osx-arm64/cairo-1.16.0-hc5b65c1_1017.conda + sha256: aa7571a6a16a41730659bd3fb4aac6df93c15ffaf1e583c9c6d8629f20cb12f3 + md5: 927bb81770b8a71936ff8c9a737eacea depends: - - icu >=72.1,<73.0a0 - - libpng >=1.6.39,<1.7.0a0 - - libglib >=2.76.2,<3.0a0 - - freetype >=2.12.1,<3.0a0 - - libzlib >=1.2.13,<1.3.0a0 - - zlib * - fontconfig >=2.14.2,<3.0a0 - - fonts-conda-ecosystem * + - fonts-conda-ecosystem + - freetype >=2.12.1,<3.0a0 + - icu >=73.2,<74.0a0 + - libglib >=2.76.4,<3.0a0 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 - pixman >=0.40.0,<1.0a0 - arch: aarch64 - platform: osx + - zlib license: LGPL-2.1-only or MPL-1.1 - size: 996907 - timestamp: 1684639742046 + size: 998078 + timestamp: 1692961080870 - kind: conda name: cairo version: 1.18.0 @@ -3506,20 +3210,18 @@ packages: timestamp: 1697028423052 - kind: conda name: certifi - version: 2023.7.22 + version: 2024.8.30 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda - sha256: db66e31866ff4250c190788769e3a8a1709237c3e9c38d7143aae95ab75fcb31 - md5: 7f3dbc9179b4dde7da98dfb151d0ad22 + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 depends: - python >=3.7 - arch: x86_64 - platform: win license: ISC - size: 153791 - timestamp: 1690024617757 + size: 163752 + timestamp: 1725278204397 - kind: conda name: cffi version: 1.17.1 @@ -3604,13 +3306,11 @@ packages: sha256: f9068349eacf0fcf26fcebba89185eb97d35cdc0ac74fbd7ed7d7eb307e717ab md5: 10112a8b1b7b479c7d4e87c9ade892eb depends: - - libgfortran 5.* - bzip2 >=1.0.8,<2.0a0 - libcurl >=7.86.0,<9.0a0 + - libgfortran 5.* - libgfortran5 >=11.3.0 - - libzlib >=1.2.13,<1.3.0a0 - arch: aarch64 - platform: osx + - libzlib >=1.2.13,<2.0.0a0 license: LicenseRef-fitsio size: 748569 timestamp: 1668757847978 @@ -3624,8 +3324,6 @@ packages: md5: 6faf3cf8df25572c7f70138a45f37363 depends: - libcxx >=15.0.7 - arch: aarch64 - platform: osx license: BSD-3-Clause license_family: BSD size: 116255 @@ -3642,8 +3340,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD size: 95857 @@ -3659,8 +3355,6 @@ packages: depends: - libgcc-ng >=12 - libstdcxx-ng >=12 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD size: 150272 @@ -3675,192 +3369,152 @@ packages: md5: c267b3955138953f8ca4cb4d1f4f2d84 depends: - libcxx >=15.0.7 - arch: x86_64 - platform: osx license: BSD-3-Clause license_family: BSD size: 138062 timestamp: 1684263362836 - kind: conda name: charset-normalizer - version: 3.2.0 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.2.0-pyhd8ed1ab_0.conda - sha256: 0666a95fbbd2299008162e2126c009191e5953d1cad1878bf9f4d8d634af1dd4 - md5: 313516e9a4b08b12dfb1e1cd390a96e3 - depends: - - python >=3.7 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - purls: - - pkg:pypi/charset-normalizer - size: 45686 - timestamp: 1688813585878 -- kind: conda - name: charset-normalizer - version: 3.3.2 + version: 3.4.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda - sha256: 20cae47d31fdd58d99c4d2e65fbdcefa0b0de0c84e455ba9d6356a4bdbc4b5b9 - md5: 7f4a9e3fcff3f6356ae99244a014da6a + url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda + sha256: 1873ac45ea61f95750cb0b4e5e675d1c5b3def937e80c7eebb19297f76810be8 + md5: a374efa97290b8799046df7c5ca17164 depends: - python >=3.7 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/charset-normalizer - size: 46597 - timestamp: 1698833765762 + size: 47314 + timestamp: 1728479405343 - kind: conda name: click version: 8.1.6 build: unix_pyh707e725_0 - subdir: osx-arm64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.6-unix_pyh707e725_0.conda sha256: 73392cf4851bf7c89e99518effea01d531360a4894c4218e768d5e03e89d7943 md5: 64dbb3b205546691a61204d1cfb208e3 depends: - - __unix * + - __unix - python >=3.8 - arch: aarch64 - platform: osx license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/click size: 84509 timestamp: 1689752121789 - kind: conda name: click version: 8.1.6 build: win_pyh7428d3b_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.6-win_pyh7428d3b_0.conda sha256: 6fa8a7c644073b88ef3f857bb56f51efcf7c3852777a009187360f9a6bd1c606 md5: c1e57b6771510a3d2648ed6e76277391 depends: - - __win * - - colorama * + - __win + - colorama - python >=3.8 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/click size: 84826 timestamp: 1689752336806 - kind: conda name: colorama version: 0.4.6 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 md5: 3faab06a954c2a04039983f2c4a50d99 depends: - python >=3.7 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/colorama size: 25170 timestamp: 1666700778190 - kind: conda name: comm - version: 0.1.4 + version: 0.2.2 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/comm-0.1.4-pyhd8ed1ab_0.conda - sha256: 11057745946a95ee7cc4c98900a60c7362266a4cb28bc97d96cd88e3056eb701 - md5: c8eaca39e2b6abae1fc96acc929ae939 + url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda + sha256: e923acf02708a8a0b591f3bce4bdc11c8e63b73198b99b35fe6cd96bfb6a0dbe + md5: 948d84721b578d426294e17a02e24cbb depends: - python >=3.6 - traitlets >=5.3 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/comm - size: 11682 - timestamp: 1691045097208 + size: 12134 + timestamp: 1710320435158 - kind: conda name: configparser - version: 5.3.0 + version: 7.1.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/configparser-5.3.0-pyhd8ed1ab_0.tar.bz2 - sha256: ce6ce9ee08437b46c284d52b076fb091cf6f2a9e12860d4a37546adbd5f53b28 - md5: c99fd5916160900dc5ff64204da99c4d + url: https://conda.anaconda.org/conda-forge/noarch/configparser-7.1.0-pyhd8ed1ab_0.conda + sha256: f8fef9e8c2847569275bb0bcaa6ed893c5c971ff48a29aef2bf08efef3ae92d7 + md5: dd6e71e1e3debd10fc46d6d9d14d16c9 depends: - python >=3.6 - arch: x86_64 - platform: win license: MIT license_family: MIT - size: 22490 - timestamp: 1660952265700 + size: 22043 + timestamp: 1724028414707 - kind: conda name: coverage version: 7.6.3 - build: py310ha75aee5_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.6.3-py310ha75aee5_0.conda - sha256: 070ba52a57b4068764eaf831a290de42e4188ae5ee35bbb4217f884b37a604ce - md5: 8f776f6bb9023542bcfb3aa384006182 + build: py310h38315fa_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/coverage-7.6.3-py310h38315fa_1.conda + sha256: 6b87b8efd96afec06568522a13e2c3ff83abf8eaf91777421abb19285d9cd8d2 + md5: fae4f76cd69477dd64b4d2e16fc88419 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - tomli + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: APACHE - size: 293300 - timestamp: 1728881240617 + size: 319322 + timestamp: 1729007403734 - kind: conda name: coverage version: 7.6.3 - build: py310ha8f682b_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/coverage-7.6.3-py310ha8f682b_0.conda - sha256: 982032c74aeff96923c371b47ce57c8f43491fe13495c0f8bbafa119a79e2853 - md5: f10d46d817421262643a7ab4930524db + build: py310h5799be4_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.6.3-py310h5799be4_1.conda + sha256: 4c745ee746f1318a4bd878f41f75573b569a1fd995bbb8294ad9325f76203b34 + md5: 90767bf37c0ae9b36f097ff0d741bcd2 depends: + - __osx >=11.0 - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 - tomli - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: APACHE - size: 318982 - timestamp: 1728881483804 + size: 293572 + timestamp: 1729007047754 - kind: conda name: coverage version: 7.6.3 - build: py310hb9d19b6_0 + build: py310h72eadd2_1 + build_number: 1 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.6.3-py310hb9d19b6_0.conda - sha256: 6f6914300fc89e8144479ce2dc68ed32e7e64ed2312a69e9edfafa858d4daab1 - md5: 19a72d2d96152549669e2b128d41750a + url: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.6.3-py310h72eadd2_1.conda + sha256: 5ca28369b39e10cf8411b80aebdf41a2e6decb6768caa3fda2edfd98758b8786 + md5: f5550aef0898d020b315a98100cb80bb depends: - __osx >=10.13 - python >=3.10,<3.11.0a0 @@ -3868,42 +3522,43 @@ packages: - tomli license: Apache-2.0 license_family: APACHE - size: 291255 - timestamp: 1728881392509 + size: 292648 + timestamp: 1729007051764 - kind: conda name: coverage version: 7.6.3 - build: py310hf9df320_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.6.3-py310hf9df320_0.conda - sha256: 103389087695738e944e979eee502da6400d1dc8afc56c027744249a8ea2ab5c - md5: bba6ef5f28da778e5ed7da3d4196dcd8 + build: py310h89163eb_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.6.3-py310h89163eb_1.conda + sha256: 53b497f02743ef0609c89e2a5f3cec5a2713d17ed39176cf5e5061a77cb7d6bf + md5: 24770578b1413dfbfedc865fd72cc298 depends: - - __osx >=11.0 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 - tomli license: Apache-2.0 license_family: APACHE - size: 292513 - timestamp: 1728881422035 + size: 293977 + timestamp: 1729007175750 - kind: conda name: cpython version: 3.10.15 - build: py310hd8ed1ab_1 - build_number: 1 + build: py310hd8ed1ab_2 + build_number: 2 subdir: noarch noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/cpython-3.10.15-py310hd8ed1ab_1.conda - sha256: f0e11bfee9dd6fc529db5683dee8a3d93f67d69e5dedc7f45eaa30e866576a00 - md5: 97cd219c7860ebba189244276f5f919d + url: https://conda.anaconda.org/conda-forge/noarch/cpython-3.10.15-py310hd8ed1ab_2.conda + sha256: b17052af1e1d51a674c502c7e37a8185286789d784b529e05b19792add27e575 + md5: e9cf6abfa50a94f83da49c63cfef8790 depends: - python 3.10.15.* - python_abi * *_cp310 license: Python-2.0 - size: 49632 - timestamp: 1727718428961 + size: 48936 + timestamp: 1729041693552 - kind: conda name: dav1d version: 1.2.1 @@ -3912,8 +3567,6 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-64/dav1d-1.2.1-h0dc2134_0.conda sha256: ec71a835866b42e946cd2039a5f7a6458851a21890d315476f5e66790ac11c96 md5: 9d88733c715300a39f8ca2e936b7808d - arch: x86_64 - platform: osx license: BSD-2-Clause license_family: BSD size: 668439 @@ -3926,8 +3579,6 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda sha256: 93e077b880a85baec8227e8c72199220c7f87849ad32d02c14fb3807368260b8 md5: 5a74cdee497e6b65173e10d94582fae6 - arch: aarch64 - platform: osx license: BSD-2-Clause license_family: BSD size: 316394 @@ -3944,8 +3595,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: BSD-2-Clause license_family: BSD size: 618643 @@ -3960,8 +3609,6 @@ packages: md5: 418c6ca5929a611cbd69204907a83995 depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: BSD-2-Clause license_family: BSD size: 760229 @@ -4041,97 +3688,61 @@ packages: name: decorator version: 5.1.1 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 sha256: 328a6a379f9bdfd0230e51de291ce858e6479411ea4b0545fb377c71662ef3e2 md5: 43afe5ab04e35e17ba28649471dd7364 depends: - python >=3.5 - arch: x86_64 - platform: win license: BSD-2-Clause license_family: BSD - purls: - - pkg:pypi/decorator size: 12072 timestamp: 1641555714315 - kind: conda name: defusedxml version: 0.7.1 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 sha256: 9717a059677553562a8f38ff07f3b9f61727bd614f505658b0a5ecbcf8df89be md5: 961b3a227b437d82ad7054484cfa71b2 depends: - python >=3.6 - arch: x86_64 - platform: win license: PSF-2.0 license_family: PSF - purls: - - pkg:pypi/defusedxml size: 24062 timestamp: 1615232388757 - kind: conda name: entrypoints version: '0.4' build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 sha256: 2ec4a0900a4a9f42615fc04d0fb3286b796abe56590e8e042f6ec25e102dd5af md5: 3cf04868fee0a029769bd41f4b2fbf2d depends: - python >=3.6 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/entrypoints size: 9199 timestamp: 1643888357950 - kind: conda name: exceptiongroup - version: 1.1.3 + version: 1.2.2 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda - sha256: c28f715e049fe0f09785660bcbffa175ffb438720e5bc5a60d56d4b08364b315 - md5: e6518222753f519e911e83136d2158d9 + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 depends: - python >=3.7 - arch: x86_64 - platform: win - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/exceptiongroup - size: 19262 - timestamp: 1692026296517 -- kind: conda - name: executing - version: 2.0.1 - build: pyhd8ed1ab_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda - sha256: c738804ab1e6376f8ea63372229a04c8d658dc90fd5a218c6273a2eaf02f4057 - md5: e16be50e378d8a4533b989035b196ab8 - depends: - - python >=2.7 - arch: x86_64 - platform: win - license: MIT - license_family: MIT - purls: - - pkg:pypi/executing - size: 27689 - timestamp: 1698580072627 + license: MIT and PSF-2.0 + size: 20418 + timestamp: 1720869435725 - kind: conda name: executing version: 2.1.0 @@ -4182,51 +3793,26 @@ packages: name: flaky version: 3.7.0 build: pyh9f0ad1d_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/flaky-3.7.0-pyh9f0ad1d_0.tar.bz2 sha256: fbb02837c933c4aab24e60aaa9cc7ed164f7771845fa810ccba37d4cf390d258 md5: d20be9ed08052d16593c88d51b774a82 depends: - - python * - arch: x86_64 - platform: win + - python license: Apache 2.0 license_family: Apache - purls: - - pkg:pypi/flaky size: 21626 timestamp: 1594311827726 -- kind: conda - name: flit-core - version: 3.9.0 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/flit-core-3.9.0-pyhd8ed1ab_0.conda - sha256: a2ef503739ac22bf2a5d91c6a7b0f6a4413a56fbdb9b84f8f70427b9e37fbb69 - md5: e8cfceef004266b259604c3faa2a0191 - depends: - - python >=3.6 - arch: aarch64 - platform: osx - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/flit - size: 49072 - timestamp: 1684084485822 - kind: conda name: font-ttf-dejavu-sans-mono version: '2.37' build: hab24e00_0 - subdir: osx-arm64 + subdir: noarch noarch: generic url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b md5: 0c96522c6bdaed4b1566d11387caaf45 - arch: aarch64 - platform: osx license: BSD-3-Clause license_family: BSD size: 397370 @@ -4235,13 +3821,11 @@ packages: name: font-ttf-inconsolata version: '3.000' build: h77eed37_0 - subdir: osx-arm64 + subdir: noarch noarch: generic url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c md5: 34893075a5c9e55cdafac56607368fc6 - arch: aarch64 - platform: osx license: OFL-1.1 license_family: Other size: 96530 @@ -4250,13 +3834,11 @@ packages: name: font-ttf-source-code-pro version: '2.038' build: h77eed37_0 - subdir: osx-arm64 + subdir: noarch noarch: generic url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 md5: 4d59c254e01d9cde7957100457e2d5fb - arch: aarch64 - platform: osx license: OFL-1.1 license_family: Other size: 700814 @@ -4264,18 +3846,17 @@ packages: - kind: conda name: font-ttf-ubuntu version: '0.83' - build: hab24e00_0 - subdir: osx-arm64 + build: h77eed37_3 + build_number: 3 + subdir: noarch noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2 - sha256: 470d5db54102bd51dbb0c5990324a2f4a0bc976faa493b22193338adb9882e2e - md5: 19410c3df09dfb12d1206132a1d357c5 - arch: aarch64 - platform: osx - license: Ubuntu Font Licence Version 1.0 + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 + md5: 49023d73832ef61042f6a237cb2687e7 + license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 license_family: Other - size: 1961279 - timestamp: 1566932680646 + size: 1620504 + timestamp: 1727511233259 - kind: conda name: fontconfig version: 2.14.2 @@ -4303,11 +3884,9 @@ packages: sha256: 7094917fc6758186e17c61d8ee8fd2bbbe9f303b4addac61d918fa415c497e2b md5: f77d47ddb6d3cc5b39b9bdf65635afbb depends: - - freetype >=2.12.1,<3.0a0 - - libzlib >=1.2.13,<1.3.0a0 - expat >=2.5.0,<3.0a0 - arch: aarch64 - platform: osx + - freetype >=2.12.1,<3.0a0 + - libzlib >=1.2.13,<2.0.0a0 license: MIT license_family: MIT size: 237668 @@ -4316,15 +3895,13 @@ packages: name: fonts-conda-ecosystem version: '1' build: '0' - subdir: osx-arm64 + subdir: noarch noarch: generic url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 md5: fee5683a3f04bd15cbd8318b096a27ab depends: - - fonts-conda-forge * - arch: aarch64 - platform: osx + - fonts-conda-forge license: BSD-3-Clause license_family: BSD size: 3667 @@ -4333,18 +3910,16 @@ packages: name: fonts-conda-forge version: '1' build: '0' - subdir: osx-arm64 + subdir: noarch noarch: generic url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 sha256: 53f23a3319466053818540bcdf2091f253cbdbab1e0e9ae7b9e509dcaa2a5e38 md5: f766549260d6815b0c52253f1fb1bb29 depends: - - font-ttf-ubuntu * - - font-ttf-inconsolata * - - font-ttf-dejavu-sans-mono * - - font-ttf-source-code-pro * - arch: aarch64 - platform: osx + - font-ttf-dejavu-sans-mono + - font-ttf-inconsolata + - font-ttf-source-code-pro + - font-ttf-ubuntu license: BSD-3-Clause license_family: BSD size: 4102 @@ -4353,7 +3928,7 @@ packages: name: fqdn version: 1.5.1 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2 sha256: 6cfd1f9bcd2358a69fb571f4b3af049b630d52647d906822dbedac03e84e4f63 @@ -4361,8 +3936,6 @@ packages: depends: - cached-property >=1.3.0 - python >=2.7,<4 - arch: x86_64 - platform: win license: MPL-2.0 license_family: MOZILLA size: 14395 @@ -4394,29 +3967,25 @@ packages: md5: 25152fce119320c980e5470e64834b50 depends: - libpng >=1.6.39,<1.7.0a0 - - libzlib >=1.2.13,<1.3.0a0 - arch: x86_64 - platform: osx + - libzlib >=1.2.13,<2.0.0a0 license: GPL-2.0-only OR FTL size: 599300 timestamp: 1694616137838 - kind: conda name: freetype version: 2.12.1 - build: hd633e50_1 - build_number: 1 + build: hadb7bae_2 + build_number: 2 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hd633e50_1.conda - sha256: 9f20ac782386cca6295cf02a07bbc6aedc4739330dc9caba242630602a9ab7f4 - md5: 33ea6326e26d1da25eb8dfa768195b82 + url: https://conda.anaconda.org/conda-forge/osx-arm64/freetype-2.12.1-hadb7bae_2.conda + sha256: 791673127e037a2dc0eebe122dc4f904cb3f6e635bb888f42cbe1a76b48748d9 + md5: e6085e516a3e304ce41a8ee08b9b89ad depends: - - libzlib >=1.2.13,<1.3.0a0 - libpng >=1.6.39,<1.7.0a0 - arch: aarch64 - platform: osx - license: GPL-2.0-only and LicenseRef-FreeType - size: 572579 - timestamp: 1669233072570 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + size: 596430 + timestamp: 1694616332835 - kind: conda name: freetype version: 2.12.1 @@ -4443,51 +4012,45 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-arm64/fribidi-1.0.10-h27ca646_0.tar.bz2 sha256: 4b37ea851a2cf85edf0a63d2a63266847ec3dcbba4a31156d430cdd6aa811303 md5: c64443234ff91d70cb9c7dc926c58834 - arch: aarch64 - platform: osx license: LGPL-2.1 size: 60255 timestamp: 1604417405528 - kind: conda name: future - version: 0.18.3 + version: 1.0.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/future-0.18.3-pyhd8ed1ab_0.conda - sha256: b3d34bf4924cb80363c1ab57ac821393f118ffaa94f05368bf4044941163b65e - md5: fec8329fc739090f26a7d7803db254f1 + url: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda + sha256: 8c918a63595ae01575b738ddf0bff10dc23a5002d4af4c8b445d1179a76a8efd + md5: 650a7807e689642dddd3590eb817beed depends: - python >=3.8 - arch: x86_64 - platform: win license: MIT license_family: MIT - size: 365520 - timestamp: 1673596757510 + size: 364081 + timestamp: 1708610254418 - kind: conda name: gcc_impl_linux-64 - version: 13.2.0 - build: h338b0a0_2 - build_number: 2 + version: 14.2.0 + build: h6b349bd_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.2.0-h338b0a0_2.conda - sha256: 9fa30c6a01f1a8591dc9c6f99b4efc7b6cc8f83bfca931efe3a0699b7ef3518f - md5: b4f2ab4faf22658cca303570fd9a7662 - depends: - - binutils_impl_linux-64 >=2.39 - - libgcc-devel_linux-64 ==13.2.0 ha9c7c90_2 - - libgcc-ng >=13.2.0 - - libgomp >=13.2.0 - - libsanitizer ==13.2.0 h7e041cc_2 - - libstdcxx-ng >=13.2.0 - - sysroot_linux-64 * - arch: x86_64 - platform: linux + url: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.2.0-h6b349bd_1.conda + sha256: 0cadb23ebe6d95216c8eab57fdc1e76c8f98a10b8bdd0d922b9ccde94706dd95 + md5: 0551d01d65027359bf011c049f9c6401 + depends: + - binutils_impl_linux-64 >=2.40 + - libgcc >=14.2.0 + - libgcc-devel_linux-64 14.2.0 h41c2201_101 + - libgomp >=14.2.0 + - libsanitizer 14.2.0 h2a3dede_1 + - libstdcxx >=14.2.0 + - sysroot_linux-64 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 52904962 - timestamp: 1695219534603 + size: 72496116 + timestamp: 1729027827248 - kind: conda name: gdk-pixbuf version: 2.42.10 @@ -4497,31 +4060,54 @@ packages: sha256: 04c9a924a64d6aa3a999fd2a807b8476ebc2e008f21a851c13cc4b677a840a49 md5: 9e8a24e2ffa9bb8200cef965af01af06 depends: - - libtiff >=4.5.0,<4.6.0a0 - - libpng >=1.6.39,<1.7.0a0 - - libglib >=2.74.1,<3.0a0 - jpeg >=9e,<10a - arch: aarch64 - platform: osx + - libglib >=2.74.1,<3.0a0 + - libpng >=1.6.39,<1.7.0a0 + - libtiff >=4.5.0,<4.6.0a0 license: LGPL-2.1-or-later license_family: LGPL size: 534020 timestamp: 1672757649019 - kind: conda name: gettext - version: 0.21.1 - build: h0186832_0 + version: 0.22.5 + build: h8414b35_3 + build_number: 3 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/gettext-0.21.1-h0186832_0.tar.bz2 - sha256: 093b2f96dc4b48e4952ab8946facec98b34b708a056251fc19c23c3aad30039e - md5: 63d2ff6fddfa74e5458488fd311bf635 + url: https://conda.anaconda.org/conda-forge/osx-arm64/gettext-0.22.5-h8414b35_3.conda + sha256: 634e11f6e6560568ede805f823a2be8634c6a0a2fa6743880ec403d925923138 + md5: 89b31a91b3ac2b7b3b0e5bc4eb99c39d depends: + - __osx >=11.0 + - gettext-tools 0.22.5 h8414b35_3 + - libasprintf 0.22.5 h8414b35_3 + - libasprintf-devel 0.22.5 h8414b35_3 + - libcxx >=16 + - libgettextpo 0.22.5 h8414b35_3 + - libgettextpo-devel 0.22.5 h8414b35_3 - libiconv >=1.17,<2.0a0 - arch: aarch64 - platform: osx + - libintl 0.22.5 h8414b35_3 + - libintl-devel 0.22.5 h8414b35_3 license: LGPL-2.1-or-later AND GPL-3.0-or-later - size: 4021036 - timestamp: 1665674192347 + size: 483255 + timestamp: 1723627203687 +- kind: conda + name: gettext-tools + version: 0.22.5 + build: h8414b35_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/gettext-tools-0.22.5-h8414b35_3.conda + sha256: 50b530cf2326938b80330f78cf4056492fa8c6a5c7e313d92069ebbbb2f4d264 + md5: 47071f4b2915032e1d47119f779f9d9c + depends: + - __osx >=11.0 + - libiconv >=1.17,<2.0a0 + - libintl 0.22.5 h8414b35_3 + license: GPL-3.0-or-later + license_family: GPL + size: 2467439 + timestamp: 1723627140130 - kind: conda name: gflags version: 2.2.2 @@ -4571,23 +4157,6 @@ packages: license_family: BSD size: 82090 timestamp: 1726600145480 -- kind: conda - name: giflib - version: 5.2.1 - build: h0b41bf4_3 - build_number: 3 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.1-h0b41bf4_3.conda - sha256: 41ec165704ccce2faa0437f4f53c03c06261a2cc9ff7614828e51427d9261f4b - md5: 96f3b11872ef6fad973eac856cd2624f - depends: - - libgcc-ng >=12 - arch: x86_64 - platform: linux - license: MIT - license_family: MIT - size: 77385 - timestamp: 1678717794467 - kind: conda name: giflib version: 5.2.1 @@ -4597,27 +4166,22 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.1-h1a8c8d9_3.conda sha256: dbf1e431d3e5e03f8eeb77ec08a4c5d6d5d9af84dbef13d4365e397dd389beb8 md5: f39a05d3dbb0e5024b7deabb2c0993f1 - arch: aarch64 - platform: osx license: MIT license_family: MIT size: 71963 timestamp: 1678718059849 - kind: conda name: giflib - version: 5.2.1 - build: hb7f2c08_3 - build_number: 3 + version: 5.2.2 + build: h10d778d_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.1-hb7f2c08_3.conda - sha256: 47515e0874bcf67e438e1d5d093b074c1781f055067195f0d00a7790a56d446d - md5: aca150b0186836f893ebac79019e5498 - arch: x86_64 - platform: osx + url: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.2-h10d778d_0.conda + sha256: 2c825df829097536314a195ae5cacaa8695209da6b4400135a65d8e23c008ff8 + md5: 03e8c9b4d3da5f3d6eabdd020c2d63ac license: MIT license_family: MIT - size: 76514 - timestamp: 1678717973971 + size: 74516 + timestamp: 1712692686914 - kind: conda name: giflib version: 5.2.2 @@ -4634,6 +4198,20 @@ packages: license_family: MIT size: 84497 timestamp: 1712692952874 +- kind: conda + name: giflib + version: 5.2.2 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda + sha256: aac402a8298f0c0cc528664249170372ef6b37ac39fdc92b40601a6aed1e32ff + md5: 3bf7b9fd5a7136126e0234db4b87c8b6 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 77248 + timestamp: 1712692454246 - kind: conda name: glib version: 2.76.4 @@ -4643,14 +4221,12 @@ packages: sha256: 30371b52717e3e99d80c75f79d3edb6d70d3bb78bbf40ae1b96d7ee256c1b30f md5: a1065aa44355983e5defd9ef97a60a4d depends: - - glib-tools ==2.76.4 ha614eb4_0 - - python * - gettext >=0.21.1,<1.0a0 + - glib-tools 2.76.4 ha614eb4_0 - libcxx >=15.0.7 - - libglib ==2.76.4 h24e9cb9_0 - - libzlib >=1.2.13,<1.3.0a0 - arch: aarch64 - platform: osx + - libglib 2.76.4 h24e9cb9_0 + - libzlib >=1.2.13,<2.0.0a0 + - python * license: LGPL-2.1-or-later size: 482194 timestamp: 1688694942192 @@ -4663,11 +4239,9 @@ packages: sha256: f14d9277d47affd7d3a4281a80742b78a5e67f4e9c3deb50595a126743e0a69a md5: 183ff0580b44d53bfdea7ce6e9e7769f depends: - - libglib ==2.76.4 h24e9cb9_0 - - libzlib >=1.2.13,<1.3.0a0 - libcxx >=15.0.7 - arch: aarch64 - platform: osx + - libglib 2.76.4 h24e9cb9_0 + - libzlib >=1.2.13,<2.0.0a0 license: LGPL-2.1-or-later size: 100669 timestamp: 1688694886885 @@ -4720,36 +4294,34 @@ packages: - kind: conda name: graphite2 version: 1.3.13 - build: h58526e2_1001 - build_number: 1001 + build: h59595ed_1003 + build_number: 1003 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2 - sha256: 65da967f3101b737b08222de6a6a14e20e480e7d523a5d1e19ace7b960b5d6b1 - md5: 8c54672728e8ec6aa6db90cf2806d220 + url: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda + sha256: 0595b009f20f8f60f13a6398e7cdcbd2acea5f986633adcf85f5a2283c992add + md5: f87c7b7c2cb45f323ffbce941c78ab7c depends: - - libgcc-ng >=7.5.0 - - libstdcxx-ng >=7.5.0 - arch: x86_64 - platform: linux - license: LGPLv2 - size: 104701 - timestamp: 1604365484436 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LGPL-2.0-or-later + license_family: LGPL + size: 96855 + timestamp: 1711634169756 - kind: conda name: graphite2 version: 1.3.13 - build: h9f76cd9_1001 - build_number: 1001 + build: hebf3989_1003 + build_number: 1003 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.13-h9f76cd9_1001.tar.bz2 - sha256: 57db1e563cdfe469cd453a2988039118e96ce4b77c9219e2f1022be0e1c2b03f - md5: 288b591645cb9cb9c0af7309ac1114f5 + url: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.13-hebf3989_1003.conda + sha256: 2eadafbfc52f5e7df3da3c3b7e5bbe34d970bea1d645ffe60b0b1c3a216657f5 + md5: 339991336eeddb70076d8ca826dac625 depends: - - libcxx >=11.0.0 - arch: aarch64 - platform: osx - license: LGPLv2 - size: 83198 - timestamp: 1604365687923 + - libcxx >=16 + license: LGPL-2.0-or-later + license_family: LGPL + size: 79774 + timestamp: 1711634444608 - kind: conda name: grpcio version: 1.56.2 @@ -4835,79 +4407,104 @@ packages: name: h11 version: 0.14.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 md5: b21ed0883505ba1910994f1df031a428 depends: - python >=3 - - typing_extensions * - arch: x86_64 - platform: win + - typing_extensions license: MIT license_family: MIT - purls: - - pkg:pypi/h11 size: 48251 timestamp: 1664132995560 +- kind: conda + name: h2 + version: 4.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a + md5: b748fbf7060927a6e82df7cb5ee8f097 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.6.1 + license: MIT + license_family: MIT + size: 46754 + timestamp: 1634280590080 - kind: conda name: harfbuzz - version: 7.3.0 - build: h46e5fef_0 + version: 8.2.0 + build: hf1a6348_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-7.3.0-h46e5fef_0.conda - sha256: 29a2eb09dce14b93687660cf0efcdd2fb879a3786bce17ab73e56fbb05b3d26a - md5: 5247712cd97eeda510d1436560b13833 + url: https://conda.anaconda.org/conda-forge/osx-arm64/harfbuzz-8.2.0-hf1a6348_0.conda + sha256: 7992f8d1045e89226333f93a5958aa20922f9b733b4dcd030577a2a6880d27e5 + md5: 62de902c66efe9888a4ff24257020c8f depends: - - icu >=72.1,<73.0a0 - - libcxx >=15.0.7 - - graphite2 * - cairo >=1.16.0,<2.0a0 - freetype >=2.12.1,<3.0a0 - - libglib >=2.76.2,<3.0a0 - arch: aarch64 - platform: osx + - graphite2 + - icu >=73.2,<74.0a0 + - libcxx >=15.0.7 + - libglib >=2.76.4,<3.0a0 license: MIT license_family: MIT - size: 1197980 - timestamp: 1683685100684 + size: 1244033 + timestamp: 1694361324971 - kind: conda name: harfbuzz - version: 8.2.1 - build: h3d44ed6_0 + version: 8.5.0 + build: hfac3d4d_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.2.1-h3d44ed6_0.conda - sha256: 5ca6585e6a4348bcbe214d57f5d6f560d15d23a6650770a2909475848b214edb - md5: 98db5f8813f45e2b29766aff0e4a499c + url: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.5.0-hfac3d4d_0.conda + sha256: a141fc55f8bfdab7db03fe9d8e61cb0f8c8b5970ed6540eda2db7186223f4444 + md5: f5126317dd0ce0ba26945e411ecc6960 depends: - - cairo >=1.16.0,<2.0a0 + - cairo >=1.18.0,<2.0a0 - freetype >=2.12.1,<3.0a0 - - graphite2 * + - graphite2 - icu >=73.2,<74.0a0 - libgcc-ng >=12 - - libglib >=2.78.0,<3.0a0 + - libglib >=2.80.2,<3.0a0 - libstdcxx-ng >=12 - arch: x86_64 - platform: linux license: MIT license_family: MIT - size: 1526592 - timestamp: 1695089914042 + size: 1598244 + timestamp: 1715701061364 - kind: conda - name: icu - version: '72.1' - build: he12128b_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-72.1-he12128b_0.conda - sha256: 997835c56e899f4717b6707ab0734c27e7cdd8c735c952334314a7c9d59808e1 - md5: d1a11dfc54168a07856dbf87f393ca82 - arch: aarch64 - platform: osx + name: hpack + version: 4.0.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 + md5: 914d6646c4dbb1fd3ff539830a12fd71 + depends: + - python + license: MIT + license_family: MIT + size: 25341 + timestamp: 1598856368685 +- kind: conda + name: hyperframe + version: 6.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 + md5: 9f765cbfab6870c8435b9eefecd7a1f4 + depends: + - python >=3.6 license: MIT license_family: MIT - size: 11700891 - timestamp: 1679315525149 + size: 14646 + timestamp: 1619110249723 - kind: conda name: icu version: '73.2' @@ -4919,12 +4516,22 @@ packages: depends: - libgcc-ng >=12 - libstdcxx-ng >=12 - arch: x86_64 - platform: linux license: MIT license_family: MIT size: 12089150 timestamp: 1692900650789 +- kind: conda + name: icu + version: '73.2' + build: hc8870d7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-73.2-hc8870d7_0.conda + sha256: ff9cd0c6cd1349954c801fb443c94192b637e1b414514539f3c49c56a39f51b1 + md5: 8521bd47c0e11c5902535bb1a17c565f + license: MIT + license_family: MIT + size: 11997841 + timestamp: 1692902104771 - kind: conda name: icu version: '73.2' @@ -4933,31 +4540,25 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-64/icu-73.2-hf5e326d_0.conda sha256: f66362dc36178ac9b7c7a9b012948a9d2d050b3debec24bbd94aadbc44854185 md5: 5cc301d759ec03f28328428e28f65591 - arch: x86_64 - platform: osx license: MIT license_family: MIT size: 11787527 timestamp: 1692901622519 - kind: conda name: idna - version: '3.4' + version: '3.10' build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2 - sha256: 9887c35c374ec1847f167292d3fde023cb4c994a4ceeec283072b95440131f09 - md5: 34272b248891bddccc64479f9a7fffed + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 + md5: 7ba2ede0e7c795ff95088daf0dc59753 depends: - python >=3.6 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/idna - size: 56742 - timestamp: 1663625484114 + size: 49837 + timestamp: 1726459583613 - kind: conda name: imagecodecs version: 2023.1.23 @@ -5052,12 +4653,12 @@ packages: - kind: conda name: imagecodecs version: 2024.1.1 - build: py310ha229065_2 - build_number: 2 + build: py310h89a1481_3 + build_number: 3 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/imagecodecs-2024.1.1-py310ha229065_2.conda - sha256: ad40b21b04ff0e347ef1edad7b5eb001d0e4228b3ecfc50a5d1d3b5050169002 - md5: 970178387466287e741ac50f3ee59364 + url: https://conda.anaconda.org/conda-forge/osx-64/imagecodecs-2024.1.1-py310h89a1481_3.conda + sha256: eca133b2fc45e1b48d7187c6fb2e7401056b8b09725d26e0b3504dd09e286b36 + md5: a3817d728ce12379a17d4b560e94f123 depends: - blosc >=1.21.5,<2.0a0 - brunsli >=0.1,<1.0a0 @@ -5068,13 +4669,13 @@ packages: - jxrlib >=1.1,<1.2.0a0 - lcms2 >=2.16,<3.0a0 - lerc >=4.0.0,<5.0a0 - - libaec >=1.1.2,<2.0a0 + - libaec >=1.1.3,<2.0a0 - libavif16 >=1.0.1,<2.0a0 - libbrotlicommon >=1.1.0,<1.2.0a0 - libbrotlidec >=1.1.0,<1.2.0a0 - libbrotlienc >=1.1.0,<1.2.0a0 - libcxx >=16 - - libdeflate >=1.19,<1.20.0a0 + - libdeflate >=1.20,<1.21.0a0 - libjpeg-turbo >=3.0.0,<4.0a0 - libjxl >=0.10,<0.11.0a0 - libpng >=1.6.43,<1.7.0a0 @@ -5093,8 +4694,8 @@ packages: - zstd >=1.5.5,<1.6.0a0 license: BSD-3-Clause license_family: BSD - size: 1646785 - timestamp: 1709943425798 + size: 1647027 + timestamp: 1711243512917 - kind: conda name: imagecodecs version: 2024.1.1 @@ -5143,420 +4744,243 @@ packages: timestamp: 1711243735862 - kind: conda name: imageio - version: 2.31.1 - build: pyh24c5eb1_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/imageio-2.31.1-pyh24c5eb1_0.conda - sha256: f3bc991de2cae4fa72e1a3528443f73a7c3746aa466a2c952a815ca39dce02ea - md5: 1051cc0376612ba101d4f59e954a1ff4 - depends: - - numpy * - - python >=3 - - pillow >=8.3.2 - arch: aarch64 - platform: osx - license: BSD-2-Clause - license_family: BSD - purls: - - pkg:pypi/imageio - size: 290471 - timestamp: 1686552581011 -- kind: conda - name: imageio - version: 2.31.5 - build: pyh8c1a49c_0 - subdir: win-64 + version: 2.36.0 + build: pyh12aca89_1 + build_number: 1 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/imageio-2.31.5-pyh8c1a49c_0.conda - sha256: 0554fbf2136a1ab380551963c5884941f7852034cbe40f002ae040e10e457365 - md5: 6820ccf6a3a27df348f18c85dd89014a + url: https://conda.anaconda.org/conda-forge/noarch/imageio-2.36.0-pyh12aca89_1.conda + sha256: 1fbe1bdbef2c19643c6f4e2c216305d8d54860db80968fecfa7566277518132f + md5: 36349844ff73fcd0140ee7f30745f0bf depends: - - numpy * + - numpy - pillow >=8.3.2 - python >=3 - arch: x86_64 - platform: win license: BSD-2-Clause license_family: BSD - purls: - - pkg:pypi/imageio - size: 291022 - timestamp: 1696854244599 + size: 292067 + timestamp: 1729190805302 - kind: conda name: importlib-metadata - version: 6.8.0 + version: 8.5.0 build: pyha770c72_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda - sha256: 2797ed927d65324309b6c630190d917b9f2111e0c217b721f80429aeb57f9fcf - md5: 4e9f59a060c3be52bc4ddc46ee9b6946 + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c + md5: 54198435fce4d64d8a89af22573012a8 depends: - python >=3.8 - zipp >=0.5 - arch: x86_64 - platform: win license: Apache-2.0 license_family: APACHE - size: 25910 - timestamp: 1688754651944 + size: 28646 + timestamp: 1726082927916 - kind: conda name: importlib_metadata - version: 6.8.0 + version: 8.5.0 build: hd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda - sha256: b96e01dc42d547d6d9ceb1c5b52a5232cc04e40153534350f702c3e0418a6b3f - md5: b279b07ce18058034e5b3606ba103a8b - depends: - - importlib-metadata >=6.8.0,<6.8.1.0a0 - arch: x86_64 - platform: win - license: Apache-2.0 - license_family: APACHE - size: 9428 - timestamp: 1688754660209 -- kind: conda - name: importlib_resources - version: 6.0.1 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.0.1-pyhd8ed1ab_0.conda - sha256: 0ca2154b3baf419d20baeddd962c1efa9bb673e66308000358a26d8d427ef90d - md5: d978c61aa5fc2c69380d53ad56b5ae86 + url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_0.conda + sha256: 313b8a05211bacd6b15ab2621cb73d7f41ea5c6cae98db53367d47833f03fef1 + md5: 2a92e152208121afadf85a5e1f3a5f4d depends: - - python >=3.8 - - zipp >=3.1.0 - constrains: - - importlib-resources >=6.0.1,<6.0.2.0a0 - arch: aarch64 - platform: osx + - importlib-metadata >=8.5.0,<8.5.1.0a0 license: Apache-2.0 license_family: APACHE - purls: - - pkg:pypi/importlib-resources - size: 30639 - timestamp: 1691408258781 + size: 9385 + timestamp: 1726082930346 - kind: conda name: importlib_resources - version: 6.1.0 + version: 6.4.5 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.0-pyhd8ed1ab_0.conda - sha256: adab6da633ec3b642f036ab5c1196c3e2db0e8db57fb0c7fc9a8e06e29fa9bdc - md5: 48b0d98e0c0ec810d3ccc2a0926c8c0e + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + sha256: 2cb9db3e40033c3df72d3defc678a012840378fd55a67e4351363d4b321a0dc1 + md5: c808991d29b9838fb4d96ce8267ec9ec depends: - python >=3.8 - zipp >=3.1.0 constrains: - - importlib-resources >=6.1.0,<6.1.1.0a0 - arch: x86_64 - platform: win + - importlib-resources >=6.4.5,<6.4.6.0a0 license: Apache-2.0 license_family: APACHE - purls: - - pkg:pypi/importlib-resources - size: 30024 - timestamp: 1695414932459 + size: 32725 + timestamp: 1725921462405 - kind: conda name: iniconfig version: 2.0.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 md5: f800d2da156d08e289b14e87e43c1ae5 depends: - python >=3.7 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/iniconfig size: 11101 timestamp: 1673103208955 - kind: conda name: intel-openmp - version: 2023.2.0 - build: h57928b3_50497 - build_number: 50497 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2023.2.0-h57928b3_50497.conda - sha256: dd9fded25ebe5c66af30ac6e3685146efdc2d7787035f01bfb546b347f138f6f - md5: a401f3cae152deb75bbed766a90a6312 - arch: x86_64 - platform: win - license: LicenseRef-ProprietaryIntel + version: 2024.2.1 + build: h57928b3_1083 + build_number: 1083 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda + sha256: 0fd2b0b84c854029041b0ede8f4c2369242ee92acc0092f8407b1fe9238a8209 + md5: 2d89243bfb53652c182a7c73182cce4f + license: LicenseRef-IntelSimplifiedSoftwareOct2022 license_family: Proprietary - size: 2523079 - timestamp: 1698351323119 -- kind: conda - name: ipykernel - version: 6.25.1 - build: pyh5fb750a_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.25.1-pyh5fb750a_0.conda - sha256: 4ae036b6f811b324ff92e3b2b4343d4f7da957dd7f817475a19ba5e2dd9e08b9 - md5: 159a21c7e0e02a0356b15c4efbe47c2b - depends: - - packaging * - - appnope * - - comm >=0.1.1 - - python >=3.8 - - __osx * - - traitlets >=5.4.0 - - matplotlib-inline >=0.1 - - pyzmq >=20 - - jupyter_core >=4.12,!=5.0.* - - ipython >=7.23.1 - - psutil * - - nest-asyncio * - - tornado >=6.1 - - debugpy >=1.6.5 - - jupyter_client >=6.1.12 - arch: aarch64 - platform: osx - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/ipykernel - size: 114808 - timestamp: 1691424764364 + size: 1852356 + timestamp: 1723739573141 - kind: conda name: ipykernel - version: 6.26.0 - build: pyh3cd1d5f_0 - subdir: osx-64 + version: 6.29.5 + build: pyh3099207_0 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.26.0-pyh3cd1d5f_0.conda - sha256: be9927d47fe23cc4d2a09d252e37e1e56ffb137767d2c0577ed882ead16f75fa - md5: 3c6e2148d30e6a762d8327a433ebfb5a + url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda + sha256: 33cfd339bb4efac56edf93474b37ddc049e08b1b4930cf036c893cc1f5a1f32a + md5: b40131ab6a36ac2c09b7c57d4d3fbf99 depends: - - __osx * - - appnope * + - __linux - comm >=0.1.1 - debugpy >=1.6.5 - ipython >=7.23.1 - jupyter_client >=6.1.12 - jupyter_core >=4.12,!=5.0.* - matplotlib-inline >=0.1 - - nest-asyncio * - - packaging * - - psutil * + - nest-asyncio + - packaging + - psutil - python >=3.8 - - pyzmq >=20 + - pyzmq >=24 - tornado >=6.1 - traitlets >=5.4.0 - arch: x86_64 - platform: osx license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/ipykernel - size: 116536 - timestamp: 1698244546989 + size: 119084 + timestamp: 1719845605084 - kind: conda name: ipykernel - version: 6.26.0 - build: pyha63f2e9_0 - subdir: win-64 + version: 6.29.5 + build: pyh4bbf305_0 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.26.0-pyha63f2e9_0.conda - sha256: 7208f5ae35c321d03c71e4072c959c60f877d1b9cc2fb32d805972b54123fb95 - md5: 10e1de12f78f0fedb82ff723f602b5c5 + url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh4bbf305_0.conda + sha256: dc569094125127c0078aa536f78733f383dd7e09507277ef8bcd1789786e7086 + md5: 18df5fc4944a679e085e0e8f31775fc8 depends: - - __win * + - __win - comm >=0.1.1 - debugpy >=1.6.5 - ipython >=7.23.1 - jupyter_client >=6.1.12 - jupyter_core >=4.12,!=5.0.* - matplotlib-inline >=0.1 - - nest-asyncio * - - packaging * - - psutil * + - nest-asyncio + - packaging + - psutil - python >=3.8 - - pyzmq >=20 + - pyzmq >=24 - tornado >=6.1 - traitlets >=5.4.0 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/ipykernel - size: 116868 - timestamp: 1698244441309 + size: 119853 + timestamp: 1719845858082 - kind: conda name: ipykernel - version: 6.26.0 - build: pyhf8b6a83_0 - subdir: linux-64 + version: 6.29.5 + build: pyh57ce528_0 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.26.0-pyhf8b6a83_0.conda - sha256: 9e647454f7572101657a07820ebed294df9a6a527b041cd5e4dd98b8aa3db625 - md5: 2307f71f5f0896d4b91b93e6b468abff + url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh57ce528_0.conda + sha256: 072534d4d379225b2c3a4e38bc7730b65ae171ac7f0c2d401141043336e97980 + md5: 9eb15d654daa0ef5a98802f586bb4ffc depends: - - __linux * + - __osx + - appnope - comm >=0.1.1 - debugpy >=1.6.5 - ipython >=7.23.1 - jupyter_client >=6.1.12 - jupyter_core >=4.12,!=5.0.* - matplotlib-inline >=0.1 - - nest-asyncio * - - packaging * - - psutil * + - nest-asyncio + - packaging + - psutil - python >=3.8 - - pyzmq >=20 + - pyzmq >=24 - tornado >=6.1 - traitlets >=5.4.0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/ipykernel - size: 116210 - timestamp: 1698244196564 + size: 119568 + timestamp: 1719845667420 - kind: conda name: ipython - version: 8.14.0 - build: pyhd1c38e8_0 - subdir: osx-arm64 + version: 8.28.0 + build: pyh707e725_0 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.14.0-pyhd1c38e8_0.conda - sha256: ea7524cd33c18c5c0d01e48e0089f339e7e8f1c3a6a8d2416c46b3d50d509894 - md5: f56fab4cea853c2248105b6cd7d79bf0 + url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.28.0-pyh707e725_0.conda + sha256: b18adc659d43fc8eef026312a74cd39944ffe9d8decee71ec60a1974fb8ec86c + md5: 7142a7dff2a47e40b55d304decadd78a depends: - - appnope * - - prompt_toolkit >=3.0.30,<3.1.0,!=3.0.37 - - jedi >=0.16 - - __osx * - - decorator * - - pickleshare * - - matplotlib-inline * - - python >=3.9 - - pygments >=2.4.0 - - stack_data * - - traitlets >=5 - - typing_extensions * - - pexpect >4.3 - - backcall * - arch: aarch64 - platform: osx - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/ipython - size: 585154 - timestamp: 1685728306650 -- kind: conda - name: ipython - version: 8.17.2 - build: pyh31c8845_0 - subdir: osx-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.17.2-pyh31c8845_0.conda - sha256: b28ec68a49d8ddc41b92f3161f536d63e62eb5493021e41bb172b5f0af54ca2d - md5: 28e743c2963d1cecaa75f7612ade74c4 - depends: - - __osx * - - appnope * - - decorator * - - exceptiongroup * + - __unix + - decorator + - exceptiongroup - jedi >=0.16 - - matplotlib-inline * + - matplotlib-inline - pexpect >4.3 - - pickleshare * - - prompt_toolkit >=3.0.30,<3.1.0,!=3.0.37 + - pickleshare + - prompt-toolkit >=3.0.41,<3.1.0 - pygments >=2.4.0 - - python >=3.9 - - stack_data * - - traitlets >=5 - - typing_extensions * - arch: x86_64 - platform: osx + - python >=3.10 + - stack_data + - traitlets >=5.13.0 + - typing_extensions >=4.6 license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/ipython - size: 591141 - timestamp: 1698846944668 + size: 600094 + timestamp: 1727944801855 - kind: conda name: ipython - version: 8.17.2 - build: pyh41d4057_0 - subdir: linux-64 + version: 8.28.0 + build: pyh7428d3b_0 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.17.2-pyh41d4057_0.conda - sha256: 31322d58f412787f5beeb01db4d16f10f8ae4e0cc2ec99fafef1e690374fe298 - md5: f39d0b60e268fe547f1367edbab457d4 + url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.28.0-pyh7428d3b_0.conda + sha256: 8d2480d5593854e6bd994329a0b1819d39b35c5ee9e85043737df962f236a948 + md5: 4df2592ebe3672f282a02c557db209ee depends: - - __linux * - - decorator * - - exceptiongroup * - - jedi >=0.16 - - matplotlib-inline * - - pexpect >4.3 - - pickleshare * - - prompt_toolkit >=3.0.30,<3.1.0,!=3.0.37 - - pygments >=2.4.0 - - python >=3.9 - - stack_data * - - traitlets >=5 - - typing_extensions * - arch: x86_64 - platform: linux - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/ipython - size: 589731 - timestamp: 1698846745397 -- kind: conda - name: ipython - version: 8.17.2 - build: pyh5737063_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.17.2-pyh5737063_0.conda - sha256: e9da075dab85ad01df4355e264220e156273f719a62f6fad588a686616e86a9c - md5: f303446f1ce22bd9173650d3e722e87b - depends: - - __win * - - colorama * - - decorator * - - exceptiongroup * + - __win + - colorama + - decorator + - exceptiongroup - jedi >=0.16 - - matplotlib-inline * - - pickleshare * - - prompt_toolkit >=3.0.30,<3.1.0,!=3.0.37 + - matplotlib-inline + - pickleshare + - prompt-toolkit >=3.0.41,<3.1.0 - pygments >=2.4.0 - - python >=3.9 - - stack_data * - - traitlets >=5 - - typing_extensions * - arch: x86_64 - platform: win + - python >=3.10 + - stack_data + - traitlets >=5.13.0 + - typing_extensions >=4.6 license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/ipython - size: 592050 - timestamp: 1698847371880 + size: 599622 + timestamp: 1727945272442 - kind: conda name: ipywidgets version: 8.1.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.0-pyhd8ed1ab_0.conda sha256: 71f920b0b89eb177511ff2d8bd9904c9c6c96d731f90ec97168cc28bc86ed623 @@ -5568,19 +4992,15 @@ packages: - python >=3.7 - traitlets >=4.3.1 - widgetsnbextension >=4.0.7,<4.1.0 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/ipywidgets size: 113313 timestamp: 1690877217459 - kind: conda name: isoduration version: 20.11.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2 sha256: 7bb5c4d994361022f47a807b5e7d101b3dce16f7dd8a0af6ffad9f479d346493 @@ -5588,37 +5008,15 @@ packages: depends: - arrow >=0.15.0 - python >=3.7 - arch: x86_64 - platform: win license: MIT license_family: MIT size: 17189 timestamp: 1638811664194 -- kind: conda - name: jedi - version: 0.19.0 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.0-pyhd8ed1ab_0.conda - sha256: d2d9e885cbc1efa63107b616588c61000063d4c223c0585962485bd016e77ce8 - md5: 1cd7f70057cdffc10977b613fb75425d - depends: - - parso >=0.8.0,<0.9.0 - - python >=3.6 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - purls: - - pkg:pypi/jedi - size: 844518 - timestamp: 1690897091100 - kind: conda name: jedi version: 0.19.1 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda sha256: 362f0936ef37dfd1eaa860190e42a6ebf8faa094eaa3be6aa4d9ace95f40047a @@ -5626,35 +5024,26 @@ packages: depends: - parso >=0.8.3,<0.9.0 - python >=3.6 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/jedi size: 841312 timestamp: 1696326218364 - kind: conda name: jinja2 - version: 3.1.2 - build: pyhd8ed1ab_1 - build_number: 1 - subdir: win-64 + version: 3.1.4 + build: pyhd8ed1ab_0 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2 - sha256: b045faba7130ab263db6a8fdc96b1a3de5fcf85c4a607c5f11a49e76851500b5 - md5: c8490ed5c70966d232fdd389d0dbed37 + url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + sha256: 27380d870d42d00350d2d52598cddaf02f9505fb24be09488da0c9b8d1428f2d + md5: 7b86ecb7d3557821c649b3c31e3eb9f2 depends: - markupsafe >=2.0 - python >=3.7 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/jinja2 - size: 101443 - timestamp: 1654302514195 + size: 111565 + timestamp: 1715127275924 - kind: conda name: jpeg version: 9e @@ -5666,48 +5055,24 @@ packages: md5: ef1cce2ab799e0c2f32c3344125ff218 constrains: - libjpeg-turbo <0.0.0a - arch: aarch64 - platform: osx license: IJG size: 218587 timestamp: 1676177519876 - kind: conda name: json5 - version: 0.9.14 + version: 0.9.25 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.14-pyhd8ed1ab_0.conda - sha256: 41514104208c092959bef0713cbd795e72c535f2f939b7903d8c97809f2adaa7 - md5: dac1dabba2b5a9d1aee175c5fcc7b436 + url: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.25-pyhd8ed1ab_0.conda + sha256: 0c75e428970e8bb72ba1dd3a6dc32b8d68f6534b4fe16b38e53364963fdc8e38 + md5: 5d8c241a9261e720a34a07a3e1ac4109 depends: - python >=3.7,<4.0 - arch: x86_64 - platform: win license: Apache-2.0 license_family: APACHE - purls: - - pkg:pypi/json5 - size: 25003 - timestamp: 1688248468479 -- kind: conda - name: jsonpointer - version: '2.0' - build: py_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jsonpointer-2.0-py_0.tar.bz2 - sha256: da279af2285d8f575a7f5652e83bf7f36155c4c63154e385a9d171efcc607bc1 - md5: 07d85c22a3beb102a48cd123df84c2a6 - depends: - - python * - arch: aarch64 - platform: osx - license: BSD 3-Clause - license_family: BSD - purls: - - pkg:pypi/jsonpointer - size: 8737 + size: 27995 + timestamp: 1712986338874 - kind: conda name: jsonpointer version: 3.0.0 @@ -5740,6 +5105,23 @@ packages: license_family: BSD size: 40682 timestamp: 1725303369662 +- kind: conda + name: jsonpointer + version: 3.0.0 + build: py310hbe9552e_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/jsonpointer-3.0.0-py310hbe9552e_1.conda + sha256: 1c370862b867e7f3d26ea5eaaa56e60a298281b2722343870309a3c6efee83e0 + md5: 5fbabed21a92bb57aaf0701d3bb3a701 + depends: + - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython + - python_abi 3.10.* *_cp310 + license: BSD-3-Clause + license_family: BSD + size: 16203 + timestamp: 1725303244939 - kind: conda name: jsonpointer version: 3.0.0 @@ -5758,194 +5140,102 @@ packages: timestamp: 1725302992487 - kind: conda name: jsonschema - version: 4.19.0 - build: pyhd8ed1ab_1 - build_number: 1 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.19.0-pyhd8ed1ab_1.conda - sha256: 4c1f9ffa8056fc96d292d119746d5d87e2d0308cd19b063943efbde05e0accdf - md5: d442886dffcee45604595fea2ad3a181 - depends: - - jsonschema-specifications >=2023.3.6 - - importlib_resources >=1.4.0 - - pkgutil-resolve-name >=1.3.10 - - python >=3.8 - - attrs >=22.2.0 - - referencing >=0.28.4 - - rpds-py >=0.7.1 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - size: 71242 - timestamp: 1691761522529 -- kind: conda - name: jsonschema - version: 4.19.2 + version: 4.23.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.19.2-pyhd8ed1ab_0.conda - sha256: 07e5d395d83c4b12a7abe3989fb42abdcd3b1c51cd27549e5eab390bb8c7bf0f - md5: 24d41c2f9cc199d0a180ecf7ef54739c + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda + sha256: 7d0c4c0346b26be9f220682b7c5c0d84606d48c6dbc36fc238e4452dda733aff + md5: da304c192ad59975202859b367d0f6a2 depends: - attrs >=22.2.0 - importlib_resources >=1.4.0 - - jsonschema-specifications >=2023.3.6 + - jsonschema-specifications >=2023.03.6 - pkgutil-resolve-name >=1.3.10 - python >=3.8 - referencing >=0.28.4 - rpds-py >=0.7.1 - arch: x86_64 - platform: win license: MIT license_family: MIT - size: 71509 - timestamp: 1698678642652 + size: 74323 + timestamp: 1720529611305 - kind: conda name: jsonschema-specifications - version: 2023.7.1 + version: 2024.10.1 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda - sha256: 7b0061e106674f27cc718f79a095e90a5667a3635ec6626dd23b3be0fd2bfbdc - md5: 7c27ea1bdbe520bb830dcadd59f55cbf + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_0.conda + sha256: 82f8bed0f21dc0b3aff40dd4e39d77e85b93b0417bc5659b001e0109341b8b98 + md5: 720745920222587ef942acfbc578b584 depends: - - importlib_resources >=1.4.0 - python >=3.8 - - referencing >=0.25.0 - arch: x86_64 - platform: win - license: MIT - license_family: MIT - purls: - - pkg:pypi/jsonschema-specifications - size: 15296 - timestamp: 1689701341221 -- kind: conda - name: jsonschema-with-format-nongpl - version: 4.19.0 - build: pyhd8ed1ab_1 - build_number: 1 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.0-pyhd8ed1ab_1.conda - sha256: fae13283e5c4b1e639b76348e3d9441bde21685c8a8c89f6d3f364e524ed5029 - md5: d273b30bcf4db0ef6b1195b3b61b3d68 - depends: - - rfc3986-validator >0.1.0 - - python * - - fqdn * - - rfc3339-validator * - - isoduration * - - jsonschema >=4.19.0,<4.19.1.0a0 - - uri-template * - - webcolors >=1.11 - - idna * - - jsonpointer >1.13 - arch: aarch64 - platform: osx + - referencing >=0.31.0 license: MIT license_family: MIT - size: 7325 - timestamp: 1691761541918 + size: 16165 + timestamp: 1728418976382 - kind: conda name: jsonschema-with-format-nongpl - version: 4.19.2 - build: pyhd8ed1ab_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.19.2-pyhd8ed1ab_0.conda - sha256: b06681b4499635f0ed901f4879122bfd3ff6ef28de1797367769a4ba6b990b0d - md5: c447b7c28ad6bb3306f0015f1195c721 + version: 4.23.0 + build: hd8ed1ab_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_0.conda + sha256: 007a0a506a0d1805b099629cb0ee743ad0afe7d9749e57339f32c168119e0139 + md5: 16b37612b3a2fd77f409329e213b530c depends: - - fqdn * - - idna * - - isoduration * + - fqdn + - idna + - isoduration - jsonpointer >1.13 - - jsonschema >=4.19.2,<4.19.3.0a0 - - python * - - rfc3339-validator * + - jsonschema >=4.23.0,<4.23.1.0a0 + - rfc3339-validator - rfc3986-validator >0.1.0 - - uri-template * - - webcolors >=1.11 - arch: x86_64 - platform: win + - uri-template + - webcolors >=24.6.0 license: MIT license_family: MIT - size: 7389 - timestamp: 1698678669876 + size: 7143 + timestamp: 1720529619500 - kind: conda name: jupyter-lsp - version: 2.2.0 + version: 2.2.5 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.0-pyhd8ed1ab_0.conda - sha256: 16fc7b40024adece716ba7227e5c123a2deccc13f946a10d9a3270493908d11c - md5: 38589f4104d11f2a59ff01a9f4e3bfb3 + url: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_0.conda + sha256: 2151c2c63e0442a4c69ee0ad8a634195eedab10b7b74c0ec8266471842239a93 + md5: 885867f6adab3d7ecdf8ab6ca0785f51 depends: - importlib-metadata >=4.8.3 - jupyter_server >=1.1.2 - python >=3.8 - arch: x86_64 - platform: win - license: BSD-3-Clause - license_family: BSD - size: 52525 - timestamp: 1685453825227 -- kind: conda - name: jupyter_client - version: 8.3.0 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.3.0-pyhd8ed1ab_0.conda - sha256: 7dc74a032daefbdcf4d6d661616dfdc8649e5cf9db58258afe91cc09ea0cf402 - md5: 1d018ee4ab13217e2544f795eb0a6798 - depends: - - pyzmq >=23.0 - - python >=3.8 - - importlib_metadata >=4.8.3 - - jupyter_core >=4.12,!=5.0.* - - python-dateutil >=2.8.2 - - tornado >=6.2 - - traitlets >=5.3 - arch: aarch64 - platform: osx license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/jupyter-client - size: 104407 - timestamp: 1687701169103 + size: 55539 + timestamp: 1712707521811 - kind: conda name: jupyter_client - version: 8.5.0 + version: 8.6.3 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.5.0-pyhd8ed1ab_0.conda - sha256: e4478e137e0975ce94ef4ee6e4a6736afaf4a00e99bc8007a275bcb39fe728d9 - md5: 77e442cb7c382d01c916f91a8652811a + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_0.conda + sha256: 4419c85e209a715f551a5c9bead746f29ee9d0fc41e772a76db3868622795671 + md5: a14218cfb29662b4a19ceb04e93e298e depends: - - importlib_metadata >=4.8.3 + - importlib-metadata >=4.8.3 - jupyter_core >=4.12,!=5.0.* - python >=3.8 - python-dateutil >=2.8.2 - pyzmq >=23.0 - tornado >=6.2 - traitlets >=5.3 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/jupyter-client - size: 105606 - timestamp: 1698232162661 + size: 106055 + timestamp: 1726610805505 - kind: conda name: jupyter_core version: 5.7.2 @@ -5988,153 +5278,80 @@ packages: timestamp: 1727164026641 - kind: conda name: jupyter_events - version: 0.7.0 - build: pyhd8ed1ab_2 - build_number: 2 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.7.0-pyhd8ed1ab_2.conda - sha256: df230c068714f71c2b00fd3acee7e5c3ae128a5c23279d146827fdba55977823 - md5: 088f0493279a7f7eebd514df47d65851 - depends: - - rfc3986-validator >=0.1.1 - - python >=3.8 - - rfc3339-validator * - - traitlets >=5.3 - - referencing * - - pyyaml >=5.3 - - jsonschema-with-format-nongpl >=4.18.0 - - python-json-logger >=2.0.4 - arch: aarch64 - platform: osx - license: BSD-3-Clause - license_family: BSD - size: 21381 - timestamp: 1691506087003 -- kind: conda - name: jupyter_events - version: 0.8.0 + version: 0.10.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.8.0-pyhd8ed1ab_0.conda - sha256: 44742f7b6453774fbbdf7cec20282f88c7362707990790116fec23270b81b447 - md5: 04272d87d3e06c2e26af5e2d4b0e0ad8 + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.10.0-pyhd8ed1ab_0.conda + sha256: cd3f41dc093162a41d4bae171e40a1b9b115c4d488e9bb837a8fa9d084931fb9 + md5: ed45423c41b3da15ea1df39b1f80c2ca depends: - jsonschema-with-format-nongpl >=4.18.0 - python >=3.8 - python-json-logger >=2.0.4 - pyyaml >=5.3 - - referencing * - - rfc3339-validator * + - referencing + - rfc3339-validator - rfc3986-validator >=0.1.1 - traitlets >=5.3 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - size: 21359 - timestamp: 1697461797603 + size: 21475 + timestamp: 1710805759187 - kind: conda name: jupyter_server - version: 2.7.1 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.7.1-pyhd8ed1ab_0.conda - sha256: 977d17aceb65c81d3ae47ebdd55c5da47505b3247cc9eb4675232d0bb3574102 - md5: 15b1fb7550cc44c8d487bc74d378ccf2 - depends: - - jupyter_server_terminals * - - jupyter_events >=0.6.0 - - python >=3.8 - - websocket-client * - - traitlets >=5.6.0 - - argon2-cffi * - - pyzmq >=24 - - nbformat >=5.3.0 - - jupyter_core >=4.12,!=5.0.* - - prometheus_client * - - anyio >=3.1.0 - - overrides * - - terminado >=0.8.3 - - jinja2 * - - send2trash >=1.8.2 - - nbconvert-core >=6.4.4 - - tornado >=6.2.0 - - jupyter_client >=7.4.4 - - packaging * - arch: aarch64 - platform: osx - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jupyter-server - size: 315250 - timestamp: 1692109035373 -- kind: conda - name: jupyter_server - version: 2.9.1 + version: 2.14.2 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.9.1-pyhd8ed1ab_0.conda - sha256: bb9a60ff41085031a28204add4e6120990437cfad341db297519f0a0f0df8e18 - md5: 8e0cfa69e5b0062b829a9dbb14645def + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.14.2-pyhd8ed1ab_0.conda + sha256: edab71a05feceac54bdb90e755a257545af7832b9911607c1a70f09be44ba985 + md5: ca23c71f70a7c7935b3d03f0f1a5801d depends: - anyio >=3.1.0 - - argon2-cffi * - - jinja2 * + - argon2-cffi >=21.1 + - jinja2 >=3.0.3 - jupyter_client >=7.4.4 - jupyter_core >=4.12,!=5.0.* - - jupyter_events >=0.6.0 - - jupyter_server_terminals * + - jupyter_events >=0.9.0 + - jupyter_server_terminals >=0.4.4 - nbconvert-core >=6.4.4 - nbformat >=5.3.0 - - overrides * - - packaging * - - prometheus_client * + - overrides >=5.0 + - packaging >=22.0 + - prometheus_client >=0.9 - python >=3.8 - pyzmq >=24 - send2trash >=1.8.2 - terminado >=0.8.3 - tornado >=6.2.0 - traitlets >=5.6.0 - - websocket-client * - arch: x86_64 - platform: win + - websocket-client >=1.7 license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/jupyter-server - size: 317157 - timestamp: 1698244231289 + size: 323978 + timestamp: 1720816754998 - kind: conda name: jupyter_server_terminals - version: 0.4.4 - build: pyhd8ed1ab_1 - build_number: 1 - subdir: win-64 + version: 0.5.3 + build: pyhd8ed1ab_0 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.4.4-pyhd8ed1ab_1.conda - sha256: 9f4c5fef9beef9fceed628db7a10b888f3308b37ae257ad3d50046088317ebf1 - md5: 7c0965e1d4a0ee1529e8eaa03a78a5b3 + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.3-pyhd8ed1ab_0.conda + sha256: 038efbc7e4b2e72d49ed193cfb2bbbe9fbab2459786ce9350301f466a32567db + md5: 219b3833aa8ed91d47d1be6ca03f30be depends: - python >=3.8 - terminado >=0.8.3 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/jupyter-server-terminals - size: 18974 - timestamp: 1673491600853 + size: 19818 + timestamp: 1710262791393 - kind: conda name: jupyterlab version: 4.0.5 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.0.5-pyhd8ed1ab_0.conda sha256: fc4409ff093eedb602231d2d7848e20d0f7dab1b01a05a42c06de44ba4f0c62d @@ -6143,80 +5360,47 @@ packages: - async-lru >=1.0.0 - importlib_metadata >=4.8.3 - importlib_resources >=1.4 - - ipykernel * + - ipykernel - jinja2 >=3.0.3 - jupyter-lsp >=2.0.0 - - jupyter_core * + - jupyter_core - jupyter_server >=2.4.0,<3 - jupyterlab_server >=2.19.0,<3 - notebook-shim >=0.2 - - packaging * + - packaging - python >=3.8 - - tomli * + - tomli - tornado >=6.2.0 - - traitlets * - arch: x86_64 - platform: win + - traitlets license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/jupyterlab size: 6000195 timestamp: 1692016028799 - kind: conda name: jupyterlab_pygments - version: 0.2.2 + version: 0.3.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2 - sha256: 08453e09d5a6bbaeeca839553a5dfd7a377a97550efab96019c334a8042f54f5 - md5: 243f63592c8e449f40cd42eb5cf32f40 + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_0.conda + sha256: 6ee596138a778a841261476408435da78e3000661f3ee025fb6c3ed17d28c8b3 + md5: 3f0915b1fb2252ab73686a533c5f9d3f depends: - pygments >=2.4.1,<3 - python >=3.7 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/jupyterlab-pygments - size: 17410 - timestamp: 1649936689608 + size: 18651 + timestamp: 1700744201155 - kind: conda name: jupyterlab_server - version: 2.24.0 + version: 2.27.3 build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.24.0-pyhd8ed1ab_0.conda - sha256: 7084223bb168268ba93334fc27410885bdc6e537020d6a91ab0f46f37a3f3ded - md5: 327bfe1c99154f02259d29810bd70afc - depends: - - importlib-metadata >=4.8.3 - - python >=3.7 - - requests >=2.28 - - babel >=2.10 - - jinja2 >=3.0.3 - - jsonschema >=4.17.3 - - jupyter_server >=1.21,<3 - - packaging >=21.3 - - json5 >=0.9.0 - arch: aarch64 - platform: osx - license: BSD-3-Clause - license_family: BSD - size: 60108 - timestamp: 1690206297277 -- kind: conda - name: jupyterlab_server - version: 2.25.0 - build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.25.0-pyhd8ed1ab_0.conda - sha256: 608a878d08e0f4f51dd9a61eaead7c0e22d07f48aad06e3e2f6d6f1d0a929746 - md5: a52834fa7e3d12abc5efdf06b2097a05 + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda + sha256: a23b26d1a35bccdb91b9232119e5f402624e1e1a252b0e64cc20c6eb5b87cefb + md5: af8239bf1ba7e8c69b689f780f653488 depends: - babel >=2.10 - importlib-metadata >=4.8.3 @@ -6229,161 +5413,121 @@ packages: - requests >=2.31 constrains: - openapi-core >=0.18.0,<0.19.0 - arch: x86_64 - platform: win - license: BSD-3-Clause - license_family: BSD - size: 48289 - timestamp: 1694532412609 -- kind: conda - name: jupyterlab_widgets - version: 3.0.8 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.8-pyhd8ed1ab_0.conda - sha256: 0781ed7a4f35ff1309e95381c40c8d8f96263ca4260a72baaafda87c975a972a - md5: 2bc3ca2f7387af385dd06706b4fb2d35 - depends: - - python >=3.7 - constrains: - - jupyterlab >=3,<5 - arch: aarch64 - platform: osx license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/jupyterlab-widgets - size: 186893 - timestamp: 1688489587808 + size: 49355 + timestamp: 1721163412436 - kind: conda name: jupyterlab_widgets - version: 3.0.9 + version: 3.0.13 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.9-pyhd8ed1ab_0.conda - sha256: ec66991d2175f7b1f35973d6c4f56ad9a49666f77acf1037d72f3bc6e37224f3 - md5: 8370e0a9dc443f9b45a23fd30e7a6b3b + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_0.conda + sha256: 0e7ec7936d766f39d5a0a8eafc63f5543f488883ad3645246bc22db6d632566e + md5: ccea946e6dce9f330fbf7fca97fe8de7 depends: - python >=3.7 constrains: - jupyterlab >=3,<5 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/jupyterlab-widgets - size: 186821 - timestamp: 1694598854365 + size: 186024 + timestamp: 1724331451102 - kind: conda name: jupytext version: 1.15.0 build: pyhcff175f_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/jupytext-1.15.0-pyhcff175f_0.conda sha256: 382ab8f41b2133413cf767c5c92a2bb0d8686d262f94356e998f6fb46af52da4 md5: 7c2a5631a5c96e6160f675cf61b1b541 depends: - markdown-it-py >=1.0 - - mdit-py-plugins * - - nbformat * + - mdit-py-plugins + - nbformat - python >=3.6 - - pyyaml * - - toml * - arch: x86_64 - platform: win + - pyyaml + - toml license: MIT license_family: MIT - purls: - - pkg:pypi/jupytext size: 179371 timestamp: 1690758199047 - kind: conda name: jxrlib version: '1.1' - build: h27ca646_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h27ca646_2.tar.bz2 - sha256: 448795a54fe49a15cdef110b2d094799d933f36c2d8f5bc1e1c192b3617efe5f - md5: 71447f8ae7d2a2fd0f16424983cf31e6 - arch: aarch64 - platform: osx + build: h10d778d_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/jxrlib-1.1-h10d778d_3.conda + sha256: a548a4be14a4c76d6d992a5c1feffcbb08062f5c57abc6e4278d40c2c9a7185b + md5: cfaf81d843a80812fe16a68bdae60562 license: BSD-2-Clause license_family: BSD - size: 219467 - timestamp: 1607309174654 + size: 220376 + timestamp: 1703334073774 - kind: conda name: jxrlib version: '1.1' - build: h35c211d_2 - build_number: 2 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/jxrlib-1.1-h35c211d_2.tar.bz2 - sha256: daeb6fe1e06549117a549bd94f4fb1ac575f80c67891171307057cb83a1d74fb - md5: 1c2379fd9d5d4ecb151231f6282e699d - arch: x86_64 - platform: osx + build: h93a5062_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/jxrlib-1.1-h93a5062_3.conda + sha256: c9e0d3cf9255d4585fa9b3d07ace3bd934fdc6a67ef4532e5507282eff2364ab + md5: 879997fd868f8e9e4c2a12aec8583799 license: BSD-2-Clause license_family: BSD - size: 231009 - timestamp: 1607309184331 + size: 197843 + timestamp: 1703334079437 - kind: conda name: jxrlib version: '1.1' - build: h7f98852_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-h7f98852_2.tar.bz2 - sha256: 3ffc19c2ca272e6d5b8edc7cfc5bb71763dfdfa1810dd4b8820cc6b212ecbd95 - md5: 8e787b08fe19986d99d034b839df2961 + build: hcfcfb64_3 + build_number: 3 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/jxrlib-1.1-hcfcfb64_3.conda + sha256: a9ac265bcf65fce57cfb6512a1b072d5489445d14aa1b60c9bdf73370cf261b2 + md5: a9dff8432c11dfa980346e934c29ca3f depends: - - libgcc-ng >=9.3.0 - arch: x86_64 - platform: linux + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: BSD-2-Clause license_family: BSD - size: 240904 - timestamp: 1607309174409 + size: 355340 + timestamp: 1703334132631 - kind: conda name: jxrlib version: '1.1' - build: h8ffe710_2 - build_number: 2 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/jxrlib-1.1-h8ffe710_2.tar.bz2 - sha256: af50c7f499a6ecb0812e7a9fb63cc2a8264a721ea28b653f811a1cc174248b60 - md5: 69f82948e102dc14928619140c29468d + build: hd590300_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda + sha256: 2057ca87b313bde5b74b93b0e696f8faab69acd4cb0edebb78469f3f388040c0 + md5: 5aeabe88534ea4169d4c49998f293d6c depends: - - vc >=14.1,<15.0a0 - - vs2015_runtime >=14.16.27012 - arch: x86_64 - platform: win + - libgcc-ng >=12 license: BSD-2-Clause license_family: BSD - size: 635245 - timestamp: 1607309452074 + size: 239104 + timestamp: 1703333860145 - kind: conda name: kernel-headers_linux-64 version: 3.10.0 - build: h4a8ded7_16 - build_number: 16 + build: he073ed8_17 + build_number: 17 subdir: noarch noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-h4a8ded7_16.conda - sha256: a55044e0f61058a5f6bab5e1dd7f15a1fa7a08ec41501dbfca5ab0fc50b9c0c1 - md5: ff7f38675b226cfb855aebfc32a13e31 - depends: - - _sysroot_linux-64_curr_repodata_hack 3.* + url: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-3.10.0-he073ed8_17.conda + sha256: c28d69ca84533f0e2093f17ae6d3e19ee3661dd397618630830b1b9afc3bfb4d + md5: 285931bd28b3b8f176d46dd9fd627a09 constrains: - sysroot_linux-64 ==2.17 license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later AND MPL-2.0 license_family: GPL - size: 944344 - timestamp: 1720621422017 + size: 945088 + timestamp: 1727437651716 - kind: conda name: keyutils version: 1.6.1 @@ -6394,49 +5538,27 @@ packages: md5: 30186d27e2c9fa62b45fb1476b7200e3 depends: - libgcc-ng >=10.3.0 - arch: x86_64 - platform: linux license: LGPL-2.1-or-later size: 117831 timestamp: 1646151697040 - kind: conda name: krb5 - version: 1.21.2 - build: h659d440_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda - sha256: 259bfaae731989b252b7d2228c1330ef91b641c9d68ff87dae02cbae682cb3e4 - md5: cd95826dbd331ed1be26bdf401432844 - depends: - - keyutils >=1.6.1,<2.0a0 - - libedit >=3.1.20191231,<4.0a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - openssl >=3.1.2,<4.0a0 - arch: x86_64 - platform: linux - license: MIT - license_family: MIT - size: 1371181 - timestamp: 1692097755782 -- kind: conda - name: krb5 - version: 1.21.2 - build: h92f50d5_0 + version: 1.21.3 + build: h237132a_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.2-h92f50d5_0.conda - sha256: 70bdb9b4589ec7c7d440e485ae22b5a352335ffeb91a771d4c162996c3070875 - md5: 92f1cff174a538e0722bf2efb16fc0b2 + url: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + sha256: 4442f957c3c77d69d9da3521268cad5d54c9033f1a73f99cde0a3658937b159b + md5: c6dc8a0fdec13a0565936655c33069a1 depends: + - __osx >=11.0 + - libcxx >=16 + - libedit >=3.1.20191231,<3.2.0a0 - libedit >=3.1.20191231,<4.0a0 - - libcxx >=15.0.7 - - openssl >=3.1.2,<4.0a0 - arch: aarch64 - platform: osx + - openssl >=3.3.1,<4.0a0 license: MIT license_family: MIT - size: 1195575 - timestamp: 1692098070699 + size: 1155530 + timestamp: 1719463474401 - kind: conda name: krb5 version: 1.21.3 @@ -6455,6 +5577,25 @@ packages: license_family: MIT size: 1185323 timestamp: 1719463492984 +- kind: conda + name: krb5 + version: 1.21.3 + build: h659f571_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 + md5: 3f43953b7d3fb3aaa1d0d0723d91e368 + depends: + - keyutils >=1.6.1,<2.0a0 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + size: 1370023 + timestamp: 1719463201255 - kind: conda name: krb5 version: 1.21.3 @@ -6472,25 +5613,41 @@ packages: license_family: MIT size: 712034 timestamp: 1719463874284 +- kind: conda + name: lazy-loader + version: '0.4' + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/lazy-loader-0.4-pyhd8ed1ab_1.conda + sha256: c1ca8dc910d7c32d431d8ef4acdea8da2e876c62f096b99591f712fd62cf7269 + md5: 4809b9f4c6ce106d443c3f90b8e10db2 + depends: + - importlib-metadata + - packaging + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + size: 16193 + timestamp: 1723774444381 - kind: conda name: lazy_loader - version: '0.3' - build: pyhd8ed1ab_0 - subdir: win-64 + version: '0.4' + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.3-pyhd8ed1ab_0.conda - sha256: fa32bafbf7f9238a9cb8f0aa1fb17d2fdcefa607c217b86c38c3b670c58d1ac6 - md5: 69ea1d0fa7ab33b48c88394ad1dead65 + url: https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.4-pyhd8ed1ab_1.conda + sha256: bf5a563f4e7d2bd5d3ec0644c0cb452b1e9e4ee68a221f6c9718872a22d4fa7a + md5: ec6f70b8a5242936567d4f886726a372 depends: + - lazy-loader 0.4 pyhd8ed1ab_1 - python >=3.7 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/lazy-loader - size: 14298 - timestamp: 1692295540050 + size: 6513 + timestamp: 1723774453792 - kind: conda name: lcms2 version: '2.15' @@ -6502,8 +5659,6 @@ packages: depends: - jpeg >=9e,<10a - libtiff >=4.5.0,<4.6.0a0 - arch: aarch64 - platform: osx license: MIT license_family: MIT size: 205835 @@ -6520,9 +5675,7 @@ packages: depends: - libgcc-ng >=12 - libjpeg-turbo >=2.1.5.1,<3.0a0 - - libtiff >=4.6.0,<4.7.0a0 - arch: x86_64 - platform: linux + - libtiff >=4.6.0,<4.8.0a0 license: MIT license_family: MIT size: 240620 @@ -6562,20 +5715,21 @@ packages: timestamp: 1701648089496 - kind: conda name: ld_impl_linux-64 - version: '2.40' - build: h41732ed_0 + version: '2.43' + build: h712a8e2_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda - sha256: f6cc89d887555912d6c61b295d398cff9ec982a3417d38025c45d5dd9b9e79cd - md5: 7aca3059a1729aa76c597603f10b0dd3 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda + sha256: 0c21387f9a411e3d1f7f2969026bacfece133c8f1e72faea9cde29c0c19e1f3a + md5: 83e1364586ceb8d0739fbc85b5c95837 + depends: + - __glibc >=2.17,<3.0.a0 constrains: - - binutils_impl_linux-64 2.40 - arch: x86_64 - platform: linux + - binutils_impl_linux-64 2.43 license: GPL-3.0-only license_family: GPL - size: 704696 - timestamp: 1674833944779 + size: 669616 + timestamp: 1727304687962 - kind: conda name: lerc version: 4.0.0 @@ -6587,8 +5741,6 @@ packages: depends: - libgcc-ng >=12 - libstdcxx-ng >=12 - arch: x86_64 - platform: linux license: Apache-2.0 license_family: Apache size: 281798 @@ -6604,8 +5756,6 @@ packages: depends: - vc >=14.2,<15 - vs2015_runtime >=14.29.30037 - arch: x86_64 - platform: win license: Apache-2.0 license_family: Apache size: 194365 @@ -6620,8 +5770,6 @@ packages: md5: de462d5aacda3b30721b512c5da4e742 depends: - libcxx >=13.0.1 - arch: aarch64 - platform: osx license: Apache-2.0 license_family: Apache size: 215721 @@ -6636,8 +5784,6 @@ packages: md5: f9d6a4c82889d5ecedec1d90eb673c55 depends: - libcxx >=13.0.1 - arch: x86_64 - platform: osx license: Apache-2.0 license_family: Apache size: 290319 @@ -6655,8 +5801,6 @@ packages: constrains: - libabseil-static =20230125.3=cxx17* - abseil-cpp =20230125.3 - arch: x86_64 - platform: osx license: Apache-2.0 license_family: Apache size: 1128875 @@ -6674,8 +5818,6 @@ packages: constrains: - libabseil-static =20230125.3=cxx17* - abseil-cpp =20230125.3 - arch: aarch64 - platform: osx license: Apache-2.0 license_family: Apache size: 1160586 @@ -6694,8 +5836,6 @@ packages: constrains: - abseil-cpp =20230125.3 - libabseil-static =20230125.3=cxx17* - arch: x86_64 - platform: linux license: Apache-2.0 license_family: Apache size: 1240376 @@ -6715,64 +5855,25 @@ packages: constrains: - abseil-cpp =20230125.3 - libabseil-static =20230125.3=cxx17* - arch: x86_64 - platform: win license: Apache-2.0 license_family: Apache size: 1504536 timestamp: 1688113294765 - kind: conda name: libaec - version: 1.0.6 - build: hb7217d7_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.0.6-hb7217d7_1.conda - sha256: 9a2209a30923728fd9c430695a2fea9274ac6d357e6bdfa4c7b5aa52122d9e2c - md5: 4f04770bf6f12d22fb6c1d91a04e0c8c - depends: - - libcxx >=14.0.6 - arch: aarch64 - platform: osx - license: BSD-2-Clause - license_family: BSD - size: 28016 - timestamp: 1673801257939 -- kind: conda - name: libaec - version: 1.1.2 - build: h59595ed_1 - build_number: 1 + version: 1.1.3 + build: h59595ed_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.2-h59595ed_1.conda - sha256: fdde15e74dc099ab1083823ec0f615958e53d9a8fae10405af977de251668bea - md5: 127b0be54c1c90760d7fe02ea7a56426 + url: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda + sha256: 2ef420a655528bca9d269086cf33b7e90d2f54ad941b437fb1ed5eca87cee017 + md5: 5e97e271911b8b2001a8b71860c32faa depends: - libgcc-ng >=12 - libstdcxx-ng >=12 - arch: x86_64 - platform: linux - license: BSD-2-Clause - license_family: BSD - size: 35228 - timestamp: 1696474021700 -- kind: conda - name: libaec - version: 1.1.2 - build: he965462_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libaec-1.1.2-he965462_1.conda - sha256: 1b0a0b9b67e8f155ebdc7205a7421c7aff4850a740fc9f88b3fa23282c98ed72 - md5: faa179050abc6af1385e0fe9dd074f91 - depends: - - libcxx >=15.0.7 - arch: x86_64 - platform: osx license: BSD-2-Clause license_family: BSD - size: 29027 - timestamp: 1696474151758 + size: 35446 + timestamp: 1711021212685 - kind: conda name: libaec version: 1.1.3 @@ -6789,6 +5890,34 @@ packages: license_family: BSD size: 32567 timestamp: 1711021603471 +- kind: conda + name: libaec + version: 1.1.3 + build: h73e2aa4_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libaec-1.1.3-h73e2aa4_0.conda + sha256: dae5921339c5d89f4bf58a95fd4e9c76270dbf7f6a94f3c5081b574905fcccf8 + md5: 66d3c1f6dd4636216b4fca7a748d50eb + depends: + - libcxx >=16 + license: BSD-2-Clause + license_family: BSD + size: 28602 + timestamp: 1711021419744 +- kind: conda + name: libaec + version: 1.1.3 + build: hebf3989_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.3-hebf3989_0.conda + sha256: 896189b7b48a194c46a3556ea04943ef81cbe0498521231f8eb25816a68bc8ed + md5: 6f0b8e56d2e7bae12a18fc5b2cd9f310 + depends: + - libcxx >=16 + license: BSD-2-Clause + license_family: BSD + size: 28451 + timestamp: 1711021498493 - kind: conda name: libarrow version: 13.0.0 @@ -6949,6 +6078,36 @@ packages: license_family: APACHE size: 20017156 timestamp: 1694167350734 +- kind: conda + name: libasprintf + version: 0.22.5 + build: h8414b35_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libasprintf-0.22.5-h8414b35_3.conda + sha256: 819bf95543470658f48db53a267a3fabe1616797c4031cf88e63f451c5029e6f + md5: 472b673c083175195965a48f2f4808f8 + depends: + - __osx >=11.0 + - libcxx >=16 + license: LGPL-2.1-or-later + size: 40657 + timestamp: 1723626937704 +- kind: conda + name: libasprintf-devel + version: 0.22.5 + build: h8414b35_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libasprintf-devel-0.22.5-h8414b35_3.conda + sha256: ca7322f7c3f1a68cb36630eaa88a44c774261150d42d70a4be3d77bc9ed28d5d + md5: a03ca97f9fabf5626660697c2e0b8850 + depends: + - __osx >=11.0 + - libasprintf 0.22.5 h8414b35_3 + license: LGPL-2.1-or-later + size: 34648 + timestamp: 1723626983419 - kind: conda name: libavif version: 0.11.1 @@ -6961,8 +6120,6 @@ packages: depends: - aom >=3.5.0,<3.6.0a0 - dav1d >=1.2.1,<1.2.2.0a0 - arch: aarch64 - platform: osx license: BSD-2-Clause license_family: BSD size: 88849 @@ -6990,133 +6147,126 @@ packages: timestamp: 1699878685050 - kind: conda name: libavif16 - version: 1.0.1 - build: h4fa63ff_2 - build_number: 2 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libavif16-1.0.1-h4fa63ff_2.conda - sha256: c4f5475072e6a85dc1e6aebb06b827fddc8fc6d1efb43395e631591015006f27 - md5: 723d30a68c56a461e4e32792e957076a + version: 1.1.1 + build: h104a339_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.1.1-h104a339_1.conda + sha256: 6de4cbccfe7193ee749beadf34a6ab140e2cd361efc4685621c0a785a73d4aca + md5: 9ef052c2eee74c792833ac2e820e481e depends: - - aom >=3.6.1,<3.7.0a0 + - __glibc >=2.17,<3.0.a0 + - aom >=3.9.1,<3.10.0a0 - dav1d >=1.2.1,<1.2.2.0a0 + - libgcc-ng >=13 - rav1e >=0.6.6,<1.0a0 - - svt-av1 >=1.7.0,<1.7.1.0a0 - arch: x86_64 - platform: osx + - svt-av1 >=2.2.1,<2.2.2.0a0 license: BSD-2-Clause license_family: BSD - size: 90385 - timestamp: 1696226305985 + size: 116148 + timestamp: 1724672468333 - kind: conda name: libavif16 - version: 1.0.1 - build: h87da1f6_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.0.1-h87da1f6_2.conda - sha256: 267fa8bc6111598415b1cc35d07fe16a8907a8f3edacd9e1c117b5d73655133a - md5: 0281e5f0887a512d7cc2a843173ca243 + version: 1.1.1 + build: ha49a9e2_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libavif16-1.1.1-ha49a9e2_1.conda + sha256: a98f374a75f516a423dea3e0132875d4f5f64da849d0888c1eeb96ead18c687a + md5: a64379d1e329008a66f5ff88d2618e38 depends: - - aom >=3.6.1,<3.7.0a0 + - __osx >=10.13 + - aom >=3.9.1,<3.10.0a0 - dav1d >=1.2.1,<1.2.2.0a0 - - libgcc-ng >=12 - rav1e >=0.6.6,<1.0a0 - - svt-av1 >=1.7.0,<1.7.1.0a0 - arch: x86_64 - platform: linux + - svt-av1 >=2.2.1,<2.2.2.0a0 license: BSD-2-Clause license_family: BSD - size: 95735 - timestamp: 1696226088455 + size: 108831 + timestamp: 1724672620708 - kind: conda name: libblas version: 3.9.0 - build: 17_osxarm64_openblas - build_number: 17 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-17_osxarm64_openblas.conda - sha256: 76c68d59491b449b7608fb5e4a86f3c292c01cf487ce47288a22fc7001a6b150 - md5: 2597bd39632ec57ef3f5ac14865dca09 + build: 22_osx64_openblas + build_number: 22 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-22_osx64_openblas.conda + sha256: d72060239f904b3a81d2329efcf84dc62c2dfd66dbc4efc8dcae1afdf8f02b59 + md5: b80966a8c8dd0b531f8e65f709d732e8 depends: - - libopenblas >=0.3.23,<1.0a0 + - libopenblas >=0.3.27,<0.3.28.0a0 + - libopenblas >=0.3.27,<1.0a0 constrains: - - libcblas 3.9.0 17_osxarm64_openblas - - liblapacke 3.9.0 17_osxarm64_openblas + - liblapacke 3.9.0 22_osx64_openblas - blas * openblas - - liblapack 3.9.0 17_osxarm64_openblas - arch: aarch64 - platform: osx + - libcblas 3.9.0 22_osx64_openblas + - liblapack 3.9.0 22_osx64_openblas license: BSD-3-Clause license_family: BSD - size: 14715 - timestamp: 1685931044178 + size: 14749 + timestamp: 1712542279018 - kind: conda name: libblas version: 3.9.0 - build: 19_linux64_openblas - build_number: 19 + build: 24_linux64_openblas + build_number: 24 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-19_linux64_openblas.conda - sha256: b1311b9414559c5760b08a32e0382ca27fa302c967968aa6f78e042519f728ce - md5: 420f4e9be59d0dc9133a0f43f7bab3f3 + url: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-24_linux64_openblas.conda + sha256: 3097f7913bda527d4fe9f824182b314e130044e582455037fca6f4e97965d83c + md5: 80aea6603a6813b16ec119d00382b772 depends: - - libopenblas >=0.3.24,<1.0a0 + - libopenblas >=0.3.27,<0.3.28.0a0 + - libopenblas >=0.3.27,<1.0a0 constrains: - blas * openblas - - libcblas 3.9.0 19_linux64_openblas - - liblapack 3.9.0 19_linux64_openblas - - liblapacke 3.9.0 19_linux64_openblas - arch: x86_64 - platform: linux + - liblapack 3.9.0 24_linux64_openblas + - libcblas 3.9.0 24_linux64_openblas + - liblapacke 3.9.0 24_linux64_openblas license: BSD-3-Clause license_family: BSD - size: 14566 - timestamp: 1697484219912 + size: 14981 + timestamp: 1726668454790 - kind: conda name: libblas version: 3.9.0 - build: 19_osx64_openblas - build_number: 19 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-19_osx64_openblas.conda - sha256: c2c96103aa23a65f45b76716df49940cb0722258d3e0416f8fa06ade02464b23 - md5: e932b99c38915fa2ee252cdff6ea1f01 + build: 24_osxarm64_openblas + build_number: 24 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-24_osxarm64_openblas.conda + sha256: 4739f7463efb12e6d71536d8b0285a8de5aaadcc442bfedb9d92d1b4cbc47847 + md5: 35cb711e7bc46ee5f3dd67af99ad1986 depends: - - libopenblas >=0.3.24,<1.0a0 + - libopenblas >=0.3.27,<0.3.28.0a0 + - libopenblas >=0.3.27,<1.0a0 constrains: - - liblapacke 3.9.0 19_osx64_openblas - - libcblas 3.9.0 19_osx64_openblas - - liblapack 3.9.0 19_osx64_openblas + - liblapack 3.9.0 24_osxarm64_openblas - blas * openblas - arch: x86_64 - platform: osx + - liblapacke 3.9.0 24_osxarm64_openblas + - libcblas 3.9.0 24_osxarm64_openblas license: BSD-3-Clause license_family: BSD - size: 14812 - timestamp: 1697484725085 + size: 15144 + timestamp: 1726668802976 - kind: conda name: libblas version: 3.9.0 - build: 19_win64_mkl - build_number: 19 + build: 24_win64_mkl + build_number: 24 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-19_win64_mkl.conda - sha256: 915eae5e0dedbf87733a0b8c6f410678c77111a3fb26ca0a272e11ff979e7ef2 - md5: 4f8a1a63cfbf74bc7b2813d9c6c205be + url: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-24_win64_mkl.conda + sha256: 8b4cd602ae089d8c5832054ead452d6a1820c8f9c3b190faf3e867f5939810e2 + md5: ea127210707251a33116b437c22b8dad depends: - - mkl ==2023.2.0 h6a75c08_50496 + - mkl 2024.1.0 h66d3029_694 constrains: - - liblapack 3.9.0 19_win64_mkl - - libcblas 3.9.0 19_win64_mkl - - liblapacke 3.9.0 19_win64_mkl - blas * mkl - arch: x86_64 - platform: win + - liblapack 3.9.0 24_win64_mkl + - libcblas 3.9.0 24_win64_mkl + - liblapacke 3.9.0 24_win64_mkl license: BSD-3-Clause license_family: BSD - size: 4984180 - timestamp: 1697485304263 + size: 5183540 + timestamp: 1726669397923 - kind: conda name: libbrotlicommon version: 1.0.9 @@ -7126,8 +6276,6 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlicommon-1.0.9-h1a8c8d9_9.conda sha256: 53f4a6cc4f5795adf33fda00b86a0e91513c534ae44859754e9c07954d3a7148 md5: 82354022c67480c61419b6e47377af89 - arch: aarch64 - platform: osx license: MIT license_family: MIT size: 70285 @@ -7147,6 +6295,23 @@ packages: license_family: MIT size: 67267 timestamp: 1725267768667 +- kind: conda + name: libbrotlicommon + version: 1.1.0 + build: h2466b09_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_2.conda + sha256: 33e8851c6cc8e2d93059792cd65445bfe6be47e4782f826f01593898ec95764c + md5: f7dc9a8f21d74eab46456df301da2972 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 70526 + timestamp: 1725268159739 - kind: conda name: libbrotlicommon version: 1.1.0 @@ -7163,25 +6328,6 @@ packages: license_family: MIT size: 68851 timestamp: 1725267660471 -- kind: conda - name: libbrotlicommon - version: 1.1.0 - build: hcfcfb64_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.1.0-hcfcfb64_1.conda - sha256: f75fed29b0cc503d1b149a4945eaa32df56e19da5e2933de29e8f03947203709 - md5: f77f319fb82980166569e1280d5b2864 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win - license: MIT - license_family: MIT - size: 70598 - timestamp: 1695990405143 - kind: conda name: libbrotlidec version: 1.0.9 @@ -7192,9 +6338,7 @@ packages: sha256: 2de613dcccbbe40f90a256784ab23f7292aaa0985642ca35496cb9c177d8220b md5: af03c66e8cb688221bdc9e2b0faaa2bf depends: - - libbrotlicommon ==1.0.9 h1a8c8d9_9 - arch: aarch64 - platform: osx + - libbrotlicommon 1.0.9 h1a8c8d9_9 license: MIT license_family: MIT size: 29129 @@ -7215,6 +6359,24 @@ packages: license_family: MIT size: 29872 timestamp: 1725267807289 +- kind: conda + name: libbrotlidec + version: 1.1.0 + build: h2466b09_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_2.conda + sha256: 234fc92f4c4f1cf22f6464b2b15bfc872fa583c74bf3ab9539ff38892c43612f + md5: 9bae75ce723fa34e98e239d21d752a7e + depends: + - libbrotlicommon 1.1.0 h2466b09_2 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 32685 + timestamp: 1725268208844 - kind: conda name: libbrotlidec version: 1.1.0 @@ -7232,26 +6394,6 @@ packages: license_family: MIT size: 32696 timestamp: 1725267669305 -- kind: conda - name: libbrotlidec - version: 1.1.0 - build: hcfcfb64_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.1.0-hcfcfb64_1.conda - sha256: 1b352ee05931ea24c11cd4a994d673890fd1cc690c21e023e736bdaac2632e93 - md5: 19ce3e1dacc7912b3d6ff40690ba9ae0 - depends: - - libbrotlicommon ==1.1.0 hcfcfb64_1 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win - license: MIT - license_family: MIT - size: 32788 - timestamp: 1695990443165 - kind: conda name: libbrotlienc version: 1.0.9 @@ -7262,9 +6404,7 @@ packages: sha256: 37e766c0b87d06637bdfc68e072c227ce2dac82b81d26b5f9ac57fb948e2e2b7 md5: 8231f81e72b1113eb2ed8d2586c82691 depends: - - libbrotlicommon ==1.0.9 h1a8c8d9_9 - arch: aarch64 - platform: osx + - libbrotlicommon 1.0.9 h1a8c8d9_9 license: MIT license_family: MIT size: 263314 @@ -7285,6 +6425,24 @@ packages: license_family: MIT size: 296353 timestamp: 1725267822076 +- kind: conda + name: libbrotlienc + version: 1.1.0 + build: h2466b09_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.1.0-h2466b09_2.conda + sha256: 3d0dd7ef505962f107b7ea8f894e0b3dd01bf46852b362c8a7fc136b039bc9e1 + md5: 85741a24d97954a991e55e34bc55990b + depends: + - libbrotlicommon 1.1.0 h2466b09_2 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 245929 + timestamp: 1725268238259 - kind: conda name: libbrotlienc version: 1.1.0 @@ -7302,110 +6460,82 @@ packages: license_family: MIT size: 281750 timestamp: 1725267679782 -- kind: conda - name: libbrotlienc - version: 1.1.0 - build: hcfcfb64_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.1.0-hcfcfb64_1.conda - sha256: eae6b76154e594c6d211160c6d1aeed848672618152a562e0eabdfa641d34aca - md5: 71e890a0b361fd58743a13f77e1506b7 - depends: - - libbrotlicommon ==1.1.0 hcfcfb64_1 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win - license: MIT - license_family: MIT - size: 246515 - timestamp: 1695990479484 - kind: conda name: libcblas version: 3.9.0 - build: 17_osxarm64_openblas - build_number: 17 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-17_osxarm64_openblas.conda - sha256: d5828db3a507790582815aaf44d54ed6bb07dfce4fd25f92e34b2eb31378a372 - md5: cf6f9ca46e3db6b2437024df14046b48 + build: 22_osx64_openblas + build_number: 22 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-22_osx64_openblas.conda + sha256: 6a2ba9198e2320c3e22fe3d121310cf8a8ac663e94100c5693b34523fcb3cc04 + md5: b9fef82772330f61b2b0201c72d2c29b depends: - - libblas ==3.9.0 17_osxarm64_openblas + - libblas 3.9.0 22_osx64_openblas constrains: - - liblapacke 3.9.0 17_osxarm64_openblas + - liblapacke 3.9.0 22_osx64_openblas - blas * openblas - - liblapack 3.9.0 17_osxarm64_openblas - arch: aarch64 - platform: osx + - liblapack 3.9.0 22_osx64_openblas license: BSD-3-Clause license_family: BSD - size: 14629 - timestamp: 1685931056087 + size: 14636 + timestamp: 1712542311437 - kind: conda name: libcblas version: 3.9.0 - build: 19_linux64_openblas - build_number: 19 + build: 24_linux64_openblas + build_number: 24 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-19_linux64_openblas.conda - sha256: 84fddccaf58f42b07af7fb42512bd617efcb072f17bdef27f4c1884dbd33c86a - md5: d12374af44575413fbbd4a217d46ea33 + url: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-24_linux64_openblas.conda + sha256: 2a52bccc5b03cdf014d856d0b85dbd591faa335ab337d620cd6aded121d7153c + md5: f5b8822297c9c790cec0795ca1fc9be6 depends: - - libblas ==3.9.0 19_linux64_openblas + - libblas 3.9.0 24_linux64_openblas constrains: - blas * openblas - - liblapack 3.9.0 19_linux64_openblas - - liblapacke 3.9.0 19_linux64_openblas - arch: x86_64 - platform: linux + - liblapack 3.9.0 24_linux64_openblas + - liblapacke 3.9.0 24_linux64_openblas license: BSD-3-Clause license_family: BSD - size: 14458 - timestamp: 1697484230827 + size: 14910 + timestamp: 1726668461033 - kind: conda name: libcblas version: 3.9.0 - build: 19_osx64_openblas - build_number: 19 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-19_osx64_openblas.conda - sha256: 70afde49736007bbb804d126a3983ba1fa04383006aae416a2971d538e274427 - md5: 40e412c219ad8cf87ba664466071bcf6 + build: 24_osxarm64_openblas + build_number: 24 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-24_osxarm64_openblas.conda + sha256: 40dc3f7c44af5cd5a2020386cb30f92943a9d8f7f54321b4d6ae32b2e54af9a4 + md5: c8977086a19233153e454bb2b332a920 depends: - - libblas ==3.9.0 19_osx64_openblas + - libblas 3.9.0 24_osxarm64_openblas constrains: - - liblapack 3.9.0 19_osx64_openblas - - liblapacke 3.9.0 19_osx64_openblas + - liblapack 3.9.0 24_osxarm64_openblas - blas * openblas - arch: x86_64 - platform: osx + - liblapacke 3.9.0 24_osxarm64_openblas license: BSD-3-Clause license_family: BSD - size: 14717 - timestamp: 1697484740520 + size: 15062 + timestamp: 1726668809379 - kind: conda name: libcblas version: 3.9.0 - build: 19_win64_mkl - build_number: 19 + build: 24_win64_mkl + build_number: 24 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-19_win64_mkl.conda - sha256: 66c8934bf8ead1e3ab3653155697a7d70878e96115742b681aac16d9bd25dd3d - md5: 1b9ede5cff953aa1a5f4d9f8ec644972 + url: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-24_win64_mkl.conda + sha256: 297e858e9a2e6c4d9846fc101607ad31b778d8bde8591f9207e72d728a9f00a7 + md5: a42c7390d3249698c0ffb6040e9396e7 depends: - - libblas ==3.9.0 19_win64_mkl + - libblas 3.9.0 24_win64_mkl constrains: - - liblapack 3.9.0 19_win64_mkl - - liblapacke 3.9.0 19_win64_mkl - blas * mkl - arch: x86_64 - platform: win + - liblapack 3.9.0 24_win64_mkl + - liblapacke 3.9.0 24_win64_mkl license: BSD-3-Clause license_family: BSD - size: 4984046 - timestamp: 1697485351545 + size: 5174668 + timestamp: 1726669449378 - kind: conda name: libcrc32c version: 1.1.2 @@ -7484,111 +6614,112 @@ packages: timestamp: 1689195353551 - kind: conda name: libcurl - version: 8.2.1 - build: hc52a3a8_0 + version: 8.10.1 + build: h13a7ad3_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.2.1-hc52a3a8_0.conda - sha256: 9f9791b3bc7bd3a6ba14c9369cc99931e934d6a29863de5ba29b5dfc1abcdce8 - md5: 10cd3b7e1c73a47bb36d2cdce4504222 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.10.1-h13a7ad3_0.conda + sha256: 983a977c5627f975a930542c8aabb46089ec6ea72f28d9c4d3ee8eafaf2fc25a + md5: d84030d0863ffe7dea00b9a807fee961 depends: + - __osx >=11.0 + - krb5 >=1.21.3,<1.22.0a0 + - libnghttp2 >=1.58.0,<2.0a0 - libssh2 >=1.11.0,<2.0a0 - - libnghttp2 >=1.52.0,<2.0a0 - - openssl >=3.1.1,<4.0a0 - - krb5 >=1.21.1,<1.22.0a0 - - libzlib >=1.2.13,<1.3.0a0 - - zstd >=1.5.2,<1.6.0a0 - arch: aarch64 - platform: osx + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 license: curl license_family: MIT - size: 346914 - timestamp: 1690401885066 + size: 379948 + timestamp: 1726660033582 - kind: conda name: libcurl - version: 8.7.1 - build: h726d00d_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.7.1-h726d00d_0.conda - sha256: 06cb1bd3bbaf905213777d6ade190ac4c7fb7a20dfe0cf901c977dbbc6cec265 - md5: fa58e5eaa12006bc3289a71357bef167 + version: 8.10.1 + build: h1ee3ff0_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.10.1-h1ee3ff0_0.conda + sha256: dfbac497c4fee74f67391f9c4a40cab559468b7d04ff9fad4b404a26b5e1d5b8 + md5: 7ead800e22ff7b4bccb73e42a8f7a0f4 depends: - - krb5 >=1.21.2,<1.22.0a0 - - libnghttp2 >=1.58.0,<2.0a0 + - krb5 >=1.21.3,<1.22.0a0 - libssh2 >=1.11.0,<2.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.2.1,<4.0a0 - - zstd >=1.5.5,<1.6.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: curl license_family: MIT - size: 378176 - timestamp: 1711548390530 + size: 342388 + timestamp: 1726660508261 - kind: conda name: libcurl - version: 8.8.0 - build: hca28451_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.8.0-hca28451_0.conda - sha256: 45aec0ffc6fe3fd4c0083b815aa102b8103380acc2b6714fb272d921acc68ab2 - md5: f21c27f076a07907e70c49bb57bd0f20 + version: 8.10.1 + build: h58e7537_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.10.1-h58e7537_0.conda + sha256: 662fe145459ed58dee882e525588d1da4dcc4cbd10cfca0725d1fc3840461798 + md5: 6c8669d8228a2bbd0283911cc6d6726e depends: - - krb5 >=1.21.2,<1.22.0a0 - - libgcc-ng >=12 + - __osx >=10.13 + - krb5 >=1.21.3,<1.22.0a0 - libnghttp2 >=1.58.0,<2.0a0 - libssh2 >=1.11.0,<2.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.3.0,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 - zstd >=1.5.6,<1.6.0a0 license: curl license_family: MIT - size: 405535 - timestamp: 1716378550673 + size: 402588 + timestamp: 1726660264675 - kind: conda name: libcurl version: 8.10.1 - build: h1ee3ff0_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.10.1-h1ee3ff0_0.conda - sha256: dfbac497c4fee74f67391f9c4a40cab559468b7d04ff9fad4b404a26b5e1d5b8 - md5: 7ead800e22ff7b4bccb73e42a8f7a0f4 + build: hbbe4b11_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.10.1-hbbe4b11_0.conda + sha256: 54e6114dfce566c3a22ad3b7b309657e3600cdb668398e95f1301360d5d52c99 + md5: 6e801c50a40301f6978c53976917b277 depends: + - __glibc >=2.17,<3.0.a0 - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libnghttp2 >=1.58.0,<2.0a0 - libssh2 >=1.11.0,<2.0a0 - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - openssl >=3.3.2,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 license: curl license_family: MIT - size: 342388 - timestamp: 1726660508261 + size: 424900 + timestamp: 1726659794676 - kind: conda name: libcxx - version: 19.1.1 + version: 19.1.2 build: ha82da77_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.1-ha82da77_0.conda - sha256: bc2f7cca206fa8a1dfe801c90362a1b6ec2967a75ef60d26e7c7114884c120c0 - md5: 4ed0a90fd6a5bdda4ecf98912329993f + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda + sha256: 9c714110264f4fe824d40e11ad39b0eda65251f87826c81f4d67ccf8a3348d29 + md5: ba89ad7c5477e6a9d020020fcdadd37d depends: - __osx >=11.0 license: Apache-2.0 WITH LLVM-exception license_family: Apache - size: 522850 - timestamp: 1727862893739 + size: 521199 + timestamp: 1729038190391 - kind: conda name: libcxx - version: 19.1.1 + version: 19.1.2 build: hf95d169_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.1-hf95d169_0.conda - sha256: 390ee50a14fe5b6ac87b64eeb0130c7a79853641ae9a8926687556c76a645889 - md5: 2b09d0f92cae6df4b1670adcaca9c38c + url: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.2-hf95d169_0.conda + sha256: 04593566411ce8dc6400777c772c10a153ebf1082b104ee52a98562a24a50880 + md5: 8bdfb741a2cdbd0a4e7b7dc30fbc0d6c depends: - __osx >=10.13 license: Apache-2.0 WITH LLVM-exception license_family: Apache - size: 528308 - timestamp: 1727863581528 + size: 526600 + timestamp: 1729038055775 - kind: conda name: libdeflate version: '1.17' @@ -7597,26 +6728,10 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.17-h1a8c8d9_0.conda sha256: 9a1979b3f6dc155b8c48987cfae6b13ba19b3e176e4470b87f60011e806218f5 md5: cae34d3f6ab02e0abf92ec3caaf0bd39 - arch: aarch64 - platform: osx license: MIT license_family: MIT size: 48222 timestamp: 1673786109437 -- kind: conda - name: libdeflate - version: '1.19' - build: ha4e1b8e_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.19-ha4e1b8e_0.conda - sha256: d0f789120fedd0881b129aba9993ec5dcf0ecca67a71ea20c74394e41adcb503 - md5: 6a45f543c2beb40023df5ee7e3cedfbd - arch: x86_64 - platform: osx - license: MIT - license_family: MIT - size: 68962 - timestamp: 1694922440450 - kind: conda name: libdeflate version: '1.19' @@ -7627,12 +6742,22 @@ packages: md5: 1635570038840ee3f9c71d22aa5b8b6d depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: MIT license_family: MIT size: 67080 timestamp: 1694922285678 +- kind: conda + name: libdeflate + version: '1.20' + build: h49d49c5_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.20-h49d49c5_0.conda + sha256: 8c2087952db55c4118dd2e29381176a54606da47033fd61ebb1b0f4391fcd28d + md5: d46104f6a896a0bc6a1d37b88b2edf5c + license: MIT + license_family: MIT + size: 70364 + timestamp: 1711196727346 - kind: conda name: libdeflate version: '1.20' @@ -7675,8 +6800,6 @@ packages: md5: 30e4362988a2623e9eb34337b83e01f9 depends: - ncurses >=6.2,<7.0.0a0 - arch: aarch64 - platform: osx license: BSD-2-Clause license_family: BSD size: 96607 @@ -7693,8 +6816,6 @@ packages: depends: - libgcc-ng >=7.5.0 - ncurses >=6.2,<7.0.0a0 - arch: x86_64 - platform: linux license: BSD-2-Clause license_family: BSD size: 123878 @@ -7715,18 +6836,16 @@ packages: - kind: conda name: libev version: '4.33' - build: h642e427_1 - build_number: 1 + build: h93a5062_2 + build_number: 2 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h642e427_1.tar.bz2 - sha256: eb7325eb2e6bd4c291cb9682781b35b8c0f68cb72651c35a5b9dd22707ebd25c - md5: 566dbf70fe79eacdb3c3d3d195a27f55 - arch: aarch64 - platform: osx + url: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f + md5: 36d33e440c31857372a72137f78bacf5 license: BSD-2-Clause license_family: BSD - size: 100668 - timestamp: 1598868103393 + size: 107458 + timestamp: 1702146414478 - kind: conda name: libev version: '4.33' @@ -7848,8 +6967,6 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 sha256: 7a2d27a936ceee6942ea4d397f9c7d136f12549d86f7617e8b6bad51e01a941f md5: ccb34fb14960ad8b125962d3d79b31a9 - arch: x86_64 - platform: osx license: MIT license_family: MIT size: 51348 @@ -7863,8 +6980,6 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca md5: 086914b672be056eb70fd4285b6783b6 - arch: aarch64 - platform: osx license: MIT license_family: MIT size: 39020 @@ -7880,8 +6995,6 @@ packages: md5: d645c6d2ac96843a2bfaccd2d62b3ac3 depends: - libgcc-ng >=9.4.0 - arch: x86_64 - platform: linux license: MIT license_family: MIT size: 58292 @@ -7898,78 +7011,110 @@ packages: depends: - vc >=14.1,<15.0a0 - vs2015_runtime >=14.16.27012 - arch: x86_64 - platform: win license: MIT license_family: MIT size: 42063 timestamp: 1636489106777 - kind: conda name: libgcc - version: 14.1.0 + version: 14.2.0 build: h77fa898_1 build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.1.0-h77fa898_1.conda - sha256: 10fa74b69266a2be7b96db881e18fa62cfa03082b65231e8d652e897c4b335a3 - md5: 002ef4463dd1e2b44a94a4ace468f5d2 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df depends: - _libgcc_mutex 0.1 conda_forge - _openmp_mutex >=4.5 constrains: - - libgomp 14.1.0 h77fa898_1 - - libgcc-ng ==14.1.0=*_1 + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 846380 - timestamp: 1724801836552 + size: 848745 + timestamp: 1729027721139 - kind: conda name: libgcc-devel_linux-64 - version: 13.2.0 - build: ha9c7c90_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-devel_linux-64-13.2.0-ha9c7c90_2.conda - sha256: 628a2c0ae7cb16b16218839d636a93b6cd27e6e464f003aa54a86cae06759759 - md5: 401c5cf212e568dab47e0677a000d2a7 - arch: x86_64 - platform: linux + version: 14.2.0 + build: h41c2201_101 + build_number: 101 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.2.0-h41c2201_101.conda + sha256: 939f73ccab0ef61d02b26e348adcbf0ebd249914073a62e861ca45d125c9335c + md5: fb126e22f5350c15fec6ddbd062f4871 + depends: + - __unix license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 2428361 - timestamp: 1695219277108 + size: 2753144 + timestamp: 1729027627734 - kind: conda name: libgcc-ng - version: 14.1.0 + version: 14.2.0 build: h69a702a_1 build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h69a702a_1.conda - sha256: b91f7021e14c3d5c840fbf0dc75370d6e1f7c7ff4482220940eaafb9c64613b7 - md5: 1efc0ad219877a73ef977af7dbb51f17 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + md5: e39480b9ca41323497b05492a63bc35b depends: - - libgcc 14.1.0 h77fa898_1 + - libgcc 14.2.0 h77fa898_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 52170 - timestamp: 1724801842101 + size: 54142 + timestamp: 1729027726517 +- kind: conda + name: libgettextpo + version: 0.22.5 + build: h8414b35_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgettextpo-0.22.5-h8414b35_3.conda + sha256: bc446fad58155e96a01b28e99254415c2151bdddf57f9a2c00c44e6f0298bb62 + md5: c8cd7295cfb7bda5cbabea4fef904349 + depends: + - __osx >=11.0 + - libiconv >=1.17,<2.0a0 + - libintl 0.22.5 h8414b35_3 + license: GPL-3.0-or-later + license_family: GPL + size: 159800 + timestamp: 1723627007035 +- kind: conda + name: libgettextpo-devel + version: 0.22.5 + build: h8414b35_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgettextpo-devel-0.22.5-h8414b35_3.conda + sha256: ea3ca757bf11ed25965b39466b50411c7c2a43f3b90ab4a36fc0ef43f7ab98ac + md5: 7074dc1c9aae1bb5d7bccb4ff03746ca + depends: + - __osx >=11.0 + - libgettextpo 0.22.5 h8414b35_3 + - libiconv >=1.17,<2.0a0 + - libintl 0.22.5 h8414b35_3 + license: GPL-3.0-or-later + license_family: GPL + size: 37153 + timestamp: 1723627048279 - kind: conda name: libgfortran version: 5.0.0 - build: 13_2_0_h97931a8_1 - build_number: 1 + build: 13_2_0_h97931a8_3 + build_number: 3 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-13_2_0_h97931a8_1.conda - sha256: 5be1a59316e5063f4e6492ea86d692600a7b8e32caa25269f8a3b386a028e5f3 - md5: b55fd11ab6318a6e67ac191309701d5a + url: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-13_2_0_h97931a8_3.conda + sha256: 4874422e567b68334705c135c17e5acdca1404de8255673ce30ad3510e00be0d + md5: 0b6e23a012ee7a9a5f6b244f5a92c1d5 depends: - - libgfortran5 ==13.2.0 h2873a65_1 - arch: x86_64 - platform: osx + - libgfortran5 13.2.0 h2873a65_3 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 109855 - timestamp: 1694165674845 + size: 110106 + timestamp: 1707328956438 - kind: conda name: libgfortran version: 5.0.0 @@ -7987,55 +7132,53 @@ packages: timestamp: 1707330749033 - kind: conda name: libgfortran - version: 14.1.0 + version: 14.2.0 build: h69a702a_1 build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.1.0-h69a702a_1.conda - sha256: ed77f04f873e43a26e24d443dd090631eedc7d0ace3141baaefd96a123e47535 - md5: 591e631bc1ae62c64f2ab4f66178c097 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.2.0-h69a702a_1.conda + sha256: fc9e7f22a17faf74da904ebfc4d88699013d2992e55505e4aa0eb01770290977 + md5: f1fd30127802683586f768875127a987 depends: - - libgfortran5 14.1.0 hc5f4f2c_1 + - libgfortran5 14.2.0 hd5240d6_1 constrains: - - libgfortran-ng ==14.1.0=*_1 + - libgfortran-ng ==14.2.0=*_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 52142 - timestamp: 1724801872472 + size: 53997 + timestamp: 1729027752995 - kind: conda name: libgfortran-ng - version: 14.1.0 + version: 14.2.0 build: h69a702a_1 build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.1.0-h69a702a_1.conda - sha256: a2dc35cb7f87bb5beebf102d4085574c6a740e1df58e743185d4434cc5e4e0ae - md5: 16cec94c5992d7f42ae3f9fa8b25df8d + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.2.0-h69a702a_1.conda + sha256: 423f1e2403f0c665748e42d335e421e53fd03c08d457cfb6f360d329d9459851 + md5: 0a7f4cd238267c88e5d69f7826a407eb depends: - - libgfortran 14.1.0 h69a702a_1 + - libgfortran 14.2.0 h69a702a_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 52212 - timestamp: 1724802086021 + size: 54106 + timestamp: 1729027945817 - kind: conda name: libgfortran5 version: 13.2.0 - build: h2873a65_1 - build_number: 1 + build: h2873a65_3 + build_number: 3 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-13.2.0-h2873a65_1.conda - sha256: 44de8930eef3b14d4d9fdfe419e6c909c13b7c859617d3616d5a5e964f3fcf63 - md5: 3af564516b5163cd8cc08820413854bc + url: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-13.2.0-h2873a65_3.conda + sha256: da3db4b947e30aec7596a3ef92200d17e774cccbbf7efc47802529a4ca5ca31b + md5: e4fb4d23ec2870ff3c40d10afe305aec depends: - llvm-openmp >=8.0.0 constrains: - - libgfortran 5.0.0 13_2_0_*_1 - arch: x86_64 - platform: osx + - libgfortran 5.0.0 13_2_0_*_3 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 1571764 - timestamp: 1694165583047 + size: 1571379 + timestamp: 1707328880361 - kind: conda name: libgfortran5 version: 13.2.0 @@ -8055,21 +7198,21 @@ packages: timestamp: 1707330687590 - kind: conda name: libgfortran5 - version: 14.1.0 - build: hc5f4f2c_1 + version: 14.2.0 + build: hd5240d6_1 build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_1.conda - sha256: c40d7db760296bf9c776de12597d2f379f30e890b9ae70c1de962ff2aa1999f6 - md5: 10a0cef64b784d6ab6da50ebca4e984d + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda + sha256: d149a37ca73611e425041f33b9d8dbed6e52ec506fe8cc1fc0ee054bddeb6d5d + md5: 9822b874ea29af082e5d36098d25427d depends: - - libgcc >=14.1.0 + - libgcc >=14.2.0 constrains: - - libgfortran 14.1.0 + - libgfortran 14.2.0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 1459939 - timestamp: 1724801851300 + size: 1462645 + timestamp: 1729027735353 - kind: conda name: libglib version: 2.76.4 @@ -8079,55 +7222,52 @@ packages: sha256: 27e6c1c2db36e9156212da55ea6dd7c73194d8247549ccca5d6a4b12c0de1b4e md5: 6c68bbf6d89e0fd5d12a4c41e1a9e79b depends: - - libcxx >=15.0.7 - - pcre2 >=10.40,<10.41.0a0 - gettext >=0.21.1,<1.0a0 + - libcxx >=15.0.7 - libffi >=3.4,<4.0a0 - libiconv >=1.17,<2.0a0 - - libzlib >=1.2.13,<1.3.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - pcre2 >=10.40,<10.41.0a0 constrains: - glib 2.76.4 *_0 - arch: aarch64 - platform: osx license: LGPL-2.1-or-later size: 2510157 timestamp: 1688694829858 - kind: conda name: libglib - version: 2.80.3 - build: h315aac3_2 - build_number: 2 + version: 2.82.2 + build: h2ff4ddf_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.3-h315aac3_2.conda - sha256: 7470e664b780b91708bed356cc634874dfc3d6f17cbf884a1d6f5d6d59c09f91 - md5: b0143a3e98136a680b728fdf9b42a258 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda + sha256: 49ee9401d483a76423461c50dcd37f91d070efaec7e4dc2828d8cdd2ce694231 + md5: 13e8e54035ddd2b91875ba399f0f7c04 depends: - __glibc >=2.17,<3.0.a0 - libffi >=3.4,<4.0a0 - - libgcc-ng >=12 + - libgcc >=13 - libiconv >=1.17,<2.0a0 - libzlib >=1.3.1,<2.0a0 - pcre2 >=10.44,<10.45.0a0 constrains: - - glib 2.80.3 *_2 + - glib 2.82.2 *_0 license: LGPL-2.1-or-later - size: 3922900 - timestamp: 1723208802469 + size: 3931898 + timestamp: 1729191404130 - kind: conda name: libgomp - version: 14.1.0 + version: 14.2.0 build: h77fa898_1 build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_1.conda - sha256: c96724c8ae4ee61af7674c5d9e5a3fbcf6cd887a40ad5a52c99aa36f1d4f9680 - md5: 23c255b008c4f2ae008f81edcabaca89 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 + md5: cc3573974587f12dda90d96e3e55a702 depends: - _libgcc_mutex 0.1 conda_forge license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 460218 - timestamp: 1724801743478 + size: 460992 + timestamp: 1729027639220 - kind: conda name: libgoogle-cloud version: 2.12.0 @@ -8329,25 +7469,23 @@ packages: timestamp: 1692025226820 - kind: conda name: libhwloc - version: 2.9.3 - build: default_haede6df_1009 - build_number: 1009 + version: 2.11.1 + build: default_h8125262_1000 + build_number: 1000 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.9.3-default_haede6df_1009.conda - sha256: 2e8c4bb7173f281a8e13f333a23c9fb7a1c86d342d7dccdd74f2eb583ddde450 - md5: 87da045f6d26ce9fe20ad76a18f6a18a + url: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.11.1-default_h8125262_1000.conda + sha256: 92728e292640186759d6dddae3334a1bc0b139740b736ffaeccb825fb8c07a2e + md5: 933bad6e4658157f1aec9b171374fde2 depends: - - libxml2 >=2.11.5,<2.12.0a0 - - pthreads-win32 * + - libxml2 >=2.12.7,<3.0a0 + - pthreads-win32 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - size: 2578462 - timestamp: 1694533393675 + size: 2379689 + timestamp: 1720461835526 - kind: conda name: libhwy version: 1.1.0 @@ -8365,47 +7503,76 @@ packages: - kind: conda name: libiconv version: '1.17' - build: h166bdaf_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2 - sha256: 6a81ebac9f1aacdf2b4f945c87ad62b972f0f69c8e0981d68e111739e6720fd7 - md5: b62b52da46c39ee2bc3c162ac7f1804d - depends: - - libgcc-ng >=10.3.0 - arch: x86_64 - platform: linux - license: GPL and LGPL - size: 1450368 - timestamp: 1652700749886 + build: h0d3ecfb_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda + sha256: bc7de5097b97bcafcf7deaaed505f7ce02f648aac8eccc0d5a47cc599a1d0304 + md5: 69bda57310071cf6d2b86caf11573d2d + license: LGPL-2.1-only + size: 676469 + timestamp: 1702682458114 - kind: conda name: libiconv version: '1.17' - build: h8ffe710_0 + build: hcfcfb64_2 + build_number: 2 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-h8ffe710_0.tar.bz2 - sha256: 657c2a992c896475021a25faebd9ccfaa149c5d70c7dc824d4069784b686cea1 - md5: 050119977a86e4856f0416e2edcf81bb + url: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda + sha256: 5f844dd19b046d43174ad80c6ea75b5d504020e3b63cfbc4ace97b8730d35c7b + md5: e1eb10b1cca179f2baa3601e4efc8712 depends: - - vc >=14.1,<15 - - vs2015_runtime >=14.16.27033 - arch: x86_64 - platform: win - license: GPL and LGPL - size: 714518 - timestamp: 1652702326553 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: LGPL-2.1-only + size: 636146 + timestamp: 1702682547199 - kind: conda name: libiconv version: '1.17' - build: he4db4b2_0 + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + size: 705775 + timestamp: 1702682170569 +- kind: conda + name: libintl + version: 0.22.5 + build: h8414b35_3 + build_number: 3 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-he4db4b2_0.tar.bz2 - sha256: 2eb33065783b802f71d52bef6f15ce0fafea0adc8506f10ebd0d490244087bec - md5: 686f9c755574aa221f29fbcf36a67265 - arch: aarch64 - platform: osx - license: GPL and LGPL - size: 1407036 - timestamp: 1652700956112 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.22.5-h8414b35_3.conda + sha256: 7c1d238d4333af385e594c89ebcb520caad7ed83a735c901099ec0970a87a891 + md5: 3b98ec32e91b3b59ad53dbb9c96dd334 + depends: + - __osx >=11.0 + - libiconv >=1.17,<2.0a0 + license: LGPL-2.1-or-later + size: 81171 + timestamp: 1723626968270 +- kind: conda + name: libintl-devel + version: 0.22.5 + build: h8414b35_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-devel-0.22.5-h8414b35_3.conda + sha256: c9d1d4fdfb5775828e54bc9fb443b1a6de9319a04b81d1bac52c26114a763154 + md5: 271646de11b018c66e81eb4c4717b291 + depends: + - __osx >=11.0 + - libiconv >=1.17,<2.0a0 + - libintl 0.22.5 h8414b35_3 + license: LGPL-2.1-or-later + size: 38584 + timestamp: 1723627022409 - kind: conda name: libjpeg-turbo version: 2.1.5.1 @@ -8419,8 +7586,6 @@ packages: - libgcc-ng >=12 constrains: - jpeg <0.0.0a - arch: x86_64 - platform: linux license: IJG AND BSD-3-Clause AND Zlib size: 496449 timestamp: 1694566464059 @@ -8435,8 +7600,6 @@ packages: md5: 72507f8e3961bc968af17435060b6dd6 constrains: - jpeg <0.0.0a - arch: x86_64 - platform: osx license: IJG AND BSD-3-Clause AND Zlib size: 579748 timestamp: 1694475265912 @@ -8455,8 +7618,6 @@ packages: - vc14_runtime >=14.29.30139 constrains: - jpeg <0.0.0a - arch: x86_64 - platform: win license: IJG AND BSD-3-Clause AND Zlib size: 822966 timestamp: 1694475223854 @@ -8481,107 +7642,79 @@ packages: - kind: conda name: liblapack version: 3.9.0 - build: 17_osxarm64_openblas - build_number: 17 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-17_osxarm64_openblas.conda - sha256: 7e32d178639c5bcaac4b654438aa364eec8a42f108bc592dda8e52a432b0cdb4 - md5: d93cc56c1467a5bcf6a4c9c0be469114 + build: 22_osx64_openblas + build_number: 22 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-22_osx64_openblas.conda + sha256: e36744f3e780564d6748b5dd05e15ad6a1af9184cf32ab9d1304c13a6bc3e16b + md5: f21b282ff7ba14df6134a0fe6ab42b1b depends: - - libblas ==3.9.0 17_osxarm64_openblas + - libblas 3.9.0 22_osx64_openblas constrains: - - libcblas 3.9.0 17_osxarm64_openblas - - liblapacke 3.9.0 17_osxarm64_openblas + - liblapacke 3.9.0 22_osx64_openblas - blas * openblas - arch: aarch64 - platform: osx + - libcblas 3.9.0 22_osx64_openblas license: BSD-3-Clause license_family: BSD - size: 14640 - timestamp: 1685931066631 + size: 14657 + timestamp: 1712542322711 - kind: conda name: liblapack version: 3.9.0 - build: 19_linux64_openblas - build_number: 19 + build: 24_linux64_openblas + build_number: 24 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-19_linux64_openblas.conda - sha256: 58f402aae605ebd0932e1cbbf855cd49dcdfa2fcb6aab790a4f6068ec5937878 - md5: 9f100edf65436e3eabc2a51fc00b2c37 + url: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-24_linux64_openblas.conda + sha256: a15da20c3c0fb5f356e5b4e2f1e87b0da11b9a46805a7f2609bf30f23453831a + md5: fd540578678aefe025705f4b58b36b2e depends: - - libblas ==3.9.0 19_linux64_openblas + - libblas 3.9.0 24_linux64_openblas constrains: - blas * openblas - - libcblas 3.9.0 19_linux64_openblas - - liblapacke 3.9.0 19_linux64_openblas - arch: x86_64 - platform: linux + - libcblas 3.9.0 24_linux64_openblas + - liblapacke 3.9.0 24_linux64_openblas license: BSD-3-Clause license_family: BSD - size: 14487 - timestamp: 1697484241613 + size: 14911 + timestamp: 1726668467187 - kind: conda name: liblapack version: 3.9.0 - build: 19_osx64_openblas - build_number: 19 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-19_osx64_openblas.conda - sha256: 6a1704c43a03195fecbbb226be5c257b2e37621e793967c3f31c8521f19e18df - md5: 2e714df18db99ee6d7b4ac728f53ca62 + build: 24_osxarm64_openblas + build_number: 24 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-24_osxarm64_openblas.conda + sha256: 67fbfd0466eee443cda9596ed22daabedc96b7b4d1b31f49b1c1b0983dd1dd2c + md5: 49a3241f76cdbe705e346204a328f66c depends: - - libblas ==3.9.0 19_osx64_openblas + - libblas 3.9.0 24_osxarm64_openblas constrains: - - libcblas 3.9.0 19_osx64_openblas - - liblapacke 3.9.0 19_osx64_openblas - blas * openblas - arch: x86_64 - platform: osx + - liblapacke 3.9.0 24_osxarm64_openblas + - libcblas 3.9.0 24_osxarm64_openblas license: BSD-3-Clause license_family: BSD - size: 14724 - timestamp: 1697484756327 + size: 15063 + timestamp: 1726668815824 - kind: conda name: liblapack version: 3.9.0 - build: 19_win64_mkl - build_number: 19 + build: 24_win64_mkl + build_number: 24 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-19_win64_mkl.conda - sha256: e53093eab7674528e9eafbd5efa28f3170ec1388b8df6c9b8343760696f47907 - md5: 574e6e8bcc85df2885eb2a87d31ae005 + url: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-24_win64_mkl.conda + sha256: 37dfa34e4c37c7bbb20df61e5badbf42d01e75e687c20be72ab13f80be99ceb9 + md5: c69b7b6756a8d58cc8cf17081fffdc5c depends: - - libblas ==3.9.0 19_win64_mkl + - libblas 3.9.0 24_win64_mkl constrains: - - libcblas 3.9.0 19_win64_mkl - - liblapacke 3.9.0 19_win64_mkl - blas * mkl - arch: x86_64 - platform: win + - libcblas 3.9.0 24_win64_mkl + - liblapacke 3.9.0 24_win64_mkl license: BSD-3-Clause license_family: BSD - size: 4984073 - timestamp: 1697485397401 -- kind: conda - name: libnghttp2 - version: 1.52.0 - build: hae82a92_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.52.0-hae82a92_0.conda - sha256: 1a3944d6295dcbecdf6489ce8a05fe416ad401727c901ec390e9200a351bdb10 - md5: 1d319e95a0216f801293626a00337712 - depends: - - libcxx >=14.0.6 - - c-ares >=1.18.1,<2.0a0 - - libev >=4.33,<4.34.0a0 - - libzlib >=1.2.13,<1.3.0a0 - - openssl >=3.0.8,<4.0a0 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - size: 564295 - timestamp: 1677678452375 + size: 5183452 + timestamp: 1726669499566 - kind: conda name: libnghttp2 version: 1.58.0 @@ -8624,6 +7757,27 @@ packages: license_family: MIT size: 599736 timestamp: 1702130398536 +- kind: conda + name: libnghttp2 + version: 1.58.0 + build: ha4dd798_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.58.0-ha4dd798_1.conda + sha256: fc97aaaf0c6d0f508be313d86c2705b490998d382560df24be918b8e977802cd + md5: 1813e066bfcef82de579a0be8a766df4 + depends: + - __osx >=10.9 + - c-ares >=1.23.0,<2.0a0 + - libcxx >=16.0.6 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.2.0,<4.0a0 + license: MIT + license_family: MIT + size: 565451 + timestamp: 1702130473930 - kind: conda name: libnsl version: 2.0.1 @@ -8634,8 +7788,6 @@ packages: md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: LGPL-2.1-only license_family: GPL size: 33408 @@ -8656,64 +7808,63 @@ packages: timestamp: 1714593927305 - kind: conda name: libopenblas - version: 0.3.23 - build: openmp_hc731615_0 + version: 0.3.27 + build: openmp_h517c56d_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.23-openmp_hc731615_0.conda - sha256: 7f88475228d306962493a3f1c52637187695f7c9716a68a75e24a8aa910be69a - md5: a40b73e171a91527c79fb1c8b10e3312 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.27-openmp_h517c56d_1.conda + sha256: 46cfcc592b5255262f567cd098be3c61da6bca6c24d640e878dc8342b0f6d069 + md5: 71b8a34d70aa567a990162f327e81505 depends: + - __osx >=11.0 - libgfortran 5.* - - libgfortran5 >=11.3.0 - - llvm-openmp >=14.0.6 + - libgfortran5 >=12.3.0 + - llvm-openmp >=16.0.6 constrains: - - openblas >=0.3.23,<0.3.24.0a0 - arch: aarch64 - platform: osx + - openblas >=0.3.27,<0.3.28.0a0 license: BSD-3-Clause license_family: BSD - size: 2732539 - timestamp: 1681398430140 + size: 2925328 + timestamp: 1720425811743 - kind: conda name: libopenblas - version: 0.3.24 - build: openmp_h48a4ad5_0 + version: 0.3.27 + build: openmp_h8869122_1 + build_number: 1 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.24-openmp_h48a4ad5_0.conda - sha256: ff2c14f7ed121f1df3ad06bea353288eade77c12fb891212a27af88a61483490 - md5: 077718837dd06cf0c3089070108869f6 + url: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.27-openmp_h8869122_1.conda + sha256: 83b0b9d3d09889b3648a81d2c18a2d78c405b03b115107941f0496a8b358ce6d + md5: c0798ad76ddd730dade6ff4dff66e0b5 depends: + - __osx >=10.13 - libgfortran 5.* - libgfortran5 >=12.3.0 - - llvm-openmp >=15.0.7 + - llvm-openmp >=16.0.6 constrains: - - openblas >=0.3.24,<0.3.25.0a0 - arch: x86_64 - platform: osx + - openblas >=0.3.27,<0.3.28.0a0 license: BSD-3-Clause license_family: BSD - size: 6157393 - timestamp: 1693785988209 + size: 6047513 + timestamp: 1720426759731 - kind: conda name: libopenblas - version: 0.3.24 - build: pthreads_h413a1c8_0 + version: 0.3.27 + build: pthreads_hac2b453_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.24-pthreads_h413a1c8_0.conda - sha256: c8e080ae4d57506238023e98869928ae93564e6407ef5b0c4d3a337e8c2b7662 - md5: 6e4ef6ca28655124dcde9bd500e44c32 + url: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.27-pthreads_hac2b453_1.conda + sha256: 714cb82d7c4620ea2635a92d3df263ab841676c9b183d0c01992767bb2451c39 + md5: ae05ece66d3924ac3d48b4aa3fa96cec depends: - libgcc-ng >=12 - - libgfortran-ng * + - libgfortran-ng - libgfortran5 >=12.3.0 constrains: - - openblas >=0.3.24,<0.3.25.0a0 - arch: x86_64 - platform: linux + - openblas >=0.3.27,<0.3.28.0a0 license: BSD-3-Clause license_family: BSD - size: 5492091 - timestamp: 1693785223074 + size: 5563053 + timestamp: 1720426334043 - kind: conda name: libpng version: 1.6.39 @@ -8723,39 +7874,10 @@ packages: sha256: 21ab8409a8e66f9408b96428c0a36a9768faee9fe623c56614576f9e12962981 md5: 0078e6327c13cfdeae6ff7601e360383 depends: - - libzlib >=1.2.13,<1.3.0a0 - arch: aarch64 - platform: osx + - libzlib >=1.2.13,<2.0.0a0 license: zlib-acknowledgement size: 259412 timestamp: 1669075883972 -- kind: conda - name: libpng - version: 1.6.43 - build: h2797004_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.43-h2797004_0.conda - sha256: 502f6ff148ac2777cc55ae4ade01a8fc3543b4ffab25c4e0eaa15f94e90dd997 - md5: 009981dd9cfcaa4dbfa25ffaed86bcae - depends: - - libgcc-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 - license: zlib-acknowledgement - size: 288221 - timestamp: 1708780443939 -- kind: conda - name: libpng - version: 1.6.43 - build: h92b6c6a_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.43-h92b6c6a_0.conda - sha256: 13e646d24b5179e6b0a5ece4451a587d759f55d9a360b7015f8f96eff4524b8f - md5: 65dcddb15965c9de2c0365cb14910532 - depends: - - libzlib >=1.2.13,<2.0.0a0 - license: zlib-acknowledgement - size: 268524 - timestamp: 1708780496420 - kind: conda name: libpng version: 1.6.44 @@ -8772,6 +7894,35 @@ packages: license: zlib-acknowledgement size: 348933 timestamp: 1726235196095 +- kind: conda + name: libpng + version: 1.6.44 + build: h4b8f8c9_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.44-h4b8f8c9_0.conda + sha256: 12b44e58f8832798d7a5c0a7480c95e905dbd6c3558dec09739062411f9e08d1 + md5: f32ac2c8dd390dbf169f550887ed09d9 + depends: + - __osx >=10.13 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + size: 268073 + timestamp: 1726234803010 +- kind: conda + name: libpng + version: 1.6.44 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + sha256: e5b14f7a01c2db4362d8591f42f82f336ed48d5e4079e4d1f65d0c2a3637ea78 + md5: f4cc49d7aa68316213e4b12be35308d1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + size: 290661 + timestamp: 1726234747153 - kind: conda name: libprotobuf version: 4.23.3 @@ -8802,11 +7953,10 @@ packages: sha256: dab9b3aea591600b0d90f9eb243e8a4d0396e9e551a79cea0b5362b8bce5fdd6 md5: 4b9dd0dfe441ea2b3588b582e820ad36 depends: + - libabseil * cxx17* - libabseil >=20230125.3,<20230126.0a0 - libcxx >=15.0.7 - - libzlib >=1.2.13,<1.3.0a0 - arch: x86_64 - platform: osx + - libzlib >=1.2.13,<2.0.0a0 license: BSD-3-Clause license_family: BSD size: 2062096 @@ -8833,21 +7983,21 @@ packages: - kind: conda name: libprotobuf version: 4.23.3 - build: hf32f9b9_0 + build: hf32f9b9_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-4.23.3-hf32f9b9_0.conda - sha256: 0403a14764d3fb374094166df47dd2f42626a5e56e939fd56f656fbb4af531f6 - md5: f8c95ebf157e02ff69b88392f5e3cb80 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libprotobuf-4.23.3-hf32f9b9_1.conda + sha256: fd4b442b4a99b500437fd0e562630f698ae579f0b31d36daecbce0f479223047 + md5: cdbf60d61de5e619297def60107a00c3 depends: - - libzlib >=1.2.13,<1.3.0a0 - - libabseil >=20230125.2,<20230126.0a0 + - libabseil * cxx17* + - libabseil >=20230125.3,<20230126.0a0 - libcxx >=15.0.7 - arch: aarch64 - platform: osx + - libzlib >=1.2.13,<2.0.0a0 license: BSD-3-Clause license_family: BSD - size: 2063683 - timestamp: 1688107150240 + size: 2059613 + timestamp: 1693582457881 - kind: conda name: librsvg version: 2.56.3 @@ -8857,64 +8007,57 @@ packages: sha256: 4ed7ddb12fe193994cbf7d77eb3d7e776fda6c65e95c467f32392f40b880bbe6 md5: b9784f5c16c6d01d59f7e65a3b0441c6 depends: - - libxml2 >=2.11.4,<2.12.0a0 - - gettext >=0.21.1,<1.0a0 - - pango >=1.50.14,<2.0a0 - - libglib >=2.76.4,<3.0a0 - cairo >=1.16.0,<2.0a0 - gdk-pixbuf >=2.42.10,<3.0a0 - arch: aarch64 - platform: osx + - gettext >=0.21.1,<1.0a0 + - libglib >=2.76.4,<3.0a0 + - libxml2 >=2.11.4,<3.0.0a0 + - pango >=1.50.14,<2.0a0 license: LGPL-2.1-or-later size: 3791057 timestamp: 1690736683429 - kind: conda name: libsanitizer - version: 13.2.0 - build: h7e041cc_2 - build_number: 2 + version: 14.2.0 + build: h2a3dede_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.2.0-h7e041cc_2.conda - sha256: f10895acd0791ee20124a540cfbdb1efd050744aa9718f694aec6df798fb57f1 - md5: aa27066e2dcef56db7bc674f2230b6c9 + url: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.2.0-h2a3dede_1.conda + sha256: 2e2c078118ed7fb614b0cee492b540c59ba74e4adb6d6dd9fa66e96af6d166c1 + md5: 160623b9425f5c04941586da43bd1a9c depends: - - libgcc-ng >=13.2.0 - arch: x86_64 - platform: linux + - libgcc >=14.2.0 + - libstdcxx >=14.2.0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 4111354 - timestamp: 1695219428583 + size: 4496423 + timestamp: 1729027764926 - kind: conda name: libsodium - version: 1.0.18 - build: h27ca646_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.18-h27ca646_1.tar.bz2 - sha256: 1d95fe5e5e6a0700669aab454b2a32f97289c9ed8d1f7667c2ba98327a6f05bc - md5: 90859688dbca4735b74c02af14c4c793 - arch: aarch64 - platform: osx + version: 1.0.20 + build: h4ab18f5_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda + sha256: 0105bd108f19ea8e6a78d2d994a6d4a8db16d19a41212070d2d1d48a63c34161 + md5: a587892d3c13b6621a6091be690dbca2 + depends: + - libgcc-ng >=12 license: ISC - size: 324912 - timestamp: 1605135878892 + size: 205978 + timestamp: 1716828628198 - kind: conda name: libsodium - version: 1.0.18 - build: h36c2ea0_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2 - sha256: 53da0c8b79659df7b53eebdb80783503ce72fb4b10ed6e9e05cc0e9e4207a130 - md5: c3788462a6fbddafdb413a9f9053e58d + version: 1.0.20 + build: h99b78c6_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda + sha256: fade8223e1e1004367d7101dd17261003b60aa576df6d7802191f8972f7470b1 + md5: a7ce36e284c5faaf93c220dfc39e3abd depends: - - libgcc-ng >=7.5.0 - arch: x86_64 - platform: linux + - __osx >=11.0 license: ISC - size: 374999 - timestamp: 1605135674116 + size: 164972 + timestamp: 1716828607917 - kind: conda name: libsodium version: 1.0.20 @@ -8943,34 +8086,6 @@ packages: license: ISC size: 210249 timestamp: 1716828641383 -- kind: conda - name: libsqlite - version: 3.46.0 - build: h1b8f9f3_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.0-h1b8f9f3_0.conda - sha256: 63af1a9e3284c7e4952364bafe7267e41e2d9d8bcc0e85a4ea4b0ec02d3693f6 - md5: 5dadfbc1a567fe6e475df4ce3148be09 - depends: - - __osx >=10.13 - - libzlib >=1.2.13,<2.0a0 - license: Unlicense - size: 908643 - timestamp: 1718050720117 -- kind: conda - name: libsqlite - version: 3.46.0 - build: hfb93653_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.0-hfb93653_0.conda - sha256: 73048f9cb8647d3d3bfe6021c0b7d663e12cffbe9b4f31bd081e713b0a9ad8f9 - md5: 12300188028c9bc02da965128b91b517 - depends: - - __osx >=11.0 - - libzlib >=1.2.13,<2.0a0 - license: Unlicense - size: 830198 - timestamp: 1718050644825 - kind: conda name: libsqlite version: 3.46.1 @@ -8986,6 +8101,20 @@ packages: license: Unlicense size: 876666 timestamp: 1725354171439 +- kind: conda + name: libsqlite + version: 3.46.1 + build: h4b8f8c9_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.1-h4b8f8c9_0.conda + sha256: 1d075cb823f0cad7e196871b7c57961d669cbbb6cd0e798bf50cbf520dda65fb + md5: 84de0078b58f899fc164303b0603ff0e + depends: + - __osx >=10.13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 908317 + timestamp: 1725353652135 - kind: conda name: libsqlite version: 3.46.1 @@ -9001,6 +8130,20 @@ packages: license: Unlicense size: 865214 timestamp: 1725353659783 +- kind: conda + name: libsqlite + version: 3.46.1 + build: hc14010f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.1-hc14010f_0.conda + sha256: 3725f962f490c5d44dae326d5f5b2e3c97f71a6322d914ccc85b5ddc2e50d120 + md5: 58050ec1724e58668d0126a1615553fa + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 829500 + timestamp: 1725353720793 - kind: conda name: libssh2 version: 1.11.0 @@ -9026,10 +8169,8 @@ packages: sha256: bb57d0c53289721fff1eeb3103a1c6a988178e88d8a8f4345b0b91a35f0e0015 md5: 029f7dc931a3b626b94823bc77830b01 depends: - - libzlib >=1.2.13,<1.3.0a0 + - libzlib >=1.2.13,<2.0.0a0 - openssl >=3.1.1,<4.0a0 - arch: aarch64 - platform: osx license: BSD-3-Clause license_family: BSD size: 255610 @@ -9069,34 +8210,34 @@ packages: timestamp: 1685837820566 - kind: conda name: libstdcxx - version: 14.1.0 + version: 14.2.0 build: hc0a3c3a_1 build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.1.0-hc0a3c3a_1.conda - sha256: 44decb3d23abacf1c6dd59f3c152a7101b7ca565b4ef8872804ceaedcc53a9cd - md5: 9dbb9699ea467983ba8a4ba89b08b066 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 depends: - - libgcc 14.1.0 h77fa898_1 + - libgcc 14.2.0 h77fa898_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 3892781 - timestamp: 1724801863728 + size: 3893695 + timestamp: 1729027746910 - kind: conda name: libstdcxx-ng - version: 13.2.0 - build: h7e041cc_2 - build_number: 2 + version: 14.2.0 + build: h4852527_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_2.conda - sha256: ab22ecdc974cdbe148874ea876d9c564294d5eafa760f403ed4fd495307b4243 - md5: 9172c297304f2a20134fc56c97fbe229 - arch: x86_64 - platform: linux + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 3842773 - timestamp: 1695219454837 + size: 54105 + timestamp: 1729027780628 - kind: conda name: libthrift version: 0.18.1 @@ -9182,19 +8323,38 @@ packages: sha256: 0207f4234571d393d2f790aedaa1e127dfcd9d7fe3fe886ebdf31c9e7b9f7ce2 md5: 8e08eae60de32c940096ee9b4da35685 depends: - - libdeflate >=1.17,<1.18.0a0 - - libzlib >=1.2.13,<1.3.0a0 - jpeg >=9e,<10a + - lerc >=4.0.0,<5.0a0 + - libcxx >=14.0.6 + - libdeflate >=1.17,<1.18.0a0 - libwebp-base >=1.2.4,<2.0a0 + - libzlib >=1.2.13,<2.0.0a0 - xz >=5.2.6,<6.0a0 - - libcxx >=14.0.6 - - lerc >=4.0.0,<5.0a0 - zstd >=1.5.2,<1.6.0a0 - arch: aarch64 - platform: osx license: HPND size: 347549 timestamp: 1673818160649 +- kind: conda + name: libtiff + version: 4.6.0 + build: h129831d_3 + build_number: 3 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.6.0-h129831d_3.conda + sha256: f9b35c5ec1aea9a2cc20e9275a0bb8f056482faa8c5a62feb243ed780755ea30 + md5: 568593071d2e6cea7b5fc1f75bfa10ca + depends: + - lerc >=4.0.0,<5.0a0 + - libcxx >=16 + - libdeflate >=1.20,<1.21.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libwebp-base >=1.3.2,<2.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.5,<1.6.0a0 + license: HPND + size: 257489 + timestamp: 1711218113053 - kind: conda name: libtiff version: 4.6.0 @@ -9217,29 +8377,6 @@ packages: license: HPND size: 277480 timestamp: 1694958140034 -- kind: conda - name: libtiff - version: 4.6.0 - build: h684deea_2 - build_number: 2 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.6.0-h684deea_2.conda - sha256: 1ef5bd7295f4316b111f70ad21356fb9f0de50b85a341cac9e3a61ac6487fdf1 - md5: 2ca10a325063e000ad6d2a5900061e0d - depends: - - lerc >=4.0.0,<5.0a0 - - libcxx >=15.0.7 - - libdeflate >=1.19,<1.20.0a0 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libwebp-base >=1.3.2,<2.0a0 - - libzlib >=1.2.13,<1.3.0a0 - - xz >=5.2.6,<6.0a0 - - zstd >=1.5.5,<1.6.0a0 - arch: x86_64 - platform: osx - license: HPND - size: 266501 - timestamp: 1695661828714 - kind: conda name: libtiff version: 4.6.0 @@ -9326,8 +8463,6 @@ packages: md5: 40b61aab5c7ba9ff276c41cfffe6b80b depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD size: 33601 @@ -9341,8 +8476,6 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.44.2-h0dc2134_1.conda sha256: 9f815da1ae9edc9c70c0a6dd4fbdf8c615e0198f7a4b7258729e552925e490de md5: 850901f879c13361e0f767c3b3449b8d - arch: x86_64 - platform: osx license: MIT license_family: MIT size: 360910 @@ -9356,8 +8489,6 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.44.2-hb547adb_1.conda sha256: 62ec5250295b088f7ef93971e06cbf1bcd11ea86ad94c7f5a1aeca2af30135e1 md5: 6991ee4e88e2df061b2635236807f1c5 - arch: aarch64 - platform: osx license: MIT license_family: MIT size: 394836 @@ -9373,62 +8504,38 @@ packages: md5: d5447f6f8c208232db63db85e053574d depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: MIT license_family: MIT size: 823882 timestamp: 1690371294300 - kind: conda name: libwebp-base - version: 1.3.1 - build: hb547adb_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.3.1-hb547adb_0.conda - sha256: eee31a8b2bb5c0b1f950ed334f19f399bac0b0b8830dbe39d6f3b84e3aee21bf - md5: 538e751abad9d7ee1bbb5630c679c44d - constrains: - - libwebp 1.3.1 - arch: aarch64 - platform: osx - license: BSD-3-Clause - license_family: BSD - size: 274105 - timestamp: 1688047313680 -- kind: conda - name: libwebp-base - version: 1.3.2 - build: h0dc2134_0 + version: 1.4.0 + build: h10d778d_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.3.2-h0dc2134_0.conda - sha256: fa7580f26fec4c28321ec2ece1257f3293e0c646c635e9904679f4a8369be401 - md5: 4e7e9d244e87d66c18d36894fd6a8ae5 + url: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.4.0-h10d778d_0.conda + sha256: 7bafd8f4c637778cd0aa390bf3a894feef0e1fcf6ea6000c7ffc25c4c5a65538 + md5: b2c0047ea73819d992484faacbbe1c24 constrains: - - libwebp 1.3.2 - arch: x86_64 - platform: osx + - libwebp 1.4.0 license: BSD-3-Clause license_family: BSD - size: 346599 - timestamp: 1694709233836 + size: 355099 + timestamp: 1713200298965 - kind: conda name: libwebp-base - version: 1.3.2 - build: hd590300_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.2-hd590300_0.conda - sha256: 68764a760fa81ef35dacb067fe8ace452bbb41476536a4a147a1051df29525f0 - md5: 30de3fd9b3b602f7473f30e684eeea8c - depends: - - libgcc-ng >=12 + version: 1.4.0 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda + sha256: 0d4bad713a512d79bfeb4d61821f447afab8b0792aca823f505ce6b195e9fde5 + md5: c0af0edfebe780b19940e94871f1a765 constrains: - - libwebp 1.3.2 - arch: x86_64 - platform: linux + - libwebp 1.4.0 license: BSD-3-Clause license_family: BSD - size: 401830 - timestamp: 1694709121323 + size: 287750 + timestamp: 1713200194013 - kind: conda name: libwebp-base version: 1.4.0 @@ -9447,6 +8554,22 @@ packages: license_family: BSD size: 274359 timestamp: 1713200524021 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + sha256: 49bc5f6b1e11cb2babf2a2a731d1a680a5e08a858280876a779dbda06c78c35f + md5: b26e8aa824079e1be0294e7152ca4559 + depends: + - libgcc-ng >=12 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + size: 438953 + timestamp: 1713199854503 - kind: conda name: libxcb version: '1.13' @@ -9457,11 +8580,9 @@ packages: sha256: a89b1e46650c01a8791c201c108d6d49a0a5604dd24ddb18902057bbd90f7dbb md5: 6b3457a192f8091cb413962f65740ac4 depends: - - xorg-libxau * - - pthread-stubs * - - xorg-libxdmcp * - arch: aarch64 - platform: osx + - pthread-stubs + - xorg-libxau + - xorg-libxdmcp license: MIT license_family: MIT size: 353124 @@ -9476,33 +8597,13 @@ packages: md5: 33277193f5b92bad9fdd230eb700929c depends: - libgcc-ng >=12 - - pthread-stubs * - - xorg-libxau * - - xorg-libxdmcp * - arch: x86_64 - platform: linux + - pthread-stubs + - xorg-libxau + - xorg-libxdmcp license: MIT license_family: MIT size: 384238 timestamp: 1682082368177 -- kind: conda - name: libxcb - version: '1.15' - build: hb7f2c08_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.15-hb7f2c08_0.conda - sha256: f41904f466acc8b3197f37f2dd3a08da75720c7f7464d9267635debc4ac1902b - md5: 5513f57e0238c87c12dffedbcc9c1a4a - depends: - - pthread-stubs * - - xorg-libxau * - - xorg-libxdmcp * - arch: x86_64 - platform: osx - license: MIT - license_family: MIT - size: 313793 - timestamp: 1682083036825 - kind: conda name: libxcb version: '1.16' @@ -9522,6 +8623,23 @@ packages: license_family: MIT size: 989459 timestamp: 1724419883091 +- kind: conda + name: libxcb + version: 1.17.0 + build: hf1f96e2_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.17.0-hf1f96e2_0.conda + sha256: 8896cd5deff6f57d102734f3e672bc17120613647288f9122bec69098e839af7 + md5: bbeca862892e2898bdb45792a61c4afc + depends: + - __osx >=10.13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + size: 323770 + timestamp: 1727278927545 - kind: conda name: libxcrypt version: 4.4.36 @@ -9538,75 +8656,42 @@ packages: timestamp: 1702724383534 - kind: conda name: libxml2 - version: 2.11.5 - build: he3bdae6_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.11.5-he3bdae6_0.conda - sha256: add8ddef1e79ea52a9649cd2bc7135b0d49524acc0a92fd3b71ea97558f1be49 - md5: 2a3b45f84f55113ccfaf0ab6836152fa - depends: - - xz >=5.2.6,<6.0a0 - - icu >=72.1,<73.0a0 - - libiconv >=1.17,<2.0a0 - - libzlib >=1.2.13,<1.3.0a0 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - size: 615813 - timestamp: 1691593272628 -- kind: conda - name: libxml2 - version: 2.11.6 - build: hc3477c8_0 + version: 2.12.7 + build: h0f24e4e_4 + build_number: 4 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.11.6-hc3477c8_0.conda - sha256: 6ed853ef69bf43998eacc6fd022d7ac170d9e2d3d273b0be0dc3da593fb0fc90 - md5: 08ffbb4c22dd3622e122058368f8b708 + url: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.12.7-h0f24e4e_4.conda + sha256: ae78197961b09b0eef4ee194a44e4adc4555c0f2f20c348086b0cd8aaf2f7731 + md5: ed4d301f0d2149b34deb9c4fecafd836 depends: - libiconv >=1.17,<2.0a0 - - libzlib >=1.2.13,<2.0.0a0 + - libzlib >=1.3.1,<2.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: MIT license_family: MIT - size: 1627582 - timestamp: 1700245325646 + size: 1682090 + timestamp: 1721031296951 - kind: conda - name: libzlib - version: 1.2.13 - build: h53f4e23_5 - build_number: 5 + name: libxml2 + version: 2.12.7 + build: h9a80f22_3 + build_number: 3 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.2.13-h53f4e23_5.conda - sha256: ab1c8aefa2d54322a63aaeeefe9cf877411851738616c4068e0dccc66b9c758a - md5: 1a47f5236db2e06a320ffa0392f81bd8 - constrains: - - zlib 1.2.13 *_5 - arch: aarch64 - platform: osx - license: Zlib - license_family: Other - size: 48102 - timestamp: 1686575426584 -- kind: conda - name: libzlib - version: 1.2.13 - build: h8a1eda9_5 - build_number: 5 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h8a1eda9_5.conda - sha256: fc58ad7f47ffea10df1f2165369978fba0a1cc32594aad778f5eec725f334867 - md5: 4a3ad23f6e16f99c04e166767193d700 - constrains: - - zlib 1.2.13 *_5 - arch: x86_64 - platform: osx - license: Zlib - license_family: Other - size: 59404 - timestamp: 1686575566695 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.12.7-h9a80f22_3.conda + sha256: 760d05981dd32d55ee820a0f35f714a7af32c1c4cc209bf705a0ede93d5bd683 + md5: 705829a78a7ce3dff19a967f0f0f5ed3 + depends: + - __osx >=11.0 + - icu >=73.2,<74.0a0 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + license: MIT + license_family: MIT + size: 588441 + timestamp: 1720772863811 - kind: conda name: libzlib version: 1.3.1 @@ -9629,20 +8714,55 @@ packages: - kind: conda name: libzlib version: 1.3.1 - build: h4ab18f5_1 - build_number: 1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 46438 + timestamp: 1727963202283 +- kind: conda + name: libzlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda - sha256: adf6096f98b537a11ae3729eaa642b0811478f0ea0402ca67b5108fe2cb0010d - md5: 57d7dc60e9325e3de37ff8dffd18e814 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 depends: - - libgcc-ng >=12 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 60963 + timestamp: 1727963148474 +- kind: conda + name: libzlib + version: 1.3.1 + build: hd23fc13_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + sha256: 8412f96504fc5993a63edf1e211d042a1fd5b1d51dedec755d2058948fcced09 + md5: 003a54a4e32b02f7355b50a837e699da + depends: + - __osx >=10.13 constrains: - - zlib 1.3.1 *_1 + - zlib 1.3.1 *_2 license: Zlib license_family: Other - size: 61574 - timestamp: 1716874187109 + size: 57133 + timestamp: 1727963183990 - kind: conda name: libzopfli version: 1.0.3 @@ -9653,8 +8773,6 @@ packages: md5: 55f3f5c9bccca18d33cb3a4bcfe002d7 depends: - libcxx >=11.0.0 - arch: x86_64 - platform: osx license: Apache-2.0 license_family: Apache size: 162262 @@ -9670,8 +8788,6 @@ packages: depends: - vc >=14.1,<15.0a0 - vs2015_runtime >=14.16.27012 - arch: x86_64 - platform: win license: Apache-2.0 license_family: Apache size: 207974 @@ -9687,8 +8803,6 @@ packages: depends: - libgcc-ng >=9.3.0 - libstdcxx-ng >=9.3.0 - arch: x86_64 - platform: linux license: Apache-2.0 license_family: Apache size: 168074 @@ -9703,44 +8817,42 @@ packages: md5: a0758d74f57741aa0d9ede13fd592e56 depends: - libcxx >=11.0.0 - arch: aarch64 - platform: osx license: Apache-2.0 license_family: Apache size: 147901 timestamp: 1607309166373 - kind: conda name: llvm-openmp - version: 16.0.6 - build: h1c12783_0 + version: 19.1.2 + build: hb52a8e5_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-16.0.6-h1c12783_0.conda - sha256: f5cbb852853a7a931716d55e39515876f61fefd0cb4e055f286adc2dc3bc9d2a - md5: 52e5730888439f7f55fd4f83905581b4 + url: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.2-hb52a8e5_0.conda + sha256: a1836fa9eddf8b3fa2209db4a3423b13fdff93a8eacc9fe8360a6867e7f440d0 + md5: 7ad59f95f091ed6a99a7cbcd6f201be0 + depends: + - __osx >=11.0 constrains: - - openmp 16.0.6|16.0.6.* - arch: aarch64 - platform: osx + - openmp 19.1.2|19.1.2.* license: Apache-2.0 WITH LLVM-exception license_family: APACHE - size: 268740 - timestamp: 1686865657336 + size: 280737 + timestamp: 1729145191646 - kind: conda name: llvm-openmp - version: 19.1.1 - build: h545e0da_0 + version: 19.1.2 + build: hf78d878_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-19.1.1-h545e0da_0.conda - sha256: 7e15f5ac89e750dadbc6fe81dc2909dd056c7324c72379a8440b57a6174a1146 - md5: 3f3e4a599dd2638a945fc5821090db07 + url: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-19.1.2-hf78d878_0.conda + sha256: 92231d391886bca0c0dabb42f02a37e7acb8ea84399843173fe8c294814735dd + md5: ca5f963676a9ad5383b7441368e1d107 depends: - __osx >=10.13 constrains: - - openmp 19.1.1|19.1.1.* + - openmp 19.1.2|19.1.2.* license: Apache-2.0 WITH LLVM-exception license_family: APACHE - size: 305199 - timestamp: 1728517141555 + size: 305589 + timestamp: 1729145249496 - kind: conda name: lz4-c version: 1.9.4 @@ -9751,8 +8863,6 @@ packages: md5: 45505bec548634f7d05e02fb25262cb9 depends: - libcxx >=14.0.6 - arch: aarch64 - platform: osx license: BSD-2-Clause license_family: BSD size: 141188 @@ -9768,8 +8878,6 @@ packages: depends: - libgcc-ng >=12 - libstdcxx-ng >=12 - arch: x86_64 - platform: linux license: BSD-2-Clause license_family: BSD size: 143402 @@ -9786,8 +8894,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vs2015_runtime >=14.29.30139 - arch: x86_64 - platform: win license: BSD-2-Clause license_family: BSD size: 134235 @@ -9802,8 +8908,6 @@ packages: md5: aa04f7143228308662696ac24023f991 depends: - libcxx >=14.0.6 - arch: x86_64 - platform: osx license: BSD-2-Clause license_family: BSD size: 156415 @@ -9818,10 +8922,8 @@ packages: sha256: 9de95a7996d5366ae0808eef2acbc63f9b11b874aa42375f55379e6715845dc6 md5: 066552ac6b907ec6d72c0ddab29050dc depends: - - m2w64-gcc-libs-core * + - m2w64-gcc-libs-core - msys2-conda-epoch ==20160418 - arch: x86_64 - platform: win license: GPL, LGPL, FDL, custom size: 350687 timestamp: 1608163451316 @@ -9835,13 +8937,11 @@ packages: sha256: 3bd1ab02b7c89a5b153a17be03b36d833f1517ff2a6a77ead7c4a808b88196aa md5: fe759119b8b3bfa720b8762c6fdc35de depends: - - m2w64-gcc-libgfortran * - - m2w64-gcc-libs-core * - - m2w64-gmp * - - m2w64-libwinpthread-git * + - m2w64-gcc-libgfortran + - m2w64-gcc-libs-core + - m2w64-gmp + - m2w64-libwinpthread-git - msys2-conda-epoch ==20160418 - arch: x86_64 - platform: win license: GPL3+, partial:GCCRLE, partial:LGPL2+ size: 532390 timestamp: 1608163512830 @@ -9855,11 +8955,9 @@ packages: sha256: 58afdfe859ed2e9a9b1cc06bc408720cb2c3a6a132e59d4805b090d7574f4ee0 md5: 4289d80fb4d272f1f3b56cfe87ac90bd depends: - - m2w64-gmp * - - m2w64-libwinpthread-git * + - m2w64-gmp + - m2w64-libwinpthread-git - msys2-conda-epoch ==20160418 - arch: x86_64 - platform: win license: GPL3+, partial:GCCRLE, partial:LGPL2+ size: 219240 timestamp: 1608163481341 @@ -9874,8 +8972,6 @@ packages: md5: 53a1c73e1e3d185516d7e3af177596d9 depends: - msys2-conda-epoch ==20160418 - arch: x86_64 - platform: win license: LGPL3 size: 743501 timestamp: 1608163782057 @@ -9890,8 +8986,6 @@ packages: md5: 774130a326dee16f1ceb05cc687ee4f0 depends: - msys2-conda-epoch ==20160418 - arch: x86_64 - platform: win license: MIT, BSD size: 31928 timestamp: 1608166099896 @@ -9899,7 +8993,7 @@ packages: name: markdown-it-py version: 3.0.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda sha256: c041b0eaf7a6af3344d5dd452815cdc148d6284fec25a4fa3f4263b3a021e962 @@ -9907,12 +9001,8 @@ packages: depends: - mdurl >=0.1,<1 - python >=3.8 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/markdown-it-py size: 64356 timestamp: 1686175179621 - kind: conda @@ -9997,24 +9087,20 @@ packages: timestamp: 1728489176185 - kind: conda name: matplotlib-inline - version: 0.1.6 + version: 0.1.7 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2 - sha256: aa091b88aec55bfa2d9207028d8cdc689b9efb090ae27b99557e93c675be2f3c - md5: b21613793fcc81d944c76c9f2864a7de + url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda + sha256: 7ea68676ea35fbb095420bbcc1c82c4767b8be7bb56abb6989b7f89d957a3bab + md5: 779345c95648be40d22aaa89de7d4254 depends: - python >=3.6 - - traitlets * - arch: x86_64 - platform: win + - traitlets license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/matplotlib-inline - size: 12273 - timestamp: 1660814913405 + size: 14599 + timestamp: 1713250613726 - kind: conda name: maturin version: 1.2.3 @@ -10092,66 +9178,54 @@ packages: timestamp: 1695301814558 - kind: conda name: mdit-py-plugins - version: 0.4.0 + version: 0.4.2 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.0-pyhd8ed1ab_0.conda - sha256: 1ddac8d2be448cd1fbe49d2ca09df7e10d99679d53146a917f8bb4899f76d0ca - md5: 6c5358a10873a15398b6f15f60cb5e1f + url: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.2-pyhd8ed1ab_0.conda + sha256: 5cedc99412278b37e9596f1f991d49f5a1663fe79767cf814a288134a1400ba9 + md5: 5387f2cfa28f8a3afa3368bb4ba201e8 depends: - markdown-it-py >=1.0.0,<4.0.0 - python >=3.8 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/mdit-py-plugins - size: 41197 - timestamp: 1686175527330 + size: 42126 + timestamp: 1725995333692 - kind: conda name: mdurl - version: 0.1.0 + version: 0.1.2 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.0-pyhd8ed1ab_0.tar.bz2 - sha256: c678b9194e025b1fb665bec30ee20aab93399203583875b1dcc0a3b52a8f5523 - md5: f8dab71fdc13b1bf29a01248b156d268 + url: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + sha256: 64073dfb6bb429d52fff30891877b48c7ec0f89625b1bf844905b66a81cce6e1 + md5: 776a8dd9e824f77abac30e6ef43a8f7a depends: - python >=3.6 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/mdurl - size: 13707 - timestamp: 1639515992326 + size: 14680 + timestamp: 1704317789138 - kind: conda name: minio version: 7.1.17 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/minio-7.1.17-pyhd8ed1ab_0.conda sha256: 845cea4347a5b40d08caf013a7ae4aefe0112a66dd3bf0aa334068a3a5db962c md5: 37a6599b8de3b46f8faff4aeb55b718f depends: - - certifi * - - configparser * - - future * + - certifi + - configparser + - future - python >=3.6 - - python-dateutil * - - pytz * - - urllib3 * - arch: x86_64 - platform: win + - python-dateutil + - pytz + - urllib3 license: Apache-2.0 license_family: Apache - purls: - - pkg:pypi/minio size: 59925 timestamp: 1695627015341 - kind: conda @@ -10162,8 +9236,6 @@ packages: url: https://conda.anaconda.org/conda-forge/win-64/minio-server-2023.09.23.03.47.50-h56e8100_0.conda sha256: 1382416ae6dc8c5fcde90f448e03860ef0da591d2aa3e06bde312ccfb8bd5607 md5: 842697378d8ac142d1dac05a310cb9eb - arch: x86_64 - platform: win license: AGPL-3.0-only license_family: AGPL size: 28599729 @@ -10178,8 +9250,6 @@ packages: md5: e5631d220e6361e9945598970cb8cbd3 constrains: - __osx>=10.12 - arch: x86_64 - platform: osx license: AGPL-3.0-only license_family: AGPL size: 29438678 @@ -10192,8 +9262,6 @@ packages: url: https://conda.anaconda.org/conda-forge/linux-64/minio-server-2023.09.23.03.47.50-hbcca054_0.conda sha256: 83d01977a656502d67ba01b709bdaa39730d19d4630d0965e3150fc5b76de5b1 md5: ff773f379a8324cefc3a904a5fcb0c27 - arch: x86_64 - platform: linux license: AGPL-3.0-only license_family: AGPL size: 28514641 @@ -10206,68 +9274,41 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-arm64/minio-server-2023.09.23.03.47.50-hf0a4a13_0.conda sha256: e8ecdc8c0943cd01a1ac488f2fdea36ec74161ca1225f47c06b71934dea61ef2 md5: 716354cbeec9ed541b75c4d1398af8e9 - arch: aarch64 - platform: osx license: AGPL-3.0-only license_family: AGPL size: 28775220 timestamp: 1695661328725 -- kind: conda - name: mistune - version: 3.0.1 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.1-pyhd8ed1ab_0.conda - sha256: 0b4558d3afb64e23b66f5279b704de76ebeb6b4eebbf913d65fbd4ba7d9acc2f - md5: 1dad8397c94e4de97a70de552a7dcf49 - depends: - - python >=3.7 - arch: aarch64 - platform: osx - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/mistune - size: 66169 - timestamp: 1692116828443 - kind: conda name: mistune version: 3.0.2 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda sha256: f95cb70007e3cc2ba44e17c29a056b499e6dadf08746706d0c817c8e2f47e05c md5: 5cbee699846772cc939bef23a0d524ed depends: - python >=3.7 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/mistune size: 66022 timestamp: 1698947249750 - kind: conda name: mkl - version: 2023.2.0 - build: h6a75c08_50496 - build_number: 50496 + version: 2024.1.0 + build: h66d3029_694 + build_number: 694 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/mkl-2023.2.0-h6a75c08_50496.conda - sha256: 40dc6ac2aa071ca248223de7cdbdfdb216bc8632a17104b1507bcbf9276265d4 - md5: 03da367d935ecf4d3e4005cf705d0e21 + url: https://conda.anaconda.org/conda-forge/win-64/mkl-2024.1.0-h66d3029_694.conda + sha256: 4f86e9ad74a7792c836cd4cb7fc415bcdb50718ffbaa90c5571297f71764b980 + md5: a17423859d3fb912c8f2e9797603ddb6 depends: - - intel-openmp 2023.* + - intel-openmp 2024.* - tbb 2021.* - arch: x86_64 - platform: win - license: LicenseRef-ProprietaryIntel + license: LicenseRef-IntelSimplifiedSoftwareOct2022 license_family: Proprietary - size: 144749783 - timestamp: 1695995252418 + size: 109381621 + timestamp: 1716561374449 - kind: conda name: msys2-conda-epoch version: '20160418' @@ -10277,8 +9318,6 @@ packages: url: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 sha256: 99358d58d778abee4dca82ad29fb58058571f19b0f86138363c260049d4ac7f1 md5: b0309b72560df66f71a9d5e34a5efdfa - arch: x86_64 - platform: win size: 3227 timestamp: 1608166968312 - kind: conda @@ -10382,229 +9421,145 @@ packages: timestamp: 1675543414256 - kind: conda name: narwhals - version: 1.8.4 + version: 1.9.4 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.8.4-pyhd8ed1ab_0.conda - sha256: b74a21d86093a8673bc7b9fb2cbc8d95c07d66974fb09e661e6fb6df81cbcae6 - md5: 3ded56572050710d75079ae7521afbfc + url: https://conda.anaconda.org/conda-forge/noarch/narwhals-1.9.4-pyhd8ed1ab_0.conda + sha256: 9ffae2d9162ba3e818bde14f04485a10a18475fb6379834b936a1ceb5b03e9e4 + md5: 0af00b268c7266ba07704c8542845116 depends: - python >=3.8 license: MIT - size: 102448 - timestamp: 1727475884317 + license_family: MIT + size: 110460 + timestamp: 1729185405948 - kind: conda name: nbclient version: 0.7.4 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.7.4-pyhd8ed1ab_0.conda - sha256: f26afcbbdd4bd1245db514c6ebc6ef18cc12067145dcab229b6f88653575d44c - md5: f7aa15f77d29b11caa1df1eb15383c59 - depends: - - jupyter_client >=6.1.12 - - jupyter_core >=4.12,!=5.0.* - - nbformat >=5.1 - - python >=3.7 - - traitlets >=5.3 - arch: x86_64 - platform: win - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/nbclient - size: 65185 - timestamp: 1682452350304 -- kind: conda - name: nbconvert - version: 7.7.4 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.7.4-pyhd8ed1ab_0.conda - sha256: 27eaa8e12d68deec5b04786841d6a1aa4134cb71a82d5a7a4aee5ab51b4fab8e - md5: 2c341d4a10927be7a9a0b9f264039782 - depends: - - nbconvert-pandoc ==7.7.4 pyhd8ed1ab_0 - - python >=3.8 - - nbconvert-core ==7.7.4 pyhd8ed1ab_0 - arch: aarch64 - platform: osx - license: BSD-3-Clause - size: 8180 - timestamp: 1692214750984 -- kind: conda - name: nbconvert - version: 7.10.0 - build: pyhd8ed1ab_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.10.0-pyhd8ed1ab_0.conda - sha256: 5d41aadcaaa841d0bd12e05858ead24b0825ae2c62158a9a3ea7885f0780d571 - md5: 800568b9c39cfd87a2a6a9a0488ea265 + sha256: f26afcbbdd4bd1245db514c6ebc6ef18cc12067145dcab229b6f88653575d44c + md5: f7aa15f77d29b11caa1df1eb15383c59 depends: - - nbconvert-core ==7.10.0 pyhd8ed1ab_0 - - nbconvert-pandoc ==7.10.0 pyhd8ed1ab_0 - - python >=3.8 - arch: x86_64 - platform: win + - jupyter_client >=6.1.12 + - jupyter_core >=4.12,!=5.0.* + - nbformat >=5.1 + - python >=3.7 + - traitlets >=5.3 license: BSD-3-Clause license_family: BSD - size: 8338 - timestamp: 1698678660848 + size: 65185 + timestamp: 1682452350304 - kind: conda - name: nbconvert-core - version: 7.7.4 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.7.4-pyhd8ed1ab_0.conda - sha256: c869001896bdf57fc32ae67954e0694ae61133ffaf63d0991432f5b9d3262bf4 - md5: 44890ae4b0c7ca721b701febb0081401 + name: nbconvert + version: 7.16.4 + build: hd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.4-hd8ed1ab_1.conda + sha256: e014e8a583ca2f2fc751bf9093ee95bfd203bd189bafe0f512c0262fece69bce + md5: ab83e3b9ca2b111d8f332e9dc8b2170f depends: - - python >=3.8 - - tinycss2 * - - traitlets >=5.0 - - mistune >=2.0.3,<4 - - entrypoints >=0.2.2 - - jupyter_core >=4.7 - - pandocfilters >=1.4.1 - - markupsafe >=2.0 - - nbformat >=5.1 - - nbclient >=0.5.0 - - defusedxml * - - jupyterlab_pygments * - - jinja2 >=3.0 - - bleach * - - pygments >=2.4.1 - - beautifulsoup4 * - - packaging * - constrains: - - nbconvert =7.7.4=*_0 - - pandoc >=2.14.2,<4.0.0 - arch: aarch64 - platform: osx + - nbconvert-core 7.16.4 pyhd8ed1ab_1 + - nbconvert-pandoc 7.16.4 hd8ed1ab_1 license: BSD-3-Clause - size: 187134 - timestamp: 1692214711405 + license_family: BSD + size: 8335 + timestamp: 1718135538730 - kind: conda name: nbconvert-core - version: 7.10.0 - build: pyhd8ed1ab_0 - subdir: win-64 + version: 7.16.4 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.10.0-pyhd8ed1ab_0.conda - sha256: 693fca2715f78faee1c5be2362d2f1ea30e6b7179b4d2762fd9ffdaae5c8a65a - md5: 56c421c936a17bbc7fd4b36c9bd3b236 + url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.4-pyhd8ed1ab_1.conda + sha256: 074d858c5808e0a832acc0da37cd70de1565e8d6e17a62d5a11b3902b5e78319 + md5: e2d2abb421c13456a9a9f80272fdf543 depends: - - beautifulsoup4 * - - bleach * - - defusedxml * + - beautifulsoup4 + - bleach + - defusedxml - entrypoints >=0.2.2 - jinja2 >=3.0 - jupyter_core >=4.7 - - jupyterlab_pygments * + - jupyterlab_pygments - markupsafe >=2.0 - mistune >=2.0.3,<4 - nbclient >=0.5.0 - nbformat >=5.1 - - packaging * + - packaging - pandocfilters >=1.4.1 - pygments >=2.4.1 - python >=3.8 - - tinycss2 * + - tinycss2 - traitlets >=5.0 constrains: - - nbconvert =7.10.0=*_0 - - pandoc >=2.14.2,<4.0.0 - arch: x86_64 - platform: win + - nbconvert =7.16.4=*_1 + - pandoc >=2.9.2,<4.0.0 license: BSD-3-Clause license_family: BSD - size: 188466 - timestamp: 1698678612863 -- kind: conda - name: nbconvert-pandoc - version: 7.7.4 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.7.4-pyhd8ed1ab_0.conda - sha256: d0fac92681e5c00691e606327bf6f490798216f1e4e450b635991444f57f243c - md5: d1ac60298f75db83b5a7016c775e77db - depends: - - pandoc * - - python >=3.8 - - nbconvert-core ==7.7.4 pyhd8ed1ab_0 - arch: aarch64 - platform: osx - size: 7180 - timestamp: 1692214724861 + size: 189599 + timestamp: 1718135529468 - kind: conda name: nbconvert-pandoc - version: 7.10.0 - build: pyhd8ed1ab_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.10.0-pyhd8ed1ab_0.conda - sha256: 800494e6919176e48e4e8fff0d0341a463e17c3ca658ecede0a859caae3ca1c1 - md5: 2307d9331078c3097631ac2129d4f3cf + version: 7.16.4 + build: hd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.4-hd8ed1ab_1.conda + sha256: 31df882e97b227e7e57a328a36840e65ea3247023ac2ce502fd5d4b621da8dbe + md5: 37cec2cf68f4c09563d8bc833791096b depends: - - nbconvert-core ==7.10.0 pyhd8ed1ab_0 - - pandoc * - - python >=3.8 - arch: x86_64 - platform: win - size: 7329 - timestamp: 1698678629109 + - nbconvert-core 7.16.4 pyhd8ed1ab_1 + - pandoc + license: BSD-3-Clause + license_family: BSD + size: 8371 + timestamp: 1718135533429 - kind: conda name: nbformat - version: 5.9.2 + version: 5.10.4 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.9.2-pyhd8ed1ab_0.conda - sha256: fc82c5a9116820757b03ffb836b36f0f50e4cd390018024dbadb0ee0217f6992 - md5: 61ba076de6530d9301a0053b02f093d2 + url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda + sha256: 36fe73da4d37bc7ac2d1540526ecd294fbd09acda04e096181ab8f1ccd2b464c + md5: 0b57b5368ab7fc7cdc9e3511fa867214 depends: - jsonschema >=2.6 - - jupyter_core * + - jupyter_core >=4.12,!=5.0.* - python >=3.8 - - python-fastjsonschema * + - python-fastjsonschema >=2.15 - traitlets >=5.1 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/nbformat - size: 100446 - timestamp: 1690815009867 + size: 101232 + timestamp: 1712239122969 - kind: conda name: nbval version: 0.9.6 build: pyh9f0ad1d_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/nbval-0.9.6-pyh9f0ad1d_0.tar.bz2 sha256: c52e60b8aa98d8af944f3c7af7f5db356f8f6b4e73d25a7d2adaf249e3ff6d45 md5: b627e05284e7affc46b6e4878aa1d96b depends: - - coverage * - - ipykernel * - - jupyter_client * - - nbformat * - - pytest * - - python * - - six * - arch: x86_64 - platform: win + - coverage + - ipykernel + - jupyter_client + - nbformat + - pytest + - python + - six license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/nbval size: 23146 timestamp: 1596196217832 - kind: conda @@ -10652,85 +9607,39 @@ packages: timestamp: 1724658603042 - kind: conda name: nest-asyncio - version: 1.5.6 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.6-pyhd8ed1ab_0.tar.bz2 - sha256: 594d240d8be933b6e47b78b786269cc89ffa34874544d9dbed1c6afc9213869b - md5: 7b868f21adde0d9b8b38f9c16836589b - depends: - - python >=3.5 - arch: aarch64 - platform: osx - license: BSD-2-Clause - license_family: BSD - purls: - - pkg:pypi/nest-asyncio - size: 9739 - timestamp: 1664685092387 -- kind: conda - name: nest-asyncio - version: 1.5.8 + version: 1.6.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.5.8-pyhd8ed1ab_0.conda - sha256: d7b795b4e754136841c6da3f9fa1a0f7ec37bc7167e7dd68c5b45e657133e008 - md5: a4f0e4519bc50eee4f53f689be9607f7 + url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda + sha256: 30db21d1f7e59b3408b831a7e0417b83b53ee6223afae56482c5f26da3ceb49a + md5: 6598c056f64dc8800d40add25e4e2c34 depends: - python >=3.5 - arch: x86_64 - platform: win license: BSD-2-Clause license_family: BSD - purls: - - pkg:pypi/nest-asyncio - size: 11630 - timestamp: 1697083896431 -- kind: conda - name: networkx - version: '3.1' - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.1-pyhd8ed1ab_0.conda - sha256: 6b955c8530985fa727ad3323653a54af44ecf453cfdb1b549b3edff609bd3728 - md5: 254f787d5068bc89f578bf63893ce8b4 - depends: - - python >=3.8 - arch: aarch64 - platform: osx - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/networkx - size: 1459994 - timestamp: 1680693050542 + size: 11638 + timestamp: 1705850780510 - kind: conda name: networkx - version: 3.2.1 + version: 3.4.1 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda - sha256: 7629aa4f9f8cdff45ea7a4701fe58dccce5bf2faa01c26eb44cbb27b7e15ca9d - md5: 425fce3b531bed6ec3c74fab3e5f0a1c + url: https://conda.anaconda.org/conda-forge/noarch/networkx-3.4.1-pyhd8ed1ab_0.conda + sha256: f753c9a2be8ad02077f027f4e03d9531b305c5297d3708c410cf95b99195b335 + md5: 4994669899eb2e84ab855edcb71efc58 depends: - - python >=3.9 + - python >=3.10 constrains: - - matplotlib >=3.5 - - scipy >=1.9,!=1.11.0,!=1.11.1 - - numpy >=1.22 - - pandas >=1.4 - arch: x86_64 - platform: win + - scipy >=1.10,!=1.11.0,!=1.11.1 + - numpy >=1.24 + - matplotlib >=3.7 + - pandas >=2.0 license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/networkx - size: 1149552 - timestamp: 1698504905258 + size: 1197665 + timestamp: 1728721145589 - kind: conda name: nodejs version: 20.5.1 @@ -10744,13 +9653,11 @@ packages: - icu >=73.2,<74.0a0 - libcxx >=15.0.7 - libuv >=1.44.2,<1.45.0a0 - - libzlib >=1.2.13,<1.3.0a0 + - libzlib >=1.2.13,<2.0.0a0 - openssl >=3.1.2,<4.0a0 - - zlib * + - zlib constrains: - __osx >=10.15 - arch: x86_64 - platform: osx license: MIT license_family: MIT size: 12167058 @@ -10764,8 +9671,6 @@ packages: url: https://conda.anaconda.org/conda-forge/win-64/nodejs-20.5.1-h57928b3_1.conda sha256: ee9bebc081d1b6b3ddc5961bb4df9ba3633219e0ddcb8615d815f80e447e9bb8 md5: ebab114aa15a59b1476b8ba5fb085a7e - arch: x86_64 - platform: win license: MIT license_family: MIT size: 22555729 @@ -10773,24 +9678,23 @@ packages: - kind: conda name: nodejs version: 20.5.1 - build: ha2ed473_0 + build: h5f47a4d_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-20.5.1-ha2ed473_0.conda - sha256: 3714032f2be16a64e0e33dc859b8dff35adb62284cff888d9368206c45385627 - md5: 70b9d24d6840d7bac3b76e6d549ac3a4 + url: https://conda.anaconda.org/conda-forge/osx-arm64/nodejs-20.5.1-h5f47a4d_1.conda + sha256: 8dd6e358423357839c46af632e0927c3d3987a23c8cdfc5c1ff7c5d45c68bada + md5: 771879f28f334321c8840fc59d6de330 depends: - - libuv >=1.44.2,<1.45.0a0 - - icu >=72.1,<73.0a0 + - icu >=73.2,<74.0a0 - libcxx >=15.0.7 + - libuv >=1.44.2,<1.45.0a0 + - libzlib >=1.2.13,<2.0.0a0 - openssl >=3.1.2,<4.0a0 - - libzlib >=1.2.13,<1.3.0a0 - - zlib * - arch: aarch64 - platform: osx + - zlib license: MIT license_family: MIT - size: 11647587 - timestamp: 1692133104947 + size: 11664910 + timestamp: 1693005275313 - kind: conda name: nodejs version: 20.5.1 @@ -10815,24 +9719,20 @@ packages: timestamp: 1692993185686 - kind: conda name: notebook-shim - version: 0.2.3 + version: 0.2.4 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.3-pyhd8ed1ab_0.conda - sha256: f028d7ad1f2175cde307db08b60d07e371b9d6f035cfae6c81ea94b4c408c538 - md5: 67e0fe74c156267d9159e9133df7fd37 + url: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda + sha256: 9b5fdef9ebe89222baa9da2796ebe7bc02ec6c5a1f61327b651d6b92cf9a0230 + md5: 3d85618e2c97ab896b5b5e298d32b5b3 depends: - jupyter_server >=1.8,<3 - python >=3.7 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/notebook-shim - size: 16783 - timestamp: 1682360712235 + size: 16880 + timestamp: 1707957948029 - kind: conda name: numpy version: 1.26.4 @@ -10932,9 +9832,7 @@ packages: md5: ca985cca126d5564d4c41244f5e0d8b7 depends: - symlink-exe-runtime >=1.0,<2.0a0 - - vs2015_runtime * - arch: x86_64 - platform: win + - vs2015_runtime license: GPL-2.0-or-later WITH Classpath-exception-2.0 license_family: GPL size: 170276751 @@ -10950,9 +9848,7 @@ packages: md5: e07e71ac45d91bc95e5733a5fb82f7fa depends: - libcxx >=15.0.7 - - libzlib >=1.2.13,<1.3.0a0 - arch: x86_64 - platform: osx + - libzlib >=1.2.13,<2.0.0a0 license: GPL-2.0-or-later WITH Classpath-exception-2.0 license_family: GPL size: 172513997 @@ -10960,20 +9856,19 @@ packages: - kind: conda name: openjdk version: 20.0.0 - build: hbe7ddab_0 + build: hbe7ddab_2 + build_number: 2 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/openjdk-20.0.0-hbe7ddab_0.conda - sha256: 2aa3b4b7d7b49ef83748a8c6e214ee341ab4476b67d80ed1ea6aad9bf177c4e8 - md5: 9a0e51ae545ec927bfce6a6065117bc2 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openjdk-20.0.0-hbe7ddab_2.conda + sha256: e70d968a605a53aa8ca48a6770dec756eb805df67c2c42e690f5caaa3f0e798d + md5: c27fe70b6a7cec03d79dc1538c3bc492 depends: - - libzlib >=1.2.13,<1.3.0a0 - libcxx >=15.0.7 - arch: aarch64 - platform: osx + - libzlib >=1.2.13,<2.0.0a0 license: GPL-2.0-or-later WITH Classpath-exception-2.0 license_family: GPL - size: 170407598 - timestamp: 1685525612933 + size: 170362594 + timestamp: 1693890120650 - kind: conda name: openjdk version: 20.0.0 @@ -11017,12 +9912,10 @@ packages: sha256: 2bb159e385e633a08cc164f50b4e39fa465b85f54c376a5c20aa15f57ef407b3 md5: c3e184f0810a4614863569488b1ac709 depends: - - libtiff >=4.5.0,<4.6.0a0 - libcxx >=14.0.6 - libpng >=1.6.39,<1.7.0a0 - - libzlib >=1.2.13,<1.3.0a0 - arch: aarch64 - platform: osx + - libtiff >=4.5.0,<4.6.0a0 + - libzlib >=1.2.13,<2.0.0a0 license: BSD-2-Clause license_family: BSD size: 307087 @@ -11058,7 +9951,7 @@ packages: - libgcc-ng >=12 - libpng >=1.6.43,<1.7.0a0 - libstdcxx-ng >=12 - - libtiff >=4.6.0,<4.7.0a0 + - libtiff >=4.6.0,<4.8.0a0 - libzlib >=1.2.13,<2.0.0a0 license: BSD-2-Clause license_family: BSD @@ -11227,31 +10120,11 @@ packages: license_family: Apache size: 874908 timestamp: 1688234815207 -- kind: conda - name: outcome - version: 1.2.0 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/outcome-1.2.0-pyhd8ed1ab_0.tar.bz2 - sha256: edd73021f4b1edd73ae42b03be1b5c4dcb8bd8807c1f26f16285d2bdb6a62edf - md5: 3dbb9ece72652131f12d66e889da7c0a - depends: - - attrs >=19.2.0 - - python >=3.7 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - purls: - - pkg:pypi/outcome - size: 12570 - timestamp: 1655217824195 - kind: conda name: outcome version: 1.3.0.post0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_0.conda sha256: f3d05ad6bf14e33efa0a526289e816f06a0fae8124f783b2231ee9b934de652a @@ -11259,70 +10132,41 @@ packages: depends: - attrs >=19.2.0 - python >=3.7 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/outcome size: 15544 timestamp: 1698324206436 - kind: conda name: overrides - version: 7.4.0 + version: 7.7.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/overrides-7.4.0-pyhd8ed1ab_0.conda - sha256: 29db8c3b521d261bf71897ba3cfbebc81cd61e581b30fcb984b5a713f02fe1ff - md5: 4625b7b01d7f4ac9c96300a5515acfaa + url: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda + sha256: 5e238e5e646414d517a13f6786c7227206ace58271e3ef63f6adca4d6a4c2839 + md5: 24fba5a9d161ad8103d4e84c0e1a3ed4 depends: - python >=3.6 - - typing_utils * - arch: x86_64 - platform: win + - typing_utils license: Apache-2.0 license_family: APACHE - size: 29976 - timestamp: 1691338962381 + size: 30232 + timestamp: 1706394723472 - kind: conda name: packaging - version: '23.1' + version: '24.1' build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/packaging-23.1-pyhd8ed1ab_0.conda - sha256: ded536a96a00d45a693dbc2971bb688248324dadd129eddda2100e177583d768 - md5: 91cda59e66e1e4afe9476f8ef98f5c30 - depends: - - python >=3.7 - arch: aarch64 - platform: osx - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/packaging - size: 46098 - timestamp: 1681337144376 -- kind: conda - name: packaging - version: '23.2' - build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda - sha256: 69b3ace6cca2dab9047b2c24926077d81d236bef45329d264b394001e3c3e52f - md5: 79002079284aa895f883c6b7f3f88fd6 + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 + md5: cbe1bb1f21567018ce595d9c2be0f0db depends: - - python >=3.7 - arch: x86_64 - platform: win + - python >=3.8 license: Apache-2.0 license_family: APACHE - purls: - - pkg:pypi/packaging - size: 49452 - timestamp: 1696202521121 + size: 50290 + timestamp: 1718189540074 - kind: conda name: pandas version: 2.2.3 @@ -11420,121 +10264,103 @@ packages: timestamp: 1726878958127 - kind: conda name: pandoc - version: 3.1.3 + version: '3.5' build: h57928b3_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/pandoc-3.1.3-h57928b3_0.conda - sha256: a9e6d966db523ce7185ab430fb692281d69d7b1a58115b40594abfc658db1138 - md5: 5185086e0662a98ae366212b5bef1af0 - arch: x86_64 - platform: win + url: https://conda.anaconda.org/conda-forge/win-64/pandoc-3.5-h57928b3_0.conda + sha256: 2ef7593628529429ab0041128f90e7bb32eb447a05850c40ff178d9ad9df2e9b + md5: 2c4a6c475e0f1bbffac672b0943dc520 license: GPL-2.0-or-later license_family: GPL - size: 18655054 - timestamp: 1686228138957 + size: 24950852 + timestamp: 1728196799190 - kind: conda name: pandoc - version: 3.1.3 - build: h9d075a6_0 + version: '3.5' + build: h694c41f_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/pandoc-3.1.3-h9d075a6_0.conda - sha256: 3bc6bc31b96338c65c8f6e222bd8c65d47227ba4b59b2587157c3a29499123cc - md5: e86a3d5c966a09b6129354114483f7a7 - depends: - - libzlib >=1.2.13,<1.3.0a0 - arch: x86_64 - platform: osx + url: https://conda.anaconda.org/conda-forge/osx-64/pandoc-3.5-h694c41f_0.conda + sha256: 77476b2054c472ed07e3618bad8d04f471b07d6b3cc48d0d292055a6481a81a3 + md5: 4c2700fd13f9dbd7929d20eedde984ee license: GPL-2.0-or-later license_family: GPL - size: 16126792 - timestamp: 1686227275745 + size: 14073476 + timestamp: 1728196394225 - kind: conda name: pandoc - version: 3.1.3 - build: hce30654_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pandoc-3.1.3-hce30654_0.conda - sha256: 858a923c8b9082791b2c13c2ff2ae87e28dd2e2655f56117c8ecb7d366002bc7 - md5: 7edcc75acdac60dba441b229c0ec66ee - arch: aarch64 - platform: osx + version: '3.5' + build: ha770c72_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.5-ha770c72_0.conda + sha256: 56df96c2707a5ac71b2e5d3b32e38521c0bac91006d0b8948c1d347dd5c12609 + md5: 2889e6b9c666c3a564ab90cedc5832fd license: GPL-2.0-or-later license_family: GPL - size: 26314364 - timestamp: 1686225215970 + size: 21003150 + timestamp: 1728196276862 - kind: conda name: pandoc - version: '3.3' - build: ha770c72_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.3-ha770c72_0.conda - sha256: 0a9591992ada40a6dd2a3f37bfe51cd01956e54b1fa9204f2bd92b31148cb55e - md5: 0a3af8b93ba501c6ba020deacc9df841 + version: '3.5' + build: hce30654_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pandoc-3.5-hce30654_0.conda + sha256: c37b7f09893022343ab9bc936f37daf3f566131828011b94c35ae62e2d1459cb + md5: 5c56b7bfbdad3334a09230d405b63564 license: GPL-2.0-or-later license_family: GPL - size: 20892835 - timestamp: 1722242814344 + size: 22892672 + timestamp: 1728196385862 - kind: conda name: pandocfilters version: 1.5.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 sha256: 2bb9ba9857f4774b85900c2562f7e711d08dd48e2add9bee4e1612fbee27e16f md5: 457c2c8c08e54905d6954e79cb5b5db9 depends: - python !=3.0,!=3.1,!=3.2,!=3.3 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/pandocfilters size: 11627 timestamp: 1631603397334 - kind: conda name: pango version: 1.50.14 - build: h9f7e0c6_1 - build_number: 1 + build: hcf40dda_2 + build_number: 2 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pango-1.50.14-h9f7e0c6_1.conda - sha256: 9ff56d9aba2ec9337e7b41b297571f6cf490dcb0c51f636bc6b839c8c55aab1a - md5: cab8c807d6529fc354ca14a598d11850 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pango-1.50.14-hcf40dda_2.conda + sha256: e17f649192ce06c68893b50fa2492db87d2d82ae6d3c6058cc62dcc44dde8b2e + md5: 79026cbb74d69b444e5dc2be0fb4b4a9 depends: - - libpng >=1.6.39,<1.7.0a0 - - libglib >=2.76.1,<3.0a0 - cairo >=1.16.0,<2.0a0 + - fontconfig >=2.14.2,<3.0a0 + - fonts-conda-ecosystem - freetype >=2.12.1,<3.0a0 - fribidi >=1.0.10,<2.0a0 - - fontconfig >=2.14.2,<3.0a0 - - fonts-conda-ecosystem * - - harfbuzz >=7.1.0,<8.0a0 - arch: aarch64 - platform: osx + - harfbuzz >=8.1.1,<9.0a0 + - libglib >=2.76.4,<3.0a0 + - libpng >=1.6.39,<1.7.0a0 license: LGPL-2.1-or-later - size: 427247 - timestamp: 1681983976189 + size: 426303 + timestamp: 1693056536154 - kind: conda name: parso - version: 0.8.3 + version: 0.8.4 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.3-pyhd8ed1ab_0.tar.bz2 - sha256: 4e26d5daf5de0e31aa5e74ac56386a361b202433b83f024fdadbf07d4a244da4 - md5: 17a565a0c3899244e938cdf417e7b094 + url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda + sha256: bfe404eebb930cc41782d34f8fc04c0388ea692eeebe2c5fc28df8ec8d4d61ae + md5: 81534b420deb77da8833f2289b8d47ac depends: - python >=3.6 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/parso - size: 71048 - timestamp: 1638335054552 + size: 75191 + timestamp: 1712320447201 - kind: conda name: pcre2 version: '10.40' @@ -11544,10 +10370,8 @@ packages: sha256: 93503b5e05470ccc87f696c0fdf0d47938e0305b5047eacb85c15d78dcf641fe md5: 721b7288270bafc83586b0f01c2a67f2 depends: - - libzlib >=1.2.12,<1.3.0a0 - bzip2 >=1.0.8,<2.0a0 - arch: aarch64 - platform: osx + - libzlib >=1.2.12,<2.0.0a0 license: BSD-3-Clause license_family: BSD size: 1161688 @@ -11555,75 +10379,50 @@ packages: - kind: conda name: pcre2 version: '10.44' - build: h0f59acf_0 + build: hba22ea6_2 + build_number: 2 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-h0f59acf_0.conda - sha256: 90646ad0d8f9d0fd896170c4f3d754e88c4ba0eaf856c24d00842016f644baab - md5: 3914f7ac1761dce57102c72ca7c35d01 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 depends: + - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - libgcc-ng >=12 - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause license_family: BSD - size: 955778 - timestamp: 1718466128333 -- kind: conda - name: pep517 - version: 0.13.0 - build: pyhd8ed1ab_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pep517-0.13.0-pyhd8ed1ab_0.tar.bz2 - sha256: 6a6f2fa6bc9106b2edcccc142242dc3ab1f2f77a6debbd5b480f08482f052636 - md5: d94aa03d99d8adc9898f783eba0d84d2 - depends: - - python >=3.8 - - tomli * - arch: x86_64 - platform: win - license: MIT - license_family: MIT - size: 19044 - timestamp: 1667916747996 + size: 952308 + timestamp: 1723488734144 - kind: conda name: pexpect - version: 4.8.0 - build: pyh1a96a4e_2 - build_number: 2 - subdir: osx-arm64 + version: 4.9.0 + build: pyhd8ed1ab_0 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2 - sha256: 07706c0417ead94f359ca7278f65452d3c396448777aba1da6a11fc351bdca9a - md5: 330448ce4403cc74990ac07c555942a1 + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e + md5: 629f3203c99b32e0988910c93e77f3b6 depends: - - python * - ptyprocess >=0.5 - arch: aarch64 - platform: osx + - python >=3.7 license: ISC - purls: - - pkg:pypi/pexpect - size: 48780 - timestamp: 1667297617062 + size: 53600 + timestamp: 1706113273252 - kind: conda name: pickleshare version: 0.7.5 build: py_1003 build_number: 1003 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 sha256: a1ed1a094dd0d1b94a09ed85c283a0eb28943f2e6f22161fb45e128d35229738 md5: 415f0ebb6198cc2801c73438a9fb5761 depends: - python >=3 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/pickleshare size: 9332 timestamp: 1602536313357 - kind: conda @@ -11678,37 +10477,42 @@ packages: timestamp: 1695247436468 - kind: conda name: pillow - version: 10.3.0 - build: py310h99295b8_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/pillow-10.3.0-py310h99295b8_0.conda - sha256: d642d985b3c84d753520994491e34aae31d05a6100683a51b7c9ae79915fe50d - md5: 7c5e25679e87f90b3068ec4e539bd4c3 + version: 10.4.0 + build: py310h3e38d90_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pillow-10.4.0-py310h3e38d90_1.conda + sha256: fb730c9510ccf16579762db20383eaee447bda3f5f2f0b0691029c87af462c7a + md5: d9a32c4725436b99df60fdc9c14545d1 depends: - freetype >=2.12.1,<3.0a0 - lcms2 >=2.16,<3.0a0 - libjpeg-turbo >=3.0.0,<4.0a0 - libtiff >=4.6.0,<4.8.0a0 - - libwebp-base >=1.3.2,<2.0a0 - - libxcb >=1.15,<1.16.0a0 - - libzlib >=1.2.13,<2.0.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libxcb >=1.16,<2.0.0a0 + - libzlib >=1.3.1,<2.0a0 - openjpeg >=2.5.2,<3.0a0 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - tk >=8.6.13,<8.7.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: HPND - size: 41184672 - timestamp: 1712154890126 + size: 42223178 + timestamp: 1726075720583 - kind: conda name: pillow version: 10.4.0 - build: py310h3e38d90_1 + build: py310h4e5c94f_1 build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/pillow-10.4.0-py310h3e38d90_1.conda - sha256: fb730c9510ccf16579762db20383eaee447bda3f5f2f0b0691029c87af462c7a - md5: d9a32c4725436b99df60fdc9c14545d1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/pillow-10.4.0-py310h4e5c94f_1.conda + sha256: cf128b95b56f00899554cf9a5aaa27cfe2848a206ecf2213c61611618ef1dc2a + md5: 31b33895efed8544cf692daf0d39190d depends: + - __osx >=10.13 - freetype >=2.12.1,<3.0a0 - lcms2 >=2.16,<3.0a0 - libjpeg-turbo >=3.0.0,<4.0a0 @@ -11720,31 +10524,24 @@ packages: - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - tk >=8.6.13,<8.7.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 license: HPND - size: 42223178 - timestamp: 1726075720583 + size: 42531285 + timestamp: 1726075316302 - kind: conda name: pip version: 23.2.1 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda sha256: 9e401b171856e12f6aa32ae5cc1ae1d3708aa7d705ddf359ee7dd0dffd73c2b5 md5: e2783aa3f9235225eec92f9081c5b801 depends: - python >=3.7 - - setuptools * - - wheel * - arch: x86_64 - platform: win + - setuptools + - wheel license: MIT license_family: MIT - purls: - - pkg:pypi/pip size: 1386212 timestamp: 1690024763393 - kind: conda @@ -11775,41 +10572,39 @@ packages: depends: - __win - python >=3.8 - license: BSD-3-Clause - license_family: BSD - size: 8671 - timestamp: 1728816803806 -- kind: conda - name: pixman - version: 0.40.0 - build: h27ca646_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.40.0-h27ca646_0.tar.bz2 - sha256: a3bde72b3f9344ede1a189612d997f775b503a8eec61fb9720d18551f3c71080 - md5: 0cedfe37c9aee28f5e926a870965466a - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - size: 291804 - timestamp: 1604342450513 + license: BSD-3-Clause + license_family: BSD + size: 8671 + timestamp: 1728816803806 - kind: conda name: pixman - version: 0.42.2 + version: 0.43.2 build: h59595ed_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.42.2-h59595ed_0.conda - sha256: ae917851474eb3b08812b02c9e945d040808523ec53f828aa74a90b0cdf15f57 - md5: 700edd63ccd5fc66b70b1c028cea9a68 + url: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda + sha256: 366d28e2a0a191d6c535e234741e0cd1d94d713f76073d8af4a5ccb2a266121e + md5: 71004cbf7924e19c02746ccde9fd7123 depends: - libgcc-ng >=12 - libstdcxx-ng >=12 - arch: x86_64 - platform: linux license: MIT license_family: MIT - size: 385309 - timestamp: 1695736061006 + size: 386826 + timestamp: 1706549500138 +- kind: conda + name: pixman + version: 0.43.4 + build: hebf3989_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.43.4-hebf3989_0.conda + sha256: df0ba2710ccdea5c909b63635529797f6eb3635b6fb77ae9cb2f183d08818409 + md5: 0308c68e711cd295aaa026a4f8c4b1e5 + depends: + - libcxx >=16 + license: MIT + license_family: MIT + size: 198755 + timestamp: 1709239846651 - kind: conda name: pkg-config version: 0.29.2 @@ -11822,127 +10617,55 @@ packages: depends: - libglib >=2.70.2,<3.0a0 - libiconv >=1.16,<2.0.0a0 - arch: aarch64 - platform: osx license: GPL-2.0-or-later license_family: GPL size: 46049 timestamp: 1650239029040 -- kind: conda - name: pkgutil-resolve-name - version: 1.3.10 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_0.tar.bz2 - sha256: 7d055ffc8a02bf781a89d069db3454b453605cdaff300b82cedcc7133283e47e - md5: 89e3c7cdde7d3aaa2aee933b604dd07f - depends: - - python >=3.6 - arch: aarch64 - platform: osx - license: BSD-4-Clause - purls: - - pkg:pypi/pkgutil-resolve-name - size: 8717 - timestamp: 1633982101415 - kind: conda name: pkgutil-resolve-name version: 1.3.10 build: pyhd8ed1ab_1 build_number: 1 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda sha256: fecf95377134b0e8944762d92ecf7b0149c07d8186fb5db583125a2705c7ea0a md5: 405678b942f2481cecdb3e010f4925d9 depends: - python >=3.6 - arch: x86_64 - platform: win license: MIT AND PSF-2.0 - purls: - - pkg:pypi/pkgutil-resolve-name size: 10778 timestamp: 1694617398467 - kind: conda name: platformdirs - version: 3.10.0 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda - sha256: 1b5c0ca2f4260c7dd8cfccd8a641c1e41876c79dc594506be379cde08f5b471e - md5: 0809187ef9b89a3d94a5c24d13936236 - depends: - - typing-extensions >=4.6.3 - - python >=3.7 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - purls: - - pkg:pypi/platformdirs - size: 19827 - timestamp: 1690813274592 -- kind: conda - name: platformdirs - version: 3.11.0 - build: pyhd8ed1ab_0 - subdir: win-64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda - sha256: b3d809ff5a18ee8514bba8bc05a23b4cdf1758090a18a2cf742af38aed405144 - md5: 8f567c0a74aa44cf732f15773b4083b0 - depends: - - python >=3.7 - - typing-extensions >=4.6.3 - arch: x86_64 - platform: win - license: MIT - license_family: MIT - purls: - - pkg:pypi/platformdirs - size: 19985 - timestamp: 1696272419779 -- kind: conda - name: pluggy - version: 1.2.0 + version: 4.3.6 build: pyhd8ed1ab_0 - subdir: osx-arm64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.2.0-pyhd8ed1ab_0.conda - sha256: ff1f70e0bd50693be7e2bad0efb2539f5dcc5ec4d638e787e703f28098e72de4 - md5: 7263924c642d22e311d9e59b839f1b33 + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 depends: - python >=3.8 - arch: aarch64 - platform: osx license: MIT license_family: MIT - purls: - - pkg:pypi/pluggy - size: 21528 - timestamp: 1687776483210 + size: 20625 + timestamp: 1726613611845 - kind: conda name: pluggy - version: 1.3.0 + version: 1.5.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda - sha256: 7bf2ad9d747e71f1e93d0863c2c8061dd0f2fe1e582f28d292abfb40264a2eb5 - md5: 2390bd10bed1f3fdc7a537fb5a447d8d + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 + md5: d3483c8fc2dc2cc3f5cf43e26d60cabf depends: - python >=3.8 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/pluggy - size: 22548 - timestamp: 1693086745921 + size: 23815 + timestamp: 1713667175451 - kind: conda name: polars version: 1.8.2 @@ -12031,79 +10754,37 @@ packages: timestamp: 1727251417546 - kind: conda name: prometheus_client - version: 0.17.1 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.17.1-pyhd8ed1ab_0.conda - sha256: a149184fde856dba7968fc50ca89dbb07ebe84abd710d4076e2fada1b9399231 - md5: 02153b6b760bbec00cfe9e4c97993d06 - depends: - - python >=3.6 - arch: aarch64 - platform: osx - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/prometheus-client - size: 53376 - timestamp: 1689032576798 -- kind: conda - name: prometheus_client - version: 0.18.0 + version: 0.21.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.18.0-pyhd8ed1ab_0.conda - sha256: 0e0257eee11d3e0b3f73566283fd6c705b1b2a5dbc7d9a609fa885519a62913e - md5: ade903cbe0b4440ca6bed64932d124b5 + url: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.0-pyhd8ed1ab_0.conda + sha256: 01f0c3dd00081637ed920a922b17bcc8ed49608404ee466ced806856e671f6b9 + md5: 07e9550ddff45150bfc7da146268e165 depends: - - python >=3.6 - arch: x86_64 - platform: win + - python >=3.8 license: Apache-2.0 license_family: Apache - purls: - - pkg:pypi/prometheus-client - size: 53959 - timestamp: 1698692692135 + size: 49024 + timestamp: 1726902073034 - kind: conda name: prompt-toolkit - version: 3.0.39 + version: 3.0.48 build: pyha770c72_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda - sha256: 10e7fdc75d4b85633be6b12a70b857053987127a808caa0f88b2cba4b3ce6359 - md5: a4986c6bb5b0d05a38855b0880a5f425 + url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda + sha256: 44e4e6108d425a666856a52d1523e5d70890256a8920bb0dcd3d55cc750f3207 + md5: 4c05134c48b6a74f33bbb9938e4a115e depends: - python >=3.7 - - wcwidth * + - wcwidth constrains: - - prompt_toolkit 3.0.39 - arch: x86_64 - platform: win - license: BSD-3-Clause - license_family: BSD - size: 269068 - timestamp: 1688566090973 -- kind: conda - name: prompt_toolkit - version: 3.0.39 - build: hd8ed1ab_0 - subdir: win-64 - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.39-hd8ed1ab_0.conda - sha256: 89f7fecc7355181dbc2ab851e668a2fce6aa4830b336a34c93b59bda93206270 - md5: 4bbbe67d5df19db30f04b8e344dc9976 - depends: - - prompt-toolkit >=3.0.39,<3.0.40.0a0 - arch: x86_64 - platform: win + - prompt_toolkit 3.0.48 license: BSD-3-Clause license_family: BSD - size: 6731 - timestamp: 1688566099039 + size: 270271 + timestamp: 1727341744544 - kind: conda name: protobuf version: 4.23.3 @@ -12259,70 +10940,52 @@ packages: timestamp: 1695367659588 - kind: conda name: psygnal - version: 0.11.0 + version: 0.11.1 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/psygnal-0.11.0-pyhd8ed1ab_0.conda - sha256: bb549e480438c698253325ea5225219aa05a772cb7e92e239cd24bdb061ad5da - md5: 3ee3674b1d4362b3737f9cbbbc69214a + url: https://conda.anaconda.org/conda-forge/noarch/psygnal-0.11.1-pyhd8ed1ab_0.conda + sha256: fc12b32c36c522d263bf24dbced4c755925198fa153bbddd7181b68e3443a468 + md5: b49c6ca5e5661b5473f91ac01782e487 depends: - python >=3.8 - typing_extensions - wrapt license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/psygnal - size: 63584 - timestamp: 1711713187989 + size: 63627 + timestamp: 1715085720906 - kind: conda name: pthread-stubs version: '0.4' - build: h27ca646_1001 - build_number: 1001 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-h27ca646_1001.tar.bz2 - sha256: 9da9e6f5d51dff6ad2e4ee0874791437ba952e0a6249942273f0fedfd07ea826 - md5: d3f26c6494d4105d4ecb85203d687102 - arch: aarch64 - platform: osx + build: h00291cd_1002 + build_number: 1002 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-h00291cd_1002.conda + sha256: 05944ca3445f31614f8c674c560bca02ff05cb51637a96f665cb2bbe496099e5 + md5: 8bcf980d2c6b17094961198284b8e862 + depends: + - __osx >=10.13 license: MIT license_family: MIT - size: 5696 - timestamp: 1606147608402 + size: 8364 + timestamp: 1726802331537 - kind: conda name: pthread-stubs version: '0.4' - build: h36c2ea0_1001 - build_number: 1001 + build: hb9d3cd8_1002 + build_number: 1002 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2 - sha256: 67c84822f87b641d89df09758da498b2d4558d47b920fd1d3fe6d3a871e000ff - md5: 22dad4df6e8630e8dff2428f6f6a7036 + url: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + md5: b3c17d95b5a10c6e64a21fa17573e70e depends: - - libgcc-ng >=7.5.0 - arch: x86_64 - platform: linux - license: MIT - license_family: MIT - size: 5625 - timestamp: 1606147468727 -- kind: conda - name: pthread-stubs - version: '0.4' - build: hc929b4f_1001 - build_number: 1001 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-hc929b4f_1001.tar.bz2 - sha256: 6e3900bb241bcdec513d4e7180fe9a19186c1a38f0b4080ed619d26014222c53 - md5: addd19059de62181cd11ae8f4ef26084 - arch: x86_64 - platform: osx + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 license: MIT license_family: MIT - size: 5653 - timestamp: 1606147699844 + size: 8252 + timestamp: 1726802366959 - kind: conda name: pthread-stubs version: '0.4' @@ -12333,66 +10996,71 @@ packages: sha256: bb5a6ddf1a609a63addd6d7b488b0f58d05092ea84e9203283409bff539e202a md5: a1f820480193ea83582b13249a7e7bd9 depends: - - m2w64-gcc-libs * - arch: x86_64 - platform: win + - m2w64-gcc-libs license: MIT license_family: MIT size: 6417 timestamp: 1606147814351 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hd74edd7_1002 + build_number: 1002 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda + sha256: 8ed65e17fbb0ca944bfb8093b60086e3f9dd678c3448b5de212017394c247ee3 + md5: 415816daf82e0b23a736a069a75e9da7 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + size: 8381 + timestamp: 1726802424786 - kind: conda name: pthreads-win32 version: 2.9.1 - build: hfa6e2cd_3 - build_number: 3 + build: h2466b09_4 + build_number: 4 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-hfa6e2cd_3.tar.bz2 - sha256: 576a228630a72f25d255a5e345e5f10878e153221a96560f2498040cd6f54005 - md5: e2da8758d7d51ff6aa78a14dfb9dbed4 + url: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-h2466b09_4.conda + sha256: b989bdcf0a22ba05a238adac1ad3452c11871681f565e509f629e225a26b7d45 + md5: cf98a67a1ec8040b42455002a24f0b0b depends: - - vc 14.* - arch: x86_64 - platform: win - license: LGPL 2 - size: 144301 - timestamp: 1537755684331 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: LGPL-2.1-or-later + size: 265827 + timestamp: 1728400965968 - kind: conda name: ptyprocess version: 0.7.0 build: pyhd3deb0d_0 - subdir: osx-arm64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a md5: 359eeb6536da0e687af562ed265ec263 depends: - - python * - arch: aarch64 - platform: osx + - python license: ISC - purls: - - pkg:pypi/ptyprocess size: 16546 timestamp: 1609419417991 - kind: conda name: pure_eval - version: 0.2.2 + version: 0.2.3 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2 - sha256: 72792f9fc2b1820e37cc57f84a27bc819c71088c3002ca6db05a2e56404f9d44 - md5: 6784285c7e55cb7212efabc79e4c2883 + url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda + sha256: dcfcb3cee1ae0a89729601582cc3edea20ba13c9493967a03a693c67567af0c8 + md5: 0f051f09d992e0d08941706ad519ee0e depends: - python >=3.5 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/pure-eval - size: 14551 - timestamp: 1642876055775 + size: 16551 + timestamp: 1721585805256 - kind: conda name: pyarrow version: 13.0.0 @@ -12482,42 +11150,34 @@ packages: timestamp: 1694167295169 - kind: conda name: pycparser - version: '2.21' + version: '2.22' build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2 - sha256: 74c63fd03f1f1ea2b54e8bc529fd1a600aaafb24027b738d0db87909ee3a33dc - md5: 076becd9e05608f8dc72757d5f3a91ff + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 + md5: 844d9eb3b43095b031874477f7d70088 depends: - - python 2.7.*|>=3.4 - arch: x86_64 - platform: win + - python >=3.8 license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/pycparser - size: 102747 - timestamp: 1636257201998 + size: 105098 + timestamp: 1711811634025 - kind: conda name: pygments - version: 2.16.1 + version: 2.18.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda - sha256: 3f0f0fadc6084960ec8cc00a32a03529c562ffea3b527eb73b1653183daad389 - md5: 40e5cb18165466773619e5c963f00a7b + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 depends: - - python >=3.7 - arch: x86_64 - platform: win + - python >=3.8 license: BSD-2-Clause license_family: BSD - purls: - - pkg:pypi/pygments - size: 853439 - timestamp: 1691408777841 + size: 879295 + timestamp: 1714846885370 - kind: conda name: pyobjc-core version: 10.3.1 @@ -12601,21 +11261,17 @@ packages: version: 1.7.1 build: pyh0701188_6 build_number: 6 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh0701188_6.tar.bz2 sha256: b3a612bc887f3dd0fb7c4199ad8e342bd148cf69a9b74fd9468a18cf2bef07b7 md5: 56cd9fe388baac0e90c7149cfac95b60 depends: - - __win * + - __win - python >=3.8 - - win_inet_pton * - arch: x86_64 - platform: win + - win_inet_pton license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/pysocks size: 19348 timestamp: 1661605138291 - kind: conda @@ -12623,81 +11279,46 @@ packages: version: 1.7.1 build: pyha2e5f31_6 build_number: 6 - subdir: osx-arm64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 sha256: a42f826e958a8d22e65b3394f437af7332610e43ee313393d1cf143f0a2d274b md5: 2a7de29fb590ca14b5243c4c812c8025 depends: - - __unix * + - __unix - python >=3.8 - arch: aarch64 - platform: osx license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/pysocks size: 18981 timestamp: 1661604969727 - kind: conda name: pytest - version: 7.4.0 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.0-pyhd8ed1ab_0.conda - sha256: 52b2eb4e8d0380d92d45643d0c9706725e691ce8404dab4c2db4aaf58e48a23c - md5: 3cfe9b9e958e7238a386933c75d190db - depends: - - exceptiongroup >=1.0.0rc8 - - python >=3.7 - - colorama * - - pluggy >=0.12,<2.0 - - iniconfig * - - packaging * - - tomli >=1.0.0 - constrains: - - pytest-faulthandler >=2 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - purls: - - pkg:pypi/pytest - size: 243695 - timestamp: 1687692277221 -- kind: conda - name: pytest - version: 7.4.3 + version: 8.3.3 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.3-pyhd8ed1ab_0.conda - sha256: 14e948e620ec87d9e62a8d9c21d40084b4805a939cfee322be7d457379dc96a0 - md5: 5bdca0aca30b0ee62bb84854e027eae0 + url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.3-pyhd8ed1ab_0.conda + sha256: e99376d0068455712109d233f5790458ff861aeceb458bfda74e353338e4d815 + md5: c03d61f31f38fdb9facf70c29958bf7a depends: - - colorama * + - colorama - exceptiongroup >=1.0.0rc8 - - iniconfig * - - packaging * - - pluggy >=0.12,<2.0 - - python >=3.7 - - tomli >=1.0.0 + - iniconfig + - packaging + - pluggy <2,>=1.5 + - python >=3.8 + - tomli >=1 constrains: - pytest-faulthandler >=2 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/pytest - size: 244758 - timestamp: 1698233883003 + size: 258293 + timestamp: 1725977334143 - kind: conda name: pytest-cov version: 4.1.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda sha256: f07d3b44cabbed7843de654c4a6990a08475ce3b708bb735c7da9842614586f2 @@ -12706,28 +11327,33 @@ packages: - coverage >=5.2.1 - pytest >=4.6 - python >=3.7 - - toml * - arch: x86_64 - platform: win + - toml license: MIT license_family: MIT size: 25436 timestamp: 1684965001294 - kind: conda name: python - version: 3.10.14 - build: h00d2728_0_cpython - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/python-3.10.14-h00d2728_0_cpython.conda - sha256: 00c1de2d46ede26609ef4e84a44b83be7876ba6a0215b7c83bff41a0656bf694 - md5: 0a1cddc4382c5c171e791c70740546dd + version: 3.10.15 + build: h4a871b0_2_cpython + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.15-h4a871b0_2_cpython.conda + sha256: c1e5e93b887d8cd1aa31d24b9620cb7eb6645c08c97b15ffc844fd6c29051420 + md5: 98059097f62e97be9aed7ec904055825 depends: + - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 - libffi >=3.4,<4.0a0 - - libsqlite >=3.45.2,<4.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - ncurses >=6.4.20240210,<7.0a0 - - openssl >=3.2.1,<4.0a0 + - libgcc >=13 + - libnsl >=2.0.1,<2.1.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libxcrypt >=4.4.36 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata @@ -12735,23 +11361,25 @@ packages: constrains: - python_abi 3.10.* *_cp310 license: Python-2.0 - size: 11890228 - timestamp: 1710940046031 + size: 25321141 + timestamp: 1729042931665 - kind: conda name: python - version: 3.10.14 - build: h2469fbe_0_cpython - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.14-h2469fbe_0_cpython.conda - sha256: 454d609fe25daedce9e886efcbfcadad103ed0362e7cb6d2bcddec90b1ecd3ee - md5: 4ae999c8227c6d8c7623d32d51d25ea9 + version: 3.10.15 + build: hd8744da_2_cpython + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/python-3.10.15-hd8744da_2_cpython.conda + sha256: 90a3537412eedb8b479674cae60228d1c2bce4f618c98cdee5c44c6b7cdcef8c + md5: 31b152aedbbb18d9d709df3eff9bbc0b depends: + - __osx >=10.13 - bzip2 >=1.0.8,<2.0a0 - libffi >=3.4,<4.0a0 - - libsqlite >=3.45.2,<4.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - ncurses >=6.4.20240210,<7.0a0 - - openssl >=3.2.1,<4.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata @@ -12759,27 +11387,22 @@ packages: constrains: - python_abi 3.10.* *_cp310 license: Python-2.0 - size: 12336005 - timestamp: 1710939659384 + size: 12924349 + timestamp: 1729042113444 - kind: conda name: python version: 3.10.15 - build: h4a871b0_1_cpython - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/python-3.10.15-h4a871b0_1_cpython.conda - sha256: 7611846de94e1b7c41b308dc6788e65227e8c65bd2f1575e1753acc9a3129fd9 - md5: 9e1b028075ff7348a194d524b6910f12 + build: hdce6c4c_2_cpython + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.10.15-hdce6c4c_2_cpython.conda + sha256: 50dbbcc5efacaa05906cdc6b42bbdda17cee7910386bef8d737edffe7f5a7f2f + md5: b6a5e688170f1301a858f6001c32822d depends: - - __glibc >=2.17,<3.0.a0 + - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-64 >=2.36.1 - libffi >=3.4,<4.0a0 - - libgcc >=13 - - libnsl >=2.0.1,<2.1.0a0 - libsqlite >=3.46.1,<4.0a0 - - libuuid >=2.38.1,<3.0a0 - - libxcrypt >=4.4.36 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - openssl >=3.3.2,<4.0a0 @@ -12790,17 +11413,17 @@ packages: constrains: - python_abi 3.10.* *_cp310 license: Python-2.0 - size: 25198492 - timestamp: 1727719762520 + size: 12411616 + timestamp: 1729042103758 - kind: conda name: python version: 3.10.15 - build: hfaddaf0_1_cpython - build_number: 1 + build: hfaddaf0_2_cpython + build_number: 2 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/python-3.10.15-hfaddaf0_1_cpython.conda - sha256: 12c6458dccf5467bd2b219876f3eac228a1d6b8803c17c86a65c17a755c517d6 - md5: a027447e9a89a09dedff93938a7b097e + url: https://conda.anaconda.org/conda-forge/win-64/python-3.10.15-hfaddaf0_2_cpython.conda + sha256: ee5af019e5d7140ad2d40b5f772fcd68ded056853a478a2b54f417855977e99b + md5: 52a45ce756c062994b25738288c8ab62 depends: - bzip2 >=1.0.8,<2.0a0 - libffi >=3.4,<4.0a0 @@ -12816,28 +11439,24 @@ packages: constrains: - python_abi 3.10.* *_cp310 license: Python-2.0 - size: 15902914 - timestamp: 1727718375568 + size: 15933377 + timestamp: 1729041771524 - kind: conda name: python-dateutil - version: 2.8.2 + version: 2.9.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2 - sha256: 54d7785c7678166aa45adeaccfc1d2b8c3c799ca2dc05d4a82bb39b1968bd7da - md5: dd999d1cc9f79e67dbb855c8924c7984 + url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320 + md5: 2cf4264fffb9e6eff6031c5b6884d61c depends: - - python >=3.6 + - python >=3.7 - six >=1.5 - arch: x86_64 - platform: win license: Apache-2.0 license_family: APACHE - purls: - - pkg:pypi/python-dateutil - size: 245987 - timestamp: 1626286448716 + size: 222742 + timestamp: 1709299922152 - kind: conda name: python-duckdb version: 1.0.0 @@ -12911,80 +11530,49 @@ packages: timestamp: 1717686625369 - kind: conda name: python-fastjsonschema - version: 2.18.0 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.18.0-pyhd8ed1ab_0.conda - sha256: 73985a9a2dd7ccf77b7428a12148e1b381c8635e9195e47a652397e9a56284ce - md5: 3be9466311564f80f8056c0851fc5bb7 - depends: - - python >=3.3 - arch: aarch64 - platform: osx - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/fastjsonschema - size: 225888 - timestamp: 1690055603375 -- kind: conda - name: python-fastjsonschema - version: 2.18.1 + version: 2.20.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.18.1-pyhd8ed1ab_0.conda - sha256: 3fb1af1ac7525072c46e111bc4e96ddf971f792ab049ca3aa25dbebbaffb6f7d - md5: 305141cff54af2f90e089d868fffce28 + url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda + sha256: 7d8c931b89c9980434986b4deb22c2917b58d9936c3974139b9c10ae86fdfe60 + md5: b98d2018c01ce9980c03ee2850690fab depends: - python >=3.3 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/fastjsonschema - size: 226030 - timestamp: 1696171963080 + size: 226165 + timestamp: 1718477110630 - kind: conda name: python-json-logger version: 2.0.7 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda sha256: 4790787fe1f4e8da616edca4acf6a4f8ed4e7c6967aa31b920208fc8f95efcca md5: a61bf9ec79426938ff785eb69dbb1960 depends: - python >=3.6 - arch: x86_64 - platform: win license: BSD-2-Clause license_family: BSD - purls: - - pkg:pypi/python-json-logger size: 13383 timestamp: 1677079727691 - kind: conda name: python-tzdata - version: '2023.3' + version: '2024.2' build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.3-pyhd8ed1ab_0.conda - sha256: 0108888507014fb24573c31e4deceb61c99e63d37776dddcadd7c89b2ecae0b6 - md5: 2590495f608a63625e165915fb4e2e34 + url: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2024.2-pyhd8ed1ab_0.conda + sha256: fe3f62ce2bc714bdaa222ab3f0344a2815ad9e853c6df38d15c9f25de8a3a6d4 + md5: 986287f89929b2d629bd6ef6497dc307 depends: - python >=3.6 - arch: x86_64 - platform: win license: Apache-2.0 license_family: APACHE - purls: - - pkg:pypi/tzdata - size: 143131 - timestamp: 1680081272948 + size: 142527 + timestamp: 1727140688093 - kind: conda name: python_abi version: '3.10' @@ -13039,50 +11627,27 @@ packages: url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.10-5_cp310.conda sha256: 0671bea4d5c5b8618ee7e2b1117d5a90901348ac459db57b654007f1644fa087 md5: 3c510f4c4383f5fbdb12fdd971b30d49 - constrains: - - python 3.10.* *_cpython - license: BSD-3-Clause - license_family: BSD - size: 6715 - timestamp: 1723823141288 -- kind: conda - name: pytz - version: '2023.3' - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda - sha256: e4999484f21763ca4b8f92c95b22cb6d1edc1b61d0a2bb073ee2bd11f39401b9 - md5: d3076b483092a435832603243567bc31 - depends: - - python >=3.6 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - purls: - - pkg:pypi/pytz - size: 186506 - timestamp: 1680088891597 + constrains: + - python 3.10.* *_cpython + license: BSD-3-Clause + license_family: BSD + size: 6715 + timestamp: 1723823141288 - kind: conda name: pytz - version: 2023.3.post1 + version: '2024.1' build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda - sha256: 6b680e63d69aaf087cd43ca765a23838723ef59b0a328799e6363eb13f52c49e - md5: c93346b446cd08c169d843ae5fc0da97 + url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + sha256: 1a7d6b233f7e6e3bbcbad054c8fd51e690a67b129a899a056a5e45dd9f00cb41 + md5: 3eeeeb9e4827ace8c0c1419c85d590ad depends: - - python >=3.6 - arch: x86_64 - platform: win + - python >=3.7 license: MIT license_family: MIT - purls: - - pkg:pypi/pytz - size: 187454 - timestamp: 1693930444432 + size: 188538 + timestamp: 1706886944988 - kind: conda name: pywavelets version: 1.7.0 @@ -13184,13 +11749,12 @@ packages: timestamp: 1728636656373 - kind: conda name: pywinpty - version: 2.0.13 - build: py310h9e98ed7_1 - build_number: 1 + version: 2.0.14 + build: py310h9e98ed7_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.13-py310h9e98ed7_1.conda - sha256: 7aed0275d0d3c0a411529d8f58c2d13224c22d3c77fc854c2bdcce6446f14afd - md5: 1c07f3506556b8e13c53c5ebc5c184aa + url: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.14-py310h9e98ed7_0.conda + sha256: 8a7993fd661e0f5f544d152eae668706b2ae373a288dbd1243f5882bb044f6d7 + md5: 9b36cc37a04410f4067b5e6dc35d5064 depends: - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 @@ -13200,8 +11764,8 @@ packages: - winpty license: MIT license_family: MIT - size: 202327 - timestamp: 1724951397649 + size: 200095 + timestamp: 1729202756102 - kind: conda name: pyyaml version: 6.0.2 @@ -13322,44 +11886,45 @@ packages: - kind: conda name: pyzmq version: 26.2.0 - build: py310h71f11fc_1 - build_number: 1 + build: py310h71f11fc_3 + build_number: 3 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py310h71f11fc_1.conda - sha256: 1a94abe41fa2dd52b83b2aee7f21501a13a8c491f0a36ada0dba8ae92da5f81b - md5: e646f5fbd704997c3d61d0a45b62dbd6 + url: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py310h71f11fc_3.conda + sha256: d5bbafe00fbed64134f5c3cc38a2f16a9dc0f24c747f81f8341c53758d8b5d96 + md5: 0c3fe057cc758c8fa1beba31ff4e5c35 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - - libsodium >=1.0.18,<1.0.19.0a0 + - libsodium >=1.0.20,<1.0.21.0a0 - libstdcxx >=13 - python >=3.10,<3.11.0a0 - python_abi 3.10.* *_cp310 - zeromq >=4.3.5,<4.4.0a0 license: BSD-3-Clause license_family: BSD - size: 337725 - timestamp: 1725430524029 + size: 338103 + timestamp: 1728642374037 - kind: conda name: pyzmq version: 26.2.0 - build: py310hcab215c_0 + build: py310h82ef58e_3 + build_number: 3 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-26.2.0-py310hcab215c_0.conda - sha256: 89ab5c2dd3639e4f8afb4b210469bf3bb0ad4a013c71c901b919cca5b640d094 - md5: d4cd1c3c010f2e2f200720059226c2b0 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-26.2.0-py310h82ef58e_3.conda + sha256: 9580d6e80f15c10c64e69d8ecf49a7d60bd103f14b3bb6118b5d78c683236155 + md5: d5d14867d72fa849339ec24b5c33817d depends: - __osx >=11.0 - libcxx >=17 - - libsodium >=1.0.18,<1.0.19.0a0 + - libsodium >=1.0.20,<1.0.21.0a0 - python >=3.10,<3.11.0a0 - python >=3.10,<3.11.0a0 *_cpython - python_abi 3.10.* *_cp310 - zeromq >=4.3.5,<4.4.0a0 license: BSD-3-Clause license_family: BSD - size: 313948 - timestamp: 1724399372360 + size: 314132 + timestamp: 1728642745677 - kind: conda name: rav1e version: 0.6.6 @@ -13369,8 +11934,6 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-64/rav1e-0.6.6-h7205ca4_2.conda sha256: 046ac50530590cd2a5d9bcb1e581bdd168e06049230ad3afd8cce2fa71b429d9 md5: ab03527926f8ce85f84a91fd35520ef2 - arch: x86_64 - platform: osx license: BSD-2-Clause license_family: BSD size: 1767853 @@ -13388,8 +11951,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: BSD-2-Clause license_family: BSD size: 1523119 @@ -13405,8 +11966,6 @@ packages: md5: 77d9955b4abddb811cb8ab1aa7d743e4 depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: BSD-2-Clause license_family: BSD size: 15423721 @@ -13438,8 +11997,6 @@ packages: md5: 68580e997396899915eef7771ef3a646 depends: - libcxx >=14.0.6 - arch: x86_64 - platform: osx license: BSD-3-Clause license_family: BSD size: 185478 @@ -13455,8 +12012,6 @@ packages: depends: - libgcc-ng >=12 - libstdcxx-ng >=12 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD size: 201211 @@ -13471,8 +12026,6 @@ packages: md5: 7a851c0ab05247e3246eca2c3b243b9a depends: - libcxx >=14.0.6 - arch: aarch64 - platform: osx license: BSD-3-Clause license_family: BSD size: 169959 @@ -13489,8 +12042,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vs2015_runtime >=14.29.30139 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD size: 378635 @@ -13507,8 +12058,6 @@ packages: depends: - libgcc-ng >=12 - ncurses >=6.3,<7.0a0 - arch: x86_64 - platform: linux license: GPL-3.0-only license_family: GPL size: 281456 @@ -13524,8 +12073,6 @@ packages: md5: 8cbb776a2f641b943d413b3e19df71f4 depends: - ncurses >=6.3,<7.0a0 - arch: aarch64 - platform: osx license: GPL-3.0-only license_family: GPL size: 250351 @@ -13541,95 +12088,77 @@ packages: md5: f17f77f2acf4d344734bda76829ce14e depends: - ncurses >=6.3,<7.0a0 - arch: x86_64 - platform: osx license: GPL-3.0-only license_family: GPL size: 255870 timestamp: 1679532707590 - kind: conda name: referencing - version: 0.30.2 + version: 0.35.1 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda - sha256: a6768fabc12f1eed87fec68c5c65439e908655cded1e458d70a164abbce13287 - md5: a33161b983172ba6ef69d5fc850650cd + url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda + sha256: be8d6d9e86b1a3fef5424127ff81782f8ca63d3058980859609f6f1ecdd34cb3 + md5: 0fc8b52192a8898627c3efae1003e9f6 depends: - attrs >=22.2.0 - python >=3.8 - rpds-py >=0.7.0 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/referencing - size: 38061 - timestamp: 1691337409918 + size: 42210 + timestamp: 1714619625532 - kind: conda name: requests - version: 2.31.0 + version: 2.32.3 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda - sha256: 9f629d6fd3c8ac5f2a198639fe7af87c4db2ac9235279164bfe0fcb49d8c4bad - md5: a30144e4156cdbb236f99ebb49828f8b + url: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + sha256: 5845ffe82a6fa4d437a2eae1e32a1ad308d7ad349f61e337c0a890fe04c513cc + md5: 5ede4753180c7a550a443c430dc8ab52 depends: - certifi >=2017.4.17 - charset-normalizer >=2,<4 - idna >=2.5,<4 - - python >=3.7 + - python >=3.8 - urllib3 >=1.21.1,<3 constrains: - chardet >=3.0.2,<6 - arch: x86_64 - platform: win license: Apache-2.0 license_family: APACHE - purls: - - pkg:pypi/requests - size: 56690 - timestamp: 1684774408600 + size: 58810 + timestamp: 1717057174842 - kind: conda name: rfc3339-validator version: 0.1.4 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 sha256: 7c7052b51de0b5c558f890bb11f8b5edbb9934a653d76be086b1182b9f54185d md5: fed45fc5ea0813240707998abe49f520 depends: - python >=3.5 - - six * - arch: x86_64 - platform: win + - six license: MIT license_family: MIT - purls: - - pkg:pypi/rfc3339-validator size: 8064 timestamp: 1638811838081 - kind: conda name: rfc3986-validator version: 0.1.1 build: pyh9f0ad1d_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 sha256: 2a5b495a1de0f60f24d8a74578ebc23b24aa53279b1ad583755f223097c41c37 md5: 912a71cc01012ee38e6b90ddd561e36f depends: - - python * - arch: x86_64 - platform: win + - python license: MIT license_family: MIT - purls: - - pkg:pypi/rfc3986-validator size: 7818 timestamp: 1598024297745 - kind: conda @@ -13801,6 +12330,7 @@ packages: - rust-std-x86_64-unknown-linux-gnu 1.80.1 h2c6d0dc_0 - sysroot_linux-64 >=2.17 license: MIT + license_family: MIT size: 198885602 timestamp: 1723153698032 - kind: conda @@ -13814,6 +12344,7 @@ packages: depends: - rust-std-aarch64-apple-darwin 1.80.1 hf6ec828_0 license: MIT + license_family: MIT size: 197866703 timestamp: 1723155024117 - kind: conda @@ -13827,6 +12358,7 @@ packages: depends: - rust-std-x86_64-apple-darwin 1.80.1 h38e4360_0 license: MIT + license_family: MIT size: 202606989 timestamp: 1723154998091 - kind: conda @@ -13840,6 +12372,7 @@ packages: depends: - rust-std-x86_64-pc-windows-msvc 1.80.1 h17fc481_0 license: MIT + license_family: MIT size: 194534225 timestamp: 1723155969495 - kind: conda @@ -13856,6 +12389,7 @@ packages: constrains: - rust >=1.80.1,<1.80.2.0a0 license: MIT + license_family: MIT size: 30991019 timestamp: 1723152907303 - kind: conda @@ -13872,6 +12406,7 @@ packages: constrains: - rust >=1.80.1,<1.80.2.0a0 license: MIT + license_family: MIT size: 31988631 timestamp: 1723152891461 - kind: conda @@ -13888,6 +12423,7 @@ packages: constrains: - rust >=1.80.1,<1.80.2.0a0 license: MIT + license_family: MIT size: 25255952 timestamp: 1723155705619 - kind: conda @@ -13904,6 +12440,7 @@ packages: constrains: - rust >=1.80.1,<1.80.2.0a0 license: MIT + license_family: MIT size: 33938994 timestamp: 1723153507938 - kind: conda @@ -14178,7 +12715,7 @@ packages: version: 4.11.2 build: pyhd8ed1ab_1 build_number: 1 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/selenium-4.11.2-pyhd8ed1ab_1.conda sha256: 9847a468c0e83e7033a1d648e1c335e0408a283668ead7a15fe00ff18c69bf47 @@ -14190,8 +12727,6 @@ packages: - trio >=0.17,<1.dev0 - trio-websocket >=0.9,<1.dev0 - urllib3 >=1.26,<3 - arch: x86_64 - platform: win license: Apache-2.0 license_family: APACHE size: 287929 @@ -14204,8 +12739,6 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-arm64/selenium-manager-4.11.0-h69fbcac_0.conda sha256: 91ff6d4a01e66ccebedb426676a47088fc235b43219c94f8d97b333598aa62d6 md5: 968b2caba9b2f916203bf6bf8f86a60f - arch: aarch64 - platform: osx license: Apache-2.0 license_family: APACHE size: 1695888 @@ -14218,8 +12751,6 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-64/selenium-manager-4.11.0-h7205ca4_0.conda sha256: 539c794d621e4cf759871590bca894b9afe30e3d659cb29be019a8cff6f4ad77 md5: 030a4f1790ef349f12607c546bd0afe1 - arch: x86_64 - platform: osx license: Apache-2.0 license_family: APACHE size: 1784783 @@ -14236,8 +12767,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: Apache-2.0 license_family: APACHE size: 1695936 @@ -14252,180 +12781,136 @@ packages: md5: da77d34335f38ab15c4a35afcd88a619 depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: Apache-2.0 license_family: APACHE size: 1911432 timestamp: 1691679258823 - kind: conda name: send2trash - version: 1.8.2 - build: pyh08f2357_0 - subdir: win-64 + version: 1.8.3 + build: pyh0d859eb_0 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyh08f2357_0.conda - sha256: 55208c6b48d68dc9ad2e2cf81ab9dc6b8a1d607e67acf9115bdc7794accc84bc - md5: c00d32dfa733d381b6a1908d0d67e0d7 + url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh0d859eb_0.conda + sha256: c4401b071e86ddfa0ea4f34b85308db2516b6aeca50053535996864cfdee7b3f + md5: 778594b20097b5a948c59e50ae42482a depends: - - __win * - - python >=3.6 - - pywin32 * - arch: x86_64 - platform: win + - __linux + - python >=3.7 license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/send2trash - size: 23279 - timestamp: 1682601755260 + size: 22868 + timestamp: 1712585140895 - kind: conda name: send2trash - version: 1.8.2 - build: pyh41d4057_0 - subdir: linux-64 + version: 1.8.3 + build: pyh31c8845_0 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyh41d4057_0.conda - sha256: e74d3faf51a6cc429898da0209d95b209270160f3edbf2f6d8b61a99428301cd - md5: ada5a17adcd10be4fc7e37e4166ba0e2 + url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh31c8845_0.conda + sha256: f911307db932c92510da6c3c15b461aef935720776643a1fbf3683f61001068b + md5: c3cb67fc72fb38020fe7923dbbcf69b0 depends: - - __linux * - - python >=3.6 - arch: x86_64 - platform: linux + - __osx + - pyobjc-framework-cocoa + - python >=3.7 license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/send2trash - size: 22821 - timestamp: 1682601391911 + size: 23165 + timestamp: 1712585504123 - kind: conda name: send2trash - version: 1.8.2 - build: pyhd1c38e8_0 - subdir: osx-arm64 + version: 1.8.3 + build: pyh5737063_0 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.2-pyhd1c38e8_0.conda - sha256: dca4022bae47618ed738ab7d45ead5202d174b741cfb98e4484acdc6e76da32a - md5: 2657c3de5371c571aef6678afb4aaadd + url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh5737063_0.conda + sha256: d8aa230501a33250af2deee03006a2579f0335e7240a9c7286834788dcdcfaa8 + md5: 5a86a21050ca3831ec7f77fb302f1132 depends: - - __osx * - - pyobjc-framework-cocoa * - - python >=3.6 - arch: aarch64 - platform: osx + - __win + - python >=3.7 + - pywin32 license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/send2trash - size: 23021 - timestamp: 1682601619389 -- kind: conda - name: setuptools - version: 68.0.0 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.0.0-pyhd8ed1ab_0.conda - sha256: 083a0913f5b56644051f31ac40b4eeea762a88c00aa12437817191b85a753cec - md5: 5a7739d0f57ee64133c9d32e6507c46d - depends: - - python >=3.7 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - purls: - - pkg:pypi/setuptools - size: 463712 - timestamp: 1687527994911 + size: 23319 + timestamp: 1712585816346 - kind: conda name: setuptools - version: 68.2.2 + version: 75.1.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda - sha256: 851901b1f8f2049edb36a675f0c3f9a98e1495ef4eb214761b048c6f696a06f7 - md5: fc2166155db840c634a1291a5c35a709 + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + sha256: 6725235722095c547edd24275053c615158d6163f396550840aebd6e209e4738 + md5: d5cd48392c67fb6849ba459c2c2b671f depends: - - python >=3.7 - arch: x86_64 - platform: win + - python >=3.8 license: MIT license_family: MIT - purls: - - pkg:pypi/setuptools - size: 464399 - timestamp: 1694548452441 + size: 777462 + timestamp: 1727249510532 - kind: conda name: six version: 1.16.0 build: pyh6c4a22f_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6 md5: e5f25f8dbc060e9a8d912e432202afc2 depends: - - python * - arch: x86_64 - platform: win + - python license: MIT license_family: MIT - purls: - - pkg:pypi/six size: 14259 timestamp: 1620240338595 - kind: conda name: snappy version: 1.1.10 - build: h17c5cce_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.1.10-h17c5cce_0.conda - sha256: dfae03cd2339587871e53b42833657faa4c9e42e3e2c56ee9e32bc60797c7f62 - md5: ac82a611d1a67a598096ebaa857198e3 + build: h6dc393e_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.1.10-h6dc393e_1.conda + sha256: 902133a046a264c7179278d09270e47a420961358c409dd1938a20b6436b82cf + md5: 61ef3240d413e733ba4e547657d8a9db depends: - - libcxx >=14.0.6 - arch: aarch64 - platform: osx + - libcxx >=16 license: BSD-3-Clause license_family: BSD - size: 33879 - timestamp: 1678534968831 + size: 34852 + timestamp: 1712591354627 - kind: conda name: snappy version: 1.1.10 - build: h225ccf5_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.1.10-h225ccf5_0.conda - sha256: 575915dc13152e446a84e2f88de70a14f8b6af1a870e708f9370bd4be105583b - md5: 4320a8781f14cd959689b86e349f3b73 + build: hd04f947_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.1.10-hd04f947_1.conda + sha256: d7f7b14bb299019419ef9984ce0eae1990fab1cf3708b04766b0b31fe193aa3d + md5: 1506177f0a11c04cd16f330b2f4ad21d depends: - - libcxx >=14.0.6 - arch: x86_64 - platform: osx + - libcxx >=16 license: BSD-3-Clause license_family: BSD - size: 34657 - timestamp: 1678534768395 + size: 34330 + timestamp: 1712591417982 - kind: conda name: snappy version: 1.1.10 - build: h9fff704_0 + build: hdb0a2a9_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda - sha256: 02219f2382b4fe39250627dade087a4412d811936a5a445636b7260477164eac - md5: e6d228cd0bb74a51dd18f5bfce0b4115 + url: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-hdb0a2a9_1.conda + sha256: 082eadbc355016e948f1acc2f16e721ae362ecdaa204cbd60136ada19bd43f3a + md5: 78b8b85bdf1f42b8a2b3cb577d8742d1 depends: - libgcc-ng >=12 - libstdcxx-ng >=12 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD - size: 38865 - timestamp: 1678534590321 + size: 40135 + timestamp: 1712590996060 - kind: conda name: snappy version: 1.1.10 @@ -14445,120 +12930,68 @@ packages: timestamp: 1712591561466 - kind: conda name: sniffio - version: 1.3.0 + version: 1.3.1 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.0-pyhd8ed1ab_0.tar.bz2 - sha256: a3fd30754c20ddb28b777db38345ea00d958f46701f0decd6291a81c0f4eee78 - md5: dd6cbc539e74cb1f430efbd4575b9303 + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b + md5: 490730480d76cf9c8f8f2849719c6e2b depends: - python >=3.7 - arch: x86_64 - platform: win license: Apache-2.0 license_family: Apache - purls: - - pkg:pypi/sniffio - size: 14358 - timestamp: 1662051357638 + size: 15064 + timestamp: 1708953086199 - kind: conda name: sortedcontainers version: 2.4.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 sha256: 0cea408397d50c2afb2d25e987ebac4546ae11e549d65b1403d80dc368dfaaa6 md5: 6d6552722448103793743dabfbda532d depends: - python >=2.7 - arch: x86_64 - platform: win license: Apache-2.0 license_family: APACHE - purls: - - pkg:pypi/sortedcontainers size: 26314 timestamp: 1621217159824 -- kind: conda - name: soupsieve - version: 2.3.2.post1 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.3.2.post1-pyhd8ed1ab_0.tar.bz2 - sha256: 72d80dda41c3902c2619e8ab49d4f5b2a894d13375e1f9ed16fc00074ddd2307 - md5: 146f4541d643d48fc8a75cacf69f03ae - depends: - - python >=3.6 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - purls: - - pkg:pypi/soupsieve - size: 34736 - timestamp: 1658207688981 - kind: conda name: soupsieve version: '2.5' build: pyhd8ed1ab_1 build_number: 1 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda sha256: 54ae221033db8fbcd4998ccb07f3c3828b4d77e73b0c72b18c1d6a507059059c md5: 3f144b2c34f8cb5a9abd9ed23a39c561 depends: - python >=3.8 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/soupsieve size: 36754 timestamp: 1693929424267 - kind: conda name: stack_data version: 0.6.2 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda sha256: a58433e75229bec39f3be50c02efbe9b7083e53a1f31d8ee247564f370191eec md5: e7df0fdd404616638df5ece6e69ba7af depends: - - asttokens * - - executing * - - pure_eval * + - asttokens + - executing + - pure_eval - python >=3.5 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/stack-data size: 26205 timestamp: 1669632203115 -- kind: conda - name: svt-av1 - version: 1.7.0 - build: h59595ed_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-1.7.0-h59595ed_0.conda - sha256: e79878bba3b013db1b59766895a182dd12d2e1a45e24c01b61b4e922ed8500b6 - md5: b6e0b4f1edc2740d1cf87669195c39d4 - depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 - arch: x86_64 - platform: linux - license: BSD-2-Clause - license_family: BSD - size: 2641420 - timestamp: 1692966629866 - kind: conda name: svt-av1 version: 1.7.0 @@ -14577,20 +13010,35 @@ packages: timestamp: 1692967156046 - kind: conda name: svt-av1 - version: 1.7.0 - build: he965462_0 + version: 2.2.1 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-2.2.1-h5888daf_0.conda + sha256: a1c197ea17dac43ad6c223e42d78726b9f37f31f63d65e0c062e418cb98c7a8f + md5: 0d9c441855be3d8dfdb2e800fe755059 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=13 + - libstdcxx-ng >=13 + license: BSD-2-Clause + license_family: BSD + size: 2404332 + timestamp: 1724459503486 +- kind: conda + name: svt-av1 + version: 2.2.1 + build: hac325c4_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/svt-av1-1.7.0-he965462_0.conda - sha256: dd56ba8b8a885df0b0c261929781b22ce41b765439dd334b680812443ae53ace - md5: 0f15584eeb93b270ac297cc3990d5e95 + url: https://conda.anaconda.org/conda-forge/osx-64/svt-av1-2.2.1-hac325c4_0.conda + sha256: 9e229a7e34d0526c9e52bac85e3aa4c3d8c25df4f8618274bc135f9c19140a5d + md5: 07799aecfd86318fa5b4c5202b7acdce depends: - - libcxx >=15.0.7 - arch: x86_64 - platform: osx + - __osx >=10.13 + - libcxx >=17 license: BSD-2-Clause license_family: BSD - size: 2429529 - timestamp: 1692967052961 + size: 2153628 + timestamp: 1724459465920 - kind: conda name: symlink-exe-runtime version: '1.0' @@ -14603,8 +13051,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vs2015_runtime >=14.29.30139 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD size: 11597 @@ -14612,259 +13058,247 @@ packages: - kind: conda name: sysroot_linux-64 version: '2.17' - build: h4a8ded7_16 - build_number: 16 + build: h4a8ded7_17 + build_number: 17 subdir: noarch noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h4a8ded7_16.conda - sha256: b892b0b9c6dc8efe8b9b5442597d1ab8d65c0dc7e4e5a80f822cbdf0a639bd77 - md5: 223fe8a3ff6d5e78484a9d58eb34d055 + url: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.17-h4a8ded7_17.conda + sha256: 5629b0e93c8e9fb9152de46e244d32ff58184b2cbf0f67757826a9610f3d1a21 + md5: f58cb23983633068700a756f0b5f165a depends: - - _sysroot_linux-64_curr_repodata_hack 3.* - - kernel-headers_linux-64 3.10.0 h4a8ded7_16 + - kernel-headers_linux-64 3.10.0 he073ed8_17 - tzdata license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later AND MPL-2.0 license_family: GPL - size: 15513240 - timestamp: 1720621429816 + size: 15141219 + timestamp: 1727437660028 - kind: conda name: taplo version: 0.9.3 - build: h1de38c7_0 + build: h53e704d_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/taplo-0.9.3-h1de38c7_0.conda - sha256: 31012219e1843dd23ac647a4bf866e2f9d1135c458d96d5dac3bc8aed1a4cdbc - md5: 15132abc26d062d31ae3f51f955e5af2 + url: https://conda.anaconda.org/conda-forge/linux-64/taplo-0.9.3-h53e704d_1.conda + sha256: c6043d0e7df9bf3a4752cf965c04586e268040a563aaa97e60279e87b1da4b7b + md5: b8a6d8df78c43e3ffd4459313c9bcf84 depends: - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 - - openssl >=3.3.1,<4.0a0 + - libgcc >=13 + - openssl >=3.3.2,<4.0a0 constrains: - __glibc >=2.17 license: MIT license_family: MIT - size: 3800652 - timestamp: 1722469974675 + size: 3835339 + timestamp: 1727786201305 - kind: conda name: taplo version: 0.9.3 - build: h563f0a8_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/taplo-0.9.3-h563f0a8_0.conda - sha256: 0dabdf9b68ecd90f5df0ed834fa169775e1b24bee3c41698c95128ca5f1ca52c - md5: 1586f6e3c42fddd12396e264bcf520fc + build: ha073cba_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/taplo-0.9.3-ha073cba_1.conda + sha256: 92a705d40a3ab1587058049ac1ad22a9c1e372dfa4f3788730393c776b5af84b + md5: d4d5e0723a7b8f53e04ea65b374ba3a9 depends: - - __osx >=11.0 - - openssl >=3.3.1,<4.0a0 - constrains: - - __osx >=11.0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: MIT license_family: MIT - size: 3489710 - timestamp: 1722470204954 + size: 3862809 + timestamp: 1727787217223 - kind: conda name: taplo version: 0.9.3 - build: h823019e_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/taplo-0.9.3-h823019e_0.conda - sha256: 54505d45d3801eb178f6d0b0870a47236d5ae7232368a6363cb4b68b67911dfa - md5: c7f563cf04c6c8202d2ba24ab3ededf0 + build: hdf53557_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/taplo-0.9.3-hdf53557_1.conda + sha256: 5dd8f44aa881f45821c4d460ba20a6c6b2ac9564fd4682c48ff5d8048f6afeef + md5: c6ab80dfebf091636c1e0570660e368c depends: - - m2w64-gcc-libs - - m2w64-gcc-libs-core + - __osx >=11.0 + - openssl >=3.3.2,<4.0a0 + constrains: + - __osx >=11.0 license: MIT license_family: MIT - size: 3825427 - timestamp: 1722471277238 + size: 3522930 + timestamp: 1727786418703 - kind: conda name: taplo version: 0.9.3 - build: hd264b5c_0 + build: hf3953a5_1 + build_number: 1 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/taplo-0.9.3-hd264b5c_0.conda - sha256: b3a6e9eb8f9f1c7dc3feb54baccb52e29470a5115c85965d87730085f350c0c3 - md5: 23c7b26e204ac57d2eef3e61bb635be5 + url: https://conda.anaconda.org/conda-forge/osx-64/taplo-0.9.3-hf3953a5_1.conda + sha256: 76cc103c5b785887a519c2bb04b68bea170d3a061331170ea5f15615df0af354 + md5: 9ac41cb4cb31a6187d7336e16d1dab8f depends: - __osx >=10.13 - - openssl >=3.3.1,<4.0a0 + - openssl >=3.3.2,<4.0a0 constrains: - __osx >=10.13 license: MIT license_family: MIT - size: 3699006 - timestamp: 1722470174306 + size: 3738226 + timestamp: 1727786378888 - kind: conda name: tbb - version: 2021.10.0 - build: h91493d7_2 - build_number: 2 + version: 2021.13.0 + build: hc790b64_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.10.0-h91493d7_2.conda - sha256: e55a2f1324f0fc8916ab8d590a3944ba1af62de727bb66e3019cf2744d26e679 - md5: 5b8c97cf8f0e81d6c22c0bda9978790d + url: https://conda.anaconda.org/conda-forge/win-64/tbb-2021.13.0-hc790b64_0.conda + sha256: 990dbe4fb42f14700c22bd434d8312607bf8d0bd9f922b054e51fda14c41994c + md5: 28496a1e6af43c63927da4f80260348d depends: - - libhwloc >=2.9.3,<2.9.4.0a0 + - libhwloc >=2.11.1,<2.11.2.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: Apache-2.0 license_family: APACHE - size: 156566 - timestamp: 1697713986066 + size: 151494 + timestamp: 1725532984828 - kind: conda name: tenacity version: 8.2.3 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda sha256: 860c11e7369d6a86fcc9c6cbca49d5c457f6c0a27faeacca4d46267f9dd10d78 md5: 1482e77f87c6a702a7e05ef22c9b197b depends: - python >=3.7 - arch: x86_64 - platform: win license: Apache-2.0 license_family: APACHE - purls: - - pkg:pypi/tenacity size: 22802 timestamp: 1692026941198 - kind: conda name: terminado - version: 0.17.0 - build: pyh08f2357_0 - subdir: win-64 + version: 0.18.1 + build: pyh0d859eb_0 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.0-pyh08f2357_0.tar.bz2 - sha256: 5c8fcf31430e0f312bc65ab5aa5b893fcc250820c023b02ff3fd188ae13199a5 - md5: 0152a609d5748ed9887d195b1e61a6c9 + url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh0d859eb_0.conda + sha256: b300557c0382478cf661ddb520263508e4b3b5871b471410450ef2846e8c352c + md5: efba281bbdae5f6b0a1d53c6d4a97c93 depends: - - __win * - - python >=3.7 - - pywinpty >=1.1.0 + - __linux + - ptyprocess + - python >=3.8 - tornado >=6.1.0 - arch: x86_64 - platform: win license: BSD-2-Clause license_family: BSD - purls: - - pkg:pypi/terminado - size: 19530 - timestamp: 1666708102607 + size: 22452 + timestamp: 1710262728753 - kind: conda name: terminado - version: 0.17.1 - build: pyh41d4057_0 - subdir: linux-64 + version: 0.18.1 + build: pyh31c8845_0 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.1-pyh41d4057_0.conda - sha256: bce252eb53330a8ba9617caa7a1dc75ce602c8808cf547a8f4d48285901f47c3 - md5: 3788984d535770cad699efaeb6cb3037 + url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh31c8845_0.conda + sha256: 4daae56fc8da17784578fbdd064f17e3b3076b394730a14119e571707568dc8a + md5: 00b54981b923f5aefcd5e8547de056d5 depends: - - __linux * - - ptyprocess * - - python >=3.7 + - __osx + - ptyprocess + - python >=3.8 - tornado >=6.1.0 - arch: x86_64 - platform: linux license: BSD-2-Clause license_family: BSD - purls: - - pkg:pypi/terminado - size: 20787 - timestamp: 1670253786972 + size: 22717 + timestamp: 1710265922593 - kind: conda name: terminado - version: 0.17.1 - build: pyhd1c38e8_0 - subdir: osx-arm64 + version: 0.18.1 + build: pyh5737063_0 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.17.1-pyhd1c38e8_0.conda - sha256: a2f8382ab390c74af592cc3566dc22e2ed81e5ac69c5b6417d1b7c22e63927bc - md5: 046120b71d8896cb7faef78bfdbfee1e + url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh5737063_0.conda + sha256: 8cb078291fd7882904e3de594d299c8de16dd3af7405787fce6919a385cfc238 + md5: 4abd500577430a942a995fd0d09b76a2 depends: - - python >=3.7 - - ptyprocess * - - __osx * + - __win + - python >=3.8 + - pywinpty >=1.1.0 - tornado >=6.1.0 - arch: aarch64 - platform: osx license: BSD-2-Clause license_family: BSD - purls: - - pkg:pypi/terminado - size: 20347 - timestamp: 1670254383751 + size: 22883 + timestamp: 1710262943966 - kind: conda name: tifffile version: 2023.8.12 build: pyhd8ed1ab_0 - subdir: osx-arm64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/tifffile-2023.8.12-pyhd8ed1ab_0.conda sha256: 13f9aa25981d3c1d01f262eb57671b4c02828bd3c49718eeb446614b46b1fc6d md5: 8011f62c4f00db4aa7c37e0088827bad depends: - - numpy >=1.19.2 - - python >=3.9 - imagecodecs >=2023.1.23 + - numpy >=1.19.2,<2.0.0a0 + - python >=3.9 constrains: - matplotlib-base >=3.3 - arch: aarch64 - platform: osx license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/tifffile size: 174995 timestamp: 1692120265599 - kind: conda name: tifffile - version: 2023.9.26 + version: 2024.9.20 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/tifffile-2023.9.26-pyhd8ed1ab_0.conda - sha256: 39742cc92e80b8caba08f3a45cb1e9c019d4109223c54e9cfb963e18c0241203 - md5: d133bea7d8ac17552492a0629229eeb1 + url: https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.9.20-pyhd8ed1ab_0.conda + sha256: 10b70ee019158ef75f2c861724b2b2c11002643031f862b3a8ca99014607ceed + md5: 6de55c7859ed314159eaf2b7b4f19cc7 depends: - imagecodecs >=2023.8.12 - numpy >=1.19.2 - - python >=3.9 + - python >=3.10 constrains: - matplotlib-base >=3.3 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/tifffile - size: 175893 - timestamp: 1695815171045 + size: 180655 + timestamp: 1727250532025 - kind: conda name: tinycss2 - version: 1.2.1 + version: 1.3.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2 - sha256: f0db1a2298a5e10e30f4b947566c7229442834702f549dded40a73ecdea7502d - md5: 7234c9eefff659501cd2fe0d2ede4d48 + url: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.3.0-pyhd8ed1ab_0.conda + sha256: bc55e5899e66805589c02061e315bfc23ae6cc2f2811f5cc13fb189a5ed9d90f + md5: 8662629d9a05f9cff364e31ca106c1ac depends: - python >=3.5 - webencodings >=0.4 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/tinycss2 - size: 23235 - timestamp: 1666100385187 + size: 25405 + timestamp: 1713975078735 +- kind: conda + name: tk + version: 8.6.13 + build: h1abcd95_1 + build_number: 1 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h1abcd95_1.conda + sha256: 30412b2e9de4ff82d8c2a7e5d06a15f4f4fef1809a72138b6ccb53a33b26faf5 + md5: bf830ba5afc507c6232d4ef0fb1a882d + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + size: 3270220 + timestamp: 1699202389792 - kind: conda name: tk version: 8.6.13 @@ -14883,37 +13317,20 @@ packages: - kind: conda name: tk version: 8.6.13 - build: hcfcfb64_0 + build: h5226925_1 + build_number: 1 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-hcfcfb64_0.conda - sha256: 7e42db6b5f1c5ef8d4660e6ce41b52802b6c2fdc270d5e1eccc0048d0a3f03a8 - md5: 74405f2ccbb40af409fee1a71ce70dc6 + url: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + sha256: 2c4e914f521ccb2718946645108c9bd3fc3216ba69aea20c2c3cedbd8db32bb1 + md5: fc048363eb8f03cd1737600a5d08aafe depends: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win - license: TCL - license_family: BSD - size: 3478482 - timestamp: 1695506766462 -- kind: conda - name: tk - version: 8.6.13 - build: hef22860_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-hef22860_0.conda - sha256: 573e5d7dde0a63b06ceef2c574295cbc2ec8668ec08e35d2f2c6220f4aa7fb98 - md5: 0c25eedcc888b6d765948ab62a18c03e - depends: - - libzlib >=1.2.13,<1.3.0a0 - arch: x86_64 - platform: osx license: TCL license_family: BSD - size: 3273909 - timestamp: 1695506576288 + size: 3503410 + timestamp: 1699202577803 - kind: conda name: tk version: 8.6.13 @@ -14934,40 +13351,32 @@ packages: name: toml version: 0.10.2 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2 sha256: f0f3d697349d6580e4c2f35ba9ce05c65dc34f9f049e85e45da03800b46139c1 md5: f832c45a477c78bebd107098db465095 depends: - python >=2.7 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/toml size: 18433 timestamp: 1604308660817 - kind: conda name: tomli - version: 2.0.1 + version: 2.0.2 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 - sha256: 4cd48aba7cd026d17e86886af48d0d2ebc67ed36f87f6534f4b67138f5a5a58f - md5: 5844808ffab9ebdb694585b50ba02a96 + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + sha256: 5e742ba856168b606ac3c814d247657b1c33b8042371f1a08000bdc5075bc0cc + md5: e977934e00b355ff55ed154904044727 depends: - python >=3.7 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/tomli - size: 15940 - timestamp: 1644342331069 + size: 18203 + timestamp: 1727974767524 - kind: conda name: tornado version: 6.4.1 @@ -15042,51 +13451,27 @@ packages: timestamp: 1724956678451 - kind: conda name: traitlets - version: 5.9.0 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.9.0-pyhd8ed1ab_0.conda - sha256: 343610bce6dbe8a5090500dd2e9d1706057960b3f3120ebfe0abb4a8ecbada4d - md5: d0b4f5c87cd35ac3fb3d47b223263a64 - depends: - - python >=3.7 - arch: aarch64 - platform: osx - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/traitlets - size: 98443 - timestamp: 1675110676323 -- kind: conda - name: traitlets - version: 5.13.0 + version: 5.14.3 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.13.0-pyhd8ed1ab_0.conda - sha256: 7ac67960ba2e8c16818043cc65ac6190fa4fd95f5b24357df58e4f73d5e60a10 - md5: 8a9953c15e1e5a7c1baddbbf4511a567 + url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + sha256: 8a64fa0f19022828513667c2c7176cfd125001f3f4b9bc00d33732e627dd2592 + md5: 3df84416a021220d8b5700c613af2dc5 depends: - python >=3.8 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/traitlets - size: 109701 - timestamp: 1698671281969 + size: 110187 + timestamp: 1713535244513 - kind: conda name: trio - version: 0.26.2 - build: py310h2ec42d9_1 - build_number: 1 + version: 0.27.0 + build: py310h2ec42d9_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/trio-0.26.2-py310h2ec42d9_1.conda - sha256: 9e8fec471b4e8ea35aeba696af5ed84fcded8d2a6780b59df9a5d8acc1f40180 - md5: c08734201f953162e2e6eb5a173c947e + url: https://conda.anaconda.org/conda-forge/osx-64/trio-0.27.0-py310h2ec42d9_0.conda + sha256: e497f130612bc70e1f6844919c9af462d678f9fcd1b83f45620f90921cb90350 + md5: 1675fd012de1f480946ea0cd15ceb7bd depends: - attrs >=23.2.0 - exceptiongroup @@ -15098,17 +13483,16 @@ packages: - sortedcontainers license: MIT license_family: MIT - size: 667498 - timestamp: 1725302495390 + size: 674802 + timestamp: 1729165664183 - kind: conda name: trio - version: 0.26.2 - build: py310h5588dad_1 - build_number: 1 + version: 0.27.0 + build: py310h5588dad_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/trio-0.26.2-py310h5588dad_1.conda - sha256: 64e938f2a64bbbfba1972e07507054f038d5f50789ff3622ca83fefe830b51cb - md5: f6b75866f3a8e63bb4076002cf1a043b + url: https://conda.anaconda.org/conda-forge/win-64/trio-0.27.0-py310h5588dad_0.conda + sha256: 860c899183e536a39a7b2e0272005c3cdc6e86360dead5e201799aef25a7f433 + md5: 22160b8514d8271dc077f7f2d2e3a48f depends: - attrs >=23.2.0 - cffi >=1.14 @@ -15121,17 +13505,16 @@ packages: - sortedcontainers license: MIT license_family: MIT - size: 666450 - timestamp: 1725302557341 + size: 674948 + timestamp: 1729165821206 - kind: conda name: trio - version: 0.26.2 - build: py310hbe9552e_1 - build_number: 1 + version: 0.27.0 + build: py310hbe9552e_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/trio-0.26.2-py310hbe9552e_1.conda - sha256: 80367158cc5f5bda5c4bf64976f09ee1449d14d3fc518cd393482b98bad18b40 - md5: bb2c06c0b91386385a60d1a2bb16f348 + url: https://conda.anaconda.org/conda-forge/osx-arm64/trio-0.27.0-py310hbe9552e_0.conda + sha256: 3a02b122a2a855bf6e0e2bb5f7c81bab51823da7011f2fd90cf5c3facd0f3f1b + md5: 56133b4e7bb81cadf0720b160baa94cd depends: - attrs >=23.2.0 - exceptiongroup @@ -15144,17 +13527,16 @@ packages: - sortedcontainers license: MIT license_family: MIT - size: 668732 - timestamp: 1725302567081 + size: 675630 + timestamp: 1729165833238 - kind: conda name: trio - version: 0.26.2 - build: py310hff52083_1 - build_number: 1 + version: 0.27.0 + build: py310hff52083_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/trio-0.26.2-py310hff52083_1.conda - sha256: f418f62f91e535c3f090e7f94509f5d51b73f236e6117f137ec1cdbe2e4c3869 - md5: 4a01ce7ef0ec0b5a05e89f4c2fc96a66 + url: https://conda.anaconda.org/conda-forge/linux-64/trio-0.27.0-py310hff52083_0.conda + sha256: 4a1b2eb0f7ca9fa24f7b15c321195c03e041e76b4afc0c89815ca791cc57570d + md5: 200f71d105200e397d61139a73ff1fa3 depends: - attrs >=23.2.0 - exceptiongroup @@ -15166,64 +13548,40 @@ packages: - sortedcontainers license: MIT license_family: MIT - size: 665059 - timestamp: 1725302424837 -- kind: conda - name: trio-websocket - version: 0.10.3 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/trio-websocket-0.10.3-pyhd8ed1ab_0.conda - sha256: 378b1fff91d692d986ada973fc92bd724a8294802d25243ea26694a8e918a725 - md5: 51338d1133d8fed41796a581e974b22d - depends: - - exceptiongroup * - - python >=3.7 - - trio >=0.11 - - wsproto >=0.14 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - size: 30250 - timestamp: 1686273412284 + size: 674045 + timestamp: 1729165617914 - kind: conda name: trio-websocket version: 0.11.1 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/trio-websocket-0.11.1-pyhd8ed1ab_0.conda sha256: c6f4453ee5116a584c347c40e60a61fac645ce203c8bea245bb72c3a865b04cf md5: 020557a424faf98154938da4426fe987 depends: - - exceptiongroup * + - exceptiongroup - python >=3.7 - trio >=0.11 - wsproto >=0.14 - arch: x86_64 - platform: win license: MIT license_family: MIT size: 30714 timestamp: 1695817030933 - kind: conda name: types-python-dateutil - version: 2.8.19.14 - build: pyhd8ed1ab_0 - subdir: win-64 + version: 2.9.0.20241003 + build: pyhff2d567_0 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.8.19.14-pyhd8ed1ab_0.conda - sha256: 7b0129c72d371fa7a06ed5dd1d701844c20d03bb4641a38a88a982b347d087e2 - md5: 4df15c51a543e806d439490b862be1c6 + url: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20241003-pyhff2d567_0.conda + sha256: 8489af986daebfbcd13d3748ba55431259206e37f184ab42a57e107fecd85e02 + md5: 3d326f8a2aa2d14d51d8c513426b5def depends: - python >=3.6 - arch: x86_64 - platform: win license: Apache-2.0 AND MIT - size: 21474 - timestamp: 1689883066161 + size: 21765 + timestamp: 1727940339297 - kind: conda name: typing-extensions version: 4.12.2 @@ -15258,51 +13616,43 @@ packages: name: typing_utils version: 0.1.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 sha256: 9e3758b620397f56fb709f796969de436d63b7117897159619b87938e1f78739 md5: eb67e3cace64c66233e2d35949e20f92 depends: - python >=3.6.1 - arch: x86_64 - platform: win license: Apache-2.0 license_family: APACHE - purls: - - pkg:pypi/typing-utils size: 13829 timestamp: 1622899345711 - kind: conda name: tzdata - version: 2023c - build: h71feb2d_0 - subdir: win-64 + version: 2024b + build: hc8b5060_0 + subdir: noarch noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda - sha256: 0449138224adfa125b220154408419ec37c06b0b49f63c5954724325903ecf55 - md5: 939e3e74d8be4dac89ce83b20de2492a - arch: x86_64 - platform: win + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 license: LicenseRef-Public-Domain - size: 117580 - timestamp: 1680041306008 + size: 122354 + timestamp: 1728047496079 - kind: conda name: ucrt version: 10.0.22621.0 - build: h57928b3_0 + build: h57928b3_1 + build_number: 1 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 - sha256: f29cdaf8712008f6b419b8b1a403923b00ab2504bfe0fb2ba8eb60e72d4f14c6 - md5: 72608f6cd3e5898229c3ea16deb1ac43 + url: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_1.conda + sha256: db8dead3dd30fb1a032737554ce91e2819b43496a0db09927edf01c32b577450 + md5: 6797b005cd0f439c4c5c9ac565783700 constrains: - vs2015_runtime >=14.29.30037 - arch: x86_64 - platform: win - license: LicenseRef-Proprietary - license_family: PROPRIETARY - size: 1283972 - timestamp: 1666630199266 + license: LicenseRef-MicrosoftWindowsSDK10 + size: 559710 + timestamp: 1728377334097 - kind: conda name: ucx version: 1.14.1 @@ -15327,115 +13677,84 @@ packages: name: uri-template version: 1.3.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda sha256: b76904b53721dc88a46352324c79d2b077c2f74a9f7208ad2c4249892669ae94 md5: 0944dc65cb4a9b5b68522c3bb585d41c depends: - python >=3.7 - arch: x86_64 - platform: win license: MIT license_family: MIT size: 23999 timestamp: 1688655976471 - kind: conda name: urllib3 - version: 2.0.4 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda - sha256: 06a62b6bff8828161b9cd17dd394e47177f320ca5050f806bc7840f9519e8ea7 - md5: 18badd8fa3648d1beb1fcc7f2e0f756e - depends: - - pysocks >=1.5.6,<2.0,!=1.5.7 - - python >=3.7 - - brotli-python >=1.0.9 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - purls: - - pkg:pypi/urllib3 - size: 98368 - timestamp: 1689789963646 -- kind: conda - name: urllib3 - version: 2.0.7 + version: 2.2.3 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.7-pyhd8ed1ab_0.conda - sha256: 9fe14735dde74278c6f1710cbe883d5710fc98501a96031dec6849a8d8a1bb11 - md5: 270e71c14d37074b1d066ee21cf0c4a6 + url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda + sha256: b6bb34ce41cd93956ad6eeee275ed52390fb3788d6c75e753172ea7ac60b66e5 + md5: 6b55867f385dd762ed99ea687af32a69 depends: - brotli-python >=1.0.9 + - h2 >=4,<5 - pysocks >=1.5.6,<2.0,!=1.5.7 - - python >=3.7 - arch: x86_64 - platform: win + - python >=3.8 + - zstandard >=0.18.0 license: MIT license_family: MIT - purls: - - pkg:pypi/urllib3 - size: 98507 - timestamp: 1697720586316 + size: 98076 + timestamp: 1726496531769 - kind: conda name: vc version: '14.3' - build: h64f974e_17 - build_number: 17 + build: ha32ba9b_22 + build_number: 22 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h64f974e_17.conda - sha256: 86ae94bf680980776aa761c2b0909a0ddbe1f817e7eeb8b16a1730f10f8891b6 - md5: 67ff6791f235bb606659bf2a5c169191 + url: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-ha32ba9b_22.conda + sha256: 2a47c5bd8bec045959afada7063feacd074ad66b170c1ea92dd139b389fcf8fd + md5: 311c9ba1dfdd2895a8cb08346ff26259 depends: - - vc14_runtime >=14.36.32532 - arch: x86_64 - platform: win + - vc14_runtime >=14.38.33135 track_features: - vc14 license: BSD-3-Clause license_family: BSD - size: 17176 - timestamp: 1688020629925 + size: 17447 + timestamp: 1728400826998 - kind: conda name: vc14_runtime version: 14.40.33810 - build: ha82c5b3_20 - build_number: 20 + build: hcc2c482_22 + build_number: 22 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-ha82c5b3_20.conda - sha256: af3cfa347e3d7c1277e9b964b0849a9a9f095bff61836cb3c3a89862fbc32e17 - md5: e39cc4c34c53654ec939558993d9dc5b + url: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-hcc2c482_22.conda + sha256: 4c669c65007f88a7cdd560192f7e6d5679d191ac71610db724e18b2410964d64 + md5: ce23a4b980ee0556a118ed96550ff3f3 depends: - ucrt >=10.0.20348.0 constrains: - - vs2015_runtime 14.40.33810.* *_20 - license: LicenseRef-ProprietaryMicrosoft + - vs2015_runtime 14.40.33810.* *_22 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime license_family: Proprietary - size: 751934 - timestamp: 1717709031266 + size: 750719 + timestamp: 1728401055788 - kind: conda name: vega_datasets version: 0.9.0 build: pyhd3deb0d_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/vega_datasets-0.9.0-pyhd3deb0d_0.tar.bz2 sha256: 8dbed6cb5f1f861940af3bd2bc6ed05b1134878b5f944a0386b8268c54d882aa md5: c754e69d9d5de4a69ff0972318349bd0 depends: - - pandas * - - python * - arch: x86_64 - platform: win + - pandas + - python license: MIT license_family: MIT - purls: - - pkg:pypi/vega-datasets size: 183450 timestamp: 1606414171959 - kind: conda @@ -15520,7 +13839,7 @@ packages: name: voila version: 0.5.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/voila-0.5.0-pyhd8ed1ab_0.conda sha256: 91de336c868a22571cdc0e54b594569dd262769875a387b922e8c01ae5dd02da @@ -15537,29 +13856,25 @@ packages: - websockets >=9 constrains: - ipywidgets =8 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/voila size: 2484888 timestamp: 1692275824749 - kind: conda name: vs2015_runtime version: 14.40.33810 - build: h3bf8584_20 - build_number: 20 + build: h3bf8584_22 + build_number: 22 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_20.conda - sha256: 0c2803f7a788c51f28235a7228dc2ab3f107b4b16ab0845a3e595c8c51e50a7a - md5: c21f1b4a3a30bbc3ef35a50957578e0e + url: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_22.conda + sha256: 80aa9932203d65a96f817b8be4fafc176fb2b3fe6cf6899ede678b8f0317fbff + md5: 8c6b061d44cafdfc8e8c6eb5f100caf0 depends: - vc14_runtime >=14.40.33810 license: BSD-3-Clause license_family: BSD - size: 17395 - timestamp: 1717709043353 + size: 17453 + timestamp: 1728400827536 - kind: conda name: watchfiles version: 0.24.0 @@ -15644,137 +13959,65 @@ packages: timestamp: 1725347875153 - kind: conda name: wcwidth - version: 0.2.6 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.6-pyhd8ed1ab_0.conda - sha256: c1bd0ad7d854cae56977b7915ac2b78b652fa5f7ec1e9fc21e7fdb30cf4519b1 - md5: 078979d33523cb477bd1916ce41aacc9 - depends: - - python >=3.6 - - backports.functools_lru_cache * - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - purls: - - pkg:pypi/wcwidth - size: 29133 - timestamp: 1673864747518 -- kind: conda - name: wcwidth - version: 0.2.9 + version: 0.2.13 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.9-pyhd8ed1ab_0.conda - sha256: 7552f6545ed212b9ae5d023870481fc377c7f18b4854b63160699b95a420c42e - md5: 8e8280dec091763dfdc29e066de52270 + url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3 + md5: 68f0738df502a14213624b288c60c9ad depends: - - backports.functools_lru_cache * - - python >=3.6 - arch: x86_64 - platform: win + - python >=3.8 license: MIT license_family: MIT - purls: - - pkg:pypi/wcwidth - size: 30316 - timestamp: 1698744892384 + size: 32709 + timestamp: 1704731373922 - kind: conda name: webcolors - version: '1.13' + version: 24.8.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/webcolors-1.13-pyhd8ed1ab_0.conda - sha256: 6e097d5fe92849ad3af2c2a313771ad2fbf1cadd4dc4afd552303b2bf3f85211 - md5: 166212fe82dad8735550030488a01d03 + url: https://conda.anaconda.org/conda-forge/noarch/webcolors-24.8.0-pyhd8ed1ab_0.conda + sha256: ec71f97c332a7d328ae038990b8090cbfa772f82845b5d2233defd167b7cc5ac + md5: eb48b812eb4fbb9ff238a6651fdbbcae depends: - python >=3.5 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/webcolors - size: 18186 - timestamp: 1679900907305 -- kind: conda - name: webencodings - version: 0.5.1 - build: py_1 - build_number: 1 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-py_1.tar.bz2 - sha256: 302f4f4bd1ad00c0be1426ecf6bb01db59cfd8aff3de0cf1596526dca1a6b70e - md5: 3563be4c5611a44210d9ba0c16113136 - depends: - - python * - arch: aarch64 - platform: osx - license: BSD 3-Clause - license_family: BSD - size: 11901 - timestamp: 1535427077373 + size: 18378 + timestamp: 1723294800217 - kind: conda name: webencodings version: 0.5.1 build: pyhd8ed1ab_2 build_number: 2 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda sha256: 2adf9bd5482802837bc8814cbe28d7b2a4cbd2e2c52e381329eaa283b3ed1944 md5: daf5160ff9cde3a468556965329085b9 depends: - python >=2.6 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD size: 15600 timestamp: 1694681458271 - kind: conda name: websocket-client - version: 1.6.1 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.1-pyhd8ed1ab_0.conda - sha256: c71cb65ac49692adb33735f3114b99a96c0c5140db1d56cf4ccef4fe92ea9a4c - md5: c34d9325a609381a0b0e8a5b4f325147 - depends: - - python >=3.7 - arch: aarch64 - platform: osx - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/websocket-client - size: 45578 - timestamp: 1687789305648 -- kind: conda - name: websocket-client - version: 1.6.4 + version: 1.8.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.6.4-pyhd8ed1ab_0.conda - sha256: df45b89862edcd7cd5180ec7b8c0c0ca9fb4d3f7d49ddafccdc76afcf50d8da6 - md5: bdb77b28cf16deac0eef431a068320e8 + url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_0.conda + sha256: 44a5e3b97feef24cd719f7851cca9af9799dc9c17d3e0298d5856baab2d682f5 + md5: f372c576b8774922da83cda2b12f9d29 depends: - python >=3.8 - arch: x86_64 - platform: win license: Apache-2.0 license_family: APACHE - purls: - - pkg:pypi/websocket-client - size: 45866 - timestamp: 1696770282111 + size: 47066 + timestamp: 1713923494501 - kind: conda name: websockets version: '13.1' @@ -15845,100 +14088,50 @@ packages: timestamp: 1727013888775 - kind: conda name: wheel - version: 0.41.1 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.1-pyhd8ed1ab_0.conda - sha256: a27e2c2709245386ebffae865650b5d3f383530b809480c3083f7ae258759303 - md5: 8f467ba2db2b5470d297953d9c1f9c7d - depends: - - python >=3.7 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - purls: - - pkg:pypi/wheel - size: 57374 - timestamp: 1691249256363 -- kind: conda - name: wheel - version: 0.41.3 + version: 0.44.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.3-pyhd8ed1ab_0.conda - sha256: 84c3b57fba778add2bd47b7cc70e86f746d2c55549ffd2ccb6f3d6bf7c94d21d - md5: 3fc026b9c87d091c4b34a6c997324ae8 + url: https://conda.anaconda.org/conda-forge/noarch/wheel-0.44.0-pyhd8ed1ab_0.conda + sha256: d828764736babb4322b8102094de38074dedfc71f5ff405c9dfee89191c14ebc + md5: d44e3b085abcaef02983c6305b84b584 depends: - - python >=3.7 - arch: x86_64 - platform: win + - python >=3.8 license: MIT license_family: MIT - purls: - - pkg:pypi/wheel - size: 57901 - timestamp: 1698670970223 -- kind: conda - name: widgetsnbextension - version: 4.0.8 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.8-pyhd8ed1ab_0.conda - sha256: a73d34f8169e206bccfb356c093ff5ced803b953bbcc1480ed27976f97598d68 - md5: 2e9ebddf0b93d0fb203d0906b8052c4f - depends: - - python >=3.7 - arch: aarch64 - platform: osx - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/widgetsnbextension - size: 1071462 - timestamp: 1688504576796 + size: 58585 + timestamp: 1722797131787 - kind: conda name: widgetsnbextension - version: 4.0.9 + version: 4.0.13 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.9-pyhd8ed1ab_0.conda - sha256: 35dd47b3c117cd759ac46da0b69064bebccd94862e795615ee65dbbe3e6cd86b - md5: 82617d07b2f5f5a96296d3c19684b37a + url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_0.conda + sha256: d155adc10f8c96f76d4468dbe37b33b4334dadf5cd4a95841aa009ca9bced5fa + md5: 6372cd99502721bd7499f8d16b56268d depends: - python >=3.7 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/widgetsnbextension - size: 885957 - timestamp: 1694598840024 + size: 898656 + timestamp: 1724331433259 - kind: conda name: win_inet_pton version: 1.1.0 - build: pyhd8ed1ab_6 - build_number: 6 - subdir: win-64 + build: pyh7428d3b_7 + build_number: 7 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyhd8ed1ab_6.tar.bz2 - sha256: a11ae693a0645bf6c7b8a47bac030be9c0967d0b1924537b9ff7458e832c0511 - md5: 30878ecc4bd36e8deeea1e3c151b2e0b + url: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_7.conda + sha256: c5297692ab34aade5e21107abaf623d6f93847662e25f655320038d2bfa1a812 + md5: c998c13b2f998af57c3b88c7a47979e0 depends: - - __win * + - __win - python >=3.6 - arch: x86_64 - platform: win - license: PUBLIC-DOMAIN - purls: - - pkg:pypi/win-inet-pton - size: 8191 - timestamp: 1667051294134 + license: LicenseRef-Public-Domain + size: 9602 + timestamp: 1727796413384 - kind: conda name: winpty version: 0.4.3 @@ -16029,7 +14222,7 @@ packages: name: wsproto version: 1.2.0 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python url: https://conda.anaconda.org/conda-forge/noarch/wsproto-1.2.0-pyhd8ed1ab_0.tar.bz2 sha256: 66bd3f2db31fb62a2ff1f48d2c69ccdd2fa4467741149a0ad5c0bd097e0ac0e7 @@ -16037,148 +14230,142 @@ packages: depends: - h11 >=0.9.0,<1.0 - python >=3.7 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/wsproto size: 24731 timestamp: 1661356453883 - kind: conda name: xorg-fixesproto version: '5.0' - build: h7f98852_1002 - build_number: 1002 + build: hb9d3cd8_1003 + build_number: 1003 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-fixesproto-5.0-h7f98852_1002.tar.bz2 - sha256: 5d2af1b40f82128221bace9466565eca87c97726bb80bbfcd03871813f3e1876 - md5: 65ad6e1eb4aed2b0611855aff05e04f6 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-fixesproto-5.0-hb9d3cd8_1003.conda + sha256: 07268980b659a84a4bac64b475329348e9cf5fa4aee255fa94aa0407ae5b804c + md5: 19fe37721037acc0a1ed76b8cf937359 depends: - - libgcc-ng >=9.3.0 - - xorg-xextproto * - arch: x86_64 - platform: linux + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-xextproto >=7.3.0,<8.0a0 license: MIT license_family: MIT - size: 9122 - timestamp: 1617479697350 + size: 11311 + timestamp: 1727033761080 - kind: conda name: xorg-inputproto version: 2.3.2 - build: h7f98852_1002 - build_number: 1002 + build: hb9d3cd8_1003 + build_number: 1003 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-inputproto-2.3.2-h7f98852_1002.tar.bz2 - sha256: 6c8c2803de0f643f8bad16ece3f9a7259e4a49247543239c182d66d5e3a129a7 - md5: bcd1b3396ec6960cbc1d2855a9e60b2b + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-inputproto-2.3.2-hb9d3cd8_1003.conda + sha256: 77eea289f9d3fa753a290f988533c842694b826fe1900abd6d7b142c528512ba + md5: 32623b33f2047dbc9ae2f2e8fd3880e9 depends: - - libgcc-ng >=9.3.0 - arch: x86_64 - platform: linux + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 license: MIT license_family: MIT - size: 19602 - timestamp: 1610027678228 + size: 22320 + timestamp: 1726802558171 - kind: conda name: xorg-kbproto version: 1.0.7 - build: h7f98852_1002 - build_number: 1002 + build: hb9d3cd8_1003 + build_number: 1003 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2 - sha256: e90b0a6a5d41776f11add74aa030f789faf4efd3875c31964d6f9cfa63a10dd1 - md5: 4b230e8381279d76131116660f5a241a + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-hb9d3cd8_1003.conda + sha256: 849555ddf7fee334a5a6be9f159d2931c9d076ffb310a9e75b9124f789049d3e + md5: e87bfacb110d85e1eb6099c9ed8e7236 depends: - - libgcc-ng >=9.3.0 - arch: x86_64 - platform: linux + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 license: MIT license_family: MIT - size: 27338 - timestamp: 1610027759842 + size: 30242 + timestamp: 1726846706299 - kind: conda name: xorg-libice version: 1.1.1 - build: hd590300_0 + build: hb9d3cd8_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hd590300_0.conda - sha256: 5aa9b3682285bb2bf1a8adc064cb63aff76ef9178769740d855abb42b0d24236 - md5: b462a33c0be1421532f28bfe8f4a7514 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hb9d3cd8_1.conda + sha256: ec276da68d1c4a3d34a63195b35ca5b248d4aff0812464dcd843d74649b5cec4 + md5: 19608a9656912805b2b9a2f6bd257b04 depends: - - libgcc-ng >=12 - arch: x86_64 - platform: linux + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 license: MIT license_family: MIT - size: 58469 - timestamp: 1685307573114 + size: 58159 + timestamp: 1727531850109 - kind: conda name: xorg-libsm version: 1.2.4 - build: h7391055_0 + build: he73a12e_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda - sha256: 089ad5f0453c604e18985480218a84b27009e9e6de9a0fa5f4a20b8778ede1f1 - md5: 93ee23f12bc2e684548181256edd2cf6 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-he73a12e_1.conda + sha256: 70e903370977d44c9120a5641ab563887bd48446e9ef6fc2a3f5f60531c2cd6c + md5: 05a8ea5f446de33006171a7afe6ae857 depends: - - libgcc-ng >=12 + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 - libuuid >=2.38.1,<3.0a0 - xorg-libice >=1.1.1,<2.0a0 - arch: x86_64 - platform: linux license: MIT license_family: MIT - size: 27433 - timestamp: 1685453649160 + size: 27516 + timestamp: 1727634669421 - kind: conda name: xorg-libx11 - version: 1.8.7 + version: 1.8.9 build: h8ee46fc_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.7-h8ee46fc_0.conda - sha256: 7a02a7beac472ae2759498550b5fc5261bf5be7a9a2b4648a3f67818a7bfefcf - md5: 49e482d882669206653b095f5206c05b + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.9-h8ee46fc_0.conda + sha256: 3e53ba247f1ad68353f18aceba5bf8ce87e3dea930de85d36946844a7658c9fb + md5: 077b6e8ad6a3ddb741fce2496dd01bec depends: - libgcc-ng >=12 - libxcb >=1.15,<1.16.0a0 - - xorg-kbproto * + - xorg-kbproto - xorg-xextproto >=7.3.0,<8.0a0 - - xorg-xproto * - arch: x86_64 - platform: linux + - xorg-xproto license: MIT license_family: MIT - size: 828692 - timestamp: 1697056910935 + size: 828060 + timestamp: 1712415742569 - kind: conda name: xorg-libxau version: 1.0.11 - build: h0dc2134_0 + build: h00291cd_1 + build_number: 1 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.11-h0dc2134_0.conda - sha256: 8a2e398c4f06f10c64e69f56bcf3ddfa30b432201446a0893505e735b346619a - md5: 9566b4c29274125b0266d0177b5eb97b - arch: x86_64 - platform: osx + url: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxau-1.0.11-h00291cd_1.conda + sha256: 96177823ec38336b0f4b7e7c2413da61f8d008d800cc4a5b8ad21f9128fb7de0 + md5: c6cc91149a08402bbb313c5dc0142567 + depends: + - __osx >=10.13 license: MIT license_family: MIT - size: 13071 - timestamp: 1684638167647 + size: 13176 + timestamp: 1727034772877 - kind: conda name: xorg-libxau version: 1.0.11 - build: hb547adb_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hb547adb_0.conda - sha256: 02c313a1cada46912e5b9bdb355cfb4534bfe22143b4ea4ecc419690e793023b - md5: ca73dc4f01ea91e44e3ed76602c5ea61 - arch: aarch64 - platform: osx + build: hb9d3cd8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + sha256: 532a046fee0b3a402db867b6ec55c84ba4cdedb91d817147c8feeae9766be3d6 + md5: 77cbc488235ebbaab2b6e912d3934bae + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 license: MIT license_family: MIT - size: 13667 - timestamp: 1684638272445 + size: 14679 + timestamp: 1727034741045 - kind: conda name: xorg-libxau version: 1.0.11 @@ -16188,90 +14375,84 @@ packages: sha256: 8c5b976e3b36001bdefdb41fb70415f9c07eff631f1f0155f3225a7649320e77 md5: c46ba8712093cb0114404ae8a7582e1a depends: - - m2w64-gcc-libs * - - m2w64-gcc-libs-core * - arch: x86_64 - platform: win + - m2w64-gcc-libs + - m2w64-gcc-libs-core license: MIT license_family: MIT size: 51297 timestamp: 1684638355740 - kind: conda name: xorg-libxau - version: 1.0.11 - build: hd590300_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda - sha256: 309751371d525ce50af7c87811b435c176915239fc9e132b99a25d5e1703f2d4 - md5: 2c80dc38fface310c9bd81b17037fee5 + version: 1.0.11 + build: hd74edd7_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxau-1.0.11-hd74edd7_1.conda + sha256: 7113618021cf6c80831a429b2ebb9d639f3c43cf7fe2257d235dc6ae0ab43289 + md5: 7e0125f8fb619620a0011dc9297e2493 depends: - - libgcc-ng >=12 - arch: x86_64 - platform: linux + - __osx >=11.0 license: MIT license_family: MIT - size: 14468 - timestamp: 1684637984591 + size: 13515 + timestamp: 1727034783560 - kind: conda name: xorg-libxdmcp version: 1.1.3 - build: h27ca646_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.3-h27ca646_0.tar.bz2 - sha256: d9a2fb4762779994718832f05a7d62ab2dcf6103a312235267628b5187ce88f7 - md5: 6738b13f7fadc18725965abdd4129c36 - arch: aarch64 - platform: osx + build: hcd874cb_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 + sha256: f51205d33c07d744ec177243e5d9b874002910c731954f2c8da82459be462b93 + md5: 46878ebb6b9cbd8afcf8088d7ef00ece + depends: + - m2w64-gcc-libs license: MIT license_family: MIT - size: 18164 - timestamp: 1610071737668 + size: 67908 + timestamp: 1610072296570 - kind: conda name: xorg-libxdmcp - version: 1.1.3 - build: h35c211d_0 + version: 1.1.5 + build: h00291cd_0 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.3-h35c211d_0.tar.bz2 - sha256: 485421c16f03a01b8ed09984e0b2ababdbb3527e1abf354ff7646f8329be905f - md5: 86ac76d6bf1cbb9621943eb3bd9ae36e - arch: x86_64 - platform: osx + url: https://conda.anaconda.org/conda-forge/osx-64/xorg-libxdmcp-1.1.5-h00291cd_0.conda + sha256: bb4d1ef9cafef535494adf9296130b6193b3a44375883185b5167de03eb1ac7f + md5: 9f438e1b6f4e73fd9e6d78bfe7c36743 + depends: + - __osx >=10.13 license: MIT license_family: MIT - size: 17225 - timestamp: 1610071995461 + size: 18465 + timestamp: 1727794980957 - kind: conda name: xorg-libxdmcp - version: 1.1.3 - build: h7f98852_0 + version: 1.1.5 + build: hb9d3cd8_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2 - sha256: 4df7c5ee11b8686d3453e7f3f4aa20ceef441262b49860733066c52cfd0e4a77 - md5: be93aabceefa2fac576e971aef407908 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + sha256: 6b250f3e59db07c2514057944a3ea2044d6a8cdde8a47b6497c254520fade1ee + md5: 8035c64cb77ed555e3f150b7b3972480 depends: - - libgcc-ng >=9.3.0 - arch: x86_64 - platform: linux + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 license: MIT license_family: MIT - size: 19126 - timestamp: 1610071769228 + size: 19901 + timestamp: 1727794976192 - kind: conda name: xorg-libxdmcp - version: 1.1.3 - build: hcd874cb_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 - sha256: f51205d33c07d744ec177243e5d9b874002910c731954f2c8da82459be462b93 - md5: 46878ebb6b9cbd8afcf8088d7ef00ece + version: 1.1.5 + build: hd74edd7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xorg-libxdmcp-1.1.5-hd74edd7_0.conda + sha256: 9939a166d780700d81023546759102b33fdc2c5f11ef09f5f66c77210fd334c8 + md5: 77c447f48cab5d3a15ac224edb86a968 depends: - - m2w64-gcc-libs * - arch: x86_64 - platform: win + - __osx >=11.0 license: MIT license_family: MIT - size: 67908 - timestamp: 1610072296570 + size: 18487 + timestamp: 1727795205022 - kind: conda name: xorg-libxext version: 1.3.4 @@ -16284,9 +14465,7 @@ packages: depends: - libgcc-ng >=12 - xorg-libx11 >=1.7.2,<2.0a0 - - xorg-xextproto * - arch: x86_64 - platform: linux + - xorg-xextproto license: MIT license_family: MIT size: 50143 @@ -16302,10 +14481,8 @@ packages: md5: e9a21aa4d5e3e5f1aed71e8cefd46b6a depends: - libgcc-ng >=9.3.0 - - xorg-fixesproto * + - xorg-fixesproto - xorg-libx11 >=1.7.0,<2.0a0 - arch: x86_64 - platform: linux license: MIT license_family: MIT size: 18145 @@ -16313,23 +14490,25 @@ packages: - kind: conda name: xorg-libxi version: 1.7.10 - build: h7f98852_0 + build: h4bc722e_1 + build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.7.10-h7f98852_0.tar.bz2 - sha256: 745c1284a96b4282fe6fe122b2643e1e8c26a7ff40b733a8f4b61357238c4e68 - md5: e77615e5141cad5a2acaa043d1cf0ca5 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.7.10-h4bc722e_1.conda + sha256: e1416eb435e3d903bc658e3c637f0e87efd2dca290fe70daf29738b3a3d1f8ff + md5: 749baebe7e2ff3360630e069175e528b depends: - - libgcc-ng >=9.3.0 - - xorg-inputproto * - - xorg-libx11 >=1.7.0,<2.0a0 + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - xorg-inputproto + - xorg-libx11 >=1.8.9,<2.0a0 - xorg-libxext 1.3.* + - xorg-libxext >=1.3.4,<2.0a0 - xorg-libxfixes 5.0.* - arch: x86_64 - platform: linux + - xorg-xextproto >=7.3.0,<8.0a0 license: MIT license_family: MIT - size: 47287 - timestamp: 1620070911951 + size: 46794 + timestamp: 1722108216651 - kind: conda name: xorg-libxrender version: 0.9.11 @@ -16341,9 +14520,7 @@ packages: depends: - libgcc-ng >=12 - xorg-libx11 >=1.8.6,<2.0a0 - - xorg-renderproto * - arch: x86_64 - platform: linux + - xorg-renderproto license: MIT license_family: MIT size: 37770 @@ -16359,107 +14536,101 @@ packages: md5: ae92aab42726eb29d16488924f7312cb depends: - libgcc-ng >=12 - - xorg-kbproto * + - xorg-kbproto - xorg-libice >=1.1.1,<2.0a0 - xorg-libsm >=1.2.4,<2.0a0 - xorg-libx11 >=1.8.6,<2.0a0 - - xorg-xproto * - arch: x86_64 - platform: linux + - xorg-xproto license: MIT license_family: MIT size: 379256 timestamp: 1690288540492 - kind: conda name: xorg-libxtst - version: 1.2.3 - build: h7f98852_1002 - build_number: 1002 + version: 1.2.5 + build: h4bc722e_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.3-h7f98852_1002.tar.bz2 - sha256: 9a51ae2869b9a47735539dada9d85534418a765d1461c9f91fe7564f3ee75e87 - md5: a220b1a513e19d5cb56c1311d44f12e6 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-h4bc722e_0.conda + sha256: 0139b52c3cbce57bfd1d120c41637bc239430faff4aa0445f58de0adf4c4b976 + md5: 185159d666308204eca00295599b0a5c depends: - - libgcc-ng >=9.3.0 - - xorg-inputproto * - - xorg-libx11 >=1.7.1,<2.0a0 + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - xorg-inputproto + - xorg-libx11 >=1.8.9,<2.0a0 - xorg-libxext 1.3.* + - xorg-libxext >=1.3.4,<2.0a0 - xorg-libxi 1.7.* - - xorg-recordproto * - arch: x86_64 - platform: linux + - xorg-libxi >=1.7.10,<2.0a0 + - xorg-recordproto license: MIT license_family: MIT - size: 32110 - timestamp: 1621515716498 + size: 32931 + timestamp: 1722575571554 - kind: conda name: xorg-recordproto version: 1.14.2 - build: h7f98852_1002 - build_number: 1002 + build: hb9d3cd8_1003 + build_number: 1003 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-recordproto-1.14.2-h7f98852_1002.tar.bz2 - sha256: 4b91d48fed368c83eafd03891ebfd5bae0a03adc087ebea8a680ae22da99a85f - md5: 2f835e6c386e73c6faaddfe9eda67e98 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-recordproto-1.14.2-hb9d3cd8_1003.conda + sha256: fa721a0a041453612f9dc03059905cf7426669ab8795e1b46d1b0f61c332b1ea + md5: 1d600d113f3e22a7eddd7e7d574be3fa depends: - - libgcc-ng >=9.3.0 - arch: x86_64 - platform: linux + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 license: MIT license_family: MIT - size: 8014 - timestamp: 1621340029114 + size: 10290 + timestamp: 1726846345776 - kind: conda name: xorg-renderproto version: 0.11.1 - build: h7f98852_1002 - build_number: 1002 + build: hb9d3cd8_1003 + build_number: 1003 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h7f98852_1002.tar.bz2 - sha256: 38942930f233d1898594dd9edf4b0c0786f3dbc12065a0c308634c37fd936034 - md5: 06feff3d2634e3097ce2fe681474b534 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-hb9d3cd8_1003.conda + sha256: 54dd934b0e1c942e54759eb13672fd59b7e523fabea6e69a32d5bf483e45b329 + md5: bf90782559bce8447609933a7d45995a depends: - - libgcc-ng >=9.3.0 - arch: x86_64 - platform: linux + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 license: MIT license_family: MIT - size: 9621 - timestamp: 1614866326326 + size: 11867 + timestamp: 1726802820431 - kind: conda name: xorg-xextproto version: 7.3.0 - build: h0b41bf4_1003 - build_number: 1003 + build: hb9d3cd8_1004 + build_number: 1004 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-h0b41bf4_1003.conda - sha256: b8dda3b560e8a7830fe23be1c58cc41f407b2e20ae2f3b6901eb5842ba62b743 - md5: bce9f945da8ad2ae9b1d7165a64d0f87 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-hb9d3cd8_1004.conda + sha256: f302a3f6284ee9ad3b39e45251d7ed15167896564dc33e006077a896fd3458a6 + md5: bc4cd53a083b6720d61a1519a1900878 depends: - - libgcc-ng >=12 - arch: x86_64 - platform: linux + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 license: MIT license_family: MIT - size: 30270 - timestamp: 1677036833037 + size: 30549 + timestamp: 1726846235301 - kind: conda name: xorg-xproto version: 7.0.31 - build: h7f98852_1007 - build_number: 1007 + build: hb9d3cd8_1008 + build_number: 1008 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007.tar.bz2 - sha256: f197bb742a17c78234c24605ad1fe2d88b1d25f332b75d73e5ba8cf8fbc2a10d - md5: b4a4381d54784606820704f7b5f05a15 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-hb9d3cd8_1008.conda + sha256: ea02425c898d6694167952794e9a865e02e14e9c844efb067374f90b9ce8ce33 + md5: a63f5b66876bb1ec734ab4bdc4d11e86 depends: - - libgcc-ng >=9.3.0 - arch: x86_64 - platform: linux + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 license: MIT license_family: MIT - size: 74922 - timestamp: 1607291557628 + size: 73315 + timestamp: 1726845753874 - kind: conda name: xz version: 5.2.6 @@ -16470,8 +14641,6 @@ packages: md5: 2161070d867d1b1204ea749c8eec4ef0 depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: LGPL-2.1 and GPL-2.0 size: 418368 timestamp: 1660346797927 @@ -16483,8 +14652,6 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec md5: 39c6b54e94014701dd157f4f576ed211 - arch: aarch64 - platform: osx license: LGPL-2.1 and GPL-2.0 size: 235693 timestamp: 1660346961024 @@ -16496,8 +14663,6 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-64/xz-5.2.6-h775f41a_0.tar.bz2 sha256: eb09823f34cc2dd663c0ec4ab13f246f45dcd52e5b8c47b9864361de5204a1c8 md5: a72f9d4ea13d55d745ff1ed594747f10 - arch: x86_64 - platform: osx license: LGPL-2.1 and GPL-2.0 size: 238119 timestamp: 1660346964847 @@ -16512,8 +14677,6 @@ packages: depends: - vc >=14.1,<15 - vs2015_runtime >=14.16.27033 - arch: x86_64 - platform: win license: LGPL-2.1 and GPL-2.0 size: 217804 timestamp: 1660346976440 @@ -16526,8 +14689,6 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h0d85af4_2.tar.bz2 sha256: 5301417e2c8dea45b401ffee8df3957d2447d4ce80c83c5ff151fc6bfe1c4148 md5: d7e08fcf8259d742156188e8762b4d20 - arch: x86_64 - platform: osx license: MIT license_family: MIT size: 84237 @@ -16541,8 +14702,6 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h3422bc3_2.tar.bz2 sha256: 93181a04ba8cfecfdfb162fc958436d868cc37db504c58078eab4c1a3e57fbb7 md5: 4bb3f014845110883a3c5ee811fd84b4 - arch: aarch64 - platform: osx license: MIT license_family: MIT size: 88016 @@ -16558,8 +14717,6 @@ packages: md5: 4cb3ad778ec2d5a7acbdf254eb1c42ae depends: - libgcc-ng >=9.4.0 - arch: x86_64 - platform: linux license: MIT license_family: MIT size: 89141 @@ -16576,8 +14733,6 @@ packages: depends: - vc >=14.1,<15.0a0 - vs2015_runtime >=14.16.27012 - arch: x86_64 - platform: win license: MIT license_family: MIT size: 63274 @@ -16586,16 +14741,14 @@ packages: name: yarn version: 3.6.1 build: h31011fe_0 - subdir: osx-arm64 + subdir: noarch noarch: generic url: https://conda.anaconda.org/conda-forge/noarch/yarn-3.6.1-h31011fe_0.conda sha256: 784af8993103c9d23756d5a57320cf4a72ba66867fa5e0baea9219f615c02aab md5: f0d9aca286bae5be8b8979a75c73fce0 depends: - - __unix * + - __unix - nodejs >=14.10.0 - arch: aarch64 - platform: osx license: BSD-2-Clause license_family: BSD size: 807029 @@ -16604,16 +14757,14 @@ packages: name: yarn version: 3.6.1 build: h5737063_0 - subdir: win-64 + subdir: noarch noarch: generic url: https://conda.anaconda.org/conda-forge/noarch/yarn-3.6.1-h5737063_0.conda sha256: 6fac221f9e188600558d8d97b10f3a1f239579aec73db41fb00934c10d011818 md5: 2a11c0aa5244fba1fa592dd0f5bef49f depends: - - __win * + - __win - nodejs >=14.10.0 - arch: x86_64 - platform: win license: BSD-2-Clause license_family: BSD size: 808466 @@ -16621,21 +14772,40 @@ packages: - kind: conda name: zeromq version: 4.3.5 - build: h59595ed_0 + build: h3b0a872_6 + build_number: 6 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h59595ed_0.conda - sha256: 53bf2a18224406e9806adb3b270a2c8a028aca0c89bd40114a85d6446f5c98d1 - md5: 8851084c192dbc56215ac4e3c9aa30fa + url: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_6.conda + sha256: e67288b1c98a31ee58a5c07bdd873dbe08e75f752e1ad605d5e8c0697339903e + md5: 113506c8d2d558e733f5c38f6bf08c50 depends: - - libgcc-ng >=12 - - libsodium >=1.0.18,<1.0.19.0a0 - - libstdcxx-ng >=12 - arch: x86_64 - platform: linux + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libsodium >=1.0.20,<1.0.21.0a0 + - libstdcxx >=13 + license: MPL-2.0 + license_family: MOZILLA + size: 335528 + timestamp: 1728364029042 +- kind: conda + name: zeromq + version: 4.3.5 + build: h9f5b81c_6 + build_number: 6 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h9f5b81c_6.conda + sha256: 5c5061c976141eccbbb2aec21483ddd10fd1df4fd9bcf638e3fd57b2bd85721f + md5: 84121ef1717cdfbecedeae70142706cc + depends: + - __osx >=11.0 + - krb5 >=1.21.3,<1.22.0a0 + - libcxx >=17 + - libsodium >=1.0.20,<1.0.21.0a0 license: MPL-2.0 license_family: MOZILLA - size: 343455 - timestamp: 1697056638125 + size: 280870 + timestamp: 1728363954972 - kind: conda name: zeromq version: 4.3.5 @@ -16655,24 +14825,6 @@ packages: license_family: MOZILLA size: 2701749 timestamp: 1728364260886 -- kind: conda - name: zeromq - version: 4.3.5 - build: hcc0f68c_4 - build_number: 4 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-hcc0f68c_4.conda - sha256: c22520d6d66a80f17c5f2b3719ad4a6ee809b210b8ac87d6f05ab98b94b3abda - md5: 39fb79e7a7a880a03f82c1f2eb7f7c73 - depends: - - __osx >=11.0 - - krb5 >=1.21.2,<1.22.0a0 - - libcxx >=16 - - libsodium >=1.0.18,<1.0.19.0a0 - license: MPL-2.0 - license_family: MOZILLA - size: 298555 - timestamp: 1715607628741 - kind: conda name: zeromq version: 4.3.5 @@ -16693,41 +14845,21 @@ packages: timestamp: 1728364170966 - kind: conda name: zfp - version: 1.0.0 - build: h59595ed_4 - build_number: 4 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.0-h59595ed_4.conda - sha256: 9ab5aa62493ebe544514783a9a05b933eb3c9f2bc51ace9be8aa91e875a8387c - md5: 9cfbafab420f42b572f3c032ad59da85 - depends: - - _openmp_mutex >=4.5 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - arch: x86_64 - platform: linux - license: BSD-3-Clause - license_family: BSD - size: 277968 - timestamp: 1696180838295 -- kind: conda - name: zfp - version: 1.0.0 - build: hb6e4faa_3 - build_number: 3 + version: 1.0.1 + build: h1c5d8ea_2 + build_number: 2 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.0-hb6e4faa_3.tar.bz2 - sha256: 1b8ee8a8371e8971c680699ce896cfd047066cc6bb429fc3d85dd23508a22ebf - md5: 668bf82de13c927b3dafc0e407f34d04 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zfp-1.0.1-h1c5d8ea_2.conda + sha256: 814af9f9429cca403aa308cef46455e745284fb1ecbad83a5722bfc58db8b11a + md5: 8066eb9d5acdbaf825cf8cf689517a33 depends: - - libcxx >=14.0.4 - - llvm-openmp >=14.0.4 - arch: aarch64 - platform: osx + - __osx >=11.0 + - libcxx >=17 + - llvm-openmp >=17.0.6 license: BSD-3-Clause license_family: BSD - size: 251236 - timestamp: 1666811112845 + size: 200112 + timestamp: 1726925701356 - kind: conda name: zfp version: 1.0.1 @@ -16745,6 +14877,24 @@ packages: license_family: BSD size: 210590 timestamp: 1726925557854 +- kind: conda + name: zfp + version: 1.0.1 + build: h5888daf_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h5888daf_2.conda + sha256: 0dfafc75c72f308c0200836f2b973766cdcb8741b1ab61e0b462a34dd6b6ad20 + md5: e0409515c467b87176b070bff5d9442e + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + - libgcc >=13 + - libstdcxx >=13 + license: BSD-3-Clause + license_family: BSD + size: 279120 + timestamp: 1726925529897 - kind: conda name: zfp version: 1.0.1 @@ -16764,92 +14914,68 @@ packages: timestamp: 1726926095834 - kind: conda name: zipp - version: 3.16.2 - build: pyhd8ed1ab_0 - subdir: osx-arm64 - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda - sha256: 16d72127e150a3d5cbdc0b82c4069ef5be135c64bc99e71e7928507910669b41 - md5: 2da0451b54c4563c32490cb1b7cf68a1 - depends: - - python >=3.8 - arch: aarch64 - platform: osx - license: MIT - license_family: MIT - purls: - - pkg:pypi/zipp - size: 18783 - timestamp: 1689374602448 -- kind: conda - name: zipp - version: 3.17.0 + version: 3.20.2 build: pyhd8ed1ab_0 - subdir: win-64 + subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda - sha256: bced1423fdbf77bca0a735187d05d9b9812d2163f60ab426fc10f11f92ecbe26 - md5: 2e4d6bc0b14e10f895fc6791a7d9b26a + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + sha256: 1e84fcfa41e0afdd87ff41e6fbb719c96a0e098c1f79be342293ab0bd8dea322 + md5: 4daaed111c05672ae669f7036ee5bba3 depends: - python >=3.8 - arch: x86_64 - platform: win license: MIT license_family: MIT - purls: - - pkg:pypi/zipp - size: 18954 - timestamp: 1695255262261 + size: 21409 + timestamp: 1726248679175 - kind: conda name: zlib - version: 1.2.13 - build: h53f4e23_5 - build_number: 5 + version: 1.3.1 + build: h8359307_2 + build_number: 2 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.2.13-h53f4e23_5.conda - sha256: de0ee1e24aa6867058d3b852a15c8d7f49f262f5828772700c647186d4a96bbe - md5: a08383f223b10b71492d27566fafbf6c + url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 + md5: e3170d898ca6cb48f1bb567afb92f775 depends: - - libzlib ==1.2.13 h53f4e23_5 - arch: aarch64 - platform: osx + - __osx >=11.0 + - libzlib 1.3.1 h8359307_2 license: Zlib license_family: Other - size: 79577 - timestamp: 1686575471024 + size: 77606 + timestamp: 1727963209370 - kind: conda name: zlib - version: 1.2.13 - build: h8a1eda9_5 - build_number: 5 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.2.13-h8a1eda9_5.conda - sha256: d1f4c82fd7bd240a78ce8905e931e68dca5f523c7da237b6b63c87d5625c5b35 - md5: 75a8a98b1c4671c5d2897975731da42d + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab + md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 depends: - - libzlib ==1.2.13 h8a1eda9_5 - arch: x86_64 - platform: osx + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib 1.3.1 hb9d3cd8_2 license: Zlib license_family: Other - size: 90764 - timestamp: 1686575574678 + size: 92286 + timestamp: 1727963153079 - kind: conda name: zlib version: 1.3.1 - build: h4ab18f5_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-h4ab18f5_1.conda - sha256: cee16ab07a11303de721915f0a269e8c7a54a5c834aa52f74b1cc3a59000ade8 - md5: 9653f1bf3766164d0e65fa723cabbc54 + build: hd23fc13_2 + build_number: 2 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.1-hd23fc13_2.conda + sha256: 219edbdfe7f073564375819732cbf7cc0d7c7c18d3f546a09c2dfaf26e4d69f3 + md5: c989e0295dcbdc08106fe5d9e935f0b9 depends: - - libgcc-ng >=12 - - libzlib 1.3.1 h4ab18f5_1 + - __osx >=10.13 + - libzlib 1.3.1 hd23fc13_2 license: Zlib license_family: Other - size: 93004 - timestamp: 1716874213487 + size: 88544 + timestamp: 1727963189976 - kind: conda name: zlib-ng version: 2.0.7 @@ -16860,8 +14986,6 @@ packages: md5: 49e8329110001f04923fe7e864990b0c depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: Zlib license_family: Other size: 94553 @@ -16874,8 +14998,6 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.0.7-h1a8c8d9_0.conda sha256: c526e4b6351e351c89ed0c60ca43b9f04668363a58e355583dc7701efb4fca89 md5: 4852d8981e833f34c8ed32e4fb8e103b - arch: aarch64 - platform: osx license: Zlib license_family: Other size: 84057 @@ -16888,8 +15010,6 @@ packages: url: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.0.7-hb7f2c08_0.conda sha256: 701bf17f3e22c7ba24ca547ccf4b2b5b4b58eda579ddaf68c0571427b10aa366 md5: 813b5ad3ba92b75b84f40602b6d34ffb - arch: x86_64 - platform: osx license: Zlib license_family: Other size: 93171 @@ -16911,38 +15031,89 @@ packages: size: 90788 timestamp: 1679095380986 - kind: conda - name: zstd - version: 1.5.2 - build: h4f39d0f_7 - build_number: 7 + name: zstandard + version: 0.23.0 + build: py310h2665a74_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.2-h4f39d0f_7.conda - sha256: d51d2225da473689dcb5d633f3b60ab60beff74d29a380142da4b684db98dd56 - md5: ac4a17e2fb251cbf3bce3aec64668ef2 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py310h2665a74_1.conda + sha256: a90d06cbfa50fc9b3c37bd092d559452475f22425bacf28f04ecac2e8b1c389c + md5: 81b300570a423c9c9521b79f8f2ed1ba depends: - - libzlib >=1.2.13,<1.3.0a0 - arch: aarch64 - platform: osx + - __osx >=11.0 + - cffi >=1.11 + - python >=3.10,<3.11.0a0 + - python >=3.10,<3.11.0a0 *_cpython + - python_abi 3.10.* *_cp310 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 license: BSD-3-Clause license_family: BSD - size: 317319 - timestamp: 1688722265582 + size: 320810 + timestamp: 1725305704555 - kind: conda - name: zstd - version: 1.5.5 - build: h829000d_0 + name: zstandard + version: 0.23.0 + build: py310h41d873f_1 + build_number: 1 subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.5-h829000d_0.conda - sha256: d54e31d3d8de5e254c0804abd984807b8ae5cd3708d758a8bf1adff1f5df166c - md5: 80abc41d0c48b82fe0f04e7f42f5cb7e + url: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.23.0-py310h41d873f_1.conda + sha256: 449fd094d91e509421ddbe7b707c58191473355f29373c0f3d603875b8d2b801 + md5: cbf02a084007c683a22172094d31eac6 depends: - - libzlib >=1.2.13,<1.3.0a0 - arch: x86_64 - platform: osx + - __osx >=10.13 + - cffi >=1.11 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 400765 + timestamp: 1725305605347 +- kind: conda + name: zstandard + version: 0.23.0 + build: py310ha39cb0e_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha39cb0e_1.conda + sha256: fcd784735205d6c5f19dcb339f92d2eede9bc42a01ec2c384381ee1b6089d4f6 + md5: f49de34fb99934bf49ab330b5caffd64 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.11 + - libgcc >=13 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 408309 + timestamp: 1725305719512 +- kind: conda + name: zstandard + version: 0.23.0 + build: py310he5e10e1_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py310he5e10e1_1.conda + sha256: 4e8aff4d0d42024e9f70783e51666186a681384d59fdd03fafda4b28f1fd540e + md5: 2a879227ccc1a10a2caddf12607ffaeb + depends: + - cffi >=1.11 + - python >=3.10,<3.11.0a0 + - python_abi 3.10.* *_cp310 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 license: BSD-3-Clause license_family: BSD - size: 499383 - timestamp: 1693151312586 + size: 311278 + timestamp: 1725306039901 - kind: conda name: zstd version: 1.5.6 @@ -16960,6 +15131,21 @@ packages: license_family: BSD size: 349143 timestamp: 1714723445995 +- kind: conda + name: zstd + version: 1.5.6 + build: h915ae27_0 + subdir: osx-64 + url: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.6-h915ae27_0.conda + sha256: efa04a98cb149643fa54c4dad5a0179e36a5fbc88427ea0eec88ceed87fd0f96 + md5: 4cb2cd56f039b129bb0e491c1164167e + depends: + - __osx >=10.9 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 498900 + timestamp: 1714723303098 - kind: conda name: zstd version: 1.5.6 @@ -16976,3 +15162,18 @@ packages: license_family: BSD size: 554846 timestamp: 1714722996770 +- kind: conda + name: zstd + version: 1.5.6 + build: hb46c0d2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 405089 + timestamp: 1714723101397 diff --git a/pixi.toml b/pixi.toml index 760c9f508..211fcb939 100644 --- a/pixi.toml +++ b/pixi.toml @@ -123,7 +123,6 @@ flaky = "3.7.0.*" vega_datasets = "0.9.0.*" jupytext = "1.15.0.*" openjdk = "20.0.0.*" -build = "0.7.0.*" minio-server = "2023.9.23.3.47.50.*" minio = "7.1.17.*" rust = "1.80.*" diff --git a/vegafusion-common/Cargo.toml b/vegafusion-common/Cargo.toml index 2377e9fc1..d69e71ba5 100644 --- a/vegafusion-common/Cargo.toml +++ b/vegafusion-common/Cargo.toml @@ -26,7 +26,7 @@ workspace = true optional = true [dependencies.serde_json] -version = "1.0.91" +workspace = true default-features = false optional = true diff --git a/vegafusion-core/Cargo.toml b/vegafusion-core/Cargo.toml index 3f7ecd75a..e6913237d 100644 --- a/vegafusion-core/Cargo.toml +++ b/vegafusion-core/Cargo.toml @@ -20,6 +20,7 @@ chrono = "0.4.23" num-complex = "0.4.2" rand = "0.8.5" json-patch = "1.0.0" +async-mutex = "1.4.0" [dependencies.lazy_static] workspace = true @@ -44,7 +45,7 @@ workspace = true optional = true [dependencies.serde_json] -version = "1.0.91" +workspace = true features = ["preserve_order"] [dependencies.vegafusion-common] diff --git a/vegafusion-core/src/chart_state.rs b/vegafusion-core/src/chart_state.rs index 02a9032f1..80cd35537 100644 --- a/vegafusion-core/src/chart_state.rs +++ b/vegafusion-core/src/chart_state.rs @@ -83,18 +83,10 @@ impl ChartState { let mut init = Vec::new(); for response_value in response_task_values { - let variable = response_value - .variable - .with_context(|| "Missing variable for response value".to_string())?; + let variable = response_value.variable; let scope = response_value.scope; - let proto_value = response_value - .value - .with_context(|| "Missing value for response value".to_string())?; - - let value = TaskValue::try_from(&proto_value).with_context(|| { - "Deserialization failed for value of response value".to_string() - })?; + let value = response_value.value; init.push(ExportUpdateArrow { namespace: ExportUpdateNamespace::try_from(variable.ns()).unwrap(), @@ -176,18 +168,10 @@ impl ChartState { let mut response_updates = response_task_values .into_iter() .map(|response_value| { - let variable = response_value - .variable - .with_context(|| "Missing variable for response value".to_string())?; + let variable = response_value.variable; let scope = response_value.scope; - let proto_value = response_value - .value - .with_context(|| "missing value for response value: {:?}".to_string())?; - - let value = TaskValue::try_from(&proto_value).with_context(|| { - "Deserialization failed for value of response value: {:?}".to_string() - })?; + let value = response_value.value; Ok(ExportUpdateJSON { namespace: match variable.ns() { diff --git a/vegafusion-core/src/proto/pretransform.proto b/vegafusion-core/src/proto/pretransform.proto index e47a81833..cba6700c6 100644 --- a/vegafusion-core/src/proto/pretransform.proto +++ b/vegafusion-core/src/proto/pretransform.proto @@ -6,16 +6,16 @@ import "tasks.proto"; /// Pre transform spec messages message PreTransformSpecOpts { optional uint32 row_limit = 1; - repeated tasks.InlineDataset inline_datasets = 2; - bool preserve_interactivity = 3; - repeated PreTransformVariable keep_variables = 4; + bool preserve_interactivity = 2; + repeated PreTransformVariable keep_variables = 3; + string local_tz = 4; + optional string default_input_tz = 5; } message PreTransformSpecRequest { string spec = 1; - string local_tz = 2; - optional string output_tz = 3; - PreTransformSpecOpts opts = 4; + repeated tasks.InlineDataset inline_datasets = 2; + PreTransformSpecOpts opts = 3; } message PreTransformSpecResponse { @@ -50,15 +50,15 @@ message PreTransformVariable { message PreTransformValuesOpts { repeated PreTransformVariable variables = 1; - repeated tasks.InlineDataset inline_datasets = 2; - optional uint32 row_limit = 3; + optional uint32 row_limit = 2; + string local_tz = 3; + optional string default_input_tz = 4; } message PreTransformValuesRequest { string spec = 1; - string local_tz = 2; - optional string default_input_tz = 3; - PreTransformValuesOpts opts = 4; + repeated tasks.InlineDataset inline_datasets = 2; + PreTransformValuesOpts opts = 3; } message PreTransformValuesResponse { @@ -90,6 +90,14 @@ message PreTransformExtractDataset { bytes table = 3; } +message PreTransformExtractOpts { + string local_tz = 1; + optional string default_input_tz = 2; + bool preserve_interactivity = 3; + int32 extract_threshold = 4; + repeated PreTransformVariable keep_variables = 5; +} + message PreTransformExtractWarning { oneof warning_type { PlannerWarning planner = 1; @@ -104,10 +112,6 @@ message PreTransformExtractResponse { message PreTransformExtractRequest { string spec = 1; - string local_tz = 2; - optional string default_input_tz = 3; - bool preserve_interactivity = 4; - int32 extract_threshold = 5; - repeated tasks.InlineDataset inline_datasets = 6; - repeated PreTransformVariable keep_variables = 7; + repeated tasks.InlineDataset inline_datasets = 2; + PreTransformExtractOpts opts = 3; } \ No newline at end of file diff --git a/vegafusion-core/src/proto/prost_gen/pretransform.rs b/vegafusion-core/src/proto/prost_gen/pretransform.rs index 284a44524..3ebc33ab1 100644 --- a/vegafusion-core/src/proto/prost_gen/pretransform.rs +++ b/vegafusion-core/src/proto/prost_gen/pretransform.rs @@ -5,23 +5,23 @@ pub struct PreTransformSpecOpts { #[prost(uint32, optional, tag = "1")] pub row_limit: ::core::option::Option, - #[prost(message, repeated, tag = "2")] - pub inline_datasets: ::prost::alloc::vec::Vec, - #[prost(bool, tag = "3")] + #[prost(bool, tag = "2")] pub preserve_interactivity: bool, - #[prost(message, repeated, tag = "4")] + #[prost(message, repeated, tag = "3")] pub keep_variables: ::prost::alloc::vec::Vec, + #[prost(string, tag = "4")] + pub local_tz: ::prost::alloc::string::String, + #[prost(string, optional, tag = "5")] + pub default_input_tz: ::core::option::Option<::prost::alloc::string::String>, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformSpecRequest { #[prost(string, tag = "1")] pub spec: ::prost::alloc::string::String, - #[prost(string, tag = "2")] - pub local_tz: ::prost::alloc::string::String, - #[prost(string, optional, tag = "3")] - pub output_tz: ::core::option::Option<::prost::alloc::string::String>, - #[prost(message, optional, tag = "4")] + #[prost(message, repeated, tag = "2")] + pub inline_datasets: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag = "3")] pub opts: ::core::option::Option, } #[allow(clippy::derive_partial_eq_without_eq)] @@ -82,21 +82,21 @@ pub struct PreTransformVariable { pub struct PreTransformValuesOpts { #[prost(message, repeated, tag = "1")] pub variables: ::prost::alloc::vec::Vec, - #[prost(message, repeated, tag = "2")] - pub inline_datasets: ::prost::alloc::vec::Vec, - #[prost(uint32, optional, tag = "3")] + #[prost(uint32, optional, tag = "2")] pub row_limit: ::core::option::Option, + #[prost(string, tag = "3")] + pub local_tz: ::prost::alloc::string::String, + #[prost(string, optional, tag = "4")] + pub default_input_tz: ::core::option::Option<::prost::alloc::string::String>, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformValuesRequest { #[prost(string, tag = "1")] pub spec: ::prost::alloc::string::String, - #[prost(string, tag = "2")] - pub local_tz: ::prost::alloc::string::String, - #[prost(string, optional, tag = "3")] - pub default_input_tz: ::core::option::Option<::prost::alloc::string::String>, - #[prost(message, optional, tag = "4")] + #[prost(message, repeated, tag = "2")] + pub inline_datasets: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag = "3")] pub opts: ::core::option::Option, } #[allow(clippy::derive_partial_eq_without_eq)] @@ -147,6 +147,20 @@ pub struct PreTransformExtractDataset { } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] +pub struct PreTransformExtractOpts { + #[prost(string, tag = "1")] + pub local_tz: ::prost::alloc::string::String, + #[prost(string, optional, tag = "2")] + pub default_input_tz: ::core::option::Option<::prost::alloc::string::String>, + #[prost(bool, tag = "3")] + pub preserve_interactivity: bool, + #[prost(int32, tag = "4")] + pub extract_threshold: i32, + #[prost(message, repeated, tag = "5")] + pub keep_variables: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformExtractWarning { #[prost(oneof = "pre_transform_extract_warning::WarningType", tags = "1")] pub warning_type: ::core::option::Option, @@ -175,16 +189,8 @@ pub struct PreTransformExtractResponse { pub struct PreTransformExtractRequest { #[prost(string, tag = "1")] pub spec: ::prost::alloc::string::String, - #[prost(string, tag = "2")] - pub local_tz: ::prost::alloc::string::String, - #[prost(string, optional, tag = "3")] - pub default_input_tz: ::core::option::Option<::prost::alloc::string::String>, - #[prost(bool, tag = "4")] - pub preserve_interactivity: bool, - #[prost(int32, tag = "5")] - pub extract_threshold: i32, - #[prost(message, repeated, tag = "6")] + #[prost(message, repeated, tag = "2")] pub inline_datasets: ::prost::alloc::vec::Vec, - #[prost(message, repeated, tag = "7")] - pub keep_variables: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag = "3")] + pub opts: ::core::option::Option, } diff --git a/vegafusion-core/src/proto/tonic_gen/pretransform.rs b/vegafusion-core/src/proto/tonic_gen/pretransform.rs index 284a44524..3ebc33ab1 100644 --- a/vegafusion-core/src/proto/tonic_gen/pretransform.rs +++ b/vegafusion-core/src/proto/tonic_gen/pretransform.rs @@ -5,23 +5,23 @@ pub struct PreTransformSpecOpts { #[prost(uint32, optional, tag = "1")] pub row_limit: ::core::option::Option, - #[prost(message, repeated, tag = "2")] - pub inline_datasets: ::prost::alloc::vec::Vec, - #[prost(bool, tag = "3")] + #[prost(bool, tag = "2")] pub preserve_interactivity: bool, - #[prost(message, repeated, tag = "4")] + #[prost(message, repeated, tag = "3")] pub keep_variables: ::prost::alloc::vec::Vec, + #[prost(string, tag = "4")] + pub local_tz: ::prost::alloc::string::String, + #[prost(string, optional, tag = "5")] + pub default_input_tz: ::core::option::Option<::prost::alloc::string::String>, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformSpecRequest { #[prost(string, tag = "1")] pub spec: ::prost::alloc::string::String, - #[prost(string, tag = "2")] - pub local_tz: ::prost::alloc::string::String, - #[prost(string, optional, tag = "3")] - pub output_tz: ::core::option::Option<::prost::alloc::string::String>, - #[prost(message, optional, tag = "4")] + #[prost(message, repeated, tag = "2")] + pub inline_datasets: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag = "3")] pub opts: ::core::option::Option, } #[allow(clippy::derive_partial_eq_without_eq)] @@ -82,21 +82,21 @@ pub struct PreTransformVariable { pub struct PreTransformValuesOpts { #[prost(message, repeated, tag = "1")] pub variables: ::prost::alloc::vec::Vec, - #[prost(message, repeated, tag = "2")] - pub inline_datasets: ::prost::alloc::vec::Vec, - #[prost(uint32, optional, tag = "3")] + #[prost(uint32, optional, tag = "2")] pub row_limit: ::core::option::Option, + #[prost(string, tag = "3")] + pub local_tz: ::prost::alloc::string::String, + #[prost(string, optional, tag = "4")] + pub default_input_tz: ::core::option::Option<::prost::alloc::string::String>, } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformValuesRequest { #[prost(string, tag = "1")] pub spec: ::prost::alloc::string::String, - #[prost(string, tag = "2")] - pub local_tz: ::prost::alloc::string::String, - #[prost(string, optional, tag = "3")] - pub default_input_tz: ::core::option::Option<::prost::alloc::string::String>, - #[prost(message, optional, tag = "4")] + #[prost(message, repeated, tag = "2")] + pub inline_datasets: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag = "3")] pub opts: ::core::option::Option, } #[allow(clippy::derive_partial_eq_without_eq)] @@ -147,6 +147,20 @@ pub struct PreTransformExtractDataset { } #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] +pub struct PreTransformExtractOpts { + #[prost(string, tag = "1")] + pub local_tz: ::prost::alloc::string::String, + #[prost(string, optional, tag = "2")] + pub default_input_tz: ::core::option::Option<::prost::alloc::string::String>, + #[prost(bool, tag = "3")] + pub preserve_interactivity: bool, + #[prost(int32, tag = "4")] + pub extract_threshold: i32, + #[prost(message, repeated, tag = "5")] + pub keep_variables: ::prost::alloc::vec::Vec, +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct PreTransformExtractWarning { #[prost(oneof = "pre_transform_extract_warning::WarningType", tags = "1")] pub warning_type: ::core::option::Option, @@ -175,16 +189,8 @@ pub struct PreTransformExtractResponse { pub struct PreTransformExtractRequest { #[prost(string, tag = "1")] pub spec: ::prost::alloc::string::String, - #[prost(string, tag = "2")] - pub local_tz: ::prost::alloc::string::String, - #[prost(string, optional, tag = "3")] - pub default_input_tz: ::core::option::Option<::prost::alloc::string::String>, - #[prost(bool, tag = "4")] - pub preserve_interactivity: bool, - #[prost(int32, tag = "5")] - pub extract_threshold: i32, - #[prost(message, repeated, tag = "6")] + #[prost(message, repeated, tag = "2")] pub inline_datasets: ::prost::alloc::vec::Vec, - #[prost(message, repeated, tag = "7")] - pub keep_variables: ::prost::alloc::vec::Vec, + #[prost(message, optional, tag = "3")] + pub opts: ::core::option::Option, } diff --git a/vegafusion-core/src/runtime.rs b/vegafusion-core/src/runtime.rs deleted file mode 100644 index 04f1ba24a..000000000 --- a/vegafusion-core/src/runtime.rs +++ /dev/null @@ -1,19 +0,0 @@ -use std::{collections::HashMap, sync::Arc}; - -use async_trait::async_trait; -use vegafusion_common::error::Result; - -use crate::{ - data::dataset::VegaFusionDataset, - proto::gen::tasks::{NodeValueIndex, ResponseTaskValue, TaskGraph}, -}; - -#[async_trait] -pub trait VegaFusionRuntimeTrait { - async fn query_request( - &self, - task_graph: Arc, - indices: &[NodeValueIndex], - inline_datasets: &HashMap, - ) -> Result>; -} diff --git a/vegafusion-core/src/runtime/grpc_runtime.rs b/vegafusion-core/src/runtime/grpc_runtime.rs new file mode 100644 index 000000000..74a7ecc03 --- /dev/null +++ b/vegafusion-core/src/runtime/grpc_runtime.rs @@ -0,0 +1,197 @@ +use crate::{ + data::dataset::VegaFusionDataset, + proto::gen::{ + pretransform::{ + PreTransformExtractOpts, PreTransformExtractRequest, PreTransformExtractWarning, + PreTransformSpecOpts, PreTransformSpecRequest, PreTransformSpecWarning, + PreTransformValuesOpts, PreTransformValuesRequest, PreTransformValuesWarning, + }, + services::{ + pre_transform_extract_result, pre_transform_spec_result, pre_transform_values_result, + query_request, query_result, vega_fusion_runtime_client::VegaFusionRuntimeClient, + QueryRequest, + }, + tasks::{NodeValueIndex, TaskGraph, TaskGraphValueRequest}, + }, + spec::chart::ChartSpec, + task_graph::task_value::{NamedTaskValue, TaskValue}, +}; + +use async_mutex::Mutex; +use async_trait::async_trait; +use std::collections::HashMap; +use std::{any::Any, sync::Arc}; +use vegafusion_common::{ + data::table::VegaFusionTable, + error::{Result, VegaFusionError}, +}; + +use super::{ + runtime::{encode_inline_datasets, PreTransformExtractTable}, + VegaFusionRuntimeTrait, +}; + +#[derive(Clone)] +pub struct GrpcVegaFusionRuntime { + client: Arc>>, +} + +#[async_trait] +impl VegaFusionRuntimeTrait for GrpcVegaFusionRuntime { + fn as_any(&self) -> &dyn Any { + self + } + + async fn query_request( + &self, + task_graph: Arc, + indices: &[NodeValueIndex], + inline_datasets: &HashMap, + ) -> Result> { + let inline_datasets = encode_inline_datasets(&inline_datasets)?; + let request = QueryRequest { + request: Some(query_request::Request::TaskGraphValues( + TaskGraphValueRequest { + task_graph: Some(task_graph.as_ref().clone()), + indices: indices.to_vec(), + inline_datasets, + }, + )), + }; + + let mut locked_client = self.client.lock().await; + let response = locked_client + .task_graph_query(request) + .await + .map_err(|e| VegaFusionError::internal(e.to_string()))?; + match response.into_inner().response.unwrap() { + query_result::Response::TaskGraphValues(task_graph_values) => Ok(task_graph_values + .response_values + .into_iter() + .map(|v| v.into()) + .collect::>()), + _ => Err(VegaFusionError::internal( + "Invalid response type".to_string(), + )), + } + } + + async fn pre_transform_spec( + &self, + spec: &ChartSpec, + inline_datasets: &HashMap, + options: &PreTransformSpecOpts, + ) -> Result<(ChartSpec, Vec)> { + let inline_datasets = encode_inline_datasets(&inline_datasets)?; + + let request = PreTransformSpecRequest { + spec: serde_json::to_string(spec)?, + inline_datasets, + opts: Some(options.clone()), + }; + let mut locked_client = self.client.lock().await; + let response = locked_client + .pre_transform_spec(request) + .await + .map_err(|e| VegaFusionError::internal(e.to_string()))?; + + match response.into_inner().result.unwrap() { + pre_transform_spec_result::Result::Response(response) => { + Ok((serde_json::from_str(&response.spec)?, response.warnings)) + } + _ => Err(VegaFusionError::internal( + "Invalid grpc response type".to_string(), + )), + } + } + + async fn pre_transform_extract( + &self, + spec: &ChartSpec, + inline_datasets: &HashMap, + options: &PreTransformExtractOpts, + ) -> Result<( + ChartSpec, + Vec, + Vec, + )> { + let inline_datasets = encode_inline_datasets(&inline_datasets)?; + + let request = PreTransformExtractRequest { + spec: serde_json::to_string(spec)?, + inline_datasets, + opts: Some(options.clone()), + }; + + let mut locked_client = self.client.lock().await; + let response = locked_client + .pre_transform_extract(request) + .await + .map_err(|e| VegaFusionError::internal(e.to_string()))?; + + match response.into_inner().result.unwrap() { + pre_transform_extract_result::Result::Response(response) => { + let spec: ChartSpec = serde_json::from_str(&response.spec)?; + let datasets = response + .datasets + .into_iter() + .map(|ds| { + Ok(PreTransformExtractTable { + name: ds.name, + scope: ds.scope, + table: VegaFusionTable::from_ipc_bytes(&ds.table)?, + }) + }) + .collect::>>()?; + Ok((spec, datasets, response.warnings)) + } + _ => Err(VegaFusionError::internal( + "Invalid grpc response type".to_string(), + )), + } + } + + async fn pre_transform_values( + &self, + spec: &ChartSpec, + inline_datasets: &HashMap, + options: &PreTransformValuesOpts, + ) -> Result<(Vec, Vec)> { + let inline_datasets = encode_inline_datasets(&inline_datasets)?; + + let request = PreTransformValuesRequest { + spec: serde_json::to_string(spec)?, + inline_datasets, + opts: Some(options.clone()), + }; + + let mut locked_client = self.client.lock().await; + let response = locked_client + .pre_transform_values(request) + .await + .map_err(|e| VegaFusionError::internal(e.to_string()))?; + + match response.into_inner().result.unwrap() { + pre_transform_values_result::Result::Response(response) => { + let values = response + .values + .into_iter() + .map(|v| TaskValue::try_from(&v.value.unwrap())) + .collect::>>()?; + Ok((values, response.warnings)) + } + _ => Err(VegaFusionError::internal( + "Invalid grpc response type".to_string(), + )), + } + } +} + +impl GrpcVegaFusionRuntime { + pub async fn try_new(channel: tonic::transport::Channel) -> Result { + let client = VegaFusionRuntimeClient::new(channel); + Ok(Self { + client: Arc::new(Mutex::new(client)), + }) + } +} diff --git a/vegafusion-core/src/runtime/mod.rs b/vegafusion-core/src/runtime/mod.rs new file mode 100644 index 000000000..31a3c2404 --- /dev/null +++ b/vegafusion-core/src/runtime/mod.rs @@ -0,0 +1,10 @@ +mod runtime; +pub use runtime::{ + decode_inline_datasets, encode_inline_datasets, PreTransformExtractTable, + VegaFusionRuntimeTrait, +}; + +#[cfg(feature = "tonic_support")] +mod grpc_runtime; +#[cfg(feature = "tonic_support")] +pub use grpc_runtime::GrpcVegaFusionRuntime; diff --git a/vegafusion-core/src/runtime/runtime.rs b/vegafusion-core/src/runtime/runtime.rs new file mode 100644 index 000000000..752abc55e --- /dev/null +++ b/vegafusion-core/src/runtime/runtime.rs @@ -0,0 +1,414 @@ +use std::{any::Any, collections::HashMap, sync::Arc}; + +use async_trait::async_trait; +use vegafusion_common::{ + data::table::VegaFusionTable, + error::{Result, ResultWithContext, VegaFusionError}, +}; + +use crate::proto::gen::pretransform::pre_transform_values_warning::WarningType as ValuesWarningType; +use crate::{ + data::dataset::VegaFusionDataset, + planning::{ + apply_pre_transform::apply_pre_transform_datasets, + destringify_selection_datetimes::destringify_selection_datetimes, + plan::{PlannerConfig, SpecPlan}, + watch::{ExportUpdateArrow, ExportUpdateNamespace}, + }, + proto::gen::{ + pretransform::{ + pre_transform_extract_warning, PlannerWarning, PreTransformExtractOpts, + PreTransformExtractWarning, PreTransformRowLimitWarning, PreTransformSpecOpts, + PreTransformSpecWarning, PreTransformValuesOpts, PreTransformValuesWarning, + }, + tasks::{InlineDataset, NodeValueIndex, TaskGraph, TzConfig, VariableNamespace}, + }, + spec::{chart::ChartSpec, values::MissingNullOrValue}, + task_graph::{ + graph::ScopedVariable, + task_value::{NamedTaskValue, TaskValue}, + }, +}; + +#[derive(Clone)] +pub struct PreTransformExtractTable { + pub name: String, + pub scope: Vec, + pub table: VegaFusionTable, +} + +#[async_trait] +pub trait VegaFusionRuntimeTrait: Send + Sync { + fn as_any(&self) -> &dyn Any; + + async fn query_request( + &self, + task_graph: Arc, + indices: &[NodeValueIndex], + inline_datasets: &HashMap, + ) -> Result>; + + async fn pre_transform_spec_plan( + &self, + spec: &ChartSpec, + local_tz: &str, + default_input_tz: &Option, + preserve_interactivity: bool, + inline_datasets: &HashMap, + keep_variables: Vec, + ) -> Result<(SpecPlan, Vec)> { + // Create spec plan + let plan = SpecPlan::try_new( + spec, + &PlannerConfig::pre_transformed_spec_config(preserve_interactivity, keep_variables), + )?; + + // Extract inline dataset fingerprints + let dataset_fingerprints = inline_datasets + .iter() + .map(|(k, ds)| (k.clone(), ds.fingerprint())) + .collect::>(); + + // Create task graph for server spec + let tz_config = TzConfig { + local_tz: local_tz.to_string(), + default_input_tz: default_input_tz.clone(), + }; + let task_scope = plan.server_spec.to_task_scope().unwrap(); + let tasks = plan + .server_spec + .to_tasks(&tz_config, &dataset_fingerprints) + .unwrap(); + let task_graph = TaskGraph::new(tasks, &task_scope).unwrap(); + let task_graph_mapping = task_graph.build_mapping(); + + // Gather values of server-to-client values + let mut init = Vec::new(); + let task_graph = Arc::new(task_graph); + let indices: Vec = plan + .comm_plan + .server_to_client + .iter() + .filter_map(|var| task_graph_mapping.get(var).cloned()) + .collect(); + + let response_values = self + .query_request(task_graph.clone(), &indices, inline_datasets) + .await + .with_context(|| "Failed to query node values")?; + + for (var, response_value) in plan.comm_plan.server_to_client.iter().zip(response_values) { + init.push(ExportUpdateArrow { + namespace: ExportUpdateNamespace::try_from(var.0.namespace()).unwrap(), + name: var.0.name.clone(), + scope: var.1.clone(), + value: response_value.value, + }); + } + Ok((plan, init)) + } + + async fn pre_transform_spec( + &self, + spec: &ChartSpec, + inline_datasets: &HashMap, + options: &PreTransformSpecOpts, + ) -> Result<(ChartSpec, Vec)> { + let input_spec = spec; + + let keep_variables: Vec = options + .keep_variables + .clone() + .into_iter() + .map(|var| (var.variable.unwrap(), var.scope)) + .collect(); + let (plan, init) = self + .pre_transform_spec_plan( + spec, + &options.local_tz, + &options.default_input_tz, + options.preserve_interactivity, + inline_datasets, + keep_variables, + ) + .await?; + + apply_pre_transform_datasets(input_spec, &plan, init, options.row_limit.map(|l| l as u32)) + } + + async fn pre_transform_extract( + &self, + spec: &ChartSpec, + inline_datasets: &HashMap, + options: &PreTransformExtractOpts, + ) -> Result<( + ChartSpec, + Vec, + Vec, + )> { + let input_spec = spec; + let keep_variables: Vec = options + .keep_variables + .clone() + .into_iter() + .map(|var| (var.variable.unwrap(), var.scope)) + .collect(); + + let (plan, init) = self + .pre_transform_spec_plan( + spec, + &options.local_tz, + &options.default_input_tz, + options.preserve_interactivity, + inline_datasets, + keep_variables, + ) + .await?; + + // Update client spec with server values + let mut spec = plan.client_spec.clone(); + let mut datasets: Vec = Vec::new(); + let extract_threshold = options.extract_threshold as usize; + + for export_update in init { + let scope = export_update.scope.clone(); + let name = export_update.name.as_str(); + match export_update.namespace { + ExportUpdateNamespace::Signal => { + // Always inline signal values + let signal = spec.get_nested_signal_mut(&scope, name)?; + signal.value = MissingNullOrValue::Value(export_update.value.to_json()?); + } + ExportUpdateNamespace::Data => { + let data = spec.get_nested_data_mut(&scope, name)?; + + // If the input dataset includes inline values and no transforms, + // copy the input JSON directly to avoid the case where round-tripping + // through Arrow homogenizes mixed type arrays. + // E.g. round tripping may turn [1, "two"] into ["1", "two"] + let input_values = + input_spec + .get_nested_data(&scope, name) + .ok() + .and_then(|data| { + if data.transform.is_empty() { + data.values.clone() + } else { + None + } + }); + if let Some(input_values) = input_values { + // Set inline value + data.values = Some(input_values); + } else if let TaskValue::Table(table) = export_update.value { + if table.num_rows() <= extract_threshold { + // Inline small tables + data.values = Some(table.to_json()?); + } else { + // Extract non-small tables + datasets.push(PreTransformExtractTable { + name: export_update.name, + scope: export_update.scope, + table, + }); + } + } else { + return Err(VegaFusionError::internal( + "Expected Data TaskValue to be an Table", + )); + } + } + } + } + + // Destringify datetime strings in selection store datasets + destringify_selection_datetimes(&mut spec)?; + + // Build warnings + let mut warnings: Vec = Vec::new(); + + // Add planner warnings + for planner_warning in &plan.warnings { + warnings.push(PreTransformExtractWarning { + warning_type: Some(pre_transform_extract_warning::WarningType::Planner( + PlannerWarning { + message: planner_warning.message(), + }, + )), + }); + } + + Ok((spec, datasets, warnings)) + } + + async fn pre_transform_values( + &self, + spec: &ChartSpec, + inline_datasets: &HashMap, + options: &PreTransformValuesOpts, + ) -> Result<(Vec, Vec)> { + // Check that requested variables exist and collect indices + for var in &options.variables { + let scope = var.scope.as_slice(); + let variable = var.variable.clone().unwrap(); + let name = variable.name.clone(); + let namespace = variable.clone().ns(); + + match namespace { + VariableNamespace::Signal => { + if spec.get_nested_signal(scope, &name).is_err() { + return Err(VegaFusionError::pre_transform(format!( + "No signal named {} with scope {:?}", + name, scope + ))); + } + } + VariableNamespace::Data => { + if spec.get_nested_data(scope, &name).is_err() { + return Err(VegaFusionError::pre_transform(format!( + "No dataset named {} with scope {:?}", + name, scope + ))); + } + } + VariableNamespace::Scale => { + return Err(VegaFusionError::pre_transform(format!( + "pre_transform_values does not support scale variable {:?}", + variable + ))) + } + } + } + + // Make sure planner keeps the requested variables, event + // if they are not used elsewhere in the spec + let keep_variables = options + .variables + .clone() + .into_iter() + .map(|v| (v.variable.unwrap(), v.scope)) + .collect(); + + // Create spec plan + let plan = SpecPlan::try_new( + spec, + &PlannerConfig { + stringify_local_datetimes: false, + extract_inline_data: true, + split_domain_data: false, + projection_pushdown: false, + allow_client_to_server_comms: true, + keep_variables, + ..Default::default() + }, + )?; + + // Extract inline dataset fingerprints + let dataset_fingerprints = inline_datasets + .iter() + .map(|(k, ds)| (k.clone(), ds.fingerprint())) + .collect::>(); + + // Create task graph for server spec + let tz_config = TzConfig { + local_tz: options.local_tz.to_string(), + default_input_tz: options.default_input_tz.clone(), + }; + let task_scope = plan.server_spec.to_task_scope().unwrap(); + let tasks = plan + .server_spec + .to_tasks(&tz_config, &dataset_fingerprints)?; + let task_graph = TaskGraph::new(tasks, &task_scope).unwrap(); + let task_graph_mapping = task_graph.build_mapping(); + + let mut warnings: Vec = Vec::new(); + + // Add planner warnings + for planner_warning in &plan.warnings { + warnings.push(PreTransformValuesWarning { + warning_type: Some(ValuesWarningType::Planner(PlannerWarning { + message: planner_warning.message(), + })), + }); + } + + // Collect node indices for variables + let indices: Vec<_> = options + .variables + .iter() + .map(|var| { + if let Some(index) = + task_graph_mapping.get(&(var.variable.clone().unwrap(), var.scope.clone())) + { + Ok(index.clone()) + } else { + Err(VegaFusionError::pre_transform(format!( + "Requested variable {var:?}\n requires transforms or signal \ + expressions that are not yet supported" + ))) + } + }) + .collect::>>()?; + + // perform query + let named_task_values = self + .query_request(Arc::new(task_graph.clone()), &indices, inline_datasets) + .await?; + + // Collect values and handle row limit + let mut task_values: Vec = Vec::new(); + let row_limit = options.row_limit.map(|l| l as usize); + for named_task_value in named_task_values { + let value = named_task_value.value; + let variable = named_task_value.variable; + + // Apply row_limit + let value = if let (Some(row_limit), TaskValue::Table(table)) = (row_limit, &value) { + warnings.push(PreTransformValuesWarning { + warning_type: Some(ValuesWarningType::RowLimit(PreTransformRowLimitWarning { + datasets: vec![variable.clone()], + })), + }); + TaskValue::Table(table.head(row_limit)) + } else { + value + }; + + task_values.push(value); + } + + Ok((task_values, warnings)) + } +} + +pub fn decode_inline_datasets( + inline_pretransform_datasets: Vec, +) -> Result> { + let inline_datasets = inline_pretransform_datasets + .iter() + .map(|inline_dataset| { + let dataset = VegaFusionDataset::from_table_ipc_bytes(&inline_dataset.table)?; + Ok((inline_dataset.name.clone(), dataset)) + }) + .collect::>>()?; + Ok(inline_datasets) +} + +pub fn encode_inline_datasets( + datasets: &HashMap, +) -> Result> { + datasets + .into_iter() + .map(|(name, dataset)| { + let VegaFusionDataset::Table { table, hash: _ } = dataset else { + return Err(VegaFusionError::internal( + "grpc runtime suppors Arrow tables only, not general Datasets".to_string(), + )); + }; + Ok(InlineDataset { + name: name.clone(), + table: table.to_ipc_bytes()?, + }) + }) + .collect::>>() +} diff --git a/vegafusion-core/src/task_graph/task_value.rs b/vegafusion-core/src/task_graph/task_value.rs index f84d32328..275b02c3b 100644 --- a/vegafusion-core/src/task_graph/task_value.rs +++ b/vegafusion-core/src/task_graph/task_value.rs @@ -1,4 +1,5 @@ use crate::proto::gen::tasks::task_value::Data; +use crate::proto::gen::tasks::ResponseTaskValue; use crate::proto::gen::tasks::{TaskGraphValueResponse, TaskValue as ProtoTaskValue, Variable}; use crate::task_graph::memory::{inner_size_of_scalar, inner_size_of_table}; use datafusion_common::ScalarValue; @@ -107,3 +108,30 @@ impl TaskGraphValueResponse { .collect::>>() } } + +#[derive(Debug, Clone)] +pub struct NamedTaskValue { + pub variable: Variable, + pub scope: Vec, + pub value: TaskValue, +} + +impl From for ResponseTaskValue { + fn from(value: NamedTaskValue) -> Self { + ResponseTaskValue { + variable: Some(value.variable), + scope: value.scope, + value: Some(ProtoTaskValue::try_from(&value.value).unwrap()), + } + } +} + +impl From for NamedTaskValue { + fn from(value: ResponseTaskValue) -> Self { + NamedTaskValue { + variable: value.variable.unwrap(), + scope: value.scope, + value: TaskValue::try_from(&value.value.unwrap()).unwrap(), + } + } +} diff --git a/vegafusion-python/Cargo.toml b/vegafusion-python/Cargo.toml index b13efcbf6..5f723c7e4 100644 --- a/vegafusion-python/Cargo.toml +++ b/vegafusion-python/Cargo.toml @@ -30,6 +30,10 @@ workspace = true [dependencies.prost] workspace = true +[dependencies.tonic] +version = "0.10.2" +features = ["tls"] + [dependencies.deterministic-hash] version = "1.0.1" @@ -38,7 +42,7 @@ version = "1.0.137" features = ["derive"] [dependencies.serde_json] -version = "1.0.79" +workspace = true [dependencies.arrow] workspace = true @@ -50,7 +54,7 @@ version = "1.6.9" [dependencies.vegafusion-core] path = "../vegafusion-core" -features = ["py"] +features = ["py", "tonic_support"] version = "1.6.9" [dependencies.vegafusion-runtime] diff --git a/vegafusion-python/src/lib.rs b/vegafusion-python/src/lib.rs index bdc914488..a423b2e1b 100644 --- a/vegafusion-python/src/lib.rs +++ b/vegafusion-python/src/lib.rs @@ -7,12 +7,20 @@ use pyo3::prelude::*; use pyo3::types::{PyBytes, PyDict, PyList, PyTuple}; use std::borrow::Cow; use std::collections::HashMap; +use std::str::FromStr; use std::sync::{Arc, Once}; use tokio::runtime::Runtime; +use tonic::transport::{Channel, Uri}; use vegafusion_core::chart_state::ChartState as RsChartState; use vegafusion_core::error::{ToExternalError, VegaFusionError}; use vegafusion_core::proto::gen::pretransform::pre_transform_extract_warning::WarningType as ExtractWarningType; use vegafusion_core::proto::gen::pretransform::pre_transform_values_warning::WarningType as ValueWarningType; +use vegafusion_core::proto::gen::pretransform::{ + PreTransformExtractOpts, PreTransformSpecOpts, PreTransformValuesOpts, PreTransformVariable, +}; +use vegafusion_core::proto::gen::tasks::{TzConfig, Variable}; +use vegafusion_core::runtime::GrpcVegaFusionRuntime; + use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; use crate::connection::{PySqlConnection, PySqlDataset}; @@ -25,7 +33,7 @@ use vegafusion_core::patch::patch_pre_transformed_spec; use vegafusion_core::planning::plan::{PlannerConfig, PreTransformSpecWarningSpec, SpecPlan}; use vegafusion_core::planning::projection_pushdown::get_column_usage as rs_get_column_usage; use vegafusion_core::planning::watch::{ExportUpdateJSON, WatchPlan}; -use vegafusion_core::proto::gen::tasks::{TzConfig, Variable}; + use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::task_graph::graph::ScopedVariable; use vegafusion_core::task_graph::task_value::TaskValue; @@ -33,6 +41,8 @@ use vegafusion_runtime::tokio_runtime::TOKIO_THREAD_STACK_SIZE; use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; use vegafusion_sql::connection::Connection; +use vegafusion_core::runtime::VegaFusionRuntimeTrait; + static INIT: Once = Once::new(); pub fn initialize_logging() { @@ -50,14 +60,14 @@ lazy_static! { #[pyclass] struct PyChartState { - runtime: Arc, + runtime: Arc, state: RsChartState, tokio_runtime: Arc, } impl PyChartState { pub fn try_new( - runtime: Arc, + runtime: Arc, tokio_runtime: Arc, spec: ChartSpec, inline_datasets: HashMap, @@ -140,7 +150,7 @@ impl PyChartState { #[pyclass] struct PyVegaFusionRuntime { - runtime: Arc, + runtime: Arc, tokio_runtime_connection: Arc, tokio_runtime_current_thread: Arc, } @@ -202,9 +212,9 @@ impl PyVegaFusionRuntime { #[pymethods] impl PyVegaFusionRuntime { - #[new] + #[staticmethod] #[pyo3(signature = (max_capacity=None, memory_limit=None, worker_threads=None, connection=None))] - pub fn new( + pub fn new_embedded( max_capacity: Option, memory_limit: Option, worker_threads: Option, @@ -247,6 +257,32 @@ impl PyVegaFusionRuntime { }) } + #[staticmethod] + pub fn new_grpc(url: &str) -> PyResult { + let tokio_runtime = Arc::new( + tokio::runtime::Builder::new_multi_thread() + .enable_io() + .build()?, + ); + let runtime = tokio_runtime.block_on(async move { + let innter_url = url; + let uri = + Uri::from_str(&innter_url).map_err(|e| VegaFusionError::internal(e.to_string()))?; + + GrpcVegaFusionRuntime::try_new(Channel::builder(uri).connect().await.map_err(|e| { + let msg = format!("Error connecting to gRPC server at {}: {}", innter_url, e); + VegaFusionError::internal(msg) + })?) + .await + })?; + + Ok(Self { + runtime: Arc::new(runtime), + tokio_runtime_connection: tokio_runtime.clone(), + tokio_runtime_current_thread: tokio_runtime.clone(), + }) + } + #[pyo3(signature = (spec, local_tz, default_input_tz=None, row_limit=None, inline_datasets=None))] pub fn new_chart_state( &self, @@ -286,59 +322,6 @@ impl PyVegaFusionRuntime { }) } - pub fn process_request_bytes( - &self, - py: Python, - request_bytes: &Bound, - ) -> PyResult { - let request_bytes = request_bytes.as_bytes(); - let response_bytes = py.allow_threads(|| { - self.tokio_runtime_connection - .block_on(self.runtime.query_request_bytes(request_bytes)) - })?; - Ok(PyBytes::new_bound(py, &response_bytes).into()) - } - - #[allow(clippy::too_many_arguments)] - #[pyo3(signature = (spec, preserve_interactivity=None, keep_signals=None, keep_datasets=None))] - pub fn build_pre_transform_spec_plan( - &self, - spec: PyObject, - preserve_interactivity: Option, - keep_signals: Option)>>, - keep_datasets: Option)>>, - ) -> PyResult { - let spec = parse_json_spec(spec)?; - let preserve_interactivity = preserve_interactivity.unwrap_or(false); - - // Build keep_variables - let mut keep_variables: Vec = Vec::new(); - for (name, scope) in keep_signals.unwrap_or_default() { - keep_variables.push((Variable::new_signal(&name), scope)) - } - for (name, scope) in keep_datasets.unwrap_or_default() { - keep_variables.push((Variable::new_data(&name), scope)) - } - - let plan = SpecPlan::try_new( - &spec, - &PlannerConfig::pre_transformed_spec_config(preserve_interactivity, keep_variables), - )?; - let watch_plan = WatchPlan::from(plan.comm_plan); - - let json_plan = json!({ - "server_spec": plan.server_spec, - "client_spec": plan.client_spec, - "comm_plan": watch_plan, - "warnings": plan.warnings, - }); - - Python::with_gil(|py| -> PyResult { - let py_plan = pythonize::pythonize(py, &json_plan)?; - Ok(py_plan.into()) - }) - } - #[allow(clippy::too_many_arguments)] #[pyo3(signature = (spec, local_tz, default_input_tz=None, row_limit=None, preserve_interactivity=None, inline_datasets=None, keep_signals=None, keep_datasets=None))] pub fn pre_transform_spec( @@ -377,15 +360,25 @@ impl PyVegaFusionRuntime { }; let (spec, warnings) = py.allow_threads(|| { - rt.block_on(self.runtime.pre_transform_spec( - &spec, - &local_tz, - &default_input_tz, - row_limit, - preserve_interactivity, - inline_datasets, - keep_variables, - )) + rt.block_on( + self.runtime.pre_transform_spec( + &spec, + &inline_datasets, + &PreTransformSpecOpts { + local_tz, + default_input_tz, + row_limit, + preserve_interactivity, + keep_variables: keep_variables + .into_iter() + .map(|v| PreTransformVariable { + variable: Some(v.0), + scope: v.1, + }) + .collect(), + }, + ), + ) })?; let warnings: Vec<_> = warnings @@ -435,14 +428,24 @@ impl PyVegaFusionRuntime { }; let (values, warnings) = py.allow_threads(|| { - rt.block_on(self.runtime.pre_transform_values( - &spec, - &variables, - &local_tz, - &default_input_tz, - row_limit, - inline_datasets, - )) + rt.block_on( + self.runtime.pre_transform_values( + &spec, + &inline_datasets, + &PreTransformValuesOpts { + variables: variables + .into_iter() + .map(|v| PreTransformVariable { + variable: Some(v.0), + scope: v.1, + }) + .collect(), + local_tz, + default_input_tz, + row_limit, + }, + ), + ) })?; let warnings: Vec<_> = warnings @@ -508,23 +511,31 @@ impl PyVegaFusionRuntime { }; // Build keep_variables - let mut keep_variables: Vec = Vec::new(); + let mut keep_variables: Vec = Vec::new(); for (name, scope) in keep_signals.unwrap_or_default() { - keep_variables.push((Variable::new_signal(&name), scope)) + keep_variables.push(PreTransformVariable { + variable: Some(Variable::new_signal(&name)), + scope: scope, + }); } for (name, scope) in keep_datasets.unwrap_or_default() { - keep_variables.push((Variable::new_data(&name), scope)) + keep_variables.push(PreTransformVariable { + variable: Some(Variable::new_data(&name)), + scope: scope, + }); } let (tx_spec, datasets, warnings) = py.allow_threads(|| { rt.block_on(self.runtime.pre_transform_extract( &spec, - &local_tz, - &default_input_tz, - preserve_interactivity, - extract_threshold, - inline_datasets, - keep_variables, + &inline_datasets, + &PreTransformExtractOpts { + local_tz, + default_input_tz, + preserve_interactivity, + extract_threshold: extract_threshold as i32, + keep_variables, + }, )) })?; @@ -543,16 +554,15 @@ impl PyVegaFusionRuntime { let datasets = datasets .into_iter() - .map(|(name, scope, table)| { - let name = name.into_py(py); - let scope = scope.into_py(py); + .map(|tbl| { + let name = tbl.name.into_py(py); + let scope = tbl.scope.into_py(py); let table = match extracted_format.as_str() { - "arro3" => table.to_pyo3_arrow()?.into_py(py), - "pyarrow" => table.to_pyo3_arrow()?.to_pyarrow(py)?.into_py(py), - "arrow-ipc" => { - PyBytes::new_bound(py, table.to_ipc_bytes()?.as_slice()).to_object(py) - } - "arrow-ipc-base64" => table.to_ipc_base64()?.into_py(py), + "arro3" => tbl.table.to_pyo3_arrow()?.into_py(py), + "pyarrow" => tbl.table.to_pyo3_arrow()?.to_pyarrow(py)?.into_py(py), + "arrow-ipc" => PyBytes::new_bound(py, tbl.table.to_ipc_bytes()?.as_slice()) + .to_object(py), + "arrow-ipc-base64" => tbl.table.to_ipc_base64()?.into_py(py), _ => { return Err(PyValueError::new_err(format!( "Invalid extracted_format: {}", @@ -592,27 +602,56 @@ impl PyVegaFusionRuntime { }) } - pub fn clear_cache(&self, py: Python) { - py.allow_threads(|| { - self.tokio_runtime_connection - .block_on(self.runtime.clear_cache()) - }); + pub fn clear_cache(&self) -> PyResult<()> { + if let Some(runtime) = self.runtime.as_any().downcast_ref::() { + Ok(self + .tokio_runtime_current_thread + .block_on(runtime.clear_cache())) + } else { + Err(PyValueError::new_err( + "Current Runtime does not support clear_cache", + )) + } } - pub fn size(&self) -> usize { - self.runtime.cache.size() + pub fn size(&self) -> PyResult { + if let Some(runtime) = self.runtime.as_any().downcast_ref::() { + Ok(runtime.cache.size()) + } else { + Err(PyValueError::new_err( + "Current Runtime does not support size", + )) + } } - pub fn total_memory(&self) -> usize { - self.runtime.cache.total_memory() + pub fn total_memory(&self) -> PyResult { + if let Some(runtime) = self.runtime.as_any().downcast_ref::() { + Ok(runtime.cache.total_memory()) + } else { + Err(PyValueError::new_err( + "Current Runtime does not support total_memory", + )) + } } - pub fn protected_memory(&self) -> usize { - self.runtime.cache.protected_memory() + pub fn protected_memory(&self) -> PyResult { + if let Some(runtime) = self.runtime.as_any().downcast_ref::() { + Ok(runtime.cache.protected_memory()) + } else { + Err(PyValueError::new_err( + "Current Runtime does not support protected_memory", + )) + } } - pub fn probationary_memory(&self) -> usize { - self.runtime.cache.probationary_memory() + pub fn probationary_memory(&self) -> PyResult { + if let Some(runtime) = self.runtime.as_any().downcast_ref::() { + Ok(runtime.cache.probationary_memory()) + } else { + Err(PyValueError::new_err( + "Current Runtime does not support probationary_memory", + )) + } } } @@ -636,15 +675,56 @@ pub fn get_column_usage(py: Python, spec: PyObject) -> PyResult { Ok(pythonize::pythonize(py, &usage)?.into()) } +#[pyfunction] +#[allow(clippy::too_many_arguments)] +#[pyo3(signature = (spec, preserve_interactivity=None, keep_signals=None, keep_datasets=None))] +pub fn build_pre_transform_spec_plan( + spec: PyObject, + preserve_interactivity: Option, + keep_signals: Option)>>, + keep_datasets: Option)>>, +) -> PyResult { + let spec = parse_json_spec(spec)?; + let preserve_interactivity = preserve_interactivity.unwrap_or(false); + + // Build keep_variables + let mut keep_variables: Vec = Vec::new(); + for (name, scope) in keep_signals.unwrap_or_default() { + keep_variables.push((Variable::new_signal(&name), scope)) + } + for (name, scope) in keep_datasets.unwrap_or_default() { + keep_variables.push((Variable::new_data(&name), scope)) + } + + let plan = SpecPlan::try_new( + &spec, + &PlannerConfig::pre_transformed_spec_config(preserve_interactivity, keep_variables), + )?; + let watch_plan = WatchPlan::from(plan.comm_plan); + + let json_plan = json!({ + "server_spec": plan.server_spec, + "client_spec": plan.client_spec, + "comm_plan": watch_plan, + "warnings": plan.warnings, + }); + + Python::with_gil(|py| -> PyResult { + let py_plan = pythonize::pythonize(py, &json_plan)?; + Ok(py_plan.into()) + }) +} + /// A Python module implemented in Rust. The name of this function must match /// the `lib.name` setting in the `Cargo.toml`, else Python will not be able to /// import the module. #[pymodule] fn _vegafusion(_py: Python, m: &Bound) -> PyResult<()> { m.add_class::()?; - m.add_class::()?; m.add_class::()?; + m.add_class::()?; m.add_function(wrap_pyfunction!(get_column_usage, m)?)?; + m.add_function(wrap_pyfunction!(build_pre_transform_spec_plan, m)?)?; m.add_function(wrap_pyfunction!(get_virtual_memory, m)?)?; m.add_function(wrap_pyfunction!(get_cpu_count, m)?)?; m.add("__version__", env!("CARGO_PKG_VERSION"))?; diff --git a/vegafusion-python/vegafusion/runtime.py b/vegafusion-python/vegafusion/runtime.py index 7c7265d9a..155cc9e44 100644 --- a/vegafusion-python/vegafusion/runtime.py +++ b/vegafusion-python/vegafusion/runtime.py @@ -1,6 +1,5 @@ from __future__ import annotations -import json import sys from types import ModuleType from typing import TYPE_CHECKING, Any, Literal, TypedDict, Union, cast @@ -10,7 +9,7 @@ from vegafusion._vegafusion import get_cpu_count, get_virtual_memory from vegafusion.transformer import DataFrameLike -from vegafusion.utils import get_column_usage +from vegafusion.utils import get_inline_column_usage from .connection import SqlConnection from .dataset import SqlDataset @@ -22,10 +21,13 @@ import polars as pl # noqa: F401 import pyarrow as pa from duckdb import DuckDBPyConnection - from grpc import Channel from narwhals.typing import IntoFrameT - from vegafusion._vegafusion import PyChartState, PyVegaFusionRuntime + from vegafusion._vegafusion import ( + PyChartState, + PyChartStateGrpc, + PyVegaFusionRuntime, + ) # This type isn't defined in the grpcio package, so let's at least name it UnaryUnaryMultiCallable = Any @@ -83,7 +85,7 @@ class PreTransformWarning(TypedDict): class ChartState: - def __init__(self, chart_state: PyChartState) -> None: + def __init__(self, chart_state: PyChartState | PyChartStateGrpc) -> None: self._chart_state = chart_state def update(self, client_updates: list[VariableUpdate]) -> list[VariableUpdate]: @@ -171,24 +173,23 @@ def __init__( worker_threads: Number of worker threads. connection: SQL connection (optional). """ - self._embedded_runtime = None - self._grpc_channel = None - self._grpc_query = None + self._runtime = None + self._grpc_url: str | None = None self._cache_capacity = cache_capacity self._memory_limit = memory_limit self._worker_threads = worker_threads self._connection = connection @property - def embedded_runtime(self) -> PyVegaFusionRuntime: + def runtime(self) -> PyVegaFusionRuntime: """ - Get or initialize the embedded runtime. + Get or initialize a VegaFusion runtime. Returns: - The embedded runtime. + The VegaFusion runtime. """ - if self._embedded_runtime is None: - # Try to initialize an embedded runtime + if self._runtime is None: + # Try to initialize a VegaFusion runtime from vegafusion._vegafusion import PyVegaFusionRuntime if self.memory_limit is None: @@ -196,13 +197,13 @@ def embedded_runtime(self) -> PyVegaFusionRuntime: if self.worker_threads is None: self.worker_threads = get_cpu_count() - self._embedded_runtime = PyVegaFusionRuntime( + self._runtime = PyVegaFusionRuntime.new_embedded( self.cache_capacity, self.memory_limit, self.worker_threads, connection=self._connection, ) - return self._embedded_runtime + return self._runtime def set_connection( self, @@ -256,15 +257,17 @@ def set_connection( self._connection = connection self.reset() - def grpc_connect(self, channel: Channel) -> None: + def grpc_connect(self, url: str) -> None: """ - Connect to a VegaFusion server over gRPC using the provided gRPC channel + Connect to a VegaFusion server over gRPC at the provided gRPC url Args: - channel: grpc.Channel instance configured with the address of a running - VegaFusion server + url: URL of a running VegaFusion server """ - self._grpc_channel = channel + from vegafusion._vegafusion import PyVegaFusionRuntime + + self._grpc_url = url + self._runtime = PyVegaFusionRuntime.new_grpc(url) @property def using_grpc(self) -> bool: @@ -274,46 +277,7 @@ def using_grpc(self) -> bool: Returns: True if using gRPC, False otherwise. """ - return self._grpc_channel is not None - - @property - def grpc_query(self) -> UnaryUnaryMultiCallable: - """ - Get the gRPC query object. - - Returns: - The gRPC query object. - - Raises: - ValueError: If no gRPC channel is registered. - """ - if self._grpc_channel is None: - raise ValueError( - "No grpc channel registered. Use runtime.grpc_connect to provide " - "a grpc channel" - ) - - if self._grpc_query is None: - self._grpc_query = self._grpc_channel.unary_unary( - "/services.VegaFusionRuntime/TaskGraphQuery", - ) - return self._grpc_query - - def process_request_bytes(self, request: bytes) -> bytes: - """ - Process a request in bytes format. - - Args: - request: The request in bytes format. - - Returns: - The processed request in bytes format. - """ - if self._grpc_channel: - return self.grpc_query(request) - else: - # No grpc channel, get or initialize an embedded runtime - return cast(bytes, self.embedded_runtime.process_request_bytes(request)) + return self._grpc_url is not None def _import_or_register_inline_datasets( self, @@ -410,57 +374,6 @@ def _import_or_register_inline_datasets( return imported_inline_datasets - def build_pre_transform_spec_plan( - self, - spec: dict[str, Any] | str, - preserve_interactivity: bool = True, - keep_signals: list[str | tuple[str, list[int]]] | None = None, - keep_datasets: list[str | tuple[str, list[int]]] | None = None, - ) -> dict[str, Any]: - """ - Diagnostic function that returns the plan used by the pre_transform_spec method - - Args: - spec: A Vega specification dict or JSON string. - preserve_interactivity: If True (default), the interactive behavior of the - chart will be preserved. This requires that all the data that - participates in interactions be included in the resulting spec rather - than being pre-transformed. If False, all possible data transformations - are applied even if they break the original interactive behavior of the - chart. - keep_signals: Signals from the input spec that must be included in the - pre-transformed spec. A list with elements that are either: - - The name of a top-level signal as a string - - A two-element tuple where the first element is the name of a signal - as a string and the second element is the nested scope of the dataset - as a list of integers - keep_datasets: Datasets from the input spec that must be included in the - pre-transformed spec. A list with elements that are either: - - The name of a top-level dataset as a string - - A two-element tuple where the first element is the name of a dataset - as a string and the second element is the nested scope of the dataset - as a list of integers - - Returns: - dict: A dictionary with the following keys: - - "client_spec": Planned client spec - - "server_spec": Planned server spec - - "comm_plan": Communication plan - - "warnings": List of planner warnings - """ - if self._grpc_channel: - raise ValueError( - "build_pre_transform_spec_plan not yet supported over gRPC" - ) - else: - plan = self.embedded_runtime.build_pre_transform_spec_plan( - spec, - preserve_interactivity=preserve_interactivity, - keep_signals=parse_variables(keep_signals), - keep_datasets=parse_variables(keep_datasets), - ) - return cast(dict[str, Any], plan) - def pre_transform_spec( self, spec: Union[dict[str, Any], str], @@ -541,55 +454,50 @@ def pre_transform_spec( 'Unsupported': No transforms in the provided Vega specification were eligible for pre-transforming """ - if self._grpc_channel: - raise ValueError("pre_transform_spec not yet supported over gRPC") - else: - local_tz = local_tz or get_local_tz() - imported_inline_dataset = self._import_or_register_inline_datasets( - inline_datasets, get_inline_column_usage(spec) - ) + local_tz = local_tz or get_local_tz() + imported_inline_dataset = self._import_or_register_inline_datasets( + inline_datasets, get_inline_column_usage(spec) + ) - try: - if data_encoding_threshold is None: - new_spec, warnings = self.embedded_runtime.pre_transform_spec( - spec, - local_tz=local_tz, - default_input_tz=default_input_tz, - row_limit=row_limit, - preserve_interactivity=preserve_interactivity, - inline_datasets=imported_inline_dataset, - keep_signals=parse_variables(keep_signals), - keep_datasets=parse_variables(keep_datasets), - ) - else: - # Use pre_transform_extract to extract large datasets - new_spec, datasets, warnings = ( - self.embedded_runtime.pre_transform_extract( - spec, - local_tz=local_tz, - default_input_tz=default_input_tz, - preserve_interactivity=preserve_interactivity, - extract_threshold=data_encoding_threshold, - extracted_format=data_encoding_format, - inline_datasets=imported_inline_dataset, - keep_signals=parse_variables(keep_signals), - keep_datasets=parse_variables(keep_datasets), - ) - ) + try: + if data_encoding_threshold is None: + new_spec, warnings = self.runtime.pre_transform_spec( + spec, + local_tz=local_tz, + default_input_tz=default_input_tz, + row_limit=row_limit, + preserve_interactivity=preserve_interactivity, + inline_datasets=imported_inline_dataset, + keep_signals=parse_variables(keep_signals), + keep_datasets=parse_variables(keep_datasets), + ) + else: + # Use pre_transform_extract to extract large datasets + new_spec, datasets, warnings = self.runtime.pre_transform_extract( + spec, + local_tz=local_tz, + default_input_tz=default_input_tz, + preserve_interactivity=preserve_interactivity, + extract_threshold=data_encoding_threshold, + extracted_format=data_encoding_format, + inline_datasets=imported_inline_dataset, + keep_signals=parse_variables(keep_signals), + keep_datasets=parse_variables(keep_datasets), + ) - # Insert encoded datasets back into spec - for name, scope, tbl in datasets: - group = get_mark_group_for_scope(new_spec, scope) or {} - for data in group.get("data", []): - if data.get("name", None) == name: - data["values"] = tbl + # Insert encoded datasets back into spec + for name, scope, tbl in datasets: + group = get_mark_group_for_scope(new_spec, scope) or {} + for data in group.get("data", []): + if data.get("name", None) == name: + data["values"] = tbl - finally: - # Clean up temporary tables - if self._connection is not None: - self._connection.unregister_temporary_tables() + finally: + # Clean up temporary tables + if self._connection is not None: + self._connection.unregister_temporary_tables() - return new_spec, warnings + return new_spec, warnings def new_chart_state( self, @@ -620,18 +528,15 @@ def new_chart_state( Returns: ChartState object. """ - if self._grpc_channel: - raise ValueError("new_chart_state not yet supported over gRPC") - else: - local_tz = local_tz or get_local_tz() - inline_arrow_dataset = self._import_or_register_inline_datasets( - inline_datasets, get_inline_column_usage(spec) - ) - return ChartState( - self.embedded_runtime.new_chart_state( - spec, local_tz, default_input_tz, row_limit, inline_arrow_dataset - ) + local_tz = local_tz or get_local_tz() + inline_arrow_dataset = self._import_or_register_inline_datasets( + inline_datasets, get_inline_column_usage(spec) + ) + return ChartState( + self.runtime.new_chart_state( + spec, local_tz, default_input_tz, row_limit, inline_arrow_dataset ) + ) def pre_transform_datasets( self, @@ -678,88 +583,83 @@ def pre_transform_datasets( key indicating the warning type, and a 'message' key containing a description of the warning. """ - if self._grpc_channel: - raise ValueError("pre_transform_datasets not yet supported over gRPC") - else: - if not TYPE_CHECKING: - pl = sys.modules.get("polars", None) - pa = sys.modules.get("pyarrow", None) - pd = sys.modules.get("pandas", None) - - local_tz = local_tz or get_local_tz() - - # Build input variables - pre_tx_vars = parse_variables(datasets) - - # Serialize inline datasets - inline_arrow_dataset = self._import_or_register_inline_datasets( - inline_datasets, - inline_dataset_usage=get_inline_column_usage(spec) - if trim_unused_columns - else None, - ) - try: - values, warnings = self.embedded_runtime.pre_transform_datasets( - spec, - pre_tx_vars, - local_tz=local_tz, - default_input_tz=default_input_tz, - row_limit=row_limit, - inline_datasets=inline_arrow_dataset, - ) - finally: - # Clean up registered tables (both inline and internal temporary tables) - if self._connection is not None: - self._connection.unregister_temporary_tables() + if not TYPE_CHECKING: + pl = sys.modules.get("polars", None) + pa = sys.modules.get("pyarrow", None) + pd = sys.modules.get("pandas", None) - # Wrap result dataframes in native format, then with Narwhals so that - # we can manipulate them with a uniform API - namespace = _get_common_namespace(inline_datasets) - if namespace == "polars" and pl is not None: - nw_dataframes = [ - nw.from_native(pl.DataFrame(value)) for value in values - ] + local_tz = local_tz or get_local_tz() - elif namespace == "pyarrow" and pa is not None: - nw_dataframes = [nw.from_native(pa.table(value)) for value in values] - elif namespace == "pandas" and pd is not None and pa is not None: + # Build input variables + pre_tx_vars = parse_variables(datasets) + + # Serialize inline datasets + inline_arrow_dataset = self._import_or_register_inline_datasets( + inline_datasets, + inline_dataset_usage=get_inline_column_usage(spec) + if trim_unused_columns + else None, + ) + try: + values, warnings = self.runtime.pre_transform_datasets( + spec, + pre_tx_vars, + local_tz=local_tz, + default_input_tz=default_input_tz, + row_limit=row_limit, + inline_datasets=inline_arrow_dataset, + ) + finally: + # Clean up registered tables (both inline and internal temporary tables) + if self._connection is not None: + self._connection.unregister_temporary_tables() + + # Wrap result dataframes in native format, then with Narwhals so that + # we can manipulate them with a uniform API + namespace = _get_common_namespace(inline_datasets) + if namespace == "polars" and pl is not None: + nw_dataframes = [nw.from_native(pl.DataFrame(value)) for value in values] + + elif namespace == "pyarrow" and pa is not None: + nw_dataframes = [nw.from_native(pa.table(value)) for value in values] + elif namespace == "pandas" and pd is not None and pa is not None: + nw_dataframes = [ + nw.from_native(pa.table(value).to_pandas()) for value in values + ] + else: + # Either no inline datasets, inline datasets with mixed or + # unrecognized types + if pa is not None and pd is not None: nw_dataframes = [ nw.from_native(pa.table(value).to_pandas()) for value in values ] + elif pl is not None: + nw_dataframes = [ + nw.from_native(pl.DataFrame(value)) for value in values + ] else: - # Either no inline datasets, inline datasets with mixed or - # unrecognized types - if pa is not None and pd is not None: - nw_dataframes = [ - nw.from_native(pa.table(value).to_pandas()) for value in values - ] - elif pl is not None: - nw_dataframes = [ - nw.from_native(pl.DataFrame(value)) for value in values - ] - else: - # Hopefully narwhals will eventually help us fall back to whatever - # is installed here - raise ValueError( - "Either polars or pandas must be installed to extract " - "transformed data" - ) + # Hopefully narwhals will eventually help us fall back to whatever + # is installed here + raise ValueError( + "Either polars or pandas must be installed to extract " + "transformed data" + ) - # Localize datetime columns to UTC, then extract the native DataFrame - # to return - processed_datasets = [] - for df in nw_dataframes: - for name in df.columns: - dtype = df[name].dtype - if dtype == nw.Datetime: - df = df.with_columns( - df[name] - .dt.replace_time_zone("UTC") - .dt.convert_time_zone(local_tz) - ) - processed_datasets.append(df.to_native()) + # Localize datetime columns to UTC, then extract the native DataFrame + # to return + processed_datasets = [] + for df in nw_dataframes: + for name in df.columns: + dtype = df[name].dtype + if dtype == nw.Datetime: + df = df.with_columns( + df[name] + .dt.replace_time_zone("UTC") + .dt.convert_time_zone(local_tz) + ) + processed_datasets.append(df.to_native()) - return processed_datasets, warnings + return processed_datasets, warnings def pre_transform_extract( self, @@ -832,34 +732,29 @@ def pre_transform_extract( of the warning. Potential warning types include: - 'Planner': Planner warning """ - if self._grpc_channel: - raise ValueError("pre_transform_spec not yet supported over gRPC") - else: - local_tz = local_tz or get_local_tz() + local_tz = local_tz or get_local_tz() - inline_arrow_dataset = self._import_or_register_inline_datasets( - inline_datasets, get_inline_column_usage(spec) + inline_arrow_dataset = self._import_or_register_inline_datasets( + inline_datasets, get_inline_column_usage(spec) + ) + try: + new_spec, datasets, warnings = self.runtime.pre_transform_extract( + spec, + local_tz=local_tz, + default_input_tz=default_input_tz, + preserve_interactivity=preserve_interactivity, + extract_threshold=extract_threshold, + extracted_format=extracted_format, + inline_datasets=inline_arrow_dataset, + keep_signals=keep_signals, + keep_datasets=keep_datasets, ) - try: - new_spec, datasets, warnings = ( - self.embedded_runtime.pre_transform_extract( - spec, - local_tz=local_tz, - default_input_tz=default_input_tz, - preserve_interactivity=preserve_interactivity, - extract_threshold=extract_threshold, - extracted_format=extracted_format, - inline_datasets=inline_arrow_dataset, - keep_signals=keep_signals, - keep_datasets=keep_datasets, - ) - ) - finally: - # Clean up temporary tables - if self._connection is not None: - self._connection.unregister_temporary_tables() + finally: + # Clean up temporary tables + if self._connection is not None: + self._connection.unregister_temporary_tables() - return new_spec, datasets, warnings + return new_spec, datasets, warnings def patch_pre_transformed_spec( self, @@ -887,10 +782,10 @@ def patch_pre_transformed_spec( applied cleanly, None is returned and spec2 should be passed through the pre_transform_spec method. """ - if self._grpc_channel: + if self.using_grpc: raise ValueError("patch_pre_transformed_spec not yet supported over gRPC") else: - pre_transformed_spec2 = self.embedded_runtime.patch_pre_transformed_spec( + pre_transformed_spec2 = self.runtime.patch_pre_transformed_spec( spec1, pre_transformed_spec1, spec2 ) return cast(dict[str, Any], pre_transformed_spec2) @@ -919,29 +814,29 @@ def worker_threads(self, value: int) -> None: @property def total_memory(self) -> int | None: - if self._embedded_runtime: - return self._embedded_runtime.total_memory() + if self._runtime: + return self._runtime.total_memory() else: return None @property def _protected_memory(self) -> int | None: - if self._embedded_runtime: - return self._embedded_runtime.protected_memory() + if self._runtime: + return self._runtime.protected_memory() else: return None @property def _probationary_memory(self) -> int | None: - if self._embedded_runtime: - return self._embedded_runtime.probationary_memory() + if self._runtime: + return self._runtime.probationary_memory() else: return None @property def size(self) -> int | None: - if self._embedded_runtime: - return self._embedded_runtime.size() + if self._runtime: + return self._runtime.size() else: return None @@ -978,13 +873,13 @@ def cache_capacity(self, value: int) -> None: self.reset() def reset(self) -> None: - if self._embedded_runtime is not None: - self._embedded_runtime.clear_cache() - self._embedded_runtime = None + if self._runtime is not None: + self._runtime.clear_cache() + self._runtime = None def __repr__(self) -> str: - if self._grpc_channel: - return f"VegaFusionRuntime(channel={self._grpc_channel})" + if self.using_grpc: + return f"VegaFusionRuntime(url={self._grpc_url})" else: return ( f"VegaFusionRuntime(cache_capacity={self.cache_capacity}, " @@ -1048,36 +943,4 @@ def get_mark_group_for_scope( return group -def get_inline_column_usage( - spec: dict[str, Any] | str, -) -> dict[str, list[str]]: - """ - Get the columns used by each inline dataset, if known - """ - if isinstance(spec, str): - spec_dict = cast("dict[str, Any]", json.loads(spec)) - else: - spec_dict = spec - - # Build mapping from inline_dataset name to Vega dataset name - inline_dataset_mapping: dict[str, str] = {} - for dataset in spec_dict.get("data", []): - url = cast("str | None", dataset.get("url", None)) - if url and ( - url.startswith("vegafusion+dataset://") or url.startswith("table://") - ): - parts = url.split("//") - if len(parts) == 2: - inline_dataset_name = parts[1] - inline_dataset_mapping[inline_dataset_name] = dataset["name"] - - # Compute column usage - usage = get_column_usage(spec_dict) - return { - inline_dataset_name: columns - for inline_dataset_name in inline_dataset_mapping - if (columns := usage[inline_dataset_mapping[inline_dataset_name]]) is not None - } - - runtime = VegaFusionRuntime(64, None, None) diff --git a/vegafusion-python/vegafusion/utils.py b/vegafusion-python/vegafusion/utils.py index cd60c8765..bd3b2f0e8 100644 --- a/vegafusion-python/vegafusion/utils.py +++ b/vegafusion-python/vegafusion/utils.py @@ -1,8 +1,14 @@ from __future__ import annotations -from typing import Any, cast +import json +from typing import Any, TypedDict, cast -from ._vegafusion import get_column_usage as _get_column_usage +from ._vegafusion import ( + build_pre_transform_spec_plan as _build_pre_transform_spec_plan, +) +from ._vegafusion import ( + get_column_usage as _get_column_usage, +) def get_column_usage(spec: dict[str, Any]) -> dict[str, list[str] | None]: @@ -22,3 +28,87 @@ def get_column_usage(spec: dict[str, Any]) -> dict[str, list[str] | None]: that are referenced from this dataset """ return cast("dict[str, list[str] | None]", _get_column_usage(spec)) + + +def get_inline_column_usage( + spec: dict[str, Any] | str, +) -> dict[str, list[str]]: + """ + Get the columns used by each inline dataset, if known + """ + if isinstance(spec, str): + spec_dict = cast("dict[str, Any]", json.loads(spec)) + else: + spec_dict = spec + + # Build mapping from inline_dataset name to Vega dataset name + inline_dataset_mapping: dict[str, str] = {} + for dataset in spec_dict.get("data", []): + url = cast("str | None", dataset.get("url", None)) + if url and ( + url.startswith("vegafusion+dataset://") or url.startswith("table://") + ): + parts = url.split("//") + if len(parts) == 2: + inline_dataset_name = parts[1] + inline_dataset_mapping[inline_dataset_name] = dataset["name"] + + # Compute column usage + usage = get_column_usage(spec_dict) + return { + inline_dataset_name: columns + for inline_dataset_name in inline_dataset_mapping + if (columns := usage[inline_dataset_mapping[inline_dataset_name]]) is not None + } + + +class PreTransformSpecPlan(TypedDict): + client_spec: dict[str, Any] + server_spec: dict[str, Any] + comm_plan: dict[str, Any] + warnings: list[dict[str, Any]] + + +def build_pre_transform_spec_plan( + spec: dict[str, Any], + preserve_interactivity: bool | None = None, + keep_signals: list[tuple[str, list[int]]] | None = None, + keep_datasets: list[tuple[str, list[int]]] | None = None, +) -> PreTransformSpecPlan: + """ + Diagnostic function that returns the plan used by the pre_transform_spec method + + Args: + spec: A Vega specification dict or JSON string. + preserve_interactivity: If True (default), the interactive behavior of the + chart will be preserved. This requires that all the data that + participates in interactions be included in the resulting spec rather + than being pre-transformed. If False, all possible data transformations + are applied even if they break the original interactive behavior of the + chart. + keep_signals: Signals from the input spec that must be included in the + pre-transformed spec. A list with elements that are either: + - The name of a top-level signal as a string + - A two-element tuple where the first element is the name of a signal + as a string and the second element is the nested scope of the dataset + as a list of integers + keep_datasets: Datasets from the input spec that must be included in the + pre-transformed spec. A list with elements that are either: + - The name of a top-level dataset as a string + - A two-element tuple where the first element is the name of a dataset + as a string and the second element is the nested scope of the dataset + as a list of integers + + Returns: + PreTransformSpecPlan: A TypedDict with the following keys: + - "client_spec": Planned client spec + - "server_spec": Planned server spec + - "comm_plan": Communication plan + - "warnings": List of planner warnings + """ + return cast( + PreTransformSpecPlan, + _build_pre_transform_spec_plan( + spec, preserve_interactivity, keep_signals, keep_datasets + ), + ) diff --git a/vegafusion-runtime/Cargo.toml b/vegafusion-runtime/Cargo.toml index c9b496f36..da9c74919 100644 --- a/vegafusion-runtime/Cargo.toml +++ b/vegafusion-runtime/Cargo.toml @@ -15,7 +15,6 @@ protobuf-src = ["vegafusion-core/protobuf-src"] [dependencies] regex = "^1.5.5" -serde_json = "1.0.91" num-traits = "0.2.15" itertools = "0.11.0" float-cmp = "0.9.0" @@ -41,6 +40,9 @@ pixelmatch = "0.1.0" rgb = "0.8.32" lodepng = "3.6.1" +[dependencies.serde_json] +workspace = true + [dependencies.async-trait] workspace = true diff --git a/vegafusion-runtime/benches/spec_benchmarks.rs b/vegafusion-runtime/benches/spec_benchmarks.rs index 789a05be1..c7db684d8 100644 --- a/vegafusion-runtime/benches/spec_benchmarks.rs +++ b/vegafusion-runtime/benches/spec_benchmarks.rs @@ -1,12 +1,15 @@ +use std::collections::HashMap; use std::fs; use std::sync::Arc; use vegafusion_core::planning::plan::SpecPlan; use vegafusion_core::planning::watch::ExportUpdateBatch; use vegafusion_core::proto::gen::services::query_request::Request; -use vegafusion_core::proto::gen::services::{QueryRequest, QueryResult}; +use vegafusion_core::proto::gen::services::QueryRequest; use vegafusion_core::proto::gen::tasks::{TaskGraph, TaskGraphValueRequest, TzConfig, Variable}; +use vegafusion_core::runtime::VegaFusionRuntimeTrait; use vegafusion_core::spec::chart::ChartSpec; +use vegafusion_core::task_graph::task_value::NamedTaskValue; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; fn crate_dir() -> String { @@ -34,7 +37,7 @@ fn load_updates(spec_name: &str) -> Vec { } } -async fn eval_spec_get_variable(full_spec: ChartSpec, var: &ScopedVariable) -> QueryResult { +async fn eval_spec_get_variable(full_spec: ChartSpec, var: &ScopedVariable) -> Vec { let tz_config = TzConfig { local_tz: "America/New_York".to_string(), default_input_tz: None, @@ -54,7 +57,7 @@ async fn eval_spec_get_variable(full_spec: ChartSpec, var: &ScopedVariable) -> Q let node_index = task_graph_mapping.get(var).unwrap(); // Make Query request - let request = QueryRequest { + let _request = QueryRequest { request: Some(Request::TaskGraphValues(TaskGraphValueRequest { task_graph: Some(task_graph.clone()), indices: vec![node_index.clone()], @@ -62,7 +65,10 @@ async fn eval_spec_get_variable(full_spec: ChartSpec, var: &ScopedVariable) -> Q })), }; - runtime.query_request_message(request).await.unwrap() + runtime + .query_request(Arc::new(task_graph), &[node_index.clone()], &HashMap::new()) + .await + .unwrap() } async fn eval_spec_sequence(full_spec: ChartSpec, full_updates: Vec) { @@ -105,15 +111,14 @@ async fn eval_spec_sequence(full_spec: ChartSpec, full_updates: Vec); -type PreTransformExtractDataset = (String, Vec, VegaFusionTable); #[derive(Clone)] pub struct VegaFusionRuntime { @@ -92,618 +63,6 @@ impl VegaFusionRuntime { }) } - pub async fn query_request( - &self, - task_graph: Arc, - indices: &[NodeValueIndex], - inline_datasets: &HashMap, - ) -> Result> { - // Clone task_graph and task_graph_runtime for use in closure - let task_graph_runtime = self.clone(); - let response_value_futures: Vec<_> = indices - .iter() - .map(|node_value_index| { - let node = task_graph - .nodes - .get(node_value_index.node_index as usize) - .with_context(|| { - format!( - "Node index {} out of bounds for graph with size {}", - node_value_index.node_index, - task_graph.nodes.len() - ) - })?; - let task = node.task(); - let var = match node_value_index.output_index { - None => task.variable().clone(), - Some(output_index) => task.output_vars()[output_index as usize].clone(), - }; - - let scope = node.task().scope.clone(); - - // Clone task_graph and task_graph_runtime for use in closure - let task_graph_runtime = task_graph_runtime.clone(); - let task_graph = task_graph.clone(); - - Ok(async move { - let value = task_graph_runtime - .clone() - .get_node_value(task_graph, node_value_index, inline_datasets.clone()) - .await?; - - Ok::<_, VegaFusionError>(ResponseTaskValue { - variable: Some(var), - scope, - value: Some(ProtoTaskValue::try_from(&value).unwrap()), - }) - }) - }) - .collect::>>()?; - - future::try_join_all(response_value_futures).await - } - - pub async fn query_request_message(&self, request: QueryRequest) -> Result { - match request.request { - Some(query_request::Request::TaskGraphValues(task_graph_values)) => { - let task_graph = Arc::new(task_graph_values.task_graph.unwrap()); - let indices = &task_graph_values.indices; - let inline_datasets = - Self::decode_inline_datasets(task_graph_values.inline_datasets)?; - - match self - .query_request(task_graph, indices.as_slice(), &inline_datasets) - .await - { - Ok(response_values) => { - let response_msg = QueryResult { - response: Some(query_result::Response::TaskGraphValues( - TaskGraphValueResponse { response_values }, - )), - }; - Ok(response_msg) - } - Err(e) => { - let response_msg = QueryResult { - response: Some(query_result::Response::Error(Error { - errorkind: Some(Errorkind::Error(TaskGraphValueError { - msg: e.to_string(), - })), - })), - }; - Ok(response_msg) - } - } - } - _ => Err(VegaFusionError::internal( - "Invalid VegaFusionRuntimeRequest request", - )), - } - } - - /// request_bytes should be encoding of a VegaFusionRuntimeRequest - /// returned value is encoding of a VegaFusionRuntimeResponse - pub async fn query_request_bytes(&self, request_bytes: &[u8]) -> Result> { - // Decode request - let request = QueryRequest::decode(request_bytes).unwrap(); - let response_msg = self.query_request_message(request).await?; - - let mut buf: Vec = Vec::with_capacity(response_msg.encoded_len()); - response_msg - .encode(&mut buf) - .external("Failed to encode response")?; - Ok(buf) - } - - pub async fn pre_transform_spec_request( - &self, - request: PreTransformSpecRequest, - ) -> Result { - // Extract options - let (row_limit, preserve_interactivity, inline_pretransform_datasets, keep_variables) = - if let Some(opts) = request.opts { - // Convert keep_variables to ScopedVariable - let keep_variables: Vec = opts - .keep_variables - .into_iter() - .map(|var| (var.variable.unwrap(), var.scope)) - .collect(); - ( - opts.row_limit, - opts.preserve_interactivity, - opts.inline_datasets, - keep_variables, - ) - } else { - (None, true, Default::default(), Default::default()) - }; - - let inline_datasets = Self::decode_inline_datasets(inline_pretransform_datasets)?; - - // Parse spec - let spec: ChartSpec = serde_json::from_str(&request.spec)?; - let local_tz = request.local_tz; - let output_tz = request.output_tz; - - let (transformed_spec, warnings) = self - .pre_transform_spec( - &spec, - &local_tz, - &output_tz, - row_limit, - preserve_interactivity, - inline_datasets, - keep_variables, - ) - .await?; - - // Build result - let response = PreTransformSpecResult { - result: Some(pre_transform_spec_result::Result::Response( - PreTransformSpecResponse { - spec: serde_json::to_string(&transformed_spec) - .with_context(|| "Failed to convert chart spec to string")?, - warnings, - }, - )), - }; - - Ok(response) - } - - fn decode_inline_datasets( - inline_pretransform_datasets: Vec, - ) -> Result> { - let inline_datasets = inline_pretransform_datasets - .iter() - .map(|inline_dataset| { - let dataset = VegaFusionDataset::from_table_ipc_bytes(&inline_dataset.table)?; - Ok((inline_dataset.name.clone(), dataset)) - }) - .collect::>>()?; - Ok(inline_datasets) - } - - #[allow(clippy::too_many_arguments)] - pub async fn pre_transform_spec( - &self, - spec: &ChartSpec, - local_tz: &str, - default_input_tz: &Option, - row_limit: Option, - preserve_interactivity: bool, - inline_datasets: HashMap, - keep_variables: Vec, - ) -> Result<(ChartSpec, Vec)> { - let input_spec = spec; - - let (plan, init) = self - .perform_pre_transform_spec( - spec, - local_tz, - default_input_tz, - preserve_interactivity, - inline_datasets, - keep_variables, - ) - .await?; - - apply_pre_transform_datasets(input_spec, &plan, init, row_limit) - } - - pub async fn pre_transform_values_request( - &self, - request: PreTransformValuesRequest, - ) -> Result { - // Extract row limit - let row_limit = request.opts.as_ref().and_then(|opts| opts.row_limit); - - // Extract and deserialize inline datasets - let inline_pretransform_datasets = request - .opts - .clone() - .map(|opts| opts.inline_datasets) - .unwrap_or_default(); - - let inline_datasets = Self::decode_inline_datasets(inline_pretransform_datasets)?; - - // Extract requested variables - let variables: Vec = request - .opts - .map(|opts| opts.variables) - .unwrap_or_default() - .into_iter() - .map(|var| (var.variable.unwrap(), var.scope)) - .collect(); - - // Parse spec - let spec_string = request.spec; - let spec: ChartSpec = serde_json::from_str(&spec_string)?; - let local_tz = request.local_tz; - let default_input_tz = request.default_input_tz; - - let (values, warnings) = self - .pre_transform_values( - &spec, - variables.as_slice(), - &local_tz, - &default_input_tz, - row_limit, - inline_datasets, - ) - .await?; - - let response_values: Vec<_> = values - .iter() - .zip(&variables) - .map(|(value, var)| { - let proto_value = ProtoTaskValue::try_from(value)?; - Ok(ResponseTaskValue { - variable: Some(var.0.clone()), - scope: var.1.clone(), - value: Some(proto_value), - }) - }) - .collect::>>()?; - - // Build result - let result = PreTransformValuesResult { - result: Some(pre_transform_values_result::Result::Response( - PreTransformValuesResponse { - values: response_values, - warnings, - }, - )), - }; - - Ok(result) - } - - pub async fn pre_transform_values( - &self, - spec: &ChartSpec, - variables: &[ScopedVariable], - local_tz: &str, - default_input_tz: &Option, - row_limit: Option, - inline_datasets: HashMap, - ) -> Result<(Vec, Vec)> { - // Check that requested variables exist - for var in variables { - let scope = var.1.as_slice(); - match &var.0.ns() { - VariableNamespace::Signal => { - if spec.get_nested_signal(scope, &var.0.name).is_err() { - return Err(VegaFusionError::pre_transform(format!( - "No signal named {} with scope {:?}", - var.0.name, scope - ))); - } - } - VariableNamespace::Data => { - if spec.get_nested_data(scope, &var.0.name).is_err() { - return Err(VegaFusionError::pre_transform(format!( - "No dataset named {} with scope {:?}", - var.0.name, scope - ))); - } - } - VariableNamespace::Scale => { - return Err(VegaFusionError::pre_transform(format!( - "pre_transform_values does not support scale variable {:?}", - var.0 - ))) - } - } - } - - // Create spec plan - let plan = SpecPlan::try_new( - spec, - &PlannerConfig { - stringify_local_datetimes: false, - extract_inline_data: true, - split_domain_data: false, - projection_pushdown: false, - allow_client_to_server_comms: true, - keep_variables: Vec::from(variables), - ..Default::default() - }, - )?; - - // Extract inline dataset fingerprints - let dataset_fingerprints = inline_datasets - .iter() - .map(|(k, ds)| (k.clone(), ds.fingerprint())) - .collect::>(); - - // Create task graph for server spec - let tz_config = TzConfig { - local_tz: local_tz.to_string(), - default_input_tz: default_input_tz.clone(), - }; - let task_scope = plan.server_spec.to_task_scope().unwrap(); - let tasks = plan - .server_spec - .to_tasks(&tz_config, &dataset_fingerprints)?; - let task_graph = TaskGraph::new(tasks, &task_scope).unwrap(); - let task_graph_mapping = task_graph.build_mapping(); - - let mut warnings: Vec = Vec::new(); - - // Add planner warnings - for planner_warning in &plan.warnings { - warnings.push(PreTransformValuesWarning { - warning_type: Some(ValuesWarningType::Planner(PlannerWarning { - message: planner_warning.message(), - })), - }); - } - - // Gather the values of requested variables - let mut values: Vec = Vec::new(); - for var in variables { - let node_index = if let Some(node_index) = task_graph_mapping.get(var) { - node_index - } else { - return Err(VegaFusionError::pre_transform(format!( - "Requested variable {var:?}\n requires transforms or signal \ - expressions that are not yet supported" - ))); - }; - - let value = self - .get_node_value( - Arc::new(task_graph.clone()), - node_index, - inline_datasets.clone(), - ) - .await?; - - // Apply row_limit - let value = if let (Some(row_limit), TaskValue::Table(table)) = (row_limit, &value) { - if table.num_rows() > row_limit as usize { - warnings.push(PreTransformValuesWarning { - warning_type: Some(ValuesWarningType::RowLimit( - PreTransformRowLimitWarning { - datasets: vec![var.0.clone()], - }, - )), - }); - TaskValue::Table(table.head(row_limit as usize)) - } else { - value - } - } else { - value - }; - - values.push(value); - } - - Ok((values, warnings)) - } - - pub async fn pre_transform_extract_request( - &self, - request: PreTransformExtractRequest, - ) -> Result { - // Extract and deserialize inline datasets - let inline_pretransform_datasets = request.inline_datasets; - let inline_datasets = Self::decode_inline_datasets(inline_pretransform_datasets)?; - - // Parse spec - let spec_string = request.spec; - let spec: ChartSpec = serde_json::from_str(&spec_string)?; - let local_tz = request.local_tz; - let default_input_tz = request.default_input_tz; - let preserve_interactivity = request.preserve_interactivity; - let extract_threshold = request.extract_threshold; - let keep_variables: Vec = request - .keep_variables - .into_iter() - .map(|var| (var.variable.unwrap(), var.scope)) - .collect(); - - let (spec, datasets, warnings) = self - .pre_transform_extract( - &spec, - &local_tz, - &default_input_tz, - preserve_interactivity, - extract_threshold as usize, - inline_datasets, - keep_variables, - ) - .await?; - - // Build Response - let proto_datasets = datasets - .into_iter() - .map(|(name, scope, table)| { - Ok(ProtoPreTransformExtractDataset { - name, - scope, - table: table.to_ipc_bytes()?, - }) - }) - .collect::>>()?; - - let response = PreTransformExtractResponse { - spec: serde_json::to_string(&spec)?, - datasets: proto_datasets, - warnings, - }; - - // Build result - let result = PreTransformExtractResult { - result: Some(pre_transform_extract_result::Result::Response(response)), - }; - - Ok(result) - } - - #[allow(clippy::too_many_arguments)] - pub async fn pre_transform_extract( - &self, - spec: &ChartSpec, - local_tz: &str, - default_input_tz: &Option, - preserve_interactivity: bool, - extract_threshold: usize, - inline_datasets: HashMap, - keep_variables: Vec, - ) -> Result<( - ChartSpec, - Vec, - Vec, - )> { - let input_spec = spec; - - let (plan, init) = self - .perform_pre_transform_spec( - spec, - local_tz, - default_input_tz, - preserve_interactivity, - inline_datasets, - keep_variables, - ) - .await?; - - // Update client spec with server values - let mut spec = plan.client_spec.clone(); - let mut datasets: Vec = Vec::new(); - - for export_update in init { - let scope = export_update.scope.clone(); - let name = export_update.name.as_str(); - match export_update.namespace { - ExportUpdateNamespace::Signal => { - // Always inline signal values - let signal = spec.get_nested_signal_mut(&scope, name)?; - signal.value = MissingNullOrValue::Value(export_update.value.to_json()?); - } - ExportUpdateNamespace::Data => { - let data = spec.get_nested_data_mut(&scope, name)?; - - // If the input dataset includes inline values and no transforms, - // copy the input JSON directly to avoid the case where round-tripping - // through Arrow homogenizes mixed type arrays. - // E.g. round tripping may turn [1, "two"] into ["1", "two"] - let input_values = - input_spec - .get_nested_data(&scope, name) - .ok() - .and_then(|data| { - if data.transform.is_empty() { - data.values.clone() - } else { - None - } - }); - if let Some(input_values) = input_values { - // Set inline value - data.values = Some(input_values); - } else if let TaskValue::Table(table) = export_update.value { - if table.num_rows() <= extract_threshold { - // Inline small tables - data.values = Some(table.to_json()?); - } else { - // Extract non-small tables - datasets.push((export_update.name, export_update.scope, table)); - } - } else { - return Err(VegaFusionError::internal( - "Expected Data TaskValue to be an Table", - )); - } - } - } - } - - // Destringify datetime strings in selection store datasets - destringify_selection_datetimes(&mut spec)?; - - // Build warnings - let mut warnings: Vec = Vec::new(); - - // Add planner warnings - for planner_warning in &plan.warnings { - warnings.push(PreTransformExtractWarning { - warning_type: Some(pre_transform_extract_warning::WarningType::Planner( - PlannerWarning { - message: planner_warning.message(), - }, - )), - }); - } - - Ok((spec, datasets, warnings)) - } - - async fn perform_pre_transform_spec( - &self, - spec: &ChartSpec, - local_tz: &str, - default_input_tz: &Option, - preserve_interactivity: bool, - inline_datasets: HashMap, - keep_variables: Vec, - ) -> Result<(SpecPlan, Vec)> { - // Create spec plan - let plan = SpecPlan::try_new( - spec, - &PlannerConfig::pre_transformed_spec_config(preserve_interactivity, keep_variables), - )?; - // println!("pre transform client_spec: {}", serde_json::to_string_pretty(&plan.client_spec).unwrap()); - // println!("pre transform server_spec: {}", serde_json::to_string_pretty(&plan.server_spec).unwrap()); - // println!("pre transform comm plan: {:#?}", plan.comm_plan); - - // Extract inline dataset fingerprints - let dataset_fingerprints = inline_datasets - .iter() - .map(|(k, ds)| (k.clone(), ds.fingerprint())) - .collect::>(); - - // Create task graph for server spec - let tz_config = TzConfig { - local_tz: local_tz.to_string(), - default_input_tz: default_input_tz.clone(), - }; - let task_scope = plan.server_spec.to_task_scope().unwrap(); - let tasks = plan - .server_spec - .to_tasks(&tz_config, &dataset_fingerprints) - .unwrap(); - let task_graph = TaskGraph::new(tasks, &task_scope).unwrap(); - let task_graph_mapping = task_graph.build_mapping(); - - // Gather values of server-to-client values - let mut init = Vec::new(); - for var in &plan.comm_plan.server_to_client { - let node_index = task_graph_mapping - .get(var) - .with_context(|| format!("Failed to lookup variable '{var:?}'"))?; - let value = self - .get_node_value( - Arc::new(task_graph.clone()), - node_index, - inline_datasets.clone(), - ) - .await - .with_context(|| "Failed to get node value")?; - - init.push(ExportUpdateArrow { - namespace: ExportUpdateNamespace::try_from(var.0.namespace()).unwrap(), - name: var.0.name.clone(), - scope: var.1.clone(), - value, - }); - } - Ok((plan, init)) - } - pub async fn clear_cache(&self) { self.cache.clear().await; } @@ -711,12 +70,16 @@ impl VegaFusionRuntime { #[async_trait::async_trait] impl VegaFusionRuntimeTrait for VegaFusionRuntime { + fn as_any(&self) -> &dyn Any { + self + } + async fn query_request( &self, task_graph: Arc, indices: &[NodeValueIndex], inline_datasets: &HashMap, - ) -> Result> { + ) -> Result> { // Clone task_graph and task_graph_runtime for use in closure let task_graph_runtime = self.clone(); let response_value_futures: Vec<_> = indices @@ -733,7 +96,7 @@ impl VegaFusionRuntimeTrait for VegaFusionRuntime { ) })?; let task = node.task(); - let var = match node_value_index.output_index { + let variable = match node_value_index.output_index { None => task.variable().clone(), Some(output_index) => task.output_vars()[output_index as usize].clone(), }; @@ -750,10 +113,10 @@ impl VegaFusionRuntimeTrait for VegaFusionRuntime { .get_node_value(task_graph, node_value_index, inline_datasets.clone()) .await?; - Ok::<_, VegaFusionError>(ResponseTaskValue { - variable: Some(var), + Ok::<_, VegaFusionError>(NamedTaskValue { + variable, scope, - value: Some(ProtoTaskValue::try_from(&value).unwrap()), + value, }) }) }) diff --git a/vegafusion-runtime/tests/test_destringify_selection_datasets.rs b/vegafusion-runtime/tests/test_destringify_selection_datasets.rs index 5872cb657..b54a00044 100644 --- a/vegafusion-runtime/tests/test_destringify_selection_datasets.rs +++ b/vegafusion-runtime/tests/test_destringify_selection_datasets.rs @@ -8,6 +8,8 @@ mod tests { use crate::crate_dir; use std::fs; use std::sync::Arc; + use vegafusion_core::proto::gen::pretransform::PreTransformSpecOpts; + use vegafusion_core::runtime::VegaFusionRuntimeTrait; use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::spec::transform::TransformSpec; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; @@ -33,12 +35,14 @@ mod tests { let (chart_spec, _warnings) = runtime .pre_transform_spec( &spec, - "UTC", - &None, - None, - true, - Default::default(), - Default::default(), + &Default::default(), + &PreTransformSpecOpts { + keep_variables: vec![], + row_limit: None, + local_tz: "UTC".to_string(), + default_input_tz: None, + preserve_interactivity: true, + }, ) .await .unwrap(); diff --git a/vegafusion-runtime/tests/test_image_comparison.rs b/vegafusion-runtime/tests/test_image_comparison.rs index 005dfe15f..b69a5863f 100644 --- a/vegafusion-runtime/tests/test_image_comparison.rs +++ b/vegafusion-runtime/tests/test_image_comparison.rs @@ -14,14 +14,14 @@ use std::sync::Arc; use tokio::runtime::Runtime; use vegafusion_common::data::scalar::ScalarValueHelpers; use vegafusion_common::data::table::VegaFusionTable; +use vegafusion_core::runtime::VegaFusionRuntimeTrait; use vegafusion_core::planning::plan::{PlannerConfig, SpecPlan}; use vegafusion_core::planning::watch::{ ExportUpdateBatch, ExportUpdateJSON, ExportUpdateNamespace, Watch, WatchNamespace, WatchPlan, }; -use vegafusion_core::proto::gen::pretransform::{PreTransformSpecOpts, PreTransformSpecRequest}; -use vegafusion_core::proto::gen::services::pre_transform_spec_result; +use vegafusion_core::proto::gen::pretransform::PreTransformSpecOpts; use vegafusion_core::proto::gen::tasks::{TaskGraph, TzConfig}; use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::task_graph::graph::ScopedVariable; @@ -1174,7 +1174,7 @@ mod test_image_comparison_window { mod test_pre_transform_inline { use super::*; use crate::util::datasets::vega_json_dataset_async; - use vegafusion_core::proto::gen::tasks::InlineDataset; + use vegafusion_core::{data::dataset::VegaFusionDataset, runtime::VegaFusionRuntimeTrait}; use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; #[tokio::test] @@ -1199,35 +1199,26 @@ mod test_pre_transform_inline { // Load csv file as inline dataset let movies_table = vega_json_dataset_async("movies").await; - let inline_datasets = vec![InlineDataset { - name: "movies".to_string(), - table: movies_table.to_ipc_bytes().unwrap(), - }]; + let inline_datasets = HashMap::from([( + "movies".to_string(), + VegaFusionDataset::from_table(movies_table, None).unwrap(), + )]); // Pre-transform specs let opts = PreTransformSpecOpts { + local_tz, + default_input_tz: None, row_limit: None, - inline_datasets, preserve_interactivity: true, ..Default::default() }; - let request = PreTransformSpecRequest { - spec: serde_json::to_string(&inline_spec).unwrap(), - local_tz, - output_tz: None, - opts: Some(opts), - }; - let response = runtime.pre_transform_spec_request(request).await.unwrap(); - let pre_transform_spec: ChartSpec = match response.result.unwrap() { - pre_transform_spec_result::Result::Error(_) => { - panic!("Pre-transform error") - } - pre_transform_spec_result::Result::Response(response) => { - // println!("Warnings: {:#?}", response.warnings); - serde_json::from_str(&response.spec).unwrap() - } - }; + let response = runtime + .pre_transform_spec(&inline_spec, &inline_datasets, &opts) + .await + .unwrap(); + + let pre_transform_spec: ChartSpec = response.0; // println!( // "pre-transformed: {}", @@ -1360,28 +1351,17 @@ async fn check_pre_transform_spec_from_files(spec_name: &str, tolerance: f64) { // Pre-transform specs let opts = PreTransformSpecOpts { + local_tz, + default_input_tz: None, row_limit: None, - inline_datasets: vec![], preserve_interactivity: true, ..Default::default() }; - let request = PreTransformSpecRequest { - spec: serde_json::to_string(&full_spec).unwrap(), - local_tz, - output_tz: None, - opts: Some(opts), - }; - let response = runtime.pre_transform_spec_request(request).await.unwrap(); - let pre_transform_spec: ChartSpec = match response.result.unwrap() { - pre_transform_spec_result::Result::Error(_) => { - panic!("Pre-transform error") - } - pre_transform_spec_result::Result::Response(response) => { - // println!("Warnings: {:#?}", response.warnings); - serde_json::from_str(&response.spec).unwrap() - } - }; + let (pre_transform_spec, _warnings) = runtime + .pre_transform_spec(&full_spec, &Default::default(), &opts) + .await + .unwrap(); // println!( // "pre-transformed: {}", diff --git a/vegafusion-runtime/tests/test_pre_transform_extract.rs b/vegafusion-runtime/tests/test_pre_transform_extract.rs index 547dd0cdb..be01336e9 100644 --- a/vegafusion-runtime/tests/test_pre_transform_extract.rs +++ b/vegafusion-runtime/tests/test_pre_transform_extract.rs @@ -7,12 +7,14 @@ fn crate_dir() -> String { mod tests { use crate::crate_dir; use serde_json::json; + use vegafusion_core::proto::gen::pretransform::PreTransformExtractOpts; use std::fs; use std::sync::Arc; use vegafusion_core::spec::chart::ChartSpec; + use vegafusion_core::runtime::VegaFusionRuntimeTrait; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; @@ -36,12 +38,14 @@ mod tests { let (tx_spec, datasets, warnings) = runtime .pre_transform_extract( &spec, - "UTC", - &None, - true, - 20, - Default::default(), - Default::default(), + &Default::default(), + &PreTransformExtractOpts { + keep_variables: vec![], + extract_threshold: 20, + preserve_interactivity: false, + local_tz: "UTC".to_string(), + default_input_tz: None, + }, ) .await .unwrap(); @@ -51,10 +55,10 @@ mod tests { // Check single extracted dataset assert_eq!(datasets.len(), 1); - let dataset = datasets[0].clone(); - assert_eq!(dataset.0.as_str(), "source_0"); - assert_eq!(dataset.1, Vec::::new()); - assert_eq!(dataset.2.num_rows(), 379); + let dataset = &datasets[0]; + assert_eq!(dataset.name.as_str(), "source_0"); + assert_eq!(dataset.scope, Vec::::new()); + assert_eq!(dataset.table.num_rows(), 379); // Check that source_0 is included as a stub in the transformed spec let source_0 = &tx_spec.data[0]; diff --git a/vegafusion-runtime/tests/test_pre_transform_keep_variables.rs b/vegafusion-runtime/tests/test_pre_transform_keep_variables.rs index 32e5330c9..3f7ae24ef 100644 --- a/vegafusion-runtime/tests/test_pre_transform_keep_variables.rs +++ b/vegafusion-runtime/tests/test_pre_transform_keep_variables.rs @@ -10,10 +10,12 @@ mod tests { use std::fs; use std::sync::Arc; use vegafusion_common::error::VegaFusionError; + use vegafusion_core::proto::gen::pretransform::{PreTransformSpecOpts, PreTransformVariable}; use vegafusion_core::proto::gen::tasks::Variable; use vegafusion_core::spec::chart::ChartSpec; + use vegafusion_core::runtime::VegaFusionRuntimeTrait; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; @@ -37,12 +39,14 @@ mod tests { let (tx_spec, warnings) = runtime .pre_transform_spec( &spec, - "UTC", - &None, - None, - true, - Default::default(), - Default::default(), + &Default::default(), + &PreTransformSpecOpts { + keep_variables: vec![], + row_limit: None, + local_tz: "UTC".to_string(), + default_input_tz: None, + preserve_interactivity: true, + }, ) .await .unwrap(); @@ -57,15 +61,19 @@ mod tests { let (tx_spec, warnings) = runtime .pre_transform_spec( &spec, - "UTC", - &None, - None, - true, - Default::default(), - vec![( - Variable::new_signal("layer_0_layer_0_bin_maxbins_10_IMDB_Rating_bins"), - Vec::new(), - )], + &Default::default(), + &PreTransformSpecOpts { + keep_variables: vec![PreTransformVariable { + variable: Some(Variable::new_signal( + "layer_0_layer_0_bin_maxbins_10_IMDB_Rating_bins", + )), + scope: Vec::new(), + }], + row_limit: None, + local_tz: "UTC".to_string(), + default_input_tz: None, + preserve_interactivity: true, + }, ) .await .unwrap(); @@ -83,12 +91,17 @@ mod tests { let pre_transform_result = runtime .pre_transform_spec( &spec, - "UTC", - &None, - None, - true, - Default::default(), - vec![(Variable::new_signal("does_not_exist"), Vec::new())], + &Default::default(), + &PreTransformSpecOpts { + keep_variables: vec![PreTransformVariable { + variable: Some(Variable::new_signal("does_not_exist")), + scope: Vec::new(), + }], + row_limit: None, + local_tz: "UTC".to_string(), + default_input_tz: None, + preserve_interactivity: true, + }, ) .await; diff --git a/vegafusion-runtime/tests/test_pre_transform_values.rs b/vegafusion-runtime/tests/test_pre_transform_values.rs index ae9742309..47332cd2d 100644 --- a/vegafusion-runtime/tests/test_pre_transform_values.rs +++ b/vegafusion-runtime/tests/test_pre_transform_values.rs @@ -25,7 +25,10 @@ mod tests { use vegafusion_common::error::VegaFusionError; use vegafusion_core::data::dataset::VegaFusionDataset; use vegafusion_core::proto::gen::pretransform::pre_transform_values_warning::WarningType; + use vegafusion_core::proto::gen::pretransform::PreTransformValuesOpts; + use vegafusion_core::proto::gen::pretransform::PreTransformVariable; use vegafusion_core::proto::gen::tasks::Variable; + use vegafusion_core::runtime::VegaFusionRuntimeTrait; use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::spec::values::StringOrSignalSpec; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; @@ -48,11 +51,16 @@ mod tests { let (values, warnings) = runtime .pre_transform_values( &spec, - &[(Variable::new_data("source_0"), vec![])], - "UTC", - &None, - None, - Default::default(), + &Default::default(), + &PreTransformValuesOpts { + variables: vec![PreTransformVariable { + variable: Some(Variable::new_data("source_0")), + scope: vec![], + }], + row_limit: None, + local_tz: "UTC".to_string(), + default_input_tz: None, + }, ) .await .unwrap(); @@ -99,11 +107,16 @@ mod tests { let (values, warnings) = runtime .pre_transform_values( &spec, - &[(Variable::new_data("source_0"), vec![])], - "UTC", - &None, - Some(3), - Default::default(), + &Default::default(), + &PreTransformValuesOpts { + variables: vec![PreTransformVariable { + variable: Some(Variable::new_data("source_0")), + scope: vec![], + }], + row_limit: Some(3), + local_tz: "UTC".to_string(), + default_input_tz: None, + }, ) .await .unwrap(); @@ -151,18 +164,23 @@ mod tests { let result = runtime .pre_transform_values( &spec, - &[(Variable::new_data("source_0"), vec![])], - "UTC", - &None, - None, - Default::default(), + &Default::default(), + &PreTransformValuesOpts { + variables: vec![PreTransformVariable { + variable: Some(Variable::new_data("source_0")), + scope: vec![], + }], + row_limit: None, + local_tz: "UTC".to_string(), + default_input_tz: None, + }, ) .await; if let Err(VegaFusionError::PreTransformError(err, _)) = result { assert_eq!( err, - "Requested variable (Variable { name: \"source_0\", namespace: Data }, [])\n \ + "Requested variable PreTransformVariable { variable: Some(Variable { name: \"source_0\", namespace: Data }), scope: [] }\n \ requires transforms or signal expressions that are not yet supported" ) } else { @@ -173,11 +191,16 @@ mod tests { let result = runtime .pre_transform_values( &spec, - &[(Variable::new_data("bogus_0"), vec![])], - "UTC", - &None, - None, - Default::default(), + &Default::default(), + &PreTransformValuesOpts { + variables: vec![PreTransformVariable { + variable: Some(Variable::new_data("bogus_0")), + scope: vec![], + }], + row_limit: None, + local_tz: "UTC".to_string(), + default_input_tz: None, + }, ) .await; @@ -218,11 +241,16 @@ mod tests { let (values, warnings) = runtime .pre_transform_values( &spec, - &[(Variable::new_data("source_0"), vec![])], - "UTC", - &None, - None, - inline_datasets, + &inline_datasets, + &PreTransformValuesOpts { + variables: vec![PreTransformVariable { + variable: Some(Variable::new_data("source_0")), + scope: vec![], + }], + row_limit: None, + local_tz: "UTC".to_string(), + default_input_tz: None, + }, ) .await .unwrap(); @@ -266,11 +294,16 @@ mod tests { let (values, warnings) = runtime .pre_transform_values( &spec, - &[(Variable::new_data("data_3"), vec![])], - "UTC", - &None, - None, - Default::default(), + &Default::default(), + &PreTransformValuesOpts { + variables: vec![PreTransformVariable { + variable: Some(Variable::new_data("data_3")), + scope: vec![], + }], + row_limit: None, + local_tz: "UTC".to_string(), + default_input_tz: None, + }, ) .await .unwrap(); @@ -315,14 +348,22 @@ mod tests { let (values, warnings) = runtime .pre_transform_values( &spec, - &[ - (Variable::new_data("click_selected"), vec![]), - (Variable::new_data("drag_selected"), vec![]), - ], - "UTC", - &None, - None, - Default::default(), + &Default::default(), + &PreTransformValuesOpts { + variables: vec![ + PreTransformVariable { + variable: Some(Variable::new_data("click_selected")), + scope: vec![], + }, + PreTransformVariable { + variable: Some(Variable::new_data("drag_selected")), + scope: vec![], + }, + ], + row_limit: None, + local_tz: "UTC".to_string(), + default_input_tz: None, + }, ) .await .unwrap(); @@ -401,11 +442,16 @@ mod tests { let (values, warnings) = runtime .pre_transform_values( &spec, - &[(Variable::new_data("source_0"), vec![])], - "UTC", - &None, - None, - Default::default(), + &Default::default(), + &PreTransformValuesOpts { + variables: vec![PreTransformVariable { + variable: Some(Variable::new_data("source_0")), + scope: vec![], + }], + row_limit: None, + local_tz: "UTC".to_string(), + default_input_tz: None, + }, ) .await .unwrap(); diff --git a/vegafusion-runtime/tests/test_stringify_datetimes.rs b/vegafusion-runtime/tests/test_stringify_datetimes.rs index e21420675..f1ed21e18 100644 --- a/vegafusion-runtime/tests/test_stringify_datetimes.rs +++ b/vegafusion-runtime/tests/test_stringify_datetimes.rs @@ -16,6 +16,8 @@ mod test_stringify_datetimes { use rstest::rstest; use std::fs; use std::sync::Arc; + use vegafusion_core::proto::gen::pretransform::PreTransformSpecOpts; + use vegafusion_core::runtime::VegaFusionRuntimeTrait; use vegafusion_core::spec::chart::ChartSpec; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; @@ -90,12 +92,14 @@ mod test_stringify_datetimes { let (spec, _warnings) = runtime .pre_transform_spec( &spec, - &local_tz, - &Some(default_input_tz.to_string()), - None, - true, - Default::default(), - Default::default(), + &Default::default(), + &PreTransformSpecOpts { + local_tz: local_tz.to_string(), + default_input_tz: Some(default_input_tz.to_string()), + keep_variables: vec![], + row_limit: None, + preserve_interactivity: true, + }, ) .await .unwrap(); @@ -147,12 +151,14 @@ mod test_stringify_datetimes { let (spec, _warnings) = runtime .pre_transform_spec( &spec, - &local_tz, - &Some(default_input_tz), - None, - true, - Default::default(), - Default::default(), + &Default::default(), + &PreTransformSpecOpts { + local_tz: local_tz.to_string(), + default_input_tz: Some(default_input_tz.to_string()), + keep_variables: vec![], + row_limit: None, + preserve_interactivity: true, + }, ) .await .unwrap(); @@ -232,12 +238,14 @@ mod test_stringify_datetimes { let (spec, _warnings) = runtime .pre_transform_spec( &spec, - local_tz, - &Some(default_input_tz.to_string()), - None, - true, - Default::default(), - Default::default(), + &Default::default(), + &PreTransformSpecOpts { + local_tz: local_tz.to_string(), + default_input_tz: Some(default_input_tz.to_string()), + keep_variables: vec![], + row_limit: None, + preserve_interactivity: true, + }, ) .await .unwrap(); @@ -299,12 +307,14 @@ mod test_stringify_datetimes { let (spec, _warnings) = TOKIO_RUNTIME .block_on(runtime.pre_transform_spec( &spec, - local_tz, - &Some(default_input_tz.to_string()), - None, - true, - Default::default(), - Default::default(), + &Default::default(), + &PreTransformSpecOpts { + local_tz: local_tz.to_string(), + default_input_tz: Some(default_input_tz.to_string()), + keep_variables: vec![], + row_limit: None, + preserve_interactivity: true, + }, )) .unwrap(); @@ -346,12 +356,14 @@ mod test_stringify_datetimes { let (spec, _warnings) = runtime .pre_transform_spec( &spec, - "UTC", - &None, - None, - true, - Default::default(), - Default::default(), + &Default::default(), + &PreTransformSpecOpts { + local_tz: "UTC".to_string(), + default_input_tz: None, + keep_variables: vec![], + row_limit: None, + preserve_interactivity: true, + }, ) .await .unwrap(); diff --git a/vegafusion-server/Cargo.toml b/vegafusion-server/Cargo.toml index f876f6e7c..586364f13 100644 --- a/vegafusion-server/Cargo.toml +++ b/vegafusion-server/Cargo.toml @@ -30,6 +30,9 @@ prost-build = "0.12.1" [dependencies.prost] workspace = true +[dependencies.serde_json] +workspace = true + [dependencies.vegafusion-common] path = "../vegafusion-common" version = "1.6.9" diff --git a/vegafusion-server/src/main.rs b/vegafusion-server/src/main.rs index 3b5c79960..f49e7eb7e 100644 --- a/vegafusion-server/src/main.rs +++ b/vegafusion-server/src/main.rs @@ -1,20 +1,30 @@ use std::sync::Arc; use tonic::{transport::Server, Request, Response, Status}; use vegafusion_core::error::{ResultWithContext, VegaFusionError}; +use vegafusion_core::proto::gen::errors::error::Errorkind; +use vegafusion_core::proto::gen::errors::{Error, TaskGraphValueError}; use vegafusion_core::proto::gen::services::vega_fusion_runtime_server::{ VegaFusionRuntime as TonicVegaFusionRuntime, VegaFusionRuntimeServer as TonicVegaFusionRuntimeServer, }; use vegafusion_core::proto::gen::services::{ - PreTransformExtractResult, PreTransformSpecResult, PreTransformValuesResult, QueryRequest, - QueryResult, + pre_transform_extract_result, pre_transform_spec_result, pre_transform_values_result, + query_request, query_result, PreTransformExtractResult, PreTransformSpecResult, + PreTransformValuesResult, QueryRequest, QueryResult, }; +use vegafusion_core::proto::gen::tasks::TaskGraphValueResponse; +use vegafusion_core::proto::gen::tasks::{ResponseTaskValue, TaskValue as ProtoTaskValue}; +use vegafusion_core::runtime::{decode_inline_datasets, VegaFusionRuntimeTrait}; +use vegafusion_core::spec::chart::ChartSpec; +use vegafusion_core::task_graph::graph::ScopedVariable; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; use clap::Parser; use regex::Regex; use vegafusion_core::proto::gen::pretransform::{ - PreTransformExtractRequest, PreTransformSpecRequest, PreTransformValuesRequest, + PreTransformExtractDataset, PreTransformExtractRequest, PreTransformExtractResponse, + PreTransformSpecOpts, PreTransformSpecRequest, PreTransformSpecResponse, + PreTransformValuesOpts, PreTransformValuesRequest, PreTransformValuesResponse, }; use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; @@ -27,6 +37,196 @@ impl VegaFusionRuntimeGrpc { pub fn new(runtime: VegaFusionRuntime) -> VegaFusionRuntimeGrpc { VegaFusionRuntimeGrpc { runtime } } + + async fn query_request_message( + &self, + request: QueryRequest, + ) -> Result { + match request.request { + Some(query_request::Request::TaskGraphValues(task_graph_values)) => { + let task_graph = Arc::new(task_graph_values.task_graph.unwrap()); + let indices = &task_graph_values.indices; + let inline_datasets = decode_inline_datasets(task_graph_values.inline_datasets)?; + + match self + .runtime + .query_request(task_graph, indices.as_slice(), &inline_datasets) + .await + { + Ok(response_values) => { + let response_msg = QueryResult { + response: Some(query_result::Response::TaskGraphValues( + TaskGraphValueResponse { + response_values: response_values + .into_iter() + .map(|v| v.into()) + .collect::>(), + }, + )), + }; + Ok(response_msg) + } + Err(e) => { + let response_msg = QueryResult { + response: Some(query_result::Response::Error(Error { + errorkind: Some(Errorkind::Error(TaskGraphValueError { + msg: e.to_string(), + })), + })), + }; + Ok(response_msg) + } + } + } + _ => Err(VegaFusionError::internal( + "Invalid VegaFusionRuntimeRequest request", + )), + } + } + + async fn pre_transform_spec_request( + &self, + request: PreTransformSpecRequest, + ) -> Result { + // Handle default options + let opts = request.opts.unwrap_or_else(|| PreTransformSpecOpts { + row_limit: None, + preserve_interactivity: true, + keep_variables: vec![], + local_tz: "UTC".to_string(), + default_input_tz: None, + }); + + // Decode inline datasets to VegaFusionDatasets + let inline_datasets = decode_inline_datasets(request.inline_datasets)?; + + // Parse spec + let spec: ChartSpec = serde_json::from_str(&request.spec)?; + + // Apply pre-transform spec + let (transformed_spec, warnings) = self + .runtime + .pre_transform_spec(&spec, &inline_datasets, &opts) + .await?; + + // Build result + let response = PreTransformSpecResult { + result: Some(pre_transform_spec_result::Result::Response( + PreTransformSpecResponse { + spec: serde_json::to_string(&transformed_spec) + .with_context(|| "Failed to convert chart spec to string")?, + warnings, + }, + )), + }; + + Ok(response) + } + + async fn pre_transform_extract_request( + &self, + request: PreTransformExtractRequest, + ) -> Result { + // Extract and deserialize inline datasets + let inline_pretransform_datasets = request.inline_datasets; + let inline_datasets = decode_inline_datasets(inline_pretransform_datasets)?; + let opts = request.opts.unwrap(); + + // Parse spec + let spec_string = request.spec; + let spec: ChartSpec = serde_json::from_str(&spec_string)?; + let (spec, datasets, warnings) = self + .runtime + .pre_transform_extract(&spec, &inline_datasets, &opts) + .await?; + + // Build Response + let proto_datasets = datasets + .into_iter() + .map(|dataset| { + Ok(PreTransformExtractDataset { + name: dataset.name, + scope: dataset.scope, + table: dataset.table.to_ipc_bytes()?, + }) + }) + .collect::, VegaFusionError>>()?; + + let response = PreTransformExtractResponse { + spec: serde_json::to_string(&spec)?, + datasets: proto_datasets, + warnings, + }; + + // Build result + let result = PreTransformExtractResult { + result: Some(pre_transform_extract_result::Result::Response(response)), + }; + + Ok(result) + } + + pub async fn pre_transform_values_request( + &self, + request: PreTransformValuesRequest, + ) -> Result { + // Handle default options + let opts = request + .opts + .clone() + .unwrap_or_else(|| PreTransformValuesOpts { + variables: vec![], + row_limit: None, + local_tz: "UTC".to_string(), + default_input_tz: None, + }); + + // Extract and deserialize inline datasets + let inline_datasets = decode_inline_datasets(request.inline_datasets)?; + + // Extract requested variables + let variables: Vec = request + .opts + .map(|opts| opts.variables) + .unwrap_or_default() + .into_iter() + .map(|var| (var.variable.unwrap(), var.scope)) + .collect(); + + // Parse spec + let spec_string = request.spec; + let spec: ChartSpec = serde_json::from_str(&spec_string)?; + + let (values, warnings) = self + .runtime + .pre_transform_values(&spec, &inline_datasets, &opts) + .await?; + + let response_values: Vec<_> = values + .iter() + .zip(&variables) + .map(|(value, var)| { + let proto_value = ProtoTaskValue::try_from(value)?; + Ok(ResponseTaskValue { + variable: Some(var.0.clone()), + scope: var.1.clone(), + value: Some(proto_value), + }) + }) + .collect::, VegaFusionError>>()?; + + // Build result + let result = PreTransformValuesResult { + result: Some(pre_transform_values_result::Result::Response( + PreTransformValuesResponse { + values: response_values, + warnings, + }, + )), + }; + + Ok(result) + } } #[tonic::async_trait] @@ -35,10 +235,7 @@ impl TonicVegaFusionRuntime for VegaFusionRuntimeGrpc { &self, request: Request, ) -> Result, Status> { - let result = self - .runtime - .query_request_message(request.into_inner()) - .await; + let result = self.query_request_message(request.into_inner()).await; match result { Ok(result) => Ok(Response::new(result)), Err(err) => Err(Status::unknown(err.to_string())), @@ -49,23 +246,19 @@ impl TonicVegaFusionRuntime for VegaFusionRuntimeGrpc { &self, request: Request, ) -> Result, Status> { - let result = self - .runtime - .pre_transform_spec_request(request.into_inner()) - .await; + let result = self.pre_transform_spec_request(request.into_inner()).await; match result { Ok(result) => Ok(Response::new(result)), Err(err) => Err(Status::unknown(err.to_string())), } } - async fn pre_transform_values( + async fn pre_transform_extract( &self, - request: Request, - ) -> Result, Status> { + request: Request, + ) -> Result, Status> { let result = self - .runtime - .pre_transform_values_request(request.into_inner()) + .pre_transform_extract_request(request.into_inner()) .await; match result { Ok(result) => Ok(Response::new(result)), @@ -73,13 +266,12 @@ impl TonicVegaFusionRuntime for VegaFusionRuntimeGrpc { } } - async fn pre_transform_extract( + async fn pre_transform_values( &self, - request: Request, - ) -> Result, Status> { + request: Request, + ) -> Result, Status> { let result = self - .runtime - .pre_transform_extract_request(request.into_inner()) + .pre_transform_values_request(request.into_inner()) .await; match result { Ok(result) => Ok(Response::new(result)), diff --git a/vegafusion-sql/Cargo.toml b/vegafusion-sql/Cargo.toml index cc32fa929..a23b3af85 100644 --- a/vegafusion-sql/Cargo.toml +++ b/vegafusion-sql/Cargo.toml @@ -122,7 +122,7 @@ version = "1.12.0" features = ["attributes"] [dev-dependencies.serde_json] -version = "1.0.91" +workspace = true features = ["preserve_order"] [dev-dependencies.vegafusion-datafusion-udfs] diff --git a/vegafusion-wasm/Cargo.toml b/vegafusion-wasm/Cargo.toml index dda7586bc..f8cf1ae02 100644 --- a/vegafusion-wasm/Cargo.toml +++ b/vegafusion-wasm/Cargo.toml @@ -13,11 +13,12 @@ default = ["console_error_panic_hook"] protobuf-src = ["vegafusion-core/protobuf-src"] [dependencies] -serde_json = "1.0.91" wasm-bindgen-futures = "0.4.28" js-sys = "0.3.55" indexmap = "1.9.2" +[dependencies.serde_json] +workspace = true [dev-dependencies] wasm-bindgen-test = "0.3.13" diff --git a/vegafusion-wasm/src/lib.rs b/vegafusion-wasm/src/lib.rs index 455a08c08..b7e62efd9 100644 --- a/vegafusion-wasm/src/lib.rs +++ b/vegafusion-wasm/src/lib.rs @@ -5,9 +5,11 @@ use vegafusion_core::proto::gen::tasks::{ NodeValueIndex, ResponseTaskValue, TaskGraph, TaskGraphValueRequest, TzConfig, VariableNamespace, }; +use vegafusion_core::task_graph::task_value::NamedTaskValue; use wasm_bindgen::prelude::*; use js_sys::Promise; +use std::any::Any; use std::collections::HashMap; use std::rc::Rc; use std::sync::Arc; @@ -24,11 +26,11 @@ use vegafusion_core::planning::watch::{ExportUpdateJSON, ExportUpdateNamespace, use vegafusion_core::proto::gen::services::{ query_request, query_result, QueryRequest, QueryResult, }; +use vegafusion_core::runtime::{encode_inline_datasets, VegaFusionRuntimeTrait}; use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::chart_state::ChartState; use vegafusion_core::data::dataset::VegaFusionDataset; -use vegafusion_core::runtime::VegaFusionRuntimeTrait; use web_sys::Element; pub fn set_panic_hook() { @@ -105,30 +107,38 @@ impl VegaFusionWasmRuntime { VegaFusionWasmRuntime { sender } } } + #[async_trait::async_trait] impl VegaFusionRuntimeTrait for VegaFusionWasmRuntime { + fn as_any(&self) -> &dyn Any { + self + } + async fn query_request( &self, task_graph: Arc, indices: &[NodeValueIndex], - _inline_datasets: &HashMap, - ) -> vegafusion_common::error::Result> { + inline_datasets: &HashMap, + ) -> vegafusion_common::error::Result> { // Request initial values let request_msg = QueryRequest { request: Some(query_request::Request::TaskGraphValues( TaskGraphValueRequest { task_graph: Some(task_graph.as_ref().clone()), indices: Vec::from(indices), - inline_datasets: vec![], // TODO: inline datasets + inline_datasets: encode_inline_datasets(inline_datasets)?, }, )), }; let (tx, rx) = oneshot::channel(); self.sender.clone().send((request_msg, tx)).await.unwrap(); - let response = rx.await.unwrap(); + let response = rx.await.unwrap()?; - response + Ok(response + .into_iter() + .map(|v| v.into()) + .collect::>()) } } From 191b62ab14c6866e802d94bef21c17196e81106a Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 19 Oct 2024 14:13:34 -0400 Subject: [PATCH 15/36] Add release profile for optimizing perf and size (#523) * Add release-opt profile, remove unused flags/deps * add profile for minimizing size * Fix tests --- Cargo.lock | 5 +- Cargo.toml | 33 +- pixi.lock | 3106 ++++++++----------------- pixi.toml | 7 +- vegafusion-common/Cargo.toml | 6 +- vegafusion-datafusion-udfs/Cargo.toml | 3 - vegafusion-python/Cargo.toml | 5 +- vegafusion-runtime/Cargo.toml | 3 - vegafusion-wasm/Cargo.toml | 3 - 9 files changed, 1058 insertions(+), 2113 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1e6c086f9..2dcbbd640 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4930,7 +4930,6 @@ version = "1.6.9" dependencies = [ "arrow", "async-trait", - "datafusion-proto", "deterministic-hash", "env_logger", "lazy_static", @@ -4962,6 +4961,7 @@ dependencies = [ "datafusion-common", "datafusion-expr", "datafusion-functions", + "datafusion-functions-nested", "datafusion-proto", "datafusion-proto-common", "deterministic-hash", @@ -5029,7 +5029,6 @@ dependencies = [ "chrono", "chrono-tz 0.9.0", "datafusion-functions", - "datafusion-physical-expr", "lazy_static", "ordered-float 3.9.2", "regex", @@ -5072,7 +5071,6 @@ dependencies = [ "ordered-float 3.9.2", "pixelmatch", "prost 0.12.6", - "prost-types", "regex", "reqwest 0.11.27", "reqwest-middleware", @@ -5168,7 +5166,6 @@ dependencies = [ "indexmap 1.9.3", "js-sys", "prost 0.12.6", - "prost-types", "serde", "serde_json", "vegafusion-common", diff --git a/Cargo.toml b/Cargo.toml index ab101667a..b498f8934 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,38 +40,67 @@ default-features = false [workspace.dependencies.datafusion] version = "42.0.0" +default-features = false +features = ["parquet", "nested_expressions"] [workspace.dependencies.datafusion-common] version = "42.0.0" +# no default features [workspace.dependencies.datafusion-expr] version = "42.0.0" +# no default features [workspace.dependencies.datafusion-proto] version = "42.0.0" +default-features = false +features = ["parquet"] [workspace.dependencies.datafusion-proto-common] version = "42.0.0" +default-features = false [workspace.dependencies.datafusion-physical-expr] version = "42.0.0" +default-features = false [workspace.dependencies.datafusion-optimizer] version = "42.0.0" +default-features = false [workspace.dependencies.datafusion-functions] version = "42.0.0" +default-features = false [workspace.dependencies.datafusion-functions-nested] version = "42.0.0" +# no default features [workspace.dependencies.datafusion-functions-aggregate] version = "42.0.0" +# no default features [workspace.dependencies.datafusion-functions-window] version = "42.0.0" +# no default features +# Profile with good speed for local development and testing [profile.release] -## Tell `rustc` to use highest performance optimization and perform Link Time Optimization opt-level = 3 -# lto = true + +# Profile optimized for speed and small size, +# but takes a long time to compile +[profile.release-opt] +inherits = "release" +opt-level = 3 +codegen-units = 1 +lto = "fat" +strip = "debuginfo" + +# Profile optimized for minimizing size for wasm builds +# Unfortunately, wasm-pack can't use this directly yet. +# See https://github.com/rustwasm/wasm-pack/issues/1111 +[profile.release-small] +inherits = "release" +opt-level = "z" +codegen-units = 1 diff --git a/pixi.lock b/pixi.lock index 8225ceac5..0a91e709b 100644 --- a/pixi.lock +++ b/pixi.lock @@ -3,6 +3,8 @@ environments: default: channels: - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 @@ -18,19 +20,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.4-hc8144f4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.2-h09139f6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.3-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h184a658_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.2-hd6ebb48_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.13-hc690213_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.32-h161b759_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.6-h32970c0_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.17-hb5e3142_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.12-h184a658_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h184a658_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.23.1-h94c364a_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.156-h6600424_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.43-h4bf12b8_1.conda @@ -64,7 +53,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/flaky-3.7.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/flaky-3.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 @@ -76,9 +65,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.2.0-h6b349bd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.6.0-h6f12383_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/grpcio-1.56.2-py310h1b8f574_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 @@ -127,20 +114,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.3-h59595ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-13.0.0-h1ed0495_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.1.1-h104a339_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-24_linux64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-24_linux64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.10.1-hbbe4b11_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda @@ -151,26 +133,20 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.2.0-hd5240d6_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.2-h2ff4ddf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-h840a212_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.56.2-h3905398_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-24_linux64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-h4ab18f5_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.27-pthreads_hac2b453_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.23.3-hd1fb520_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.2.0-h2a3dede_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.1-hadc24fc_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.19.0-hb90f79a_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h29866fb_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.8.0-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.44.2-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda @@ -206,7 +182,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/openjdk-20.0.0-hfea2f88_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.0-h385abfd_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda @@ -233,7 +208,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-13.0.0-py310hf9e7431_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 @@ -251,7 +225,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py310ha75aee5_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py310h71f11fc_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.6.6-he8a937b_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-28.9-h59595ed_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2023.03.02-h8c504da_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda @@ -262,7 +235,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.6.9-py310h624018c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rust-1.80.1-h0a17960_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-unknown-linux-gnu-1.80.1-h2c6d0dc_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.54-h06160fa_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.24.0-py310h0cd1892_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.14.1-py310ha3fb0e1_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/selenium-4.11.2-pyhd8ed1ab_1.conda @@ -294,7 +266,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.14.1-h64cca9d_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/vega_datasets-0.9.0-pyhd3deb0d_0.tar.bz2 @@ -338,6 +309,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.0.7-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py310ha39cb0e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + - pypi: https://files.pythonhosted.org/packages/83/b7/77b5a755560329ebe12b16a7a15074fb003685e1cbcfef8dcab0a05fdd58/pyarrow-16.0.0-cp310-cp310-manylinux_2_28_x86_64.whl osx-64: - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda @@ -350,19 +322,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.7.4-h7fea801_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.6.2-hfc10710_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.9.3-h0dc2134_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.2.17-hd41bdd4_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.3.2-hab6341b_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.7.13-h868b204_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.13.32-h2566903_6.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.9.6-he6da789_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.3.17-h5997705_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.1.12-hd41bdd4_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.1.17-hd41bdd4_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.23.1-h4e3dc9b_5.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.156-h99d1da1_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda @@ -393,13 +352,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/flaky-3.7.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/flaky-3.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/freetype-2.12.1-h60636b9_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hac325c4_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.2-h10d778d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.6.0-h8ac2a54_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/grpcio-1.56.2-py310h0d4bf3c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 @@ -443,39 +400,29 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/lerc-4.0.0-hb486fe8_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/libabseil-20230125.3-cxx17_h000cb23_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libaec-1.1.3-h73e2aa4_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libarrow-13.0.0-hca2412d_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libavif16-1.1.1-ha49a9e2_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libblas-3.9.0-22_osx64_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlicommon-1.1.0-h00291cd_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlidec-1.1.0-h00291cd_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libbrotlienc-1.1.0-h00291cd_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libcblas-3.9.0-22_osx64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcrc32c-1.1.2-he49afe7_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.10.1-h58e7537_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-19.1.2-hf95d169_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.20-h49d49c5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20191231-h0678c8f_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libevent-2.1.12-ha90c15b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-5.0.0-13_2_0_h97931a8_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-13.2.0-h2873a65_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.12.0-h37a168a_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.56.2-he6801ca_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libhwy-1.1.0-h7728843_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.0.0-h0dc2134_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libjxl-0.10.3-hfb90b89_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/liblapack-3.9.0-22_osx64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.58.0-h64cf6d3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libopenblas-0.3.27-openmp_h8869122_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.44-h4b8f8c9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libprotobuf-4.23.3-h5feb325_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.20-hfdf4475_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.46.1-h4b8f8c9_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.0-hd019ec5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.19.0-h064b379_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.6.0-h129831d_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.8.0-hb7f2c08_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/libuv-1.44.2-h0dc2134_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.4.0-h10d778d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.17.0-hf1f96e2_0.conda @@ -510,7 +457,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/openjdk-20.0.0-h7d26f99_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openjpeg-2.5.2-h7310d3a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.3.2-hd23fc13_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/orc-1.9.0-hef23039_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda @@ -535,7 +481,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/pthread-stubs-0.4-h00291cd_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-13.0.0-py310h6eef95f_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pyobjc-core-10.3.1-py310h1c7075f_1.conda @@ -622,6 +567,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-ng-2.0.7-hb7f2c08_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.23.0-py310h41d873f_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.6-h915ae27_0.conda + - pypi: https://files.pythonhosted.org/packages/fd/5c/a4349f50b36382d3f40b304b91a3587ac433baceed9bec2434d663393a51/pyarrow-16.0.0-cp310-cp310-macosx_10_15_x86_64.whl osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda @@ -634,19 +580,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.3-hab8b942_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.6.2-he70778a_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.9.0-hb547adb_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.2.17-he70778a_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.3.2-hcf14f3f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.7.12-he297698_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.13.32-h3c776e5_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.9.5-h83b98fe_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.3.14-h24e141d_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.1.12-he70778a_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.17-he70778a_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.23.0-h04fc39a_5.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.10.57-h0092a47_21.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda @@ -680,7 +613,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/expat-2.6.3-hf9b8971_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/flaky-3.7.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/flaky-3.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 @@ -695,11 +628,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdk-pixbuf-2.42.10-h9bcf4fe_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gettext-0.22.5-h8414b35_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gettext-tools-0.22.5-h8414b35_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.1-h1a8c8d9_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-2.76.4-ha614eb4_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.76.4-ha614eb4_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.6.0-h6da1cb0_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.13-hebf3989_1003.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/grpcio-1.56.2-py310h95b248a_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 @@ -746,7 +677,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libabseil-20230125.3-cxx17_h13dd4ca_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libaec-1.1.3-hebf3989_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-13.0.0-h6e4acf5_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libasprintf-0.22.5-h8414b35_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libasprintf-devel-0.22.5-h8414b35_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif-0.11.1-h9f83d30_2.conda @@ -755,13 +685,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlidec-1.0.9-h1a8c8d9_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libbrotlienc-1.0.9-h1a8c8d9_9.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-24_osxarm64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.10.1-h13a7ad3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.2-ha82da77_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.17-h1a8c8d9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20191231-hc8eb9b7_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.3-hf9b8971_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgettextpo-0.22.5-h8414b35_3.conda @@ -769,7 +697,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.76.4-h24e9cb9_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.12.0-h05652e3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.56.2-h9075ed4_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.22.5-h8414b35_3.conda @@ -783,9 +710,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.46.1-hc14010f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.0-h7a5bd25_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.18.1-ha061701_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.5.0-h5dffbdd_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.8.0-h1a8c8d9_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.44.2-hb547adb_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.4.0-h93a5062_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxcb-1.13-h9b22ae9_1004.tar.bz2 @@ -821,7 +746,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjdk-20.0.0-hbe7ddab_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openjpeg-2.5.0-hbc2ba62_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.3.2-h8359307_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/orc-1.9.0-h858f345_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda @@ -850,7 +774,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pthread-stubs-0.4-hd74edd7_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-13.0.0-py310h382c99a_0_cpu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyobjc-core-10.3.1-py310hb3dec1a_1.conda @@ -935,6 +858,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-ng-2.0.7-h1a8c8d9_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py310h2665a74_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + - pypi: https://files.pythonhosted.org/packages/5b/04/c2a6f3ae840d96a00de2e07d68a3d30591b413b15b4385242e47e2ae0e97/pyarrow-16.0.0-cp310-cp310-macosx_11_0_arm64.whl win-64: - conda: https://conda.anaconda.org/conda-forge/noarch/altair-5.4.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda @@ -946,19 +870,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.7.4-hc10d58f_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.6.2-hd5965a7_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.9.3-hcfcfb64_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.2.17-hd5965a7_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-event-stream-0.3.2-hea44b67_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.7.13-h6dd44e3_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.13.32-ha16e049_6.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-mqtt-0.9.6-h5e85a83_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.3.17-ha8f72b6_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.1.12-hd5965a7_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.1.17-hd5965a7_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.23.1-h70f7a23_5.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aws-sdk-cpp-1.11.156-h02852bd_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda @@ -987,7 +898,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/flaky-3.7.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/flaky-3.8.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/future-1.0.0-pyhd8ed1ab_0.conda @@ -1035,19 +946,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/libabseil-20230125.3-cxx17_h63175ca_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libaec-1.1.3-h63175ca_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libarrow-13.0.0-hba3d5be_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libavif-1.0.1-h7a9aacb_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-24_win64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.1.0-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.1.0-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.1.0-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-24_win64_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.10.1-h1ee3ff0_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.20-hcfcfb64_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libevent-2.1.12-h3671451_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.12.0-hbc1b25b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgrpc-1.56.2-hea2d5f7_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.11.1-default_h8125262_1000.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda @@ -1057,10 +963,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libprotobuf-4.23.3-h1975477_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.20-hc70643c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.46.1-h2466b09_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.0-h7dfc565_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libthrift-0.19.0-ha2b3283_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.6.0-hddb2be6_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libutf8proc-2.8.0-h82a8f57_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.4.0-hcfcfb64_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-h013a479_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.12.7-h0f24e4e_4.conda @@ -1100,7 +1003,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/openjdk-20.0.0-h57928b3_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/orc-1.9.0-hf2b8f0d_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/outcome-1.3.0.post0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda @@ -1124,7 +1026,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-h2466b09_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pyarrow-13.0.0-py310hd0bb7c2_3_cpu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh0701188_6.tar.bz2 @@ -1217,6 +1118,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.0.7-hcfcfb64_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py310he5e10e1_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + - pypi: https://files.pythonhosted.org/packages/95/7a/36243efd5a9c1a0ac1146fa69044f4676eac13a162c8fb388869262330fe/pyarrow-16.0.0-cp310-cp310-win_amd64.whl packages: - kind: conda name: _libgcc_mutex @@ -1227,6 +1129,7 @@ packages: sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 md5: d7c89558ba9fa0495403155b64376d81 license: None + purls: [] size: 2562 timestamp: 1578324546067 - kind: conda @@ -1245,6 +1148,7 @@ packages: - openmp_impl 9999 license: BSD-3-Clause license_family: BSD + purls: [] size: 23621 timestamp: 1650670423406 - kind: conda @@ -1259,6 +1163,7 @@ packages: - libgcc-ng >=12 license: LGPL-2.1-or-later license_family: GPL + purls: [] size: 555868 timestamp: 1718118368236 - kind: conda @@ -1281,6 +1186,8 @@ packages: - typing-extensions >=4.10.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/altair?source=hash-mapping size: 462954 timestamp: 1727892152911 - kind: conda @@ -1303,6 +1210,8 @@ packages: - trio >=0.26.1 license: MIT license_family: MIT + purls: + - pkg:pypi/anyio?source=compressed-mapping size: 109864 timestamp: 1728935803440 - kind: conda @@ -1322,6 +1231,8 @@ packages: - watchfiles license: MIT license_family: MIT + purls: + - pkg:pypi/anywidget?source=hash-mapping size: 66391 timestamp: 1719028676289 - kind: conda @@ -1336,6 +1247,7 @@ packages: - libcxx >=14.0.4 license: BSD-2-Clause license_family: BSD + purls: [] size: 2485267 timestamp: 1663808577638 - kind: conda @@ -1352,6 +1264,7 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-2-Clause license_family: BSD + purls: [] size: 1955945 timestamp: 1700530921759 - kind: conda @@ -1367,6 +1280,7 @@ packages: - libstdcxx-ng >=12 license: BSD-2-Clause license_family: BSD + purls: [] size: 2706396 timestamp: 1718551242397 - kind: conda @@ -1382,6 +1296,7 @@ packages: - libcxx >=16 license: BSD-2-Clause license_family: BSD + purls: [] size: 2749186 timestamp: 1718551450314 - kind: conda @@ -1397,6 +1312,8 @@ packages: - python >=3.7 license: BSD-2-Clause license_family: BSD + purls: + - pkg:pypi/appnope?source=hash-mapping size: 10241 timestamp: 1707233195627 - kind: conda @@ -1416,6 +1333,8 @@ packages: - argon2_cffi ==999 license: MIT license_family: MIT + purls: + - pkg:pypi/argon2-cffi?source=hash-mapping size: 18602 timestamp: 1692818472638 - kind: conda @@ -1435,6 +1354,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/argon2-cffi-bindings?source=hash-mapping size: 32379 timestamp: 1725356978614 - kind: conda @@ -1453,6 +1374,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/argon2-cffi-bindings?source=hash-mapping size: 31413 timestamp: 1725356783377 - kind: conda @@ -1472,6 +1395,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/argon2-cffi-bindings?source=hash-mapping size: 34425 timestamp: 1725356664523 - kind: conda @@ -1492,6 +1417,8 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: + - pkg:pypi/argon2-cffi-bindings?source=hash-mapping size: 33837 timestamp: 1725357171155 - kind: conda @@ -1509,6 +1436,8 @@ packages: - types-python-dateutil >=2.8.10 license: Apache-2.0 license_family: Apache + purls: + - pkg:pypi/arrow?source=hash-mapping size: 100096 timestamp: 1696129131844 - kind: conda @@ -1525,6 +1454,8 @@ packages: - six >=1.12.0 license: Apache-2.0 license_family: Apache + purls: + - pkg:pypi/asttokens?source=hash-mapping size: 28922 timestamp: 1698341257884 - kind: conda @@ -1541,6 +1472,8 @@ packages: - typing_extensions >=4.0.0 license: MIT license_family: MIT + purls: + - pkg:pypi/async-lru?source=hash-mapping size: 15342 timestamp: 1690563152778 - kind: conda @@ -1556,962 +1489,10 @@ packages: - python >=3.7 license: MIT license_family: MIT + purls: + - pkg:pypi/attrs?source=hash-mapping size: 56048 timestamp: 1722977241383 -- kind: conda - name: aws-c-auth - version: 0.7.3 - build: hab8b942_3 - build_number: 3 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-auth-0.7.3-hab8b942_3.conda - sha256: f27b21ba66bfdccd6e892c78f83d53cbc21ce8fdf594c3d677eede9f225b3820 - md5: 8c9ad5cf200ddc532d73cd63a4458b76 - depends: - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.0,<0.9.1.0a0 - - aws-c-http >=0.7.12,<0.7.13.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - aws-c-sdkutils >=0.1.12,<0.1.13.0a0 - license: Apache-2.0 - license_family: Apache - size: 92315 - timestamp: 1692935723694 -- kind: conda - name: aws-c-auth - version: 0.7.4 - build: h7fea801_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-auth-0.7.4-h7fea801_1.conda - sha256: 316b595cd5491b68b890cfd8ec9f5401a78274774667f9be7bbb9c1498c4bcd0 - md5: 6a391ec90c3efedcd4e29eecdc10198a - depends: - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-http >=0.7.13,<0.7.14.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - aws-c-sdkutils >=0.1.12,<0.1.13.0a0 - license: Apache-2.0 - license_family: Apache - size: 89157 - timestamp: 1695806962937 -- kind: conda - name: aws-c-auth - version: 0.7.4 - build: hc10d58f_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/aws-c-auth-0.7.4-hc10d58f_1.conda - sha256: beea4633962b493cb6b19e54331b3a3cdfff006ee92fcd8bf80fe432ef1eb254 - md5: 7ed6baf38798ebb4152b821c6b04f061 - depends: - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-http >=0.7.13,<0.7.14.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - aws-c-sdkutils >=0.1.12,<0.1.13.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - size: 98155 - timestamp: 1695807069215 -- kind: conda - name: aws-c-auth - version: 0.7.4 - build: hc8144f4_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.4-hc8144f4_1.conda - sha256: a41d33da5f25bb6666805a8ac72ff7f03742ce6d311c4241de7beb94681c1289 - md5: 81b00630260ff8c9388ee3913465b208 - depends: - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-http >=0.7.13,<0.7.14.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - aws-c-sdkutils >=0.1.12,<0.1.13.0a0 - - libgcc-ng >=12 - license: Apache-2.0 - license_family: Apache - size: 101876 - timestamp: 1695806693576 -- kind: conda - name: aws-c-cal - version: 0.6.2 - build: h09139f6_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.2-h09139f6_2.conda - sha256: f6f91c7d04be3888365499628f3369fc94dada451360bd82e5e3c61abeb7fc3e - md5: 29c3112841eee851f6f5451f6d705782 - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - libgcc-ng >=12 - - openssl >=3.1.3,<4.0a0 - license: Apache-2.0 - license_family: Apache - size: 50982 - timestamp: 1695755343237 -- kind: conda - name: aws-c-cal - version: 0.6.2 - build: hd5965a7_2 - build_number: 2 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/aws-c-cal-0.6.2-hd5965a7_2.conda - sha256: bf8bc4eae5baacc4a12bef32c25a7f43129b79cf167d2e45c5c5b8672af50815 - md5: cbfd6b62693f67233f205e72e505109a - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - size: 51212 - timestamp: 1695756000021 -- kind: conda - name: aws-c-cal - version: 0.6.2 - build: he70778a_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-cal-0.6.2-he70778a_1.conda - sha256: a79d40403b1e07f16c7631b1de255a5852f8181a8109d07ee14c3f03b1d050c1 - md5: 83a5e6490ab433f6045dfeb096f93c17 - depends: - - aws-c-common >=0.9.0,<0.9.1.0a0 - license: Apache-2.0 - license_family: Apache - size: 36212 - timestamp: 1695089175156 -- kind: conda - name: aws-c-cal - version: 0.6.2 - build: hfc10710_2 - build_number: 2 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-cal-0.6.2-hfc10710_2.conda - sha256: 8752777b77fdb1a8b60ec2903916fd4397ad0ddff8618ee8e5156a3cbfe4095a - md5: a340450b9351a8979cc1130fece3cc9f - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - license: Apache-2.0 - license_family: Apache - size: 40963 - timestamp: 1695755654862 -- kind: conda - name: aws-c-common - version: 0.9.0 - build: hb547adb_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-common-0.9.0-hb547adb_0.conda - sha256: ec15d841f362e6a4468e06117d985f7f6007568ba832416ff146d239b2f7f0c0 - md5: 7d7f91d3daa8d7bbf1da8c97038e336f - license: Apache-2.0 - license_family: Apache - size: 182127 - timestamp: 1691436103004 -- kind: conda - name: aws-c-common - version: 0.9.3 - build: h0dc2134_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-common-0.9.3-h0dc2134_0.conda - sha256: cd186a847486ecc6f4c90f321552422a148b30bde40c1984cb3c2cdedb5b6842 - md5: 08315e4f10bb6df0b6457dd2c4aefe04 - license: Apache-2.0 - license_family: Apache - size: 203404 - timestamp: 1695654891068 -- kind: conda - name: aws-c-common - version: 0.9.3 - build: hcfcfb64_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/aws-c-common-0.9.3-hcfcfb64_0.conda - sha256: 4a83811c573c965c55f3f67c149f232ce81c157391b651699a8c8ad22b743ead - md5: ef7faef92f32551745303430e45d61d8 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - size: 217632 - timestamp: 1695654879342 -- kind: conda - name: aws-c-common - version: 0.9.3 - build: hd590300_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.3-hd590300_0.conda - sha256: 6f3a9c285199f828ac1917112495b4e5f4ca578d385442f33aae282bd95618ac - md5: 434466e97a4174b0c4de114eb7100550 - depends: - - libgcc-ng >=12 - license: Apache-2.0 - license_family: Apache - size: 220352 - timestamp: 1695654440131 -- kind: conda - name: aws-c-compression - version: 0.2.17 - build: h184a658_3 - build_number: 3 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h184a658_3.conda - sha256: 07f3431f097f64c1ee916c27ac7745bbf27a9b06768fa0449d9e0eaea1b6f4d2 - md5: c62775b5028b5a4eda25037f9af7f5b3 - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - libgcc-ng >=12 - license: Apache-2.0 - license_family: Apache - size: 19162 - timestamp: 1695755217636 -- kind: conda - name: aws-c-compression - version: 0.2.17 - build: hd41bdd4_3 - build_number: 3 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-compression-0.2.17-hd41bdd4_3.conda - sha256: 922f2be31994d2ba277f2452c801a35c4695335938788bd280f73ab1cbd189df - md5: 8477d925cf7a7972e85139c385ec6f45 - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - license: Apache-2.0 - license_family: Apache - size: 18078 - timestamp: 1695755408655 -- kind: conda - name: aws-c-compression - version: 0.2.17 - build: hd5965a7_3 - build_number: 3 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/aws-c-compression-0.2.17-hd5965a7_3.conda - sha256: 5d63e840b6ba0f737503584e14ed94b94397e68e1768f1d76b263dee771a07dd - md5: b0e3df9a002b961bf5fa2400235a8f74 - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - size: 22691 - timestamp: 1695755699057 -- kind: conda - name: aws-c-compression - version: 0.2.17 - build: he70778a_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-compression-0.2.17-he70778a_2.conda - sha256: 0e5a93b88d77405af89586f4b776f68a3cfd1c9ed44da57ac2a6b042dc96a26c - md5: d7a30e85a98d14dcd2d0ca8ae8ca4372 - depends: - - aws-c-common >=0.9.0,<0.9.1.0a0 - license: Apache-2.0 - license_family: Apache - size: 18406 - timestamp: 1691607429629 -- kind: conda - name: aws-c-event-stream - version: 0.3.2 - build: hab6341b_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-event-stream-0.3.2-hab6341b_1.conda - sha256: ed52fda59f2c42a50a53055f909189d48169fa875f9fdcf4aa280c326aac3123 - md5: ea7090c6dce0f098e6f27531204ae9c3 - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - aws-checksums >=0.1.17,<0.1.18.0a0 - - libcxx >=15.0.7 - license: Apache-2.0 - license_family: Apache - size: 46908 - timestamp: 1695787042268 -- kind: conda - name: aws-c-event-stream - version: 0.3.2 - build: hcf14f3f_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-event-stream-0.3.2-hcf14f3f_0.conda - sha256: 1923838df400cf19d21a54dc7f19afe5a949339cd998725504c936fe0b24d68a - md5: 6c6fc8e9f1fa171136e58a33ffb95d5f - depends: - - aws-c-common >=0.9.0,<0.9.1.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - aws-checksums >=0.1.17,<0.1.18.0a0 - - libcxx >=15.0.7 - license: Apache-2.0 - license_family: Apache - size: 48862 - timestamp: 1692836283506 -- kind: conda - name: aws-c-event-stream - version: 0.3.2 - build: hd6ebb48_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.2-hd6ebb48_1.conda - sha256: 32385f297271fcbdfa97adeceea56c1317ffb96d94a681933805f97ef30bda12 - md5: ef9692e74f437004ef47a4363552bcb6 - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - aws-checksums >=0.1.17,<0.1.18.0a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: Apache-2.0 - license_family: Apache - size: 53665 - timestamp: 1695786768147 -- kind: conda - name: aws-c-event-stream - version: 0.3.2 - build: hea44b67_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/aws-c-event-stream-0.3.2-hea44b67_1.conda - sha256: 9aa0bb1e4417b17935094e8fadfba1bc9e00f7e20a9e36f04d790ea7ab4cf308 - md5: 8714f7f7c40e43d9830f41b8f010b9d6 - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - aws-checksums >=0.1.17,<0.1.18.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - size: 54351 - timestamp: 1695787146551 -- kind: conda - name: aws-c-http - version: 0.7.12 - build: he297698_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-http-0.7.12-he297698_1.conda - sha256: 5afb1a690124d76a6771b52567fe38a348e5feb113a0c6ea173123dbaaa51f51 - md5: 8d952fa86e3c02043e85650080ba817b - depends: - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.0,<0.9.1.0a0 - - aws-c-compression >=0.2.17,<0.2.18.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - license: Apache-2.0 - license_family: Apache - size: 157732 - timestamp: 1692913796109 -- kind: conda - name: aws-c-http - version: 0.7.13 - build: h6dd44e3_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/aws-c-http-0.7.13-h6dd44e3_1.conda - sha256: 536f6e1153fd374ed75632bb568a7b9ab106e8634084235b56f128e9be65175e - md5: cf2be4ecb54d59f946b6041859051b66 - depends: - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-compression >=0.2.17,<0.2.18.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - size: 179477 - timestamp: 1695787045722 -- kind: conda - name: aws-c-http - version: 0.7.13 - build: h868b204_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-http-0.7.13-h868b204_1.conda - sha256: f3db9629daee50f27f86676a2d4dec58c9aa2d6d4a6d0f32433928bac7d58dcd - md5: f43a2a8cae0408db86d4461359a0dbe2 - depends: - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-compression >=0.2.17,<0.2.18.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - license: Apache-2.0 - license_family: Apache - size: 164664 - timestamp: 1695786938189 -- kind: conda - name: aws-c-http - version: 0.7.13 - build: hc690213_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.13-hc690213_1.conda - sha256: 609016dcb4c3480362ba6307759b9dabc59fd02f936d6c09f299c46964c19a7c - md5: c912831e92c565598072243266073161 - depends: - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-compression >=0.2.17,<0.2.18.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - libgcc-ng >=12 - license: Apache-2.0 - license_family: Apache - size: 193066 - timestamp: 1695786758113 -- kind: conda - name: aws-c-io - version: 0.13.32 - build: h161b759_6 - build_number: 6 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.32-h161b759_6.conda - sha256: 76b51d2b2911ee0acb79692fefd524ae91b92e92dd5ddf4d89958d29fc1460ee - md5: 26c909c7fc3fddc015a9ab4ebfcaed41 - depends: - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.3,<0.9.4.0a0 - - libgcc-ng >=12 - - s2n >=1.3.54,<1.3.55.0a0 - license: Apache-2.0 - license_family: Apache - size: 153867 - timestamp: 1696719447343 -- kind: conda - name: aws-c-io - version: 0.13.32 - build: h2566903_6 - build_number: 6 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-io-0.13.32-h2566903_6.conda - sha256: 196f33bf7304c08c913b652d58463772a7db6c47d0d2a9c1be9d92b14094ff0a - md5: da6927252893084bf95269d745eedada - depends: - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.3,<0.9.4.0a0 - license: Apache-2.0 - license_family: Apache - size: 135831 - timestamp: 1696719527 -- kind: conda - name: aws-c-io - version: 0.13.32 - build: h3c776e5_3 - build_number: 3 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-io-0.13.32-h3c776e5_3.conda - sha256: 5600008b82bdf1d3b025a99e6a39ca9b6cedf901c2c98357cccc7b4fb94237ba - md5: f88f5e6e0dbe5e19d55344b8c2cfc900 - depends: - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.0,<0.9.1.0a0 - license: Apache-2.0 - license_family: Apache - size: 139753 - timestamp: 1694551424429 -- kind: conda - name: aws-c-io - version: 0.13.32 - build: ha16e049_6 - build_number: 6 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/aws-c-io-0.13.32-ha16e049_6.conda - sha256: 2ff7e7c16c04e4bdd4e96bf02239afabcc071aa96f199a58c8a57881886148b8 - md5: 75cb3bc0a2d05063bda6a900eb926b9d - depends: - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.3,<0.9.4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - size: 158041 - timestamp: 1696720098642 -- kind: conda - name: aws-c-mqtt - version: 0.9.5 - build: h83b98fe_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-mqtt-0.9.5-h83b98fe_1.conda - sha256: 1e02fdc8853eaf607093930d6696f0eedd3f4caf65addf2ebcb12a48b438b984 - md5: 2b1cf8c40fe264f66c51ddfbf4a6c643 - depends: - - aws-c-common >=0.9.0,<0.9.1.0a0 - - aws-c-http >=0.7.12,<0.7.13.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - license: Apache-2.0 - license_family: Apache - size: 123424 - timestamp: 1692895315126 -- kind: conda - name: aws-c-mqtt - version: 0.9.6 - build: h32970c0_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.6-h32970c0_2.conda - sha256: ff961111d41afc107bcb263d1ce727a2900b4546adbb7bae03046e1473157e64 - md5: 21dd1cb1e73b0ce2ea31e9f9f692e051 - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-http >=0.7.13,<0.7.14.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - libgcc-ng >=12 - license: Apache-2.0 - license_family: Apache - size: 162703 - timestamp: 1695917197677 -- kind: conda - name: aws-c-mqtt - version: 0.9.6 - build: h5e85a83_2 - build_number: 2 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/aws-c-mqtt-0.9.6-h5e85a83_2.conda - sha256: 8f6e103b8a5c85275b541fe52d69b879aa96c9996f5edc81fd6a21d662bc7392 - md5: 348bde350e6eee35c3dd310cef20775f - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-http >=0.7.13,<0.7.14.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - size: 157202 - timestamp: 1695917786835 -- kind: conda - name: aws-c-mqtt - version: 0.9.6 - build: he6da789_2 - build_number: 2 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-mqtt-0.9.6-he6da789_2.conda - sha256: 343781159bb6bc47dd8e69c41eaeaacfc4d146cfa18fd01bf2c75e8b7bd45ba6 - md5: 4b30f7acb9cf20c7570b000213484f52 - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-http >=0.7.13,<0.7.14.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - license: Apache-2.0 - license_family: Apache - size: 139336 - timestamp: 1695917405265 -- kind: conda - name: aws-c-s3 - version: 0.3.14 - build: h24e141d_3 - build_number: 3 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-s3-0.3.14-h24e141d_3.conda - sha256: f9bf1668f323197268f9239722cc9273f2ebb4329ab48c469d0798958a952bb3 - md5: 0fbd1f360ec8b6b08669e900cf31a2bd - depends: - - aws-c-auth >=0.7.3,<0.7.4.0a0 - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.0,<0.9.1.0a0 - - aws-c-http >=0.7.12,<0.7.13.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - aws-checksums >=0.1.17,<0.1.18.0a0 - license: Apache-2.0 - license_family: Apache - size: 78329 - timestamp: 1692950426132 -- kind: conda - name: aws-c-s3 - version: 0.3.17 - build: h5997705_3 - build_number: 3 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-s3-0.3.17-h5997705_3.conda - sha256: 4146f40b392860c1bb9c76e39d5a6aa95a8429da4d5a7e10b30318147faddfe8 - md5: e4e8a0ea0385a06a83944f603e56320e - depends: - - aws-c-auth >=0.7.4,<0.7.5.0a0 - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-http >=0.7.13,<0.7.14.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - aws-checksums >=0.1.17,<0.1.18.0a0 - license: Apache-2.0 - license_family: Apache - size: 74663 - timestamp: 1695816593583 -- kind: conda - name: aws-c-s3 - version: 0.3.17 - build: ha8f72b6_3 - build_number: 3 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/aws-c-s3-0.3.17-ha8f72b6_3.conda - sha256: ee731c295a74363afae65e3268d524e3a3d8d198aaaf0b0ab6af4c0cbfd56756 - md5: e6e98f522c89d8b02766d09468d790f3 - depends: - - aws-c-auth >=0.7.4,<0.7.5.0a0 - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-http >=0.7.13,<0.7.14.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - aws-checksums >=0.1.17,<0.1.18.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - size: 83349 - timestamp: 1695817009484 -- kind: conda - name: aws-c-s3 - version: 0.3.17 - build: hb5e3142_3 - build_number: 3 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.17-hb5e3142_3.conda - sha256: e2735df82153f7bc29d9d118453349b8d1fdd565e43764188af502fbcd32635a - md5: f0eeadc3f7fc9a29b7ce416897056826 - depends: - - aws-c-auth >=0.7.4,<0.7.5.0a0 - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-http >=0.7.13,<0.7.14.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - aws-checksums >=0.1.17,<0.1.18.0a0 - - libgcc-ng >=12 - - openssl >=3.1.3,<4.0a0 - license: Apache-2.0 - license_family: Apache - size: 86367 - timestamp: 1695816475381 -- kind: conda - name: aws-c-sdkutils - version: 0.1.12 - build: h184a658_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.12-h184a658_2.conda - sha256: f8cea4495d2d6c622aa65257aa24958fde6e5f5d518772036ba1fe5dfd0666ad - md5: ba06d81b81ec3eaf4ee83cd47f808134 - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - libgcc-ng >=12 - license: Apache-2.0 - license_family: Apache - size: 53021 - timestamp: 1695742870649 -- kind: conda - name: aws-c-sdkutils - version: 0.1.12 - build: hd41bdd4_2 - build_number: 2 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/aws-c-sdkutils-0.1.12-hd41bdd4_2.conda - sha256: 763f1091d0abae8ec74ffe6077788e4a558e88e0a0c9aaba69c66b88f91f9b14 - md5: ca04a04205202fee021697f614bd59dd - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - license: Apache-2.0 - license_family: Apache - size: 47319 - timestamp: 1695743229851 -- kind: conda - name: aws-c-sdkutils - version: 0.1.12 - build: hd5965a7_2 - build_number: 2 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/aws-c-sdkutils-0.1.12-hd5965a7_2.conda - sha256: 029e039ff2bc526d5f31637a5525192787b3457b03cf33e479cd07641a9b5430 - md5: 5ac1b07dec55938a5f410e04aba2e27a - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - size: 51875 - timestamp: 1695743449932 -- kind: conda - name: aws-c-sdkutils - version: 0.1.12 - build: he70778a_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-c-sdkutils-0.1.12-he70778a_1.conda - sha256: 60bf0d3e7bd7bb368bbbc03f917b2a97198642ce8ed491f80c5cacbb6498c566 - md5: a90a6413bbf361584033773c19cecb65 - depends: - - aws-c-common >=0.9.0,<0.9.1.0a0 - license: Apache-2.0 - license_family: Apache - size: 48721 - timestamp: 1691457290683 -- kind: conda - name: aws-checksums - version: 0.1.17 - build: h184a658_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h184a658_2.conda - sha256: feeea13a9a15c4dd27a2244fedbe439ee7548192b21e5e6cf6c07142af5a92d1 - md5: 10fcdbd02ba7fa0827fb8f7d94f8375b - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - libgcc-ng >=12 - license: Apache-2.0 - license_family: Apache - size: 50130 - timestamp: 1695743103287 -- kind: conda - name: aws-checksums - version: 0.1.17 - build: hd41bdd4_2 - build_number: 2 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/aws-checksums-0.1.17-hd41bdd4_2.conda - sha256: d59f0b77d02fe275f0d758148c5705c72dfca85d97b55c9a227579eb284dd6a2 - md5: e4d679bf261bafcf215804bcbcd63e6f - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - license: Apache-2.0 - license_family: Apache - size: 48675 - timestamp: 1695743318668 -- kind: conda - name: aws-checksums - version: 0.1.17 - build: hd5965a7_2 - build_number: 2 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/aws-checksums-0.1.17-hd5965a7_2.conda - sha256: 0c9e36f6b0729e8b0507b16fd10ab01b6bf59afd99d7d3b6fa93151485ac481f - md5: 750eaf78f1354c70743cb15c1e2ad4ac - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - size: 52214 - timestamp: 1695743755136 -- kind: conda - name: aws-checksums - version: 0.1.17 - build: he70778a_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-checksums-0.1.17-he70778a_1.conda - sha256: 52606dcecd60ccc587d3c8f100cc30b7a8101f655e8d9b26a90dac9996030f52 - md5: 5892420ce138d63e1f6e08c9915f0308 - depends: - - aws-c-common >=0.9.0,<0.9.1.0a0 - license: Apache-2.0 - license_family: Apache - size: 49182 - timestamp: 1691457138566 -- kind: conda - name: aws-crt-cpp - version: 0.23.0 - build: h04fc39a_5 - build_number: 5 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-crt-cpp-0.23.0-h04fc39a_5.conda - sha256: fdce32ae99b57e0fe9d1b52e56d4dea40c641d9bfa3b38239a9f22c69def37f7 - md5: 9bfad48efc52d9142f7416978b960ffe - depends: - - aws-c-auth >=0.7.3,<0.7.4.0a0 - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.0,<0.9.1.0a0 - - aws-c-event-stream >=0.3.2,<0.3.3.0a0 - - aws-c-http >=0.7.12,<0.7.13.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - aws-c-mqtt >=0.9.5,<0.9.6.0a0 - - aws-c-s3 >=0.3.14,<0.3.15.0a0 - - aws-c-sdkutils >=0.1.12,<0.1.13.0a0 - - libcxx >=15.0.7 - license: Apache-2.0 - license_family: Apache - size: 223696 - timestamp: 1692969704783 -- kind: conda - name: aws-crt-cpp - version: 0.23.1 - build: h4e3dc9b_5 - build_number: 5 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/aws-crt-cpp-0.23.1-h4e3dc9b_5.conda - sha256: 63d6022f15f57422243065b09d940cb7c336883bd3d581ce8d8e0a9ae19bc64d - md5: 327a1a3776bb737a8de1a02203b67c18 - depends: - - aws-c-auth >=0.7.4,<0.7.5.0a0 - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-event-stream >=0.3.2,<0.3.3.0a0 - - aws-c-http >=0.7.13,<0.7.14.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - aws-c-mqtt >=0.9.6,<0.9.7.0a0 - - aws-c-s3 >=0.3.17,<0.3.18.0a0 - - aws-c-sdkutils >=0.1.12,<0.1.13.0a0 - - libcxx >=15.0.7 - license: Apache-2.0 - license_family: Apache - size: 275005 - timestamp: 1695993989586 -- kind: conda - name: aws-crt-cpp - version: 0.23.1 - build: h70f7a23_5 - build_number: 5 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/aws-crt-cpp-0.23.1-h70f7a23_5.conda - sha256: 7b39b5bbd278838543655068f8779e538b6cd2b7931689762127082b544eea4e - md5: c0c9016cd7385ad14dcd575ef349c620 - depends: - - aws-c-auth >=0.7.4,<0.7.5.0a0 - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-event-stream >=0.3.2,<0.3.3.0a0 - - aws-c-http >=0.7.13,<0.7.14.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - aws-c-mqtt >=0.9.6,<0.9.7.0a0 - - aws-c-s3 >=0.3.17,<0.3.18.0a0 - - aws-c-sdkutils >=0.1.12,<0.1.13.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - size: 236477 - timestamp: 1695993950546 -- kind: conda - name: aws-crt-cpp - version: 0.23.1 - build: h94c364a_5 - build_number: 5 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.23.1-h94c364a_5.conda - sha256: 2c3af3148c4625a9f4bc8cd46b0d55f6e39f7381ee54095752c62f1c1598c24b - md5: 0d9257d4ebe9af80677c178f172d3c39 - depends: - - aws-c-auth >=0.7.4,<0.7.5.0a0 - - aws-c-cal >=0.6.2,<0.6.3.0a0 - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-event-stream >=0.3.2,<0.3.3.0a0 - - aws-c-http >=0.7.13,<0.7.14.0a0 - - aws-c-io >=0.13.32,<0.13.33.0a0 - - aws-c-mqtt >=0.9.6,<0.9.7.0a0 - - aws-c-s3 >=0.3.17,<0.3.18.0a0 - - aws-c-sdkutils >=0.1.12,<0.1.13.0a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: Apache-2.0 - license_family: Apache - size: 323319 - timestamp: 1695993507703 -- kind: conda - name: aws-sdk-cpp - version: 1.10.57 - build: h0092a47_21 - build_number: 21 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aws-sdk-cpp-1.10.57-h0092a47_21.conda - sha256: b11bcb92ea37c422f3fa5939ad953a7eff10c711f2e83082351d38f1a1aad8c8 - md5: e2e6eecb276e5faa419c1ecfc6a831b1 - depends: - - aws-c-common >=0.9.0,<0.9.1.0a0 - - aws-c-event-stream >=0.3.2,<0.3.3.0a0 - - aws-crt-cpp >=0.23.0,<0.23.1.0a0 - - libcurl >=8.2.1,<9.0a0 - - libcxx >=15.0.7 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.1.2,<4.0a0 - license: Apache-2.0 - license_family: Apache - size: 3363572 - timestamp: 1692911449964 -- kind: conda - name: aws-sdk-cpp - version: 1.11.156 - build: h02852bd_3 - build_number: 3 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/aws-sdk-cpp-1.11.156-h02852bd_3.conda - sha256: e183eda509e1079ef8e72927c68ed3108a3006b67d8a07a39edad49dc79636e3 - md5: 1a232e6d0c8b7ce34b0f819e072fbf7c - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-event-stream >=0.3.2,<0.3.3.0a0 - - aws-checksums >=0.1.17,<0.1.18.0a0 - - aws-crt-cpp >=0.23.1,<0.23.2.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - size: 3228453 - timestamp: 1696018718586 -- kind: conda - name: aws-sdk-cpp - version: 1.11.156 - build: h6600424_3 - build_number: 3 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.156-h6600424_3.conda - sha256: ed42d559b18025f422d4b4ae81e0574eae200c3e321b9f97e3b269a6d064994a - md5: 6caecdec46acbd4743807b4be6efce33 - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-event-stream >=0.3.2,<0.3.3.0a0 - - aws-checksums >=0.1.17,<0.1.18.0a0 - - aws-crt-cpp >=0.23.1,<0.23.2.0a0 - - libcurl >=8.3.0,<9.0a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.1.3,<4.0a0 - license: Apache-2.0 - license_family: Apache - size: 3432093 - timestamp: 1696017730687 -- kind: conda - name: aws-sdk-cpp - version: 1.11.156 - build: h99d1da1_3 - build_number: 3 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/aws-sdk-cpp-1.11.156-h99d1da1_3.conda - sha256: b757126d923fb4bf78c4d97025d0b636579a7814d319e493219e36e8f0ab8439 - md5: c2fed554b5b634befb8849c87dc193c4 - depends: - - aws-c-common >=0.9.3,<0.9.4.0a0 - - aws-c-event-stream >=0.3.2,<0.3.3.0a0 - - aws-checksums >=0.1.17,<0.1.18.0a0 - - aws-crt-cpp >=0.23.1,<0.23.2.0a0 - - libcurl >=8.3.0,<9.0a0 - - libcxx >=15.0.7 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.1.3,<4.0a0 - license: Apache-2.0 - license_family: Apache - size: 3190406 - timestamp: 1696018395381 - kind: conda name: babel version: 2.14.0 @@ -2527,6 +1508,8 @@ packages: - setuptools license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/babel?source=hash-mapping size: 7609750 timestamp: 1702422720584 - kind: conda @@ -2543,6 +1526,8 @@ packages: - soupsieve >=1.2 license: MIT license_family: MIT + purls: + - pkg:pypi/beautifulsoup4?source=hash-mapping size: 118200 timestamp: 1705564819537 - kind: conda @@ -2559,6 +1544,7 @@ packages: - sysroot_linux-64 license: GPL-3.0-only license_family: GPL + purls: [] size: 6233238 timestamp: 1727304698672 - kind: conda @@ -2578,6 +1564,8 @@ packages: - webencodings license: Apache-2.0 license_family: Apache + purls: + - pkg:pypi/bleach?source=hash-mapping size: 131220 timestamp: 1696630354218 - kind: conda @@ -2597,6 +1585,7 @@ packages: - zstd >=1.5.5,<1.6.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 48692 timestamp: 1693657088079 - kind: conda @@ -2615,6 +1604,7 @@ packages: - zstd >=1.5.5,<1.6.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 33450 timestamp: 1693657320331 - kind: conda @@ -2635,6 +1625,7 @@ packages: - zstd >=1.5.5,<1.6.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 50069 timestamp: 1693657396550 - kind: conda @@ -2653,6 +1644,7 @@ packages: - zstd >=1.5.5,<1.6.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 49891 timestamp: 1693657206065 - kind: conda @@ -2670,6 +1662,7 @@ packages: - libbrotlienc 1.0.9 h1a8c8d9_9 license: MIT license_family: MIT + purls: [] size: 20228 timestamp: 1687884815549 - kind: conda @@ -2688,6 +1681,7 @@ packages: - libbrotlienc 1.1.0 h00291cd_2 license: MIT license_family: MIT + purls: [] size: 19450 timestamp: 1725267851605 - kind: conda @@ -2707,6 +1701,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 19264 timestamp: 1725267697072 - kind: conda @@ -2723,6 +1718,7 @@ packages: - libbrotlienc 1.0.9 h1a8c8d9_9 license: MIT license_family: MIT + purls: [] size: 18182 timestamp: 1687884787034 - kind: conda @@ -2740,6 +1736,7 @@ packages: - libbrotlienc 1.1.0 h00291cd_2 license: MIT license_family: MIT + purls: [] size: 16643 timestamp: 1725267837325 - kind: conda @@ -2758,6 +1755,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 18881 timestamp: 1725267688731 - kind: conda @@ -2778,6 +1776,8 @@ packages: - libbrotlicommon 1.0.9 h1a8c8d9_9 license: MIT license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping size: 325644 timestamp: 1687884931491 - kind: conda @@ -2798,6 +1798,8 @@ packages: - libbrotlicommon 1.1.0 h00291cd_2 license: MIT license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping size: 362793 timestamp: 1725268121746 - kind: conda @@ -2819,6 +1821,8 @@ packages: - libbrotlicommon 1.1.0 h2466b09_2 license: MIT license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping size: 321576 timestamp: 1725268612274 - kind: conda @@ -2840,6 +1844,8 @@ packages: - libbrotlicommon 1.1.0 hb9d3cd8_2 license: MIT license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping size: 349668 timestamp: 1725267875087 - kind: conda @@ -2855,6 +1861,7 @@ packages: - libcxx >=11.0.0 license: MIT license_family: MIT + purls: [] size: 183140 timestamp: 1607309287088 - kind: conda @@ -2871,6 +1878,7 @@ packages: - libstdcxx-ng >=9.3.0 license: MIT license_family: MIT + purls: [] size: 204879 timestamp: 1607309237341 - kind: conda @@ -2886,6 +1894,7 @@ packages: - libcxx >=11.0.0 license: MIT license_family: MIT + purls: [] size: 178300 timestamp: 1607309265926 - kind: conda @@ -2903,6 +1912,7 @@ packages: - vc14_runtime >=14.29.30139 license: bzip2-1.0.6 license_family: BSD + purls: [] size: 54927 timestamp: 1720974860185 - kind: conda @@ -2919,6 +1929,7 @@ packages: - libgcc-ng >=12 license: bzip2-1.0.6 license_family: BSD + purls: [] size: 252783 timestamp: 1720974456583 - kind: conda @@ -2934,6 +1945,7 @@ packages: - __osx >=11.0 license: bzip2-1.0.6 license_family: BSD + purls: [] size: 122909 timestamp: 1720974522888 - kind: conda @@ -2949,6 +1961,7 @@ packages: - __osx >=10.13 license: bzip2-1.0.6 license_family: BSD + purls: [] size: 134188 timestamp: 1720974491916 - kind: conda @@ -2965,6 +1978,7 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: [] size: 192859 timestamp: 1729006899124 - kind: conda @@ -2979,6 +1993,7 @@ packages: - __osx >=10.13 license: MIT license_family: MIT + purls: [] size: 182342 timestamp: 1729006698430 - kind: conda @@ -2993,6 +2008,7 @@ packages: - __osx >=11.0 license: MIT license_family: MIT + purls: [] size: 177487 timestamp: 1729006763496 - kind: conda @@ -3008,6 +2024,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 205797 timestamp: 1729006575652 - kind: conda @@ -3025,6 +2042,7 @@ packages: - zstd >=1.5.5,<1.6.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 237019 timestamp: 1703769395331 - kind: conda @@ -3043,6 +2061,7 @@ packages: - zstd >=1.5.5,<1.6.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 333736 timestamp: 1703769067617 - kind: conda @@ -3060,6 +2079,7 @@ packages: - zstd >=1.5.5,<1.6.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 278429 timestamp: 1712415524207 - kind: conda @@ -3079,6 +2099,7 @@ packages: - zstd >=1.5.5,<1.6.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 210505 timestamp: 1712415661052 - kind: conda @@ -3090,6 +2111,7 @@ packages: sha256: 0fcac3a7ffcc556649e034a1802aedf795e64227eaa7194d207b01eaf26454c4 md5: 4c4fd67c18619be5aa65dc5b6c72e490 license: ISC + purls: [] size: 158773 timestamp: 1725019107649 - kind: conda @@ -3101,6 +2123,7 @@ packages: sha256: 593f302d0f44c2c771e1614ee6d56fffdc7d616e6f187669c8b0e34ffce3e1ae md5: b7e5424e7f06547a903d28e4651dbb21 license: ISC + purls: [] size: 158665 timestamp: 1725019059295 - kind: conda @@ -3112,6 +2135,7 @@ packages: sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea md5: c27d1c142233b5bc9ca570c6e2e0c244 license: ISC + purls: [] size: 159003 timestamp: 1725018903918 - kind: conda @@ -3123,6 +2147,7 @@ packages: sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 md5: 40dec13fd8348dbe303e57be74bd3d35 license: ISC + purls: [] size: 158482 timestamp: 1725019034582 - kind: conda @@ -3139,6 +2164,7 @@ packages: - cached_property >=1.5.2,<1.5.3.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 4134 timestamp: 1615209571450 - kind: conda @@ -3155,6 +2181,8 @@ packages: - python >=3.6 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/cached-property?source=hash-mapping size: 11065 timestamp: 1615209567874 - kind: conda @@ -3177,6 +2205,7 @@ packages: - pixman >=0.40.0,<1.0a0 - zlib license: LGPL-2.1-only or MPL-1.1 + purls: [] size: 998078 timestamp: 1692961080870 - kind: conda @@ -3206,6 +2235,7 @@ packages: - xorg-libxrender >=0.9.11,<0.10.0a0 - zlib license: LGPL-2.1-only or MPL-1.1 + purls: [] size: 982351 timestamp: 1697028423052 - kind: conda @@ -3220,6 +2250,8 @@ packages: depends: - python >=3.7 license: ISC + purls: + - pkg:pypi/certifi?source=hash-mapping size: 163752 timestamp: 1725278204397 - kind: conda @@ -3239,6 +2271,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping size: 229224 timestamp: 1725560797724 - kind: conda @@ -3258,6 +2292,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping size: 243532 timestamp: 1725560630552 - kind: conda @@ -3277,6 +2313,8 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping size: 238887 timestamp: 1725561032032 - kind: conda @@ -3295,6 +2333,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping size: 229844 timestamp: 1725560765436 - kind: conda @@ -3312,6 +2352,7 @@ packages: - libgfortran5 >=11.3.0 - libzlib >=1.2.13,<2.0.0a0 license: LicenseRef-fitsio + purls: [] size: 748569 timestamp: 1668757847978 - kind: conda @@ -3326,6 +2367,7 @@ packages: - libcxx >=15.0.7 license: BSD-3-Clause license_family: BSD + purls: [] size: 116255 timestamp: 1684263271583 - kind: conda @@ -3342,6 +2384,7 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD + purls: [] size: 95857 timestamp: 1684263404702 - kind: conda @@ -3357,6 +2400,7 @@ packages: - libstdcxx-ng >=12 license: BSD-3-Clause license_family: BSD + purls: [] size: 150272 timestamp: 1684262827894 - kind: conda @@ -3371,6 +2415,7 @@ packages: - libcxx >=15.0.7 license: BSD-3-Clause license_family: BSD + purls: [] size: 138062 timestamp: 1684263362836 - kind: conda @@ -3386,6 +2431,8 @@ packages: - python >=3.7 license: MIT license_family: MIT + purls: + - pkg:pypi/charset-normalizer?source=hash-mapping size: 47314 timestamp: 1728479405343 - kind: conda @@ -3402,6 +2449,8 @@ packages: - python >=3.8 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping size: 84509 timestamp: 1689752121789 - kind: conda @@ -3419,6 +2468,8 @@ packages: - python >=3.8 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping size: 84826 timestamp: 1689752336806 - kind: conda @@ -3434,6 +2485,8 @@ packages: - python >=3.7 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping size: 25170 timestamp: 1666700778190 - kind: conda @@ -3450,6 +2503,8 @@ packages: - traitlets >=5.3 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/comm?source=hash-mapping size: 12134 timestamp: 1710320435158 - kind: conda @@ -3465,6 +2520,8 @@ packages: - python >=3.6 license: MIT license_family: MIT + purls: + - pkg:pypi/configparser?source=hash-mapping size: 22043 timestamp: 1724028414707 - kind: conda @@ -3485,6 +2542,8 @@ packages: - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/coverage?source=hash-mapping size: 319322 timestamp: 1729007403734 - kind: conda @@ -3504,6 +2563,8 @@ packages: - tomli license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/coverage?source=hash-mapping size: 293572 timestamp: 1729007047754 - kind: conda @@ -3522,6 +2583,8 @@ packages: - tomli license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/coverage?source=hash-mapping size: 292648 timestamp: 1729007051764 - kind: conda @@ -3541,6 +2604,8 @@ packages: - tomli license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/coverage?source=hash-mapping size: 293977 timestamp: 1729007175750 - kind: conda @@ -3557,6 +2622,7 @@ packages: - python 3.10.15.* - python_abi * *_cp310 license: Python-2.0 + purls: [] size: 48936 timestamp: 1729041693552 - kind: conda @@ -3569,6 +2635,7 @@ packages: md5: 9d88733c715300a39f8ca2e936b7808d license: BSD-2-Clause license_family: BSD + purls: [] size: 668439 timestamp: 1685696184631 - kind: conda @@ -3581,6 +2648,7 @@ packages: md5: 5a74cdee497e6b65173e10d94582fae6 license: BSD-2-Clause license_family: BSD + purls: [] size: 316394 timestamp: 1685695959391 - kind: conda @@ -3597,6 +2665,7 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-2-Clause license_family: BSD + purls: [] size: 618643 timestamp: 1685696352968 - kind: conda @@ -3611,6 +2680,7 @@ packages: - libgcc-ng >=12 license: BSD-2-Clause license_family: BSD + purls: [] size: 760229 timestamp: 1685695754230 - kind: conda @@ -3628,6 +2698,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/debugpy?source=hash-mapping size: 2049152 timestamp: 1728594342700 - kind: conda @@ -3646,6 +2718,8 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: + - pkg:pypi/debugpy?source=hash-mapping size: 3092827 timestamp: 1728594977065 - kind: conda @@ -3664,6 +2738,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/debugpy?source=hash-mapping size: 2051562 timestamp: 1728594341189 - kind: conda @@ -3682,6 +2758,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/debugpy?source=hash-mapping size: 2169154 timestamp: 1728594300052 - kind: conda @@ -3697,6 +2775,8 @@ packages: - python >=3.5 license: BSD-2-Clause license_family: BSD + purls: + - pkg:pypi/decorator?source=hash-mapping size: 12072 timestamp: 1641555714315 - kind: conda @@ -3712,6 +2792,8 @@ packages: - python >=3.6 license: PSF-2.0 license_family: PSF + purls: + - pkg:pypi/defusedxml?source=hash-mapping size: 24062 timestamp: 1615232388757 - kind: conda @@ -3727,6 +2809,8 @@ packages: - python >=3.6 license: MIT license_family: MIT + purls: + - pkg:pypi/entrypoints?source=hash-mapping size: 9199 timestamp: 1643888357950 - kind: conda @@ -3741,6 +2825,8 @@ packages: depends: - python >=3.7 license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping size: 20418 timestamp: 1720869435725 - kind: conda @@ -3756,6 +2842,8 @@ packages: - python >=2.7 license: MIT license_family: MIT + purls: + - pkg:pypi/executing?source=hash-mapping size: 28337 timestamp: 1725214501850 - kind: conda @@ -3772,6 +2860,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 137891 timestamp: 1725568750673 - kind: conda @@ -3787,23 +2876,26 @@ packages: - libexpat 2.6.3 hf9b8971_0 license: MIT license_family: MIT + purls: [] size: 125005 timestamp: 1725568799108 - kind: conda name: flaky - version: 3.7.0 - build: pyh9f0ad1d_0 + version: 3.8.1 + build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/flaky-3.7.0-pyh9f0ad1d_0.tar.bz2 - sha256: fbb02837c933c4aab24e60aaa9cc7ed164f7771845fa810ccba37d4cf390d258 - md5: d20be9ed08052d16593c88d51b774a82 + url: https://conda.anaconda.org/conda-forge/noarch/flaky-3.8.1-pyhd8ed1ab_0.conda + sha256: 57434214a3c5e33f06688896981d27262d823ae75b7b496e2d9c40c14f500c97 + md5: 4673657910db1d7914dc272124fe03ae depends: - - python - license: Apache 2.0 + - python >=3.6 + license: Apache-2.0 license_family: Apache - size: 21626 - timestamp: 1594311827726 + purls: + - pkg:pypi/flaky?source=hash-mapping + size: 22156 + timestamp: 1710293112378 - kind: conda name: font-ttf-dejavu-sans-mono version: '2.37' @@ -3815,6 +2907,7 @@ packages: md5: 0c96522c6bdaed4b1566d11387caaf45 license: BSD-3-Clause license_family: BSD + purls: [] size: 397370 timestamp: 1566932522327 - kind: conda @@ -3828,6 +2921,7 @@ packages: md5: 34893075a5c9e55cdafac56607368fc6 license: OFL-1.1 license_family: Other + purls: [] size: 96530 timestamp: 1620479909603 - kind: conda @@ -3841,6 +2935,7 @@ packages: md5: 4d59c254e01d9cde7957100457e2d5fb license: OFL-1.1 license_family: Other + purls: [] size: 700814 timestamp: 1620479612257 - kind: conda @@ -3855,6 +2950,7 @@ packages: md5: 49023d73832ef61042f6a237cb2687e7 license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 license_family: Other + purls: [] size: 1620504 timestamp: 1727511233259 - kind: conda @@ -3873,6 +2969,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: MIT license_family: MIT + purls: [] size: 272010 timestamp: 1674828850194 - kind: conda @@ -3889,6 +2986,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: MIT license_family: MIT + purls: [] size: 237668 timestamp: 1674829263740 - kind: conda @@ -3904,6 +3002,7 @@ packages: - fonts-conda-forge license: BSD-3-Clause license_family: BSD + purls: [] size: 3667 timestamp: 1566974674465 - kind: conda @@ -3922,6 +3021,7 @@ packages: - font-ttf-ubuntu license: BSD-3-Clause license_family: BSD + purls: [] size: 4102 timestamp: 1566932280397 - kind: conda @@ -3938,6 +3038,8 @@ packages: - python >=2.7,<4 license: MPL-2.0 license_family: MOZILLA + purls: + - pkg:pypi/fqdn?source=hash-mapping size: 14395 timestamp: 1638810388635 - kind: conda @@ -3954,6 +3056,7 @@ packages: - libpng >=1.6.39,<1.7.0a0 - libzlib >=1.2.13,<2.0.0a0 license: GPL-2.0-only OR FTL + purls: [] size: 634972 timestamp: 1694615932610 - kind: conda @@ -3969,6 +3072,7 @@ packages: - libpng >=1.6.39,<1.7.0a0 - libzlib >=1.2.13,<2.0.0a0 license: GPL-2.0-only OR FTL + purls: [] size: 599300 timestamp: 1694616137838 - kind: conda @@ -3984,6 +3088,7 @@ packages: - libpng >=1.6.39,<1.7.0a0 - libzlib >=1.2.13,<2.0.0a0 license: GPL-2.0-only OR FTL + purls: [] size: 596430 timestamp: 1694616332835 - kind: conda @@ -4002,6 +3107,7 @@ packages: - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: GPL-2.0-only OR FTL + purls: [] size: 510306 timestamp: 1694616398888 - kind: conda @@ -4013,6 +3119,7 @@ packages: sha256: 4b37ea851a2cf85edf0a63d2a63266847ec3dcbba4a31156d430cdd6aa811303 md5: c64443234ff91d70cb9c7dc926c58834 license: LGPL-2.1 + purls: [] size: 60255 timestamp: 1604417405528 - kind: conda @@ -4028,6 +3135,8 @@ packages: - python >=3.8 license: MIT license_family: MIT + purls: + - pkg:pypi/future?source=hash-mapping size: 364081 timestamp: 1708610254418 - kind: conda @@ -4049,6 +3158,7 @@ packages: - sysroot_linux-64 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 72496116 timestamp: 1729027827248 - kind: conda @@ -4066,6 +3176,7 @@ packages: - libtiff >=4.5.0,<4.6.0a0 license: LGPL-2.1-or-later license_family: LGPL + purls: [] size: 534020 timestamp: 1672757649019 - kind: conda @@ -4089,6 +3200,7 @@ packages: - libintl 0.22.5 h8414b35_3 - libintl-devel 0.22.5 h8414b35_3 license: LGPL-2.1-or-later AND GPL-3.0-or-later + purls: [] size: 483255 timestamp: 1723627203687 - kind: conda @@ -4106,57 +3218,9 @@ packages: - libintl 0.22.5 h8414b35_3 license: GPL-3.0-or-later license_family: GPL + purls: [] size: 2467439 timestamp: 1723627140130 -- kind: conda - name: gflags - version: 2.2.2 - build: h5888daf_1005 - build_number: 1005 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - sha256: 6c33bf0c4d8f418546ba9c250db4e4221040936aef8956353bc764d4877bc39a - md5: d411fc29e338efb48c5fd4576d71d881 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - license: BSD-3-Clause - license_family: BSD - size: 119654 - timestamp: 1726600001928 -- kind: conda - name: gflags - version: 2.2.2 - build: hac325c4_1005 - build_number: 1005 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hac325c4_1005.conda - sha256: c0bea66f71a6f4baa8d4f0248e17f65033d558d9e882c0af571b38bcca3e4b46 - md5: a26de8814083a6971f14f9c8c3cb36c2 - depends: - - __osx >=10.13 - - libcxx >=17 - license: BSD-3-Clause - license_family: BSD - size: 84946 - timestamp: 1726600054963 -- kind: conda - name: gflags - version: 2.2.2 - build: hf9b8971_1005 - build_number: 1005 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - sha256: fd56ed8a1dab72ab90d8a8929b6f916a6d9220ca297ff077f8f04c5ed3408e20 - md5: 57a511a5905caa37540eb914dfcbf1fb - depends: - - __osx >=11.0 - - libcxx >=17 - license: BSD-3-Clause - license_family: BSD - size: 82090 - timestamp: 1726600145480 - kind: conda name: giflib version: 5.2.1 @@ -4168,6 +3232,7 @@ packages: md5: f39a05d3dbb0e5024b7deabb2c0993f1 license: MIT license_family: MIT + purls: [] size: 71963 timestamp: 1678718059849 - kind: conda @@ -4180,6 +3245,7 @@ packages: md5: 03e8c9b4d3da5f3d6eabdd020c2d63ac license: MIT license_family: MIT + purls: [] size: 74516 timestamp: 1712692686914 - kind: conda @@ -4196,6 +3262,7 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: [] size: 84497 timestamp: 1712692952874 - kind: conda @@ -4210,6 +3277,7 @@ packages: - libgcc-ng >=12 license: MIT license_family: MIT + purls: [] size: 77248 timestamp: 1712692454246 - kind: conda @@ -4228,6 +3296,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 - python * license: LGPL-2.1-or-later + purls: [] size: 482194 timestamp: 1688694942192 - kind: conda @@ -4243,54 +3312,9 @@ packages: - libglib 2.76.4 h24e9cb9_0 - libzlib >=1.2.13,<2.0.0a0 license: LGPL-2.1-or-later - size: 100669 - timestamp: 1688694886885 -- kind: conda - name: glog - version: 0.6.0 - build: h6da1cb0_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.6.0-h6da1cb0_0.tar.bz2 - sha256: 4d772c42477f64be708594ac45870feba3e838977871118eb25e00deb0e9a73c - md5: 5a570729c7709399cf8511aeeda6f989 - depends: - - gflags >=2.2.2,<2.3.0a0 - - libcxx >=12.0.1 - license: BSD-3-Clause - license_family: BSD - size: 97658 - timestamp: 1649144191039 -- kind: conda - name: glog - version: 0.6.0 - build: h6f12383_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/glog-0.6.0-h6f12383_0.tar.bz2 - sha256: 888cbcfb67f6e3d88a4c4ab9d26c9a406f620c4101a35dc6d2dbadb95f2221d4 - md5: b31f3565cb84435407594e548a2fb7b2 - depends: - - gflags >=2.2.2,<2.3.0a0 - - libgcc-ng >=10.3.0 - - libstdcxx-ng >=10.3.0 - license: BSD-3-Clause - license_family: BSD - size: 114321 - timestamp: 1649143789233 -- kind: conda - name: glog - version: 0.6.0 - build: h8ac2a54_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/glog-0.6.0-h8ac2a54_0.tar.bz2 - sha256: fdb38560094fb4a952346dc72a79b3cb09e23e4d0cae9ba4f524e6e88203d3c8 - md5: 69eb97ca709a136c53fdca1f2fd33ddf - depends: - - gflags >=2.2.2,<2.3.0a0 - - libcxx >=12.0.1 - license: BSD-3-Clause - license_family: BSD - size: 100624 - timestamp: 1649143914155 + purls: [] + size: 100669 + timestamp: 1688694886885 - kind: conda name: graphite2 version: 1.3.13 @@ -4305,6 +3329,7 @@ packages: - libstdcxx-ng >=12 license: LGPL-2.0-or-later license_family: LGPL + purls: [] size: 96855 timestamp: 1711634169756 - kind: conda @@ -4320,6 +3345,7 @@ packages: - libcxx >=16 license: LGPL-2.0-or-later license_family: LGPL + purls: [] size: 79774 timestamp: 1711634444608 - kind: conda @@ -4340,6 +3366,8 @@ packages: - python_abi 3.10.* *_cp310 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/grpcio?source=hash-mapping size: 710917 timestamp: 1692025409041 - kind: conda @@ -4360,6 +3388,8 @@ packages: - python_abi 3.10.* *_cp310 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/grpcio?source=hash-mapping size: 764791 timestamp: 1692023633876 - kind: conda @@ -4380,6 +3410,8 @@ packages: - python_abi 3.10.* *_cp310 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/grpcio?source=hash-mapping size: 695887 timestamp: 1692025592968 - kind: conda @@ -4401,6 +3433,8 @@ packages: - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/grpcio?source=hash-mapping size: 607527 timestamp: 1692025811162 - kind: conda @@ -4417,6 +3451,8 @@ packages: - typing_extensions license: MIT license_family: MIT + purls: + - pkg:pypi/h11?source=hash-mapping size: 48251 timestamp: 1664132995560 - kind: conda @@ -4434,6 +3470,8 @@ packages: - python >=3.6.1 license: MIT license_family: MIT + purls: + - pkg:pypi/h2?source=hash-mapping size: 46754 timestamp: 1634280590080 - kind: conda @@ -4453,6 +3491,7 @@ packages: - libglib >=2.76.4,<3.0a0 license: MIT license_family: MIT + purls: [] size: 1244033 timestamp: 1694361324971 - kind: conda @@ -4473,6 +3512,7 @@ packages: - libstdcxx-ng >=12 license: MIT license_family: MIT + purls: [] size: 1598244 timestamp: 1715701061364 - kind: conda @@ -4488,6 +3528,8 @@ packages: - python license: MIT license_family: MIT + purls: + - pkg:pypi/hpack?source=hash-mapping size: 25341 timestamp: 1598856368685 - kind: conda @@ -4503,6 +3545,8 @@ packages: - python >=3.6 license: MIT license_family: MIT + purls: + - pkg:pypi/hyperframe?source=hash-mapping size: 14646 timestamp: 1619110249723 - kind: conda @@ -4518,6 +3562,7 @@ packages: - libstdcxx-ng >=12 license: MIT license_family: MIT + purls: [] size: 12089150 timestamp: 1692900650789 - kind: conda @@ -4530,6 +3575,7 @@ packages: md5: 8521bd47c0e11c5902535bb1a17c565f license: MIT license_family: MIT + purls: [] size: 11997841 timestamp: 1692902104771 - kind: conda @@ -4542,6 +3588,7 @@ packages: md5: 5cc301d759ec03f28328428e28f65591 license: MIT license_family: MIT + purls: [] size: 11787527 timestamp: 1692901622519 - kind: conda @@ -4557,6 +3604,8 @@ packages: - python >=3.6 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/idna?source=hash-mapping size: 49837 timestamp: 1726459583613 - kind: conda @@ -4603,6 +3652,8 @@ packages: - zstd >=1.5.2,<1.6.0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/imagecodecs?source=hash-mapping size: 1612235 timestamp: 1674483915355 - kind: conda @@ -4648,6 +3699,8 @@ packages: - zstd >=1.5.5,<1.6.0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/imagecodecs?source=hash-mapping size: 1924280 timestamp: 1695139671006 - kind: conda @@ -4694,6 +3747,8 @@ packages: - zstd >=1.5.5,<1.6.0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/imagecodecs?source=hash-mapping size: 1647027 timestamp: 1711243512917 - kind: conda @@ -4740,6 +3795,8 @@ packages: - zstd >=1.5.5,<1.6.0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/imagecodecs?source=hash-mapping size: 1579418 timestamp: 1711243735862 - kind: conda @@ -4758,6 +3815,8 @@ packages: - python >=3 license: BSD-2-Clause license_family: BSD + purls: + - pkg:pypi/imageio?source=hash-mapping size: 292067 timestamp: 1729190805302 - kind: conda @@ -4774,6 +3833,8 @@ packages: - zipp >=0.5 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=hash-mapping size: 28646 timestamp: 1726082927916 - kind: conda @@ -4789,6 +3850,7 @@ packages: - importlib-metadata >=8.5.0,<8.5.1.0a0 license: Apache-2.0 license_family: APACHE + purls: [] size: 9385 timestamp: 1726082930346 - kind: conda @@ -4807,6 +3869,8 @@ packages: - importlib-resources >=6.4.5,<6.4.6.0a0 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/importlib-resources?source=hash-mapping size: 32725 timestamp: 1725921462405 - kind: conda @@ -4822,6 +3886,8 @@ packages: - python >=3.7 license: MIT license_family: MIT + purls: + - pkg:pypi/iniconfig?source=hash-mapping size: 11101 timestamp: 1673103208955 - kind: conda @@ -4835,6 +3901,7 @@ packages: md5: 2d89243bfb53652c182a7c73182cce4f license: LicenseRef-IntelSimplifiedSoftwareOct2022 license_family: Proprietary + purls: [] size: 1852356 timestamp: 1723739573141 - kind: conda @@ -4863,6 +3930,8 @@ packages: - traitlets >=5.4.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/ipykernel?source=hash-mapping size: 119084 timestamp: 1719845605084 - kind: conda @@ -4891,6 +3960,8 @@ packages: - traitlets >=5.4.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/ipykernel?source=hash-mapping size: 119853 timestamp: 1719845858082 - kind: conda @@ -4920,6 +3991,8 @@ packages: - traitlets >=5.4.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/ipykernel?source=hash-mapping size: 119568 timestamp: 1719845667420 - kind: conda @@ -4947,6 +4020,8 @@ packages: - typing_extensions >=4.6 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/ipython?source=hash-mapping size: 600094 timestamp: 1727944801855 - kind: conda @@ -4974,6 +4049,8 @@ packages: - typing_extensions >=4.6 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/ipython?source=hash-mapping size: 599622 timestamp: 1727945272442 - kind: conda @@ -4994,6 +4071,8 @@ packages: - widgetsnbextension >=4.0.7,<4.1.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/ipywidgets?source=hash-mapping size: 113313 timestamp: 1690877217459 - kind: conda @@ -5010,6 +4089,8 @@ packages: - python >=3.7 license: MIT license_family: MIT + purls: + - pkg:pypi/isoduration?source=hash-mapping size: 17189 timestamp: 1638811664194 - kind: conda @@ -5026,6 +4107,8 @@ packages: - python >=3.6 license: MIT license_family: MIT + purls: + - pkg:pypi/jedi?source=hash-mapping size: 841312 timestamp: 1696326218364 - kind: conda @@ -5042,6 +4125,8 @@ packages: - python >=3.7 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jinja2?source=hash-mapping size: 111565 timestamp: 1715127275924 - kind: conda @@ -5056,6 +4141,7 @@ packages: constrains: - libjpeg-turbo <0.0.0a license: IJG + purls: [] size: 218587 timestamp: 1676177519876 - kind: conda @@ -5071,6 +4157,8 @@ packages: - python >=3.7,<4.0 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/json5?source=hash-mapping size: 27995 timestamp: 1712986338874 - kind: conda @@ -5087,6 +4175,8 @@ packages: - python_abi 3.10.* *_cp310 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jsonpointer?source=hash-mapping size: 15789 timestamp: 1725303070637 - kind: conda @@ -5103,6 +4193,8 @@ packages: - python_abi 3.10.* *_cp310 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jsonpointer?source=hash-mapping size: 40682 timestamp: 1725303369662 - kind: conda @@ -5120,6 +4212,8 @@ packages: - python_abi 3.10.* *_cp310 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jsonpointer?source=hash-mapping size: 16203 timestamp: 1725303244939 - kind: conda @@ -5136,6 +4230,8 @@ packages: - python_abi 3.10.* *_cp310 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jsonpointer?source=hash-mapping size: 15658 timestamp: 1725302992487 - kind: conda @@ -5157,6 +4253,8 @@ packages: - rpds-py >=0.7.1 license: MIT license_family: MIT + purls: + - pkg:pypi/jsonschema?source=hash-mapping size: 74323 timestamp: 1720529611305 - kind: conda @@ -5173,6 +4271,8 @@ packages: - referencing >=0.31.0 license: MIT license_family: MIT + purls: + - pkg:pypi/jsonschema-specifications?source=hash-mapping size: 16165 timestamp: 1728418976382 - kind: conda @@ -5196,6 +4296,7 @@ packages: - webcolors >=24.6.0 license: MIT license_family: MIT + purls: [] size: 7143 timestamp: 1720529619500 - kind: conda @@ -5213,6 +4314,8 @@ packages: - python >=3.8 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jupyter-lsp?source=hash-mapping size: 55539 timestamp: 1712707521811 - kind: conda @@ -5234,6 +4337,8 @@ packages: - traitlets >=5.3 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jupyter-client?source=hash-mapping size: 106055 timestamp: 1726610805505 - kind: conda @@ -5253,6 +4358,8 @@ packages: - traitlets >=5.3 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jupyter-core?source=hash-mapping size: 57671 timestamp: 1727163547058 - kind: conda @@ -5274,6 +4381,8 @@ packages: - traitlets >=5.3 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jupyter-core?source=hash-mapping size: 58269 timestamp: 1727164026641 - kind: conda @@ -5296,6 +4405,8 @@ packages: - traitlets >=5.3 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jupyter-events?source=hash-mapping size: 21475 timestamp: 1710805759187 - kind: conda @@ -5329,6 +4440,8 @@ packages: - websocket-client >=1.7 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jupyter-server?source=hash-mapping size: 323978 timestamp: 1720816754998 - kind: conda @@ -5345,6 +4458,8 @@ packages: - terminado >=0.8.3 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jupyter-server-terminals?source=hash-mapping size: 19818 timestamp: 1710262791393 - kind: conda @@ -5374,6 +4489,8 @@ packages: - traitlets license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jupyterlab?source=hash-mapping size: 6000195 timestamp: 1692016028799 - kind: conda @@ -5390,6 +4507,8 @@ packages: - python >=3.7 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jupyterlab-pygments?source=hash-mapping size: 18651 timestamp: 1700744201155 - kind: conda @@ -5415,6 +4534,8 @@ packages: - openapi-core >=0.18.0,<0.19.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jupyterlab-server?source=hash-mapping size: 49355 timestamp: 1721163412436 - kind: conda @@ -5432,6 +4553,8 @@ packages: - jupyterlab >=3,<5 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/jupyterlab-widgets?source=hash-mapping size: 186024 timestamp: 1724331451102 - kind: conda @@ -5452,6 +4575,8 @@ packages: - toml license: MIT license_family: MIT + purls: + - pkg:pypi/jupytext?source=hash-mapping size: 179371 timestamp: 1690758199047 - kind: conda @@ -5465,6 +4590,7 @@ packages: md5: cfaf81d843a80812fe16a68bdae60562 license: BSD-2-Clause license_family: BSD + purls: [] size: 220376 timestamp: 1703334073774 - kind: conda @@ -5478,6 +4604,7 @@ packages: md5: 879997fd868f8e9e4c2a12aec8583799 license: BSD-2-Clause license_family: BSD + purls: [] size: 197843 timestamp: 1703334079437 - kind: conda @@ -5495,6 +4622,7 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-2-Clause license_family: BSD + purls: [] size: 355340 timestamp: 1703334132631 - kind: conda @@ -5510,6 +4638,7 @@ packages: - libgcc-ng >=12 license: BSD-2-Clause license_family: BSD + purls: [] size: 239104 timestamp: 1703333860145 - kind: conda @@ -5526,6 +4655,7 @@ packages: - sysroot_linux-64 ==2.17 license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later AND MPL-2.0 license_family: GPL + purls: [] size: 945088 timestamp: 1727437651716 - kind: conda @@ -5539,6 +4669,7 @@ packages: depends: - libgcc-ng >=10.3.0 license: LGPL-2.1-or-later + purls: [] size: 117831 timestamp: 1646151697040 - kind: conda @@ -5557,6 +4688,7 @@ packages: - openssl >=3.3.1,<4.0a0 license: MIT license_family: MIT + purls: [] size: 1155530 timestamp: 1719463474401 - kind: conda @@ -5575,6 +4707,7 @@ packages: - openssl >=3.3.1,<4.0a0 license: MIT license_family: MIT + purls: [] size: 1185323 timestamp: 1719463492984 - kind: conda @@ -5594,6 +4727,7 @@ packages: - openssl >=3.3.1,<4.0a0 license: MIT license_family: MIT + purls: [] size: 1370023 timestamp: 1719463201255 - kind: conda @@ -5611,6 +4745,7 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: [] size: 712034 timestamp: 1719463874284 - kind: conda @@ -5629,6 +4764,8 @@ packages: - python >=3.7 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/lazy-loader?source=hash-mapping size: 16193 timestamp: 1723774444381 - kind: conda @@ -5646,6 +4783,7 @@ packages: - python >=3.7 license: BSD-3-Clause license_family: BSD + purls: [] size: 6513 timestamp: 1723774453792 - kind: conda @@ -5661,6 +4799,7 @@ packages: - libtiff >=4.5.0,<4.6.0a0 license: MIT license_family: MIT + purls: [] size: 205835 timestamp: 1678104773395 - kind: conda @@ -5678,6 +4817,7 @@ packages: - libtiff >=4.6.0,<4.8.0a0 license: MIT license_family: MIT + purls: [] size: 240620 timestamp: 1694650174930 - kind: conda @@ -5696,6 +4836,7 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: [] size: 507632 timestamp: 1701648249706 - kind: conda @@ -5711,6 +4852,7 @@ packages: - libtiff >=4.6.0,<4.8.0a0 license: MIT license_family: MIT + purls: [] size: 224432 timestamp: 1701648089496 - kind: conda @@ -5728,6 +4870,7 @@ packages: - binutils_impl_linux-64 2.43 license: GPL-3.0-only license_family: GPL + purls: [] size: 669616 timestamp: 1727304687962 - kind: conda @@ -5743,6 +4886,7 @@ packages: - libstdcxx-ng >=12 license: Apache-2.0 license_family: Apache + purls: [] size: 281798 timestamp: 1657977462600 - kind: conda @@ -5758,6 +4902,7 @@ packages: - vs2015_runtime >=14.29.30037 license: Apache-2.0 license_family: Apache + purls: [] size: 194365 timestamp: 1657977692274 - kind: conda @@ -5772,6 +4917,7 @@ packages: - libcxx >=13.0.1 license: Apache-2.0 license_family: Apache + purls: [] size: 215721 timestamp: 1657977558796 - kind: conda @@ -5786,6 +4932,7 @@ packages: - libcxx >=13.0.1 license: Apache-2.0 license_family: Apache + purls: [] size: 290319 timestamp: 1657977526749 - kind: conda @@ -5803,6 +4950,7 @@ packages: - abseil-cpp =20230125.3 license: Apache-2.0 license_family: Apache + purls: [] size: 1128875 timestamp: 1688113187054 - kind: conda @@ -5820,6 +4968,7 @@ packages: - abseil-cpp =20230125.3 license: Apache-2.0 license_family: Apache + purls: [] size: 1160586 timestamp: 1688113314656 - kind: conda @@ -5838,6 +4987,7 @@ packages: - libabseil-static =20230125.3=cxx17* license: Apache-2.0 license_family: Apache + purls: [] size: 1240376 timestamp: 1688112986128 - kind: conda @@ -5857,6 +5007,7 @@ packages: - libabseil-static =20230125.3=cxx17* license: Apache-2.0 license_family: Apache + purls: [] size: 1504536 timestamp: 1688113294765 - kind: conda @@ -5872,6 +5023,7 @@ packages: - libstdcxx-ng >=12 license: BSD-2-Clause license_family: BSD + purls: [] size: 35446 timestamp: 1711021212685 - kind: conda @@ -5888,6 +5040,7 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-2-Clause license_family: BSD + purls: [] size: 32567 timestamp: 1711021603471 - kind: conda @@ -5902,6 +5055,7 @@ packages: - libcxx >=16 license: BSD-2-Clause license_family: BSD + purls: [] size: 28602 timestamp: 1711021419744 - kind: conda @@ -5916,168 +5070,9 @@ packages: - libcxx >=16 license: BSD-2-Clause license_family: BSD + purls: [] size: 28451 timestamp: 1711021498493 -- kind: conda - name: libarrow - version: 13.0.0 - build: h1ed0495_3_cpu - build_number: 3 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libarrow-13.0.0-h1ed0495_3_cpu.conda - sha256: 629859e3e182c68a7500cb3197aeb3379117dfcea6e90da729d38886f6688c7c - md5: 4abe40cdbe46985f6d90840e58338883 - depends: - - aws-crt-cpp >=0.23.1,<0.23.2.0a0 - - aws-sdk-cpp >=1.11.156,<1.11.157.0a0 - - bzip2 >=1.0.8,<2.0a0 - - glog >=0.6.0,<0.7.0a0 - - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libgcc-ng >=12 - - libgoogle-cloud >=2.12.0,<2.13.0a0 - - libgrpc >=1.56.2,<1.57.0a0 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - libstdcxx-ng >=12 - - libthrift >=0.19.0,<0.19.1.0a0 - - libutf8proc >=2.8.0,<3.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - openssl >=3.1.2,<4.0a0 - - orc >=1.9.0,<1.9.1.0a0 - - re2 >=2023.3.2,<2023.3.3.0a0 - - snappy >=1.1.10,<1.2.0a0 - - ucx >=1.14.0,<1.15.0a0 - - zstd >=1.5.5,<1.6.0a0 - constrains: - - parquet-cpp <0.0a0 - - apache-arrow-proc =*=cpu - - arrow-cpp =13.0.0 - license: Apache-2.0 - license_family: APACHE - size: 27851078 - timestamp: 1694166246163 -- kind: conda - name: libarrow - version: 13.0.0 - build: h6e4acf5_0_cpu - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libarrow-13.0.0-h6e4acf5_0_cpu.conda - sha256: 826aaaa5b2e18b139330aa00d1f5bf61f0389da9e270eddfd77c54c4a4c6aa58 - md5: ae56a47c174940e94f77877fea626429 - depends: - - aws-crt-cpp >=0.23.0,<0.23.1.0a0 - - aws-sdk-cpp >=1.10.57,<1.10.58.0a0 - - bzip2 >=1.0.8,<2.0a0 - - glog >=0.6.0,<0.7.0a0 - - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libbrotlidec >=1.0.9,<1.1.0a0 - - libbrotlienc >=1.0.9,<1.1.0a0 - - libcxx >=15.0.7 - - libgoogle-cloud >=2.12.0,<2.13.0a0 - - libgrpc >=1.56.2,<1.57.0a0 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - libthrift >=0.18.1,<0.18.2.0a0 - - libutf8proc >=2.8.0,<3.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - openssl >=3.1.2,<4.0a0 - - orc >=1.9.0,<1.9.1.0a0 - - re2 >=2023.3.2,<2023.3.3.0a0 - - snappy >=1.1.10,<1.2.0a0 - - zstd >=1.5.2,<1.6.0a0 - constrains: - - apache-arrow-proc =*=cpu - - arrow-cpp =13.0.0 - - parquet-cpp <0.0a0 - license: Apache-2.0 - license_family: APACHE - size: 17983892 - timestamp: 1692869320462 -- kind: conda - name: libarrow - version: 13.0.0 - build: hba3d5be_3_cpu - build_number: 3 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libarrow-13.0.0-hba3d5be_3_cpu.conda - sha256: 29cfc816e479dd19a10ff84444f7aa1b0946347113700efb10422da06de42cde - md5: 250bd749a621453aff938e26873fb836 - depends: - - aws-crt-cpp >=0.23.1,<0.23.2.0a0 - - aws-sdk-cpp >=1.11.156,<1.11.157.0a0 - - bzip2 >=1.0.8,<2.0a0 - - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libcrc32c >=1.1.2,<1.2.0a0 - - libcurl >=8.2.1,<9.0a0 - - libgoogle-cloud >=2.12.0,<2.13.0a0 - - libgrpc >=1.56.2,<1.57.0a0 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - libthrift >=0.19.0,<0.19.1.0a0 - - libutf8proc >=2.8.0,<3.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - openssl >=3.1.2,<4.0a0 - - orc >=1.9.0,<1.9.1.0a0 - - re2 >=2023.3.2,<2023.3.3.0a0 - - snappy >=1.1.10,<1.2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - - zstd >=1.5.5,<1.6.0a0 - constrains: - - apache-arrow-proc =*=cpu - - parquet-cpp <0.0a0 - - arrow-cpp =13.0.0 - license: Apache-2.0 - license_family: APACHE - size: 16625414 - timestamp: 1694167097111 -- kind: conda - name: libarrow - version: 13.0.0 - build: hca2412d_3_cpu - build_number: 3 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libarrow-13.0.0-hca2412d_3_cpu.conda - sha256: 6a3bf63ec9baff0d578aa4cd2e2f3aee7cd7aee42bf1aa75889eec55d70f06b6 - md5: 68a4f678ba48a1d230dea777d5201c31 - depends: - - aws-crt-cpp >=0.23.1,<0.23.2.0a0 - - aws-sdk-cpp >=1.11.156,<1.11.157.0a0 - - bzip2 >=1.0.8,<2.0a0 - - glog >=0.6.0,<0.7.0a0 - - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libbrotlidec >=1.1.0,<1.2.0a0 - - libbrotlienc >=1.1.0,<1.2.0a0 - - libcxx >=15.0.7 - - libgoogle-cloud >=2.12.0,<2.13.0a0 - - libgrpc >=1.56.2,<1.57.0a0 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - libthrift >=0.19.0,<0.19.1.0a0 - - libutf8proc >=2.8.0,<3.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - openssl >=3.1.2,<4.0a0 - - orc >=1.9.0,<1.9.1.0a0 - - re2 >=2023.3.2,<2023.3.3.0a0 - - snappy >=1.1.10,<1.2.0a0 - - zstd >=1.5.5,<1.6.0a0 - constrains: - - parquet-cpp <0.0a0 - - apache-arrow-proc =*=cpu - - arrow-cpp =13.0.0 - license: Apache-2.0 - license_family: APACHE - size: 20017156 - timestamp: 1694167350734 - kind: conda name: libasprintf version: 0.22.5 @@ -6091,6 +5086,7 @@ packages: - __osx >=11.0 - libcxx >=16 license: LGPL-2.1-or-later + purls: [] size: 40657 timestamp: 1723626937704 - kind: conda @@ -6106,6 +5102,7 @@ packages: - __osx >=11.0 - libasprintf 0.22.5 h8414b35_3 license: LGPL-2.1-or-later + purls: [] size: 34648 timestamp: 1723626983419 - kind: conda @@ -6122,6 +5119,7 @@ packages: - dav1d >=1.2.1,<1.2.2.0a0 license: BSD-2-Clause license_family: BSD + purls: [] size: 88849 timestamp: 1685725242079 - kind: conda @@ -6143,6 +5141,7 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-2-Clause license_family: BSD + purls: [] size: 104651 timestamp: 1699878685050 - kind: conda @@ -6163,6 +5162,7 @@ packages: - svt-av1 >=2.2.1,<2.2.2.0a0 license: BSD-2-Clause license_family: BSD + purls: [] size: 116148 timestamp: 1724672468333 - kind: conda @@ -6182,6 +5182,7 @@ packages: - svt-av1 >=2.2.1,<2.2.2.0a0 license: BSD-2-Clause license_family: BSD + purls: [] size: 108831 timestamp: 1724672620708 - kind: conda @@ -6203,6 +5204,7 @@ packages: - liblapack 3.9.0 22_osx64_openblas license: BSD-3-Clause license_family: BSD + purls: [] size: 14749 timestamp: 1712542279018 - kind: conda @@ -6224,6 +5226,7 @@ packages: - liblapacke 3.9.0 24_linux64_openblas license: BSD-3-Clause license_family: BSD + purls: [] size: 14981 timestamp: 1726668454790 - kind: conda @@ -6245,6 +5248,7 @@ packages: - libcblas 3.9.0 24_osxarm64_openblas license: BSD-3-Clause license_family: BSD + purls: [] size: 15144 timestamp: 1726668802976 - kind: conda @@ -6265,6 +5269,7 @@ packages: - liblapacke 3.9.0 24_win64_mkl license: BSD-3-Clause license_family: BSD + purls: [] size: 5183540 timestamp: 1726669397923 - kind: conda @@ -6278,6 +5283,7 @@ packages: md5: 82354022c67480c61419b6e47377af89 license: MIT license_family: MIT + purls: [] size: 70285 timestamp: 1687884697998 - kind: conda @@ -6293,6 +5299,7 @@ packages: - __osx >=10.13 license: MIT license_family: MIT + purls: [] size: 67267 timestamp: 1725267768667 - kind: conda @@ -6310,6 +5317,7 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: [] size: 70526 timestamp: 1725268159739 - kind: conda @@ -6326,6 +5334,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 68851 timestamp: 1725267660471 - kind: conda @@ -6341,6 +5350,7 @@ packages: - libbrotlicommon 1.0.9 h1a8c8d9_9 license: MIT license_family: MIT + purls: [] size: 29129 timestamp: 1687884725821 - kind: conda @@ -6357,6 +5367,7 @@ packages: - libbrotlicommon 1.1.0 h00291cd_2 license: MIT license_family: MIT + purls: [] size: 29872 timestamp: 1725267807289 - kind: conda @@ -6375,6 +5386,7 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: [] size: 32685 timestamp: 1725268208844 - kind: conda @@ -6392,6 +5404,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 32696 timestamp: 1725267669305 - kind: conda @@ -6407,6 +5420,7 @@ packages: - libbrotlicommon 1.0.9 h1a8c8d9_9 license: MIT license_family: MIT + purls: [] size: 263314 timestamp: 1687884758242 - kind: conda @@ -6423,6 +5437,7 @@ packages: - libbrotlicommon 1.1.0 h00291cd_2 license: MIT license_family: MIT + purls: [] size: 296353 timestamp: 1725267822076 - kind: conda @@ -6441,6 +5456,7 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: [] size: 245929 timestamp: 1725268238259 - kind: conda @@ -6458,6 +5474,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 281750 timestamp: 1725267679782 - kind: conda @@ -6477,6 +5494,7 @@ packages: - liblapack 3.9.0 22_osx64_openblas license: BSD-3-Clause license_family: BSD + purls: [] size: 14636 timestamp: 1712542311437 - kind: conda @@ -6496,6 +5514,7 @@ packages: - liblapacke 3.9.0 24_linux64_openblas license: BSD-3-Clause license_family: BSD + purls: [] size: 14910 timestamp: 1726668461033 - kind: conda @@ -6515,6 +5534,7 @@ packages: - liblapacke 3.9.0 24_osxarm64_openblas license: BSD-3-Clause license_family: BSD + purls: [] size: 15062 timestamp: 1726668809379 - kind: conda @@ -6534,66 +5554,9 @@ packages: - liblapacke 3.9.0 24_win64_mkl license: BSD-3-Clause license_family: BSD + purls: [] size: 5174668 timestamp: 1726669449378 -- kind: conda - name: libcrc32c - version: 1.1.2 - build: h0e60522_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libcrc32c-1.1.2-h0e60522_0.tar.bz2 - sha256: 75e60fbe436ba8a11c170c89af5213e8bec0418f88b7771ab7e3d9710b70c54e - md5: cd4cc2d0c610c8cb5419ccc979f2d6ce - depends: - - vc >=14.1,<15.0a0 - - vs2015_runtime >=14.16.27012 - license: BSD-3-Clause - license_family: BSD - size: 25694 - timestamp: 1633684287072 -- kind: conda - name: libcrc32c - version: 1.1.2 - build: h9c3ff4c_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - sha256: fd1d153962764433fe6233f34a72cdeed5dcf8a883a85769e8295ce940b5b0c5 - md5: c965a5aa0d5c1c37ffc62dff36e28400 - depends: - - libgcc-ng >=9.4.0 - - libstdcxx-ng >=9.4.0 - license: BSD-3-Clause - license_family: BSD - size: 20440 - timestamp: 1633683576494 -- kind: conda - name: libcrc32c - version: 1.1.2 - build: hbdafb3b_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcrc32c-1.1.2-hbdafb3b_0.tar.bz2 - sha256: 58477b67cc719060b5b069ba57161e20ba69b8695d154a719cb4b60caf577929 - md5: 32bd82a6a625ea6ce090a81c3d34edeb - depends: - - libcxx >=11.1.0 - license: BSD-3-Clause - license_family: BSD - size: 18765 - timestamp: 1633683992603 -- kind: conda - name: libcrc32c - version: 1.1.2 - build: he49afe7_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libcrc32c-1.1.2-he49afe7_0.tar.bz2 - sha256: 3043869ac1ee84554f177695e92f2f3c2c507b260edad38a0bf3981fce1632ff - md5: 23d6d5a69918a438355d7cbc4c3d54c9 - depends: - - libcxx >=11.1.0 - license: BSD-3-Clause - license_family: BSD - size: 20128 - timestamp: 1633683906221 - kind: conda name: libcups version: 2.3.3 @@ -6610,6 +5573,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: Apache-2.0 license_family: Apache + purls: [] size: 4519402 timestamp: 1689195353551 - kind: conda @@ -6630,68 +5594,9 @@ packages: - zstd >=1.5.6,<1.6.0a0 license: curl license_family: MIT + purls: [] size: 379948 timestamp: 1726660033582 -- kind: conda - name: libcurl - version: 8.10.1 - build: h1ee3ff0_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.10.1-h1ee3ff0_0.conda - sha256: dfbac497c4fee74f67391f9c4a40cab559468b7d04ff9fad4b404a26b5e1d5b8 - md5: 7ead800e22ff7b4bccb73e42a8f7a0f4 - depends: - - krb5 >=1.21.3,<1.22.0a0 - - libssh2 >=1.11.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: curl - license_family: MIT - size: 342388 - timestamp: 1726660508261 -- kind: conda - name: libcurl - version: 8.10.1 - build: h58e7537_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.10.1-h58e7537_0.conda - sha256: 662fe145459ed58dee882e525588d1da4dcc4cbd10cfca0725d1fc3840461798 - md5: 6c8669d8228a2bbd0283911cc6d6726e - depends: - - __osx >=10.13 - - krb5 >=1.21.3,<1.22.0a0 - - libnghttp2 >=1.58.0,<2.0a0 - - libssh2 >=1.11.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - - zstd >=1.5.6,<1.6.0a0 - license: curl - license_family: MIT - size: 402588 - timestamp: 1726660264675 -- kind: conda - name: libcurl - version: 8.10.1 - build: hbbe4b11_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.10.1-hbbe4b11_0.conda - sha256: 54e6114dfce566c3a22ad3b7b309657e3600cdb668398e95f1301360d5d52c99 - md5: 6e801c50a40301f6978c53976917b277 - depends: - - __glibc >=2.17,<3.0.a0 - - krb5 >=1.21.3,<1.22.0a0 - - libgcc >=13 - - libnghttp2 >=1.58.0,<2.0a0 - - libssh2 >=1.11.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - - zstd >=1.5.6,<1.6.0a0 - license: curl - license_family: MIT - size: 424900 - timestamp: 1726659794676 - kind: conda name: libcxx version: 19.1.2 @@ -6704,6 +5609,7 @@ packages: - __osx >=11.0 license: Apache-2.0 WITH LLVM-exception license_family: Apache + purls: [] size: 521199 timestamp: 1729038190391 - kind: conda @@ -6718,6 +5624,7 @@ packages: - __osx >=10.13 license: Apache-2.0 WITH LLVM-exception license_family: Apache + purls: [] size: 526600 timestamp: 1729038055775 - kind: conda @@ -6730,6 +5637,7 @@ packages: md5: cae34d3f6ab02e0abf92ec3caaf0bd39 license: MIT license_family: MIT + purls: [] size: 48222 timestamp: 1673786109437 - kind: conda @@ -6744,6 +5652,7 @@ packages: - libgcc-ng >=12 license: MIT license_family: MIT + purls: [] size: 67080 timestamp: 1694922285678 - kind: conda @@ -6756,6 +5665,7 @@ packages: md5: d46104f6a896a0bc6a1d37b88b2edf5c license: MIT license_family: MIT + purls: [] size: 70364 timestamp: 1711196727346 - kind: conda @@ -6772,6 +5682,7 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: [] size: 155358 timestamp: 1711197066985 - kind: conda @@ -6787,6 +5698,7 @@ packages: - ncurses >=6.2,<7.0.0a0 license: BSD-2-Clause license_family: BSD + purls: [] size: 105382 timestamp: 1597616576726 - kind: conda @@ -6802,6 +5714,7 @@ packages: - ncurses >=6.2,<7.0.0a0 license: BSD-2-Clause license_family: BSD + purls: [] size: 96607 timestamp: 1597616630749 - kind: conda @@ -6818,21 +5731,9 @@ packages: - ncurses >=6.2,<7.0.0a0 license: BSD-2-Clause license_family: BSD + purls: [] size: 123878 timestamp: 1597616541093 -- kind: conda - name: libev - version: '4.33' - build: h10d778d_2 - build_number: 2 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libev-4.33-h10d778d_2.conda - sha256: 0d238488564a7992942aa165ff994eca540f687753b4f0998b29b4e4d030ff43 - md5: 899db79329439820b7e8f8de41bca902 - license: BSD-2-Clause - license_family: BSD - size: 106663 - timestamp: 1702146352558 - kind: conda name: libev version: '4.33' @@ -6844,87 +5745,9 @@ packages: md5: 36d33e440c31857372a72137f78bacf5 license: BSD-2-Clause license_family: BSD + purls: [] size: 107458 timestamp: 1702146414478 -- kind: conda - name: libev - version: '4.33' - build: hd590300_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 - md5: 172bf1cd1ff8629f2b1179945ed45055 - depends: - - libgcc-ng >=12 - license: BSD-2-Clause - license_family: BSD - size: 112766 - timestamp: 1702146165126 -- kind: conda - name: libevent - version: 2.1.12 - build: h2757513_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libevent-2.1.12-h2757513_1.conda - sha256: 8c136d7586259bb5c0d2b913aaadc5b9737787ae4f40e3ad1beaf96c80b919b7 - md5: 1a109764bff3bdc7bdd84088347d71dc - depends: - - openssl >=3.1.1,<4.0a0 - license: BSD-3-Clause - license_family: BSD - size: 368167 - timestamp: 1685726248899 -- kind: conda - name: libevent - version: 2.1.12 - build: h3671451_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libevent-2.1.12-h3671451_1.conda - sha256: af03882afb7a7135288becf340c2f0cf8aa8221138a9a7b108aaeb308a486da1 - md5: 25efbd786caceef438be46da78a7b5ef - depends: - - openssl >=3.1.1,<4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-3-Clause - license_family: BSD - size: 410555 - timestamp: 1685726568668 -- kind: conda - name: libevent - version: 2.1.12 - build: ha90c15b_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libevent-2.1.12-ha90c15b_1.conda - sha256: e0bd9af2a29f8dd74309c0ae4f17a7c2b8c4b89f875ff1d6540c941eefbd07fb - md5: e38e467e577bd193a7d5de7c2c540b04 - depends: - - openssl >=3.1.1,<4.0a0 - license: BSD-3-Clause - license_family: BSD - size: 372661 - timestamp: 1685726378869 -- kind: conda - name: libevent - version: 2.1.12 - build: hf998b51_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - sha256: 2e14399d81fb348e9d231a82ca4d816bf855206923759b69ad006ba482764131 - md5: a1cfcc585f0c42bf8d5546bb1dfb668d - depends: - - libgcc-ng >=12 - - openssl >=3.1.1,<4.0a0 - license: BSD-3-Clause - license_family: BSD - size: 427426 - timestamp: 1685725977222 - kind: conda name: libexpat version: 2.6.3 @@ -6940,6 +5763,7 @@ packages: - expat 2.6.3.* license: MIT license_family: MIT + purls: [] size: 73616 timestamp: 1725568742634 - kind: conda @@ -6956,6 +5780,7 @@ packages: - expat 2.6.3.* license: MIT license_family: MIT + purls: [] size: 63895 timestamp: 1725568783033 - kind: conda @@ -6969,6 +5794,7 @@ packages: md5: ccb34fb14960ad8b125962d3d79b31a9 license: MIT license_family: MIT + purls: [] size: 51348 timestamp: 1636488394370 - kind: conda @@ -6982,6 +5808,7 @@ packages: md5: 086914b672be056eb70fd4285b6783b6 license: MIT license_family: MIT + purls: [] size: 39020 timestamp: 1636488587153 - kind: conda @@ -6997,6 +5824,7 @@ packages: - libgcc-ng >=9.4.0 license: MIT license_family: MIT + purls: [] size: 58292 timestamp: 1636488182923 - kind: conda @@ -7013,6 +5841,7 @@ packages: - vs2015_runtime >=14.16.27012 license: MIT license_family: MIT + purls: [] size: 42063 timestamp: 1636489106777 - kind: conda @@ -7032,6 +5861,7 @@ packages: - libgcc-ng ==14.2.0=*_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 848745 timestamp: 1729027721139 - kind: conda @@ -7048,6 +5878,7 @@ packages: - __unix license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 2753144 timestamp: 1729027627734 - kind: conda @@ -7063,6 +5894,7 @@ packages: - libgcc 14.2.0 h77fa898_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 54142 timestamp: 1729027726517 - kind: conda @@ -7080,6 +5912,7 @@ packages: - libintl 0.22.5 h8414b35_3 license: GPL-3.0-or-later license_family: GPL + purls: [] size: 159800 timestamp: 1723627007035 - kind: conda @@ -7098,6 +5931,7 @@ packages: - libintl 0.22.5 h8414b35_3 license: GPL-3.0-or-later license_family: GPL + purls: [] size: 37153 timestamp: 1723627048279 - kind: conda @@ -7113,6 +5947,7 @@ packages: - libgfortran5 13.2.0 h2873a65_3 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 110106 timestamp: 1707328956438 - kind: conda @@ -7128,6 +5963,7 @@ packages: - libgfortran5 13.2.0 hf226fd6_3 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 110233 timestamp: 1707330749033 - kind: conda @@ -7145,6 +5981,7 @@ packages: - libgfortran-ng ==14.2.0=*_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 53997 timestamp: 1729027752995 - kind: conda @@ -7160,6 +5997,7 @@ packages: - libgfortran 14.2.0 h69a702a_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 54106 timestamp: 1729027945817 - kind: conda @@ -7177,6 +6015,7 @@ packages: - libgfortran 5.0.0 13_2_0_*_3 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 1571379 timestamp: 1707328880361 - kind: conda @@ -7194,6 +6033,7 @@ packages: - libgfortran 5.0.0 13_2_0_*_3 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 997381 timestamp: 1707330687590 - kind: conda @@ -7211,6 +6051,7 @@ packages: - libgfortran 14.2.0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 1462645 timestamp: 1729027735353 - kind: conda @@ -7231,6 +6072,7 @@ packages: constrains: - glib 2.76.4 *_0 license: LGPL-2.1-or-later + purls: [] size: 2510157 timestamp: 1688694829858 - kind: conda @@ -7251,6 +6093,7 @@ packages: constrains: - glib 2.82.2 *_0 license: LGPL-2.1-or-later + purls: [] size: 3931898 timestamp: 1729191404130 - kind: conda @@ -7266,107 +6109,9 @@ packages: - _libgcc_mutex 0.1 conda_forge license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 460992 - timestamp: 1729027639220 -- kind: conda - name: libgoogle-cloud - version: 2.12.0 - build: h05652e3_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.12.0-h05652e3_1.conda - sha256: 1b1ea2a351322f5b5444db2064032bd6ba6954711b3f097c293a3b9f9c5c8904 - md5: 56d7dcffacd67cd1efeffc86c32e4f22 - depends: - - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libcrc32c >=1.1.2,<1.2.0a0 - - libcurl >=8.1.2,<9.0a0 - - libcxx >=15.0.7 - - libgrpc >=1.56.0,<1.57.0a0 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - openssl >=3.1.1,<4.0a0 - constrains: - - google-cloud-cpp 2.12.0 *_1 - license: Apache-2.0 - license_family: Apache - size: 36570433 - timestamp: 1688288627184 -- kind: conda - name: libgoogle-cloud - version: 2.12.0 - build: h37a168a_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.12.0-h37a168a_1.conda - sha256: da74766c1670824677a2dbe97da86b8ed751decc50621be86c021fdac0fc5b70 - md5: 52442c1cd6eabf4b18a470f69ccaa6f5 - depends: - - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libcrc32c >=1.1.2,<1.2.0a0 - - libcurl >=8.1.2,<9.0a0 - - libcxx >=15.0.7 - - libgrpc >=1.56.0,<1.57.0a0 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - openssl >=3.1.1,<4.0a0 - constrains: - - google-cloud-cpp 2.12.0 *_1 - license: Apache-2.0 - license_family: Apache - size: 32557767 - timestamp: 1688288193643 -- kind: conda - name: libgoogle-cloud - version: 2.12.0 - build: h840a212_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-h840a212_1.conda - sha256: 18d9050dced23e4b3a1e5f77956d11ef8d98bb34e007647de5a1aa0e2c099bc9 - md5: 03c225a73835f5aa68c13e62eb360406 - depends: - - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libcrc32c >=1.1.2,<1.2.0a0 - - libcurl >=8.1.2,<9.0a0 - - libgcc-ng >=12 - - libgrpc >=1.56.0,<1.57.0a0 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - libstdcxx-ng >=12 - - openssl >=3.1.1,<4.0a0 - constrains: - - google-cloud-cpp 2.12.0 *_1 - license: Apache-2.0 - license_family: Apache - size: 46106632 - timestamp: 1688284832753 -- kind: conda - name: libgoogle-cloud - version: 2.12.0 - build: hbc1b25b_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.12.0-hbc1b25b_1.conda - sha256: a8bdedad9a6568f229d4111861fb3c5294febe333c24180c3a59bf02fa66ab14 - md5: 204576c98cf2226c0423c6eeb387889e - depends: - - libabseil * cxx17* - - libabseil >=20230125.3,<20230126.0a0 - - libcrc32c >=1.1.2,<1.2.0a0 - - libcurl >=8.1.2,<9.0a0 - - libgrpc >=1.56.0,<1.57.0a0 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - openssl >=3.1.1,<4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - google-cloud-cpp 2.12.0 *_1 - license: Apache-2.0 - license_family: Apache - size: 13228 - timestamp: 1688283247784 + timestamp: 1729027639220 - kind: conda name: libgrpc version: 1.56.2 @@ -7390,6 +6135,7 @@ packages: - grpc-cpp =1.56.2 license: Apache-2.0 license_family: APACHE + purls: [] size: 6331805 timestamp: 1692023574803 - kind: conda @@ -7414,6 +6160,7 @@ packages: - grpc-cpp =1.56.2 license: Apache-2.0 license_family: APACHE + purls: [] size: 4357621 timestamp: 1692025115126 - kind: conda @@ -7439,6 +6186,7 @@ packages: - grpc-cpp =1.56.2 license: Apache-2.0 license_family: APACHE + purls: [] size: 4311474 timestamp: 1692025032875 - kind: conda @@ -7465,6 +6213,7 @@ packages: - grpc-cpp =1.56.2 license: Apache-2.0 license_family: APACHE + purls: [] size: 12851376 timestamp: 1692025226820 - kind: conda @@ -7484,6 +6233,7 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD + purls: [] size: 2379689 timestamp: 1720461835526 - kind: conda @@ -7498,6 +6248,7 @@ packages: - libcxx >=16 license: Apache-2.0 license_family: Apache + purls: [] size: 778925 timestamp: 1708225689339 - kind: conda @@ -7510,6 +6261,7 @@ packages: sha256: bc7de5097b97bcafcf7deaaed505f7ce02f648aac8eccc0d5a47cc599a1d0304 md5: 69bda57310071cf6d2b86caf11573d2d license: LGPL-2.1-only + purls: [] size: 676469 timestamp: 1702682458114 - kind: conda @@ -7526,6 +6278,7 @@ packages: - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: LGPL-2.1-only + purls: [] size: 636146 timestamp: 1702682547199 - kind: conda @@ -7540,6 +6293,7 @@ packages: depends: - libgcc-ng >=12 license: LGPL-2.1-only + purls: [] size: 705775 timestamp: 1702682170569 - kind: conda @@ -7555,6 +6309,7 @@ packages: - __osx >=11.0 - libiconv >=1.17,<2.0a0 license: LGPL-2.1-or-later + purls: [] size: 81171 timestamp: 1723626968270 - kind: conda @@ -7571,6 +6326,7 @@ packages: - libiconv >=1.17,<2.0a0 - libintl 0.22.5 h8414b35_3 license: LGPL-2.1-or-later + purls: [] size: 38584 timestamp: 1723627022409 - kind: conda @@ -7587,6 +6343,7 @@ packages: constrains: - jpeg <0.0.0a license: IJG AND BSD-3-Clause AND Zlib + purls: [] size: 496449 timestamp: 1694566464059 - kind: conda @@ -7601,6 +6358,7 @@ packages: constrains: - jpeg <0.0.0a license: IJG AND BSD-3-Clause AND Zlib + purls: [] size: 579748 timestamp: 1694475265912 - kind: conda @@ -7619,6 +6377,7 @@ packages: constrains: - jpeg <0.0.0a license: IJG AND BSD-3-Clause AND Zlib + purls: [] size: 822966 timestamp: 1694475223854 - kind: conda @@ -7637,6 +6396,7 @@ packages: - libhwy >=1.1.0,<1.2.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 1404105 timestamp: 1720754049517 - kind: conda @@ -7656,6 +6416,7 @@ packages: - libcblas 3.9.0 22_osx64_openblas license: BSD-3-Clause license_family: BSD + purls: [] size: 14657 timestamp: 1712542322711 - kind: conda @@ -7675,6 +6436,7 @@ packages: - liblapacke 3.9.0 24_linux64_openblas license: BSD-3-Clause license_family: BSD + purls: [] size: 14911 timestamp: 1726668467187 - kind: conda @@ -7694,6 +6456,7 @@ packages: - libcblas 3.9.0 24_osxarm64_openblas license: BSD-3-Clause license_family: BSD + purls: [] size: 15063 timestamp: 1726668815824 - kind: conda @@ -7713,50 +6476,9 @@ packages: - liblapacke 3.9.0 24_win64_mkl license: BSD-3-Clause license_family: BSD + purls: [] size: 5183452 timestamp: 1726669499566 -- kind: conda - name: libnghttp2 - version: 1.58.0 - build: h47da74e_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda - sha256: 1910c5306c6aa5bcbd623c3c930c440e9c77a5a019008e1487810e3c1d3716cb - md5: 700ac6ea6d53d5510591c4344d5c989a - depends: - - c-ares >=1.23.0,<2.0a0 - - libev >=4.33,<4.34.0a0 - - libev >=4.33,<5.0a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.2.0,<4.0a0 - license: MIT - license_family: MIT - size: 631936 - timestamp: 1702130036271 -- kind: conda - name: libnghttp2 - version: 1.58.0 - build: h64cf6d3_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libnghttp2-1.58.0-h64cf6d3_1.conda - sha256: 412fd768e787e586602f8e9ea52bf089f3460fc630f6987f0cbd89b70e9a4380 - md5: faecc55c2a8155d9ff1c0ff9a0fef64f - depends: - - __osx >=10.9 - - c-ares >=1.23.0,<2.0a0 - - libcxx >=16.0.6 - - libev >=4.33,<4.34.0a0 - - libev >=4.33,<5.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.2.0,<4.0a0 - license: MIT - license_family: MIT - size: 599736 - timestamp: 1702130398536 - kind: conda name: libnghttp2 version: 1.58.0 @@ -7776,6 +6498,7 @@ packages: - openssl >=3.2.0,<4.0a0 license: MIT license_family: MIT + purls: [] size: 565451 timestamp: 1702130473930 - kind: conda @@ -7790,22 +6513,9 @@ packages: - libgcc-ng >=12 license: LGPL-2.1-only license_family: GPL + purls: [] size: 33408 timestamp: 1697359010159 -- kind: conda - name: libnuma - version: 2.0.18 - build: h4ab18f5_2 - build_number: 2 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.18-h4ab18f5_2.conda - sha256: cef7d073a3f40876e6184bb5d269a99fa72de58b1106409510f81a1cd5f3d83c - md5: a263760479dbc7bc1f3df12707bd90dc - depends: - - libgcc-ng >=12 - license: LGPL-2.1-only - size: 43346 - timestamp: 1714593927305 - kind: conda name: libopenblas version: 0.3.27 @@ -7824,6 +6534,7 @@ packages: - openblas >=0.3.27,<0.3.28.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 2925328 timestamp: 1720425811743 - kind: conda @@ -7844,6 +6555,7 @@ packages: - openblas >=0.3.27,<0.3.28.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 6047513 timestamp: 1720426759731 - kind: conda @@ -7863,6 +6575,7 @@ packages: - openblas >=0.3.27,<0.3.28.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 5563053 timestamp: 1720426334043 - kind: conda @@ -7876,6 +6589,7 @@ packages: depends: - libzlib >=1.2.13,<2.0.0a0 license: zlib-acknowledgement + purls: [] size: 259412 timestamp: 1669075883972 - kind: conda @@ -7892,6 +6606,7 @@ packages: - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: zlib-acknowledgement + purls: [] size: 348933 timestamp: 1726235196095 - kind: conda @@ -7906,6 +6621,7 @@ packages: - __osx >=10.13 - libzlib >=1.3.1,<2.0a0 license: zlib-acknowledgement + purls: [] size: 268073 timestamp: 1726234803010 - kind: conda @@ -7921,6 +6637,7 @@ packages: - libgcc >=13 - libzlib >=1.3.1,<2.0a0 license: zlib-acknowledgement + purls: [] size: 290661 timestamp: 1726234747153 - kind: conda @@ -7941,6 +6658,7 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD + purls: [] size: 5175646 timestamp: 1693582672609 - kind: conda @@ -7959,6 +6677,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 2062096 timestamp: 1693582623797 - kind: conda @@ -7978,6 +6697,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 2495057 timestamp: 1693582252190 - kind: conda @@ -7996,6 +6716,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 2059613 timestamp: 1693582457881 - kind: conda @@ -8014,6 +6735,7 @@ packages: - libxml2 >=2.11.4,<3.0.0a0 - pango >=1.50.14,<2.0a0 license: LGPL-2.1-or-later + purls: [] size: 3791057 timestamp: 1690736683429 - kind: conda @@ -8030,6 +6752,7 @@ packages: - libstdcxx >=14.2.0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 4496423 timestamp: 1729027764926 - kind: conda @@ -8043,6 +6766,7 @@ packages: depends: - libgcc-ng >=12 license: ISC + purls: [] size: 205978 timestamp: 1716828628198 - kind: conda @@ -8056,6 +6780,7 @@ packages: depends: - __osx >=11.0 license: ISC + purls: [] size: 164972 timestamp: 1716828607917 - kind: conda @@ -8071,6 +6796,7 @@ packages: - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: ISC + purls: [] size: 202344 timestamp: 1716828757533 - kind: conda @@ -8084,6 +6810,7 @@ packages: depends: - __osx >=10.13 license: ISC + purls: [] size: 210249 timestamp: 1716828641383 - kind: conda @@ -8099,6 +6826,7 @@ packages: - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: Unlicense + purls: [] size: 876666 timestamp: 1725354171439 - kind: conda @@ -8113,6 +6841,7 @@ packages: - __osx >=10.13 - libzlib >=1.3.1,<2.0a0 license: Unlicense + purls: [] size: 908317 timestamp: 1725353652135 - kind: conda @@ -8128,6 +6857,7 @@ packages: - libgcc >=13 - libzlib >=1.3.1,<2.0a0 license: Unlicense + purls: [] size: 865214 timestamp: 1725353659783 - kind: conda @@ -8142,24 +6872,9 @@ packages: - __osx >=11.0 - libzlib >=1.3.1,<2.0a0 license: Unlicense + purls: [] size: 829500 timestamp: 1725353720793 -- kind: conda - name: libssh2 - version: 1.11.0 - build: h0841786_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda - sha256: 50e47fd9c4f7bf841a11647ae7486f65220cfc988ec422a4475fe8d5a823824d - md5: 1f5a58e686b13bcfde88b93f547d23fe - depends: - - libgcc-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.1.1,<4.0a0 - license: BSD-3-Clause - license_family: BSD - size: 271133 - timestamp: 1685837707056 - kind: conda name: libssh2 version: 1.11.0 @@ -8173,41 +6888,9 @@ packages: - openssl >=3.1.1,<4.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 255610 timestamp: 1685837894256 -- kind: conda - name: libssh2 - version: 1.11.0 - build: h7dfc565_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.0-h7dfc565_0.conda - sha256: 813fd04eed2a2d5d9c36e53c554f9c1f08e9324e2922bd60c9c52dbbed2dbcec - md5: dc262d03aae04fe26825062879141a41 - depends: - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.1.1,<4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-3-Clause - license_family: BSD - size: 266806 - timestamp: 1685838242099 -- kind: conda - name: libssh2 - version: 1.11.0 - build: hd019ec5_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.0-hd019ec5_0.conda - sha256: f3886763b88f4b24265db6036535ef77b7b77ce91b1cbe588c0fbdd861eec515 - md5: ca3a72efba692c59a90d4b9fc0dfe774 - depends: - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.1.1,<4.0a0 - license: BSD-3-Clause - license_family: BSD - size: 259556 - timestamp: 1685837820566 - kind: conda name: libstdcxx version: 14.2.0 @@ -8221,6 +6904,7 @@ packages: - libgcc 14.2.0 h77fa898_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 3893695 timestamp: 1729027746910 - kind: conda @@ -8236,83 +6920,9 @@ packages: - libstdcxx 14.2.0 hc0a3c3a_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL + purls: [] size: 54105 timestamp: 1729027780628 -- kind: conda - name: libthrift - version: 0.18.1 - build: ha061701_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.18.1-ha061701_2.conda - sha256: 4b3cbe168c7fb070a79960fd20bdc60b309d79805619ed93cdf93f71bdc88bf6 - md5: c1a4bb91d705cc903de58a95aa35ab5b - depends: - - libcxx >=15.0.7 - - libevent >=2.1.12,<2.1.13.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.1.1,<4.0a0 - license: Apache-2.0 - license_family: APACHE - size: 329212 - timestamp: 1685891755482 -- kind: conda - name: libthrift - version: 0.19.0 - build: h064b379_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.19.0-h064b379_1.conda - sha256: 4346c25ef6e2ff3d0fc93074238508531188ecd0dbea6414f6cb93a7775072c4 - md5: b152655bfad7c2374ff03be0596052b6 - depends: - - libcxx >=15.0.7 - - libevent >=2.1.12,<2.1.13.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.1.3,<4.0a0 - license: Apache-2.0 - license_family: APACHE - size: 325415 - timestamp: 1695958330036 -- kind: conda - name: libthrift - version: 0.19.0 - build: ha2b3283_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libthrift-0.19.0-ha2b3283_1.conda - sha256: 89bbc59898c827429a52315c9c0dd888ea73ab1157a8c86098aeae7d13454ac4 - md5: d3432b9d4950e91d2fdf3bed91248ee0 - depends: - - libevent >=2.1.12,<2.1.13.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.1.3,<4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: APACHE - size: 612342 - timestamp: 1695958519927 -- kind: conda - name: libthrift - version: 0.19.0 - build: hb90f79a_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.19.0-hb90f79a_1.conda - sha256: 719add2cf20d144ef9962c57cd0f77178259bdb3aae1cded2e2b2b7c646092f5 - md5: 8cdb7d41faa0260875ba92414c487e2d - depends: - - libevent >=2.1.12,<2.1.13.0a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 - - openssl >=3.1.3,<4.0a0 - license: Apache-2.0 - license_family: APACHE - size: 409409 - timestamp: 1695958011498 - kind: conda name: libtiff version: 4.5.0 @@ -8332,6 +6942,7 @@ packages: - xz >=5.2.6,<6.0a0 - zstd >=1.5.2,<1.6.0a0 license: HPND + purls: [] size: 347549 timestamp: 1673818160649 - kind: conda @@ -8353,6 +6964,7 @@ packages: - xz >=5.2.6,<6.0a0 - zstd >=1.5.5,<1.6.0a0 license: HPND + purls: [] size: 257489 timestamp: 1711218113053 - kind: conda @@ -8375,6 +6987,7 @@ packages: - xz >=5.2.6,<6.0a0 - zstd >=1.5.5,<1.6.0a0 license: HPND + purls: [] size: 277480 timestamp: 1694958140034 - kind: conda @@ -8397,62 +7010,9 @@ packages: - xz >=5.2.6,<6.0a0 - zstd >=1.5.5,<1.6.0a0 license: HPND + purls: [] size: 787198 timestamp: 1711218639912 -- kind: conda - name: libutf8proc - version: 2.8.0 - build: h166bdaf_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.8.0-h166bdaf_0.tar.bz2 - sha256: 49082ee8d01339b225f7f8c60f32a2a2c05fe3b16f31b554b4fb2c1dea237d1c - md5: ede4266dc02e875fe1ea77b25dd43747 - depends: - - libgcc-ng >=12 - license: MIT - license_family: MIT - size: 101070 - timestamp: 1667316029302 -- kind: conda - name: libutf8proc - version: 2.8.0 - build: h1a8c8d9_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libutf8proc-2.8.0-h1a8c8d9_0.tar.bz2 - sha256: a3faddac08efd930fa3a1cc254b5053b4ed9428c49a888d437bf084d403c931a - md5: f8c9c41a122ab3abdf8943b13f4957ee - license: MIT - license_family: MIT - size: 103492 - timestamp: 1667316405233 -- kind: conda - name: libutf8proc - version: 2.8.0 - build: h82a8f57_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libutf8proc-2.8.0-h82a8f57_0.tar.bz2 - sha256: 6efa83e3f2fb9acaf096a18d21d0f679d110934798348c5defc780d4b759a76c - md5: 076894846fe9f068f91c57d158c90cba - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vs2015_runtime >=14.29.30139 - license: MIT - license_family: MIT - size: 104389 - timestamp: 1667316359211 -- kind: conda - name: libutf8proc - version: 2.8.0 - build: hb7f2c08_0 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/libutf8proc-2.8.0-hb7f2c08_0.tar.bz2 - sha256: 55a7f96b2802e94def207fdfe92bc52c24d705d139bb6cdb3d936cbe85e1c505 - md5: db98dc3e58cbc11583180609c429c17d - license: MIT - license_family: MIT - size: 98942 - timestamp: 1667316472080 - kind: conda name: libuuid version: 2.38.1 @@ -8465,6 +7025,7 @@ packages: - libgcc-ng >=12 license: BSD-3-Clause license_family: BSD + purls: [] size: 33601 timestamp: 1680112270483 - kind: conda @@ -8478,6 +7039,7 @@ packages: md5: 850901f879c13361e0f767c3b3449b8d license: MIT license_family: MIT + purls: [] size: 360910 timestamp: 1690371544632 - kind: conda @@ -8491,6 +7053,7 @@ packages: md5: 6991ee4e88e2df061b2635236807f1c5 license: MIT license_family: MIT + purls: [] size: 394836 timestamp: 1690371342414 - kind: conda @@ -8506,6 +7069,7 @@ packages: - libgcc-ng >=12 license: MIT license_family: MIT + purls: [] size: 823882 timestamp: 1690371294300 - kind: conda @@ -8520,6 +7084,7 @@ packages: - libwebp 1.4.0 license: BSD-3-Clause license_family: BSD + purls: [] size: 355099 timestamp: 1713200298965 - kind: conda @@ -8534,6 +7099,7 @@ packages: - libwebp 1.4.0 license: BSD-3-Clause license_family: BSD + purls: [] size: 287750 timestamp: 1713200194013 - kind: conda @@ -8552,6 +7118,7 @@ packages: - libwebp 1.4.0 license: BSD-3-Clause license_family: BSD + purls: [] size: 274359 timestamp: 1713200524021 - kind: conda @@ -8568,6 +7135,7 @@ packages: - libwebp 1.4.0 license: BSD-3-Clause license_family: BSD + purls: [] size: 438953 timestamp: 1713199854503 - kind: conda @@ -8585,6 +7153,7 @@ packages: - xorg-libxdmcp license: MIT license_family: MIT + purls: [] size: 353124 timestamp: 1636659450212 - kind: conda @@ -8602,6 +7171,7 @@ packages: - xorg-libxdmcp license: MIT license_family: MIT + purls: [] size: 384238 timestamp: 1682082368177 - kind: conda @@ -8621,6 +7191,7 @@ packages: - xorg-libxdmcp license: MIT license_family: MIT + purls: [] size: 989459 timestamp: 1724419883091 - kind: conda @@ -8638,6 +7209,7 @@ packages: - xorg-libxdmcp license: MIT license_family: MIT + purls: [] size: 323770 timestamp: 1727278927545 - kind: conda @@ -8652,6 +7224,7 @@ packages: depends: - libgcc-ng >=12 license: LGPL-2.1-or-later + purls: [] size: 100393 timestamp: 1702724383534 - kind: conda @@ -8671,6 +7244,7 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: [] size: 1682090 timestamp: 1721031296951 - kind: conda @@ -8690,6 +7264,7 @@ packages: - xz >=5.2.6,<6.0a0 license: MIT license_family: MIT + purls: [] size: 588441 timestamp: 1720772863811 - kind: conda @@ -8709,6 +7284,7 @@ packages: - zlib 1.3.1 *_2 license: Zlib license_family: Other + purls: [] size: 55476 timestamp: 1727963768015 - kind: conda @@ -8726,6 +7302,7 @@ packages: - zlib 1.3.1 *_2 license: Zlib license_family: Other + purls: [] size: 46438 timestamp: 1727963202283 - kind: conda @@ -8744,6 +7321,7 @@ packages: - zlib 1.3.1 *_2 license: Zlib license_family: Other + purls: [] size: 60963 timestamp: 1727963148474 - kind: conda @@ -8761,6 +7339,7 @@ packages: - zlib 1.3.1 *_2 license: Zlib license_family: Other + purls: [] size: 57133 timestamp: 1727963183990 - kind: conda @@ -8775,6 +7354,7 @@ packages: - libcxx >=11.0.0 license: Apache-2.0 license_family: Apache + purls: [] size: 162262 timestamp: 1607309210977 - kind: conda @@ -8790,6 +7370,7 @@ packages: - vs2015_runtime >=14.16.27012 license: Apache-2.0 license_family: Apache + purls: [] size: 207974 timestamp: 1607309596528 - kind: conda @@ -8805,6 +7386,7 @@ packages: - libstdcxx-ng >=9.3.0 license: Apache-2.0 license_family: Apache + purls: [] size: 168074 timestamp: 1607309189989 - kind: conda @@ -8819,6 +7401,7 @@ packages: - libcxx >=11.0.0 license: Apache-2.0 license_family: Apache + purls: [] size: 147901 timestamp: 1607309166373 - kind: conda @@ -8835,6 +7418,7 @@ packages: - openmp 19.1.2|19.1.2.* license: Apache-2.0 WITH LLVM-exception license_family: APACHE + purls: [] size: 280737 timestamp: 1729145191646 - kind: conda @@ -8851,6 +7435,7 @@ packages: - openmp 19.1.2|19.1.2.* license: Apache-2.0 WITH LLVM-exception license_family: APACHE + purls: [] size: 305589 timestamp: 1729145249496 - kind: conda @@ -8865,6 +7450,7 @@ packages: - libcxx >=14.0.6 license: BSD-2-Clause license_family: BSD + purls: [] size: 141188 timestamp: 1674727268278 - kind: conda @@ -8880,6 +7466,7 @@ packages: - libstdcxx-ng >=12 license: BSD-2-Clause license_family: BSD + purls: [] size: 143402 timestamp: 1674727076728 - kind: conda @@ -8896,6 +7483,7 @@ packages: - vs2015_runtime >=14.29.30139 license: BSD-2-Clause license_family: BSD + purls: [] size: 134235 timestamp: 1674728465431 - kind: conda @@ -8910,6 +7498,7 @@ packages: - libcxx >=14.0.6 license: BSD-2-Clause license_family: BSD + purls: [] size: 156415 timestamp: 1674727335352 - kind: conda @@ -8925,6 +7514,7 @@ packages: - m2w64-gcc-libs-core - msys2-conda-epoch ==20160418 license: GPL, LGPL, FDL, custom + purls: [] size: 350687 timestamp: 1608163451316 - kind: conda @@ -8943,6 +7533,7 @@ packages: - m2w64-libwinpthread-git - msys2-conda-epoch ==20160418 license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] size: 532390 timestamp: 1608163512830 - kind: conda @@ -8959,6 +7550,7 @@ packages: - m2w64-libwinpthread-git - msys2-conda-epoch ==20160418 license: GPL3+, partial:GCCRLE, partial:LGPL2+ + purls: [] size: 219240 timestamp: 1608163481341 - kind: conda @@ -8973,6 +7565,7 @@ packages: depends: - msys2-conda-epoch ==20160418 license: LGPL3 + purls: [] size: 743501 timestamp: 1608163782057 - kind: conda @@ -8987,6 +7580,7 @@ packages: depends: - msys2-conda-epoch ==20160418 license: MIT, BSD + purls: [] size: 31928 timestamp: 1608166099896 - kind: conda @@ -9003,6 +7597,8 @@ packages: - python >=3.8 license: MIT license_family: MIT + purls: + - pkg:pypi/markdown-it-py?source=hash-mapping size: 64356 timestamp: 1686175179621 - kind: conda @@ -9024,6 +7620,8 @@ packages: - jinja2 >=3.0.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping size: 26043 timestamp: 1728489726622 - kind: conda @@ -9043,6 +7641,8 @@ packages: - jinja2 >=3.0.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping size: 22130 timestamp: 1728489284167 - kind: conda @@ -9063,6 +7663,8 @@ packages: - jinja2 >=3.0.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping size: 22821 timestamp: 1728489325901 - kind: conda @@ -9083,6 +7685,8 @@ packages: - jinja2 >=3.0.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping size: 22956 timestamp: 1728489176185 - kind: conda @@ -9099,6 +7703,8 @@ packages: - traitlets license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/matplotlib-inline?source=hash-mapping size: 14599 timestamp: 1713250613726 - kind: conda @@ -9118,6 +7724,8 @@ packages: - tomli >=1.1.0 license: MIT license_family: MIT + purls: + - pkg:pypi/maturin?source=hash-mapping size: 6346814 timestamp: 1695300560297 - kind: conda @@ -9136,6 +7744,8 @@ packages: - tomli >=1.1.0 license: MIT license_family: MIT + purls: + - pkg:pypi/maturin?source=hash-mapping size: 4955123 timestamp: 1695300939556 - kind: conda @@ -9155,6 +7765,8 @@ packages: - tomli >=1.1.0 license: MIT license_family: MIT + purls: + - pkg:pypi/maturin?source=hash-mapping size: 4910727 timestamp: 1695301415725 - kind: conda @@ -9174,6 +7786,8 @@ packages: - tomli >=1.1.0 license: MIT license_family: MIT + purls: + - pkg:pypi/maturin?source=hash-mapping size: 4675858 timestamp: 1695301814558 - kind: conda @@ -9190,6 +7804,8 @@ packages: - python >=3.8 license: MIT license_family: MIT + purls: + - pkg:pypi/mdit-py-plugins?source=hash-mapping size: 42126 timestamp: 1725995333692 - kind: conda @@ -9205,6 +7821,8 @@ packages: - python >=3.6 license: MIT license_family: MIT + purls: + - pkg:pypi/mdurl?source=hash-mapping size: 14680 timestamp: 1704317789138 - kind: conda @@ -9226,6 +7844,8 @@ packages: - urllib3 license: Apache-2.0 license_family: Apache + purls: + - pkg:pypi/minio?source=hash-mapping size: 59925 timestamp: 1695627015341 - kind: conda @@ -9238,6 +7858,7 @@ packages: md5: 842697378d8ac142d1dac05a310cb9eb license: AGPL-3.0-only license_family: AGPL + purls: [] size: 28599729 timestamp: 1695661919637 - kind: conda @@ -9252,6 +7873,7 @@ packages: - __osx>=10.12 license: AGPL-3.0-only license_family: AGPL + purls: [] size: 29438678 timestamp: 1695669781862 - kind: conda @@ -9264,6 +7886,7 @@ packages: md5: ff773f379a8324cefc3a904a5fcb0c27 license: AGPL-3.0-only license_family: AGPL + purls: [] size: 28514641 timestamp: 1695661212355 - kind: conda @@ -9276,6 +7899,7 @@ packages: md5: 716354cbeec9ed541b75c4d1398af8e9 license: AGPL-3.0-only license_family: AGPL + purls: [] size: 28775220 timestamp: 1695661328725 - kind: conda @@ -9291,6 +7915,8 @@ packages: - python >=3.7 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/mistune?source=hash-mapping size: 66022 timestamp: 1698947249750 - kind: conda @@ -9307,6 +7933,7 @@ packages: - tbb 2021.* license: LicenseRef-IntelSimplifiedSoftwareOct2022 license_family: Proprietary + purls: [] size: 109381621 timestamp: 1716561374449 - kind: conda @@ -9318,6 +7945,7 @@ packages: url: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 sha256: 99358d58d778abee4dca82ad29fb58058571f19b0f86138363c260049d4ac7f1 md5: b0309b72560df66f71a9d5e34a5efdfa + purls: [] size: 3227 timestamp: 1608166968312 - kind: conda @@ -9339,6 +7967,8 @@ packages: - typing_extensions >=4.1.0 license: MIT license_family: MIT + purls: + - pkg:pypi/mypy?source=hash-mapping size: 17970790 timestamp: 1728976159955 - kind: conda @@ -9361,6 +7991,8 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: + - pkg:pypi/mypy?source=hash-mapping size: 9716555 timestamp: 1728975971866 - kind: conda @@ -9381,6 +8013,8 @@ packages: - typing_extensions >=4.1.0 license: MIT license_family: MIT + purls: + - pkg:pypi/mypy?source=hash-mapping size: 11884329 timestamp: 1728975916781 - kind: conda @@ -9402,6 +8036,8 @@ packages: - typing_extensions >=4.1.0 license: MIT license_family: MIT + purls: + - pkg:pypi/mypy?source=hash-mapping size: 9306383 timestamp: 1728976153084 - kind: conda @@ -9417,6 +8053,8 @@ packages: - python >=3.5 license: MIT license_family: MIT + purls: + - pkg:pypi/mypy-extensions?source=hash-mapping size: 10492 timestamp: 1675543414256 - kind: conda @@ -9432,6 +8070,8 @@ packages: - python >=3.8 license: MIT license_family: MIT + purls: + - pkg:pypi/narwhals?source=hash-mapping size: 110460 timestamp: 1729185405948 - kind: conda @@ -9451,6 +8091,8 @@ packages: - traitlets >=5.3 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/nbclient?source=hash-mapping size: 65185 timestamp: 1682452350304 - kind: conda @@ -9468,6 +8110,7 @@ packages: - nbconvert-pandoc 7.16.4 hd8ed1ab_1 license: BSD-3-Clause license_family: BSD + purls: [] size: 8335 timestamp: 1718135538730 - kind: conda @@ -9503,6 +8146,8 @@ packages: - pandoc >=2.9.2,<4.0.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/nbconvert?source=hash-mapping size: 189599 timestamp: 1718135529468 - kind: conda @@ -9520,6 +8165,7 @@ packages: - pandoc license: BSD-3-Clause license_family: BSD + purls: [] size: 8371 timestamp: 1718135533429 - kind: conda @@ -9539,6 +8185,8 @@ packages: - traitlets >=5.1 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/nbformat?source=hash-mapping size: 101232 timestamp: 1712239122969 - kind: conda @@ -9560,6 +8208,8 @@ packages: - six license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/nbval?source=hash-mapping size: 23146 timestamp: 1596196217832 - kind: conda @@ -9574,6 +8224,7 @@ packages: depends: - __osx >=11.0 license: X11 AND BSD-3-Clause + purls: [] size: 802321 timestamp: 1724658775723 - kind: conda @@ -9589,6 +8240,7 @@ packages: - __glibc >=2.17,<3.0.a0 - libgcc-ng >=12 license: X11 AND BSD-3-Clause + purls: [] size: 889086 timestamp: 1724658547447 - kind: conda @@ -9603,6 +8255,7 @@ packages: depends: - __osx >=10.13 license: X11 AND BSD-3-Clause + purls: [] size: 822066 timestamp: 1724658603042 - kind: conda @@ -9618,6 +8271,8 @@ packages: - python >=3.5 license: BSD-2-Clause license_family: BSD + purls: + - pkg:pypi/nest-asyncio?source=hash-mapping size: 11638 timestamp: 1705850780510 - kind: conda @@ -9638,6 +8293,8 @@ packages: - pandas >=2.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/networkx?source=hash-mapping size: 1197665 timestamp: 1728721145589 - kind: conda @@ -9660,6 +8317,7 @@ packages: - __osx >=10.15 license: MIT license_family: MIT + purls: [] size: 12167058 timestamp: 1692997395981 - kind: conda @@ -9673,6 +8331,7 @@ packages: md5: ebab114aa15a59b1476b8ba5fb085a7e license: MIT license_family: MIT + purls: [] size: 22555729 timestamp: 1692988141923 - kind: conda @@ -9693,6 +8352,7 @@ packages: - zlib license: MIT license_family: MIT + purls: [] size: 11664910 timestamp: 1693005275313 - kind: conda @@ -9715,6 +8375,7 @@ packages: - zlib license: MIT license_family: MIT + purls: [] size: 17054450 timestamp: 1692993185686 - kind: conda @@ -9731,6 +8392,8 @@ packages: - python >=3.7 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/notebook-shim?source=hash-mapping size: 16880 timestamp: 1707957948029 - kind: conda @@ -9752,6 +8415,8 @@ packages: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping size: 6491938 timestamp: 1707226191321 - kind: conda @@ -9774,6 +8439,8 @@ packages: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping size: 7009070 timestamp: 1707225917496 - kind: conda @@ -9796,6 +8463,8 @@ packages: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping size: 5475744 timestamp: 1707226187124 - kind: conda @@ -9819,6 +8488,8 @@ packages: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping size: 5977469 timestamp: 1707226445438 - kind: conda @@ -9835,6 +8506,7 @@ packages: - vs2015_runtime license: GPL-2.0-or-later WITH Classpath-exception-2.0 license_family: GPL + purls: [] size: 170276751 timestamp: 1693890299692 - kind: conda @@ -9851,6 +8523,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: GPL-2.0-or-later WITH Classpath-exception-2.0 license_family: GPL + purls: [] size: 172513997 timestamp: 1693890048509 - kind: conda @@ -9867,6 +8540,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: GPL-2.0-or-later WITH Classpath-exception-2.0 license_family: GPL + purls: [] size: 170362594 timestamp: 1693890120650 - kind: conda @@ -9900,6 +8574,7 @@ packages: - xorg-libxtst license: GPL-2.0-or-later WITH Classpath-exception-2.0 license_family: GPL + purls: [] size: 176652534 timestamp: 1693902583962 - kind: conda @@ -9918,6 +8593,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: BSD-2-Clause license_family: BSD + purls: [] size: 307087 timestamp: 1671435439914 - kind: conda @@ -9937,6 +8613,7 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-2-Clause license_family: BSD + purls: [] size: 237974 timestamp: 1709159764160 - kind: conda @@ -9955,6 +8632,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: BSD-2-Clause license_family: BSD + purls: [] size: 341592 timestamp: 1709159244431 - kind: conda @@ -9972,6 +8650,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: BSD-2-Clause license_family: BSD + purls: [] size: 331273 timestamp: 1709159538792 - kind: conda @@ -9989,6 +8668,7 @@ packages: - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: Apache + purls: [] size: 8396053 timestamp: 1725412961673 - kind: conda @@ -10004,6 +8684,7 @@ packages: - ca-certificates license: Apache-2.0 license_family: Apache + purls: [] size: 2882450 timestamp: 1725410638874 - kind: conda @@ -10020,6 +8701,7 @@ packages: - libgcc >=13 license: Apache-2.0 license_family: Apache + purls: [] size: 2891789 timestamp: 1725410790053 - kind: conda @@ -10035,91 +8717,9 @@ packages: - ca-certificates license: Apache-2.0 license_family: Apache + purls: [] size: 2544654 timestamp: 1725410973572 -- kind: conda - name: orc - version: 1.9.0 - build: h385abfd_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.0-h385abfd_1.conda - sha256: bfd6af35afe7b8dfcc24721f05d5e3f9e8577105429c768f423a61f0fcc65105 - md5: 2cd5aac7ef1b4c6ac51bf521251a89b3 - depends: - - libgcc-ng >=12 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - libstdcxx-ng >=12 - - libzlib >=1.2.13,<2.0.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - snappy >=1.1.10,<1.2.0a0 - - zstd >=1.5.2,<1.6.0a0 - license: Apache-2.0 - license_family: Apache - size: 1020883 - timestamp: 1688234533243 -- kind: conda - name: orc - version: 1.9.0 - build: h858f345_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/orc-1.9.0-h858f345_1.conda - sha256: d0d43507d5f651529f814ed800d37eca1abebc87d654afb9ff75b6921c85d224 - md5: fca38d4f87f6d92751ee07189cf0f9c3 - depends: - - libcxx >=15.0.7 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - snappy >=1.1.10,<1.2.0a0 - - zstd >=1.5.2,<1.6.0a0 - license: Apache-2.0 - license_family: Apache - size: 440491 - timestamp: 1688235037695 -- kind: conda - name: orc - version: 1.9.0 - build: hef23039_1 - build_number: 1 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/orc-1.9.0-hef23039_1.conda - sha256: 8fc1f3cd45716559a6a875d15ed0ff06372c0e64934f63cf54450ddba2dc20f9 - md5: 6a24a185108c2e075a0e80b300003c26 - depends: - - libcxx >=15.0.7 - - libprotobuf >=4.23.3,<4.23.4.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - snappy >=1.1.10,<1.2.0a0 - - zstd >=1.5.2,<1.6.0a0 - license: Apache-2.0 - license_family: Apache - size: 441342 - timestamp: 1688234737518 -- kind: conda - name: orc - version: 1.9.0 - build: hf2b8f0d_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/orc-1.9.0-hf2b8f0d_1.conda - sha256: 05d5c8075c7b96868f056b6f38ffaf63bb9a119928f926f6913caade5b60db5e - md5: 2d5dfd05e0d6673662f21342caed3d0f - depends: - - libprotobuf >=4.23.3,<4.23.4.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - lz4-c >=1.9.3,<1.10.0a0 - - snappy >=1.1.10,<1.2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - - zstd >=1.5.2,<1.6.0a0 - license: Apache-2.0 - license_family: Apache - size: 874908 - timestamp: 1688234815207 - kind: conda name: outcome version: 1.3.0.post0 @@ -10134,6 +8734,8 @@ packages: - python >=3.7 license: MIT license_family: MIT + purls: + - pkg:pypi/outcome?source=hash-mapping size: 15544 timestamp: 1698324206436 - kind: conda @@ -10150,6 +8752,8 @@ packages: - typing_utils license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/overrides?source=hash-mapping size: 30232 timestamp: 1706394723472 - kind: conda @@ -10165,6 +8769,8 @@ packages: - python >=3.8 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping size: 50290 timestamp: 1718189540074 - kind: conda @@ -10189,6 +8795,8 @@ packages: - pytz >=2020.1,<2024.2 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/pandas?source=hash-mapping size: 13014228 timestamp: 1726878893275 - kind: conda @@ -10212,6 +8820,8 @@ packages: - pytz >=2020.1,<2024.2 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/pandas?source=hash-mapping size: 12209035 timestamp: 1726878886272 - kind: conda @@ -10236,6 +8846,8 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/pandas?source=hash-mapping size: 11810567 timestamp: 1726879420659 - kind: conda @@ -10260,6 +8872,8 @@ packages: - pytz >=2020.1,<2024.2 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/pandas?source=hash-mapping size: 12024352 timestamp: 1726878958127 - kind: conda @@ -10272,6 +8886,7 @@ packages: md5: 2c4a6c475e0f1bbffac672b0943dc520 license: GPL-2.0-or-later license_family: GPL + purls: [] size: 24950852 timestamp: 1728196799190 - kind: conda @@ -10284,6 +8899,7 @@ packages: md5: 4c2700fd13f9dbd7929d20eedde984ee license: GPL-2.0-or-later license_family: GPL + purls: [] size: 14073476 timestamp: 1728196394225 - kind: conda @@ -10296,6 +8912,7 @@ packages: md5: 2889e6b9c666c3a564ab90cedc5832fd license: GPL-2.0-or-later license_family: GPL + purls: [] size: 21003150 timestamp: 1728196276862 - kind: conda @@ -10308,6 +8925,7 @@ packages: md5: 5c56b7bfbdad3334a09230d405b63564 license: GPL-2.0-or-later license_family: GPL + purls: [] size: 22892672 timestamp: 1728196385862 - kind: conda @@ -10323,6 +8941,8 @@ packages: - python !=3.0,!=3.1,!=3.2,!=3.3 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/pandocfilters?source=hash-mapping size: 11627 timestamp: 1631603397334 - kind: conda @@ -10344,6 +8964,7 @@ packages: - libglib >=2.76.4,<3.0a0 - libpng >=1.6.39,<1.7.0a0 license: LGPL-2.1-or-later + purls: [] size: 426303 timestamp: 1693056536154 - kind: conda @@ -10359,6 +8980,8 @@ packages: - python >=3.6 license: MIT license_family: MIT + purls: + - pkg:pypi/parso?source=hash-mapping size: 75191 timestamp: 1712320447201 - kind: conda @@ -10374,6 +8997,7 @@ packages: - libzlib >=1.2.12,<2.0.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 1161688 timestamp: 1665563317371 - kind: conda @@ -10392,6 +9016,7 @@ packages: - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 952308 timestamp: 1723488734144 - kind: conda @@ -10407,6 +9032,8 @@ packages: - ptyprocess >=0.5 - python >=3.7 license: ISC + purls: + - pkg:pypi/pexpect?source=hash-mapping size: 53600 timestamp: 1706113273252 - kind: conda @@ -10423,6 +9050,8 @@ packages: - python >=3 license: MIT license_family: MIT + purls: + - pkg:pypi/pickleshare?source=hash-mapping size: 9332 timestamp: 1602536313357 - kind: conda @@ -10448,6 +9077,8 @@ packages: - python_abi 3.10.* *_cp310 - tk >=8.6.12,<8.7.0a0 license: LicenseRef-PIL + purls: + - pkg:pypi/pillow?source=hash-mapping size: 46538172 timestamp: 1675487797070 - kind: conda @@ -10473,6 +9104,8 @@ packages: - python_abi 3.10.* *_cp310 - tk >=8.6.12,<8.7.0a0 license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping size: 46384048 timestamp: 1695247436468 - kind: conda @@ -10500,6 +9133,8 @@ packages: - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping size: 42223178 timestamp: 1726075720583 - kind: conda @@ -10525,6 +9160,8 @@ packages: - python_abi 3.10.* *_cp310 - tk >=8.6.13,<8.7.0a0 license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping size: 42531285 timestamp: 1726075316302 - kind: conda @@ -10542,6 +9179,8 @@ packages: - wheel license: MIT license_family: MIT + purls: + - pkg:pypi/pip?source=hash-mapping size: 1386212 timestamp: 1690024763393 - kind: conda @@ -10558,6 +9197,7 @@ packages: - python >=3.8 license: BSD-3-Clause license_family: BSD + purls: [] size: 8861 timestamp: 1728816803073 - kind: conda @@ -10574,6 +9214,7 @@ packages: - python >=3.8 license: BSD-3-Clause license_family: BSD + purls: [] size: 8671 timestamp: 1728816803806 - kind: conda @@ -10589,6 +9230,7 @@ packages: - libstdcxx-ng >=12 license: MIT license_family: MIT + purls: [] size: 386826 timestamp: 1706549500138 - kind: conda @@ -10603,6 +9245,7 @@ packages: - libcxx >=16 license: MIT license_family: MIT + purls: [] size: 198755 timestamp: 1709239846651 - kind: conda @@ -10619,6 +9262,7 @@ packages: - libiconv >=1.16,<2.0.0a0 license: GPL-2.0-or-later license_family: GPL + purls: [] size: 46049 timestamp: 1650239029040 - kind: conda @@ -10634,6 +9278,8 @@ packages: depends: - python >=3.6 license: MIT AND PSF-2.0 + purls: + - pkg:pypi/pkgutil-resolve-name?source=hash-mapping size: 10778 timestamp: 1694617398467 - kind: conda @@ -10649,6 +9295,8 @@ packages: - python >=3.8 license: MIT license_family: MIT + purls: + - pkg:pypi/platformdirs?source=hash-mapping size: 20625 timestamp: 1726613611845 - kind: conda @@ -10664,6 +9312,8 @@ packages: - python >=3.8 license: MIT license_family: MIT + purls: + - pkg:pypi/pluggy?source=hash-mapping size: 23815 timestamp: 1713667175451 - kind: conda @@ -10686,6 +9336,8 @@ packages: - __glibc >=2.17 license: MIT license_family: MIT + purls: + - pkg:pypi/polars?source=hash-mapping size: 21673547 timestamp: 1727242313808 - kind: conda @@ -10707,6 +9359,8 @@ packages: - __osx >=10.13 license: MIT license_family: MIT + purls: + - pkg:pypi/polars?source=hash-mapping size: 20906584 timestamp: 1727243234798 - kind: conda @@ -10729,6 +9383,8 @@ packages: - __osx >=11.0 license: MIT license_family: MIT + purls: + - pkg:pypi/polars?source=hash-mapping size: 18621408 timestamp: 1727250559972 - kind: conda @@ -10750,6 +9406,8 @@ packages: - vc14_runtime >=14.40.33810 license: MIT license_family: MIT + purls: + - pkg:pypi/polars?source=hash-mapping size: 21678746 timestamp: 1727251417546 - kind: conda @@ -10765,6 +9423,8 @@ packages: - python >=3.8 license: Apache-2.0 license_family: Apache + purls: + - pkg:pypi/prometheus-client?source=hash-mapping size: 49024 timestamp: 1726902073034 - kind: conda @@ -10783,6 +9443,8 @@ packages: - prompt_toolkit 3.0.48 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/prompt-toolkit?source=hash-mapping size: 270271 timestamp: 1727341744544 - kind: conda @@ -10803,6 +9465,8 @@ packages: - setuptools license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/protobuf?source=hash-mapping size: 304050 timestamp: 1688121734447 - kind: conda @@ -10825,6 +9489,8 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/protobuf?source=hash-mapping size: 305533 timestamp: 1688121734729 - kind: conda @@ -10846,6 +9512,8 @@ packages: - setuptools license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/protobuf?source=hash-mapping size: 325773 timestamp: 1688121366252 - kind: conda @@ -10867,6 +9535,8 @@ packages: - setuptools license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/protobuf?source=hash-mapping size: 309752 timestamp: 1688121806045 - kind: conda @@ -10884,6 +9554,8 @@ packages: - python_abi 3.10.* *_cp310 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping size: 361313 timestamp: 1695367285835 - kind: conda @@ -10901,6 +9573,8 @@ packages: - python_abi 3.10.* *_cp310 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping size: 372879 timestamp: 1695368032827 - kind: conda @@ -10917,6 +9591,8 @@ packages: - python_abi 3.10.* *_cp310 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping size: 369757 timestamp: 1695367511232 - kind: conda @@ -10936,6 +9612,8 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping size: 380206 timestamp: 1695367659588 - kind: conda @@ -10953,6 +9631,8 @@ packages: - wrapt license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/psygnal?source=hash-mapping size: 63627 timestamp: 1715085720906 - kind: conda @@ -10968,6 +9648,7 @@ packages: - __osx >=10.13 license: MIT license_family: MIT + purls: [] size: 8364 timestamp: 1726802331537 - kind: conda @@ -10984,6 +9665,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 8252 timestamp: 1726802366959 - kind: conda @@ -10999,6 +9681,7 @@ packages: - m2w64-gcc-libs license: MIT license_family: MIT + purls: [] size: 6417 timestamp: 1606147814351 - kind: conda @@ -11014,6 +9697,7 @@ packages: - __osx >=11.0 license: MIT license_family: MIT + purls: [] size: 8381 timestamp: 1726802424786 - kind: conda @@ -11030,6 +9714,7 @@ packages: - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: LGPL-2.1-or-later + purls: [] size: 265827 timestamp: 1728400965968 - kind: conda @@ -11044,6 +9729,8 @@ packages: depends: - python license: ISC + purls: + - pkg:pypi/ptyprocess?source=hash-mapping size: 16546 timestamp: 1609419417991 - kind: conda @@ -11059,95 +9746,42 @@ packages: - python >=3.5 license: MIT license_family: MIT + purls: + - pkg:pypi/pure-eval?source=hash-mapping size: 16551 timestamp: 1721585805256 -- kind: conda +- kind: pypi name: pyarrow - version: 13.0.0 - build: py310h382c99a_0_cpu - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pyarrow-13.0.0-py310h382c99a_0_cpu.conda - sha256: 22a2575bf616298a34a61d1d5b513e7a77e2d69a6e23d230c886495a8e5ddbac - md5: ba3da2d3bacf00993d827ee682d73406 - depends: - - libarrow 13.0.0 h6e4acf5_0_cpu - - libcxx >=15.0.7 - - numpy >=1.22.4,<2.0a0 - - python >=3.10,<3.11.0a0 - - python >=3.10,<3.11.0a0 *_cpython - - python_abi 3.10.* *_cp310 - constrains: - - apache-arrow-proc =*=cpu - license: Apache-2.0 - license_family: APACHE - size: 3668280 - timestamp: 1692869942766 -- kind: conda + version: 16.0.0 + url: https://files.pythonhosted.org/packages/5b/04/c2a6f3ae840d96a00de2e07d68a3d30591b413b15b4385242e47e2ae0e97/pyarrow-16.0.0-cp310-cp310-macosx_11_0_arm64.whl + sha256: 574a00260a4ed9d118a14770edbd440b848fcae5a3024128be9d0274dbcaf858 + requires_dist: + - numpy>=1.16.6 + requires_python: '>=3.8' +- kind: pypi name: pyarrow - version: 13.0.0 - build: py310h6eef95f_3_cpu - build_number: 3 - subdir: osx-64 - url: https://conda.anaconda.org/conda-forge/osx-64/pyarrow-13.0.0-py310h6eef95f_3_cpu.conda - sha256: 14a3fcabdef8e372993ad0af5074b5a39464f01e4583e46feb1f05a952778d0c - md5: e617083ad4d644cdd0c7fb8222448a54 - depends: - - libarrow 13.0.0 hca2412d_3_cpu - - libcxx >=15.0.7 - - numpy >=1.22.4,<2.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - constrains: - - apache-arrow-proc =*=cpu - license: Apache-2.0 - license_family: APACHE - size: 3625282 - timestamp: 1694168931927 -- kind: conda + version: 16.0.0 + url: https://files.pythonhosted.org/packages/83/b7/77b5a755560329ebe12b16a7a15074fb003685e1cbcfef8dcab0a05fdd58/pyarrow-16.0.0-cp310-cp310-manylinux_2_28_x86_64.whl + sha256: 91d28f9a40f1264eab2af7905a4d95320ac2f287891e9c8b0035f264fe3c3a4b + requires_dist: + - numpy>=1.16.6 + requires_python: '>=3.8' +- kind: pypi name: pyarrow - version: 13.0.0 - build: py310hd0bb7c2_3_cpu - build_number: 3 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/pyarrow-13.0.0-py310hd0bb7c2_3_cpu.conda - sha256: 72942b7653cebfeed9889ac23b42ff5e3c374c1c14885670c62cabcc5e35edec - md5: b3d1f6c2d4b44299bd7762b79651dd17 - depends: - - libarrow 13.0.0 hba3d5be_3_cpu - - numpy >=1.22.4,<2.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - apache-arrow-proc =*=cpu - license: Apache-2.0 - license_family: APACHE - size: 2991846 - timestamp: 1694170082892 -- kind: conda + version: 16.0.0 + url: https://files.pythonhosted.org/packages/95/7a/36243efd5a9c1a0ac1146fa69044f4676eac13a162c8fb388869262330fe/pyarrow-16.0.0-cp310-cp310-win_amd64.whl + sha256: 99af421ee451a78884d7faea23816c429e263bd3618b22d38e7992c9ce2a7ad9 + requires_dist: + - numpy>=1.16.6 + requires_python: '>=3.8' +- kind: pypi name: pyarrow - version: 13.0.0 - build: py310hf9e7431_3_cpu - build_number: 3 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-13.0.0-py310hf9e7431_3_cpu.conda - sha256: bec4783484feab07d9b9138ed943d452f720c2f4d5bb75b91598a2c15fd06c22 - md5: 8d00baa18cc3a8bc986b6081c15f681c - depends: - - libarrow 13.0.0 h1ed0495_3_cpu - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - numpy >=1.22.4,<2.0a0 - - python >=3.10,<3.11.0a0 - - python_abi 3.10.* *_cp310 - constrains: - - apache-arrow-proc =*=cpu - license: Apache-2.0 - license_family: APACHE - size: 4016600 - timestamp: 1694167295169 + version: 16.0.0 + url: https://files.pythonhosted.org/packages/fd/5c/a4349f50b36382d3f40b304b91a3587ac433baceed9bec2434d663393a51/pyarrow-16.0.0-cp310-cp310-macosx_10_15_x86_64.whl + sha256: 22a1fdb1254e5095d629e29cd1ea98ed04b4bbfd8e42cc670a6b639ccc208b60 + requires_dist: + - numpy>=1.16.6 + requires_python: '>=3.8' - kind: conda name: pycparser version: '2.22' @@ -11161,6 +9795,8 @@ packages: - python >=3.8 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/pycparser?source=hash-mapping size: 105098 timestamp: 1711811634025 - kind: conda @@ -11176,6 +9812,8 @@ packages: - python >=3.8 license: BSD-2-Clause license_family: BSD + purls: + - pkg:pypi/pygments?source=hash-mapping size: 879295 timestamp: 1714846885370 - kind: conda @@ -11195,6 +9833,8 @@ packages: - setuptools license: MIT license_family: MIT + purls: + - pkg:pypi/pyobjc-core?source=hash-mapping size: 439688 timestamp: 1725739930202 - kind: conda @@ -11215,6 +9855,8 @@ packages: - setuptools license: MIT license_family: MIT + purls: + - pkg:pypi/pyobjc-core?source=hash-mapping size: 431134 timestamp: 1725739637287 - kind: conda @@ -11234,6 +9876,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/pyobjc-framework-cocoa?source=hash-mapping size: 335363 timestamp: 1725875364870 - kind: conda @@ -11254,6 +9898,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/pyobjc-framework-cocoa?source=hash-mapping size: 337442 timestamp: 1725875206912 - kind: conda @@ -11272,6 +9918,8 @@ packages: - win_inet_pton license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/pysocks?source=hash-mapping size: 19348 timestamp: 1661605138291 - kind: conda @@ -11289,6 +9937,8 @@ packages: - python >=3.8 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/pysocks?source=hash-mapping size: 18981 timestamp: 1661604969727 - kind: conda @@ -11312,6 +9962,8 @@ packages: - pytest-faulthandler >=2 license: MIT license_family: MIT + purls: + - pkg:pypi/pytest?source=hash-mapping size: 258293 timestamp: 1725977334143 - kind: conda @@ -11330,6 +9982,8 @@ packages: - toml license: MIT license_family: MIT + purls: + - pkg:pypi/pytest-cov?source=hash-mapping size: 25436 timestamp: 1684965001294 - kind: conda @@ -11361,6 +10015,7 @@ packages: constrains: - python_abi 3.10.* *_cp310 license: Python-2.0 + purls: [] size: 25321141 timestamp: 1729042931665 - kind: conda @@ -11387,6 +10042,7 @@ packages: constrains: - python_abi 3.10.* *_cp310 license: Python-2.0 + purls: [] size: 12924349 timestamp: 1729042113444 - kind: conda @@ -11413,6 +10069,7 @@ packages: constrains: - python_abi 3.10.* *_cp310 license: Python-2.0 + purls: [] size: 12411616 timestamp: 1729042103758 - kind: conda @@ -11439,6 +10096,7 @@ packages: constrains: - python_abi 3.10.* *_cp310 license: Python-2.0 + purls: [] size: 15933377 timestamp: 1729041771524 - kind: conda @@ -11455,6 +10113,8 @@ packages: - six >=1.5 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/python-dateutil?source=hash-mapping size: 222742 timestamp: 1709299922152 - kind: conda @@ -11473,6 +10133,8 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: + - pkg:pypi/duckdb?source=hash-mapping size: 15638825 timestamp: 1717687118745 - kind: conda @@ -11491,6 +10153,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/duckdb?source=hash-mapping size: 18599847 timestamp: 1717686407221 - kind: conda @@ -11508,6 +10172,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/duckdb?source=hash-mapping size: 20190347 timestamp: 1717686142652 - kind: conda @@ -11526,6 +10192,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/duckdb?source=hash-mapping size: 22769349 timestamp: 1717686625369 - kind: conda @@ -11541,6 +10209,8 @@ packages: - python >=3.3 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/fastjsonschema?source=hash-mapping size: 226165 timestamp: 1718477110630 - kind: conda @@ -11556,6 +10226,8 @@ packages: - python >=3.6 license: BSD-2-Clause license_family: BSD + purls: + - pkg:pypi/python-json-logger?source=hash-mapping size: 13383 timestamp: 1677079727691 - kind: conda @@ -11571,6 +10243,8 @@ packages: - python >=3.6 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/tzdata?source=hash-mapping size: 142527 timestamp: 1727140688093 - kind: conda @@ -11586,6 +10260,7 @@ packages: - python 3.10.* *_cpython license: BSD-3-Clause license_family: BSD + purls: [] size: 6227 timestamp: 1723823165457 - kind: conda @@ -11601,6 +10276,7 @@ packages: - python 3.10.* *_cpython license: BSD-3-Clause license_family: BSD + purls: [] size: 6319 timestamp: 1723823093772 - kind: conda @@ -11616,6 +10292,7 @@ packages: - python 3.10.* *_cpython license: BSD-3-Clause license_family: BSD + purls: [] size: 6324 timestamp: 1723823147856 - kind: conda @@ -11631,6 +10308,7 @@ packages: - python 3.10.* *_cpython license: BSD-3-Clause license_family: BSD + purls: [] size: 6715 timestamp: 1723823141288 - kind: conda @@ -11646,6 +10324,8 @@ packages: - python >=3.7 license: MIT license_family: MIT + purls: + - pkg:pypi/pytz?source=hash-mapping size: 188538 timestamp: 1706886944988 - kind: conda @@ -11666,6 +10346,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/pywavelets?source=hash-mapping size: 3616171 timestamp: 1728928836206 - kind: conda @@ -11687,6 +10369,8 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: + - pkg:pypi/pywavelets?source=hash-mapping size: 3554116 timestamp: 1728929614357 - kind: conda @@ -11706,6 +10390,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/pywavelets?source=hash-mapping size: 3603856 timestamp: 1728928865129 - kind: conda @@ -11726,6 +10412,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/pywavelets?source=hash-mapping size: 3689659 timestamp: 1728928688572 - kind: conda @@ -11745,6 +10433,8 @@ packages: - vc14_runtime >=14.29.30139 license: PSF-2.0 license_family: PSF + purls: + - pkg:pypi/pywin32?source=hash-mapping size: 5601095 timestamp: 1728636656373 - kind: conda @@ -11764,6 +10454,8 @@ packages: - winpty license: MIT license_family: MIT + purls: + - pkg:pypi/pywinpty?source=hash-mapping size: 200095 timestamp: 1729202756102 - kind: conda @@ -11783,6 +10475,8 @@ packages: - yaml >=0.2.5,<0.3.0a0 license: MIT license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping size: 162312 timestamp: 1725456439220 - kind: conda @@ -11801,6 +10495,8 @@ packages: - yaml >=0.2.5,<0.3.0a0 license: MIT license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping size: 164184 timestamp: 1725456348769 - kind: conda @@ -11820,6 +10516,8 @@ packages: - yaml >=0.2.5,<0.3.0a0 license: MIT license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping size: 182609 timestamp: 1725456280173 - kind: conda @@ -11840,6 +10538,8 @@ packages: - yaml >=0.2.5,<0.3.0a0 license: MIT license_family: MIT + purls: + - pkg:pypi/pyyaml?source=hash-mapping size: 156987 timestamp: 1725456772886 - kind: conda @@ -11860,6 +10560,8 @@ packages: - zeromq >=4.3.5,<4.4.0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/pyzmq?source=hash-mapping size: 315105 timestamp: 1728642507585 - kind: conda @@ -11881,6 +10583,8 @@ packages: - zeromq >=4.3.5,<4.3.6.0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/pyzmq?source=hash-mapping size: 317436 timestamp: 1728643213825 - kind: conda @@ -11902,6 +10606,8 @@ packages: - zeromq >=4.3.5,<4.4.0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/pyzmq?source=hash-mapping size: 338103 timestamp: 1728642374037 - kind: conda @@ -11923,6 +10629,8 @@ packages: - zeromq >=4.3.5,<4.4.0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/pyzmq?source=hash-mapping size: 314132 timestamp: 1728642745677 - kind: conda @@ -11936,6 +10644,7 @@ packages: md5: ab03527926f8ce85f84a91fd35520ef2 license: BSD-2-Clause license_family: BSD + purls: [] size: 1767853 timestamp: 1694329738983 - kind: conda @@ -11953,6 +10662,7 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-2-Clause license_family: BSD + purls: [] size: 1523119 timestamp: 1694330157594 - kind: conda @@ -11968,25 +10678,9 @@ packages: - libgcc-ng >=12 license: BSD-2-Clause license_family: BSD + purls: [] size: 15423721 timestamp: 1694329261357 -- kind: conda - name: rdma-core - version: '28.9' - build: h59595ed_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-28.9-h59595ed_1.conda - sha256: 832f9393ab3144ce6468c6f150db9d398fad4451e96a8879afb3059f0c9902f6 - md5: aeffb7c06b5f65e55e6c637408dc4100 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: Linux-OpenIB - license_family: BSD - size: 3735644 - timestamp: 1684785130341 - kind: conda name: re2 version: 2023.03.02 @@ -11999,6 +10693,7 @@ packages: - libcxx >=14.0.6 license: BSD-3-Clause license_family: BSD + purls: [] size: 185478 timestamp: 1677699240835 - kind: conda @@ -12014,6 +10709,7 @@ packages: - libstdcxx-ng >=12 license: BSD-3-Clause license_family: BSD + purls: [] size: 201211 timestamp: 1677698930545 - kind: conda @@ -12028,6 +10724,7 @@ packages: - libcxx >=14.0.6 license: BSD-3-Clause license_family: BSD + purls: [] size: 169959 timestamp: 1677699275465 - kind: conda @@ -12044,6 +10741,7 @@ packages: - vs2015_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD + purls: [] size: 378635 timestamp: 1677699429007 - kind: conda @@ -12060,6 +10758,7 @@ packages: - ncurses >=6.3,<7.0a0 license: GPL-3.0-only license_family: GPL + purls: [] size: 281456 timestamp: 1679532220005 - kind: conda @@ -12075,6 +10774,7 @@ packages: - ncurses >=6.3,<7.0a0 license: GPL-3.0-only license_family: GPL + purls: [] size: 250351 timestamp: 1679532511311 - kind: conda @@ -12090,6 +10790,7 @@ packages: - ncurses >=6.3,<7.0a0 license: GPL-3.0-only license_family: GPL + purls: [] size: 255870 timestamp: 1679532707590 - kind: conda @@ -12107,6 +10808,8 @@ packages: - rpds-py >=0.7.0 license: MIT license_family: MIT + purls: + - pkg:pypi/referencing?source=hash-mapping size: 42210 timestamp: 1714619625532 - kind: conda @@ -12128,6 +10831,8 @@ packages: - chardet >=3.0.2,<6 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/requests?source=hash-mapping size: 58810 timestamp: 1717057174842 - kind: conda @@ -12144,6 +10849,8 @@ packages: - six license: MIT license_family: MIT + purls: + - pkg:pypi/rfc3339-validator?source=hash-mapping size: 8064 timestamp: 1638811838081 - kind: conda @@ -12159,6 +10866,8 @@ packages: - python license: MIT license_family: MIT + purls: + - pkg:pypi/rfc3986-validator?source=hash-mapping size: 7818 timestamp: 1598024297745 - kind: conda @@ -12178,6 +10887,8 @@ packages: - __osx >=10.13 license: MIT license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping size: 297517 timestamp: 1725327314240 - kind: conda @@ -12198,6 +10909,8 @@ packages: - __glibc >=2.17 license: MIT license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping size: 331772 timestamp: 1725327229240 - kind: conda @@ -12218,6 +10931,8 @@ packages: - __osx >=11.0 license: MIT license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping size: 290841 timestamp: 1725327382953 - kind: conda @@ -12237,6 +10952,8 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: + - pkg:pypi/rpds-py?source=hash-mapping size: 208391 timestamp: 1725327781774 - kind: conda @@ -12255,6 +10972,8 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: + - pkg:pypi/ruff?source=hash-mapping size: 6867904 timestamp: 1728068781085 - kind: conda @@ -12274,6 +10993,8 @@ packages: - __osx >=10.12 license: MIT license_family: MIT + purls: + - pkg:pypi/ruff?source=hash-mapping size: 6709143 timestamp: 1728067364164 - kind: conda @@ -12292,6 +11013,8 @@ packages: - python_abi 3.10.* *_cp310 license: MIT license_family: MIT + purls: + - pkg:pypi/ruff?source=hash-mapping size: 6970904 timestamp: 1728067124093 - kind: conda @@ -12312,6 +11035,8 @@ packages: - __osx >=11.0 license: MIT license_family: MIT + purls: + - pkg:pypi/ruff?source=hash-mapping size: 6341227 timestamp: 1728067442525 - kind: conda @@ -12331,6 +11056,7 @@ packages: - sysroot_linux-64 >=2.17 license: MIT license_family: MIT + purls: [] size: 198885602 timestamp: 1723153698032 - kind: conda @@ -12345,6 +11071,7 @@ packages: - rust-std-aarch64-apple-darwin 1.80.1 hf6ec828_0 license: MIT license_family: MIT + purls: [] size: 197866703 timestamp: 1723155024117 - kind: conda @@ -12359,6 +11086,7 @@ packages: - rust-std-x86_64-apple-darwin 1.80.1 h38e4360_0 license: MIT license_family: MIT + purls: [] size: 202606989 timestamp: 1723154998091 - kind: conda @@ -12373,6 +11101,7 @@ packages: - rust-std-x86_64-pc-windows-msvc 1.80.1 h17fc481_0 license: MIT license_family: MIT + purls: [] size: 194534225 timestamp: 1723155969495 - kind: conda @@ -12390,6 +11119,7 @@ packages: - rust >=1.80.1,<1.80.2.0a0 license: MIT license_family: MIT + purls: [] size: 30991019 timestamp: 1723152907303 - kind: conda @@ -12407,6 +11137,7 @@ packages: - rust >=1.80.1,<1.80.2.0a0 license: MIT license_family: MIT + purls: [] size: 31988631 timestamp: 1723152891461 - kind: conda @@ -12424,6 +11155,7 @@ packages: - rust >=1.80.1,<1.80.2.0a0 license: MIT license_family: MIT + purls: [] size: 25255952 timestamp: 1723155705619 - kind: conda @@ -12441,23 +11173,9 @@ packages: - rust >=1.80.1,<1.80.2.0a0 license: MIT license_family: MIT + purls: [] size: 33938994 timestamp: 1723153507938 -- kind: conda - name: s2n - version: 1.3.54 - build: h06160fa_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.54-h06160fa_0.conda - sha256: 21941b4cc007fe556ce0ec66b590f2038fecf89ce850549a8bd072ba09d1a1a7 - md5: 149520612b92991a7de6f17550a19739 - depends: - - libgcc-ng >=12 - - openssl >=3.1.3,<4.0a0 - license: Apache-2.0 - license_family: Apache - size: 387091 - timestamp: 1696545067741 - kind: conda name: scikit-image version: 0.24.0 @@ -12494,6 +11212,8 @@ packages: - pooch >=1.6.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/scikit-image?source=hash-mapping size: 10851117 timestamp: 1723842695596 - kind: conda @@ -12532,6 +11252,8 @@ packages: - dask-core >=2021.1.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/scikit-image?source=hash-mapping size: 10299600 timestamp: 1723843263974 - kind: conda @@ -12570,6 +11292,8 @@ packages: - scikit-learn >=1.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/scikit-image?source=hash-mapping size: 10068930 timestamp: 1723843202594 - kind: conda @@ -12607,6 +11331,8 @@ packages: - toolz >=0.10.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/scikit-image?source=hash-mapping size: 10254367 timestamp: 1723842754501 - kind: conda @@ -12633,6 +11359,8 @@ packages: - python_abi 3.10.* *_cp310 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/scipy?source=hash-mapping size: 14390392 timestamp: 1724328287521 - kind: conda @@ -12657,6 +11385,8 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/scipy?source=hash-mapping size: 15256041 timestamp: 1724329403169 - kind: conda @@ -12682,6 +11412,8 @@ packages: - python_abi 3.10.* *_cp310 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/scipy?source=hash-mapping size: 15462354 timestamp: 1724328454550 - kind: conda @@ -12708,6 +11440,8 @@ packages: - python_abi 3.10.* *_cp310 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/scipy?source=hash-mapping size: 16907009 timestamp: 1724328294898 - kind: conda @@ -12729,6 +11463,8 @@ packages: - urllib3 >=1.26,<3 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/selenium?source=hash-mapping size: 287929 timestamp: 1691692525295 - kind: conda @@ -12741,6 +11477,7 @@ packages: md5: 968b2caba9b2f916203bf6bf8f86a60f license: Apache-2.0 license_family: APACHE + purls: [] size: 1695888 timestamp: 1692016996876 - kind: conda @@ -12753,6 +11490,7 @@ packages: md5: 030a4f1790ef349f12607c546bd0afe1 license: Apache-2.0 license_family: APACHE + purls: [] size: 1784783 timestamp: 1691679840506 - kind: conda @@ -12769,6 +11507,7 @@ packages: - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: APACHE + purls: [] size: 1695936 timestamp: 1691680459491 - kind: conda @@ -12783,6 +11522,7 @@ packages: - libgcc-ng >=12 license: Apache-2.0 license_family: APACHE + purls: [] size: 1911432 timestamp: 1691679258823 - kind: conda @@ -12799,6 +11539,8 @@ packages: - python >=3.7 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/send2trash?source=hash-mapping size: 22868 timestamp: 1712585140895 - kind: conda @@ -12816,6 +11558,8 @@ packages: - python >=3.7 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/send2trash?source=hash-mapping size: 23165 timestamp: 1712585504123 - kind: conda @@ -12833,6 +11577,8 @@ packages: - pywin32 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/send2trash?source=hash-mapping size: 23319 timestamp: 1712585816346 - kind: conda @@ -12848,6 +11594,8 @@ packages: - python >=3.8 license: MIT license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping size: 777462 timestamp: 1727249510532 - kind: conda @@ -12863,6 +11611,8 @@ packages: - python license: MIT license_family: MIT + purls: + - pkg:pypi/six?source=hash-mapping size: 14259 timestamp: 1620240338595 - kind: conda @@ -12878,6 +11628,7 @@ packages: - libcxx >=16 license: BSD-3-Clause license_family: BSD + purls: [] size: 34852 timestamp: 1712591354627 - kind: conda @@ -12893,6 +11644,7 @@ packages: - libcxx >=16 license: BSD-3-Clause license_family: BSD + purls: [] size: 34330 timestamp: 1712591417982 - kind: conda @@ -12909,6 +11661,7 @@ packages: - libstdcxx-ng >=12 license: BSD-3-Clause license_family: BSD + purls: [] size: 40135 timestamp: 1712590996060 - kind: conda @@ -12926,6 +11679,7 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD + purls: [] size: 57651 timestamp: 1712591561466 - kind: conda @@ -12941,6 +11695,8 @@ packages: - python >=3.7 license: Apache-2.0 license_family: Apache + purls: + - pkg:pypi/sniffio?source=hash-mapping size: 15064 timestamp: 1708953086199 - kind: conda @@ -12956,6 +11712,8 @@ packages: - python >=2.7 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/sortedcontainers?source=hash-mapping size: 26314 timestamp: 1621217159824 - kind: conda @@ -12972,6 +11730,8 @@ packages: - python >=3.8 license: MIT license_family: MIT + purls: + - pkg:pypi/soupsieve?source=hash-mapping size: 36754 timestamp: 1693929424267 - kind: conda @@ -12990,6 +11750,8 @@ packages: - python >=3.5 license: MIT license_family: MIT + purls: + - pkg:pypi/stack-data?source=hash-mapping size: 26205 timestamp: 1669632203115 - kind: conda @@ -13006,6 +11768,7 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-2-Clause license_family: BSD + purls: [] size: 2353906 timestamp: 1692967156046 - kind: conda @@ -13022,6 +11785,7 @@ packages: - libstdcxx-ng >=13 license: BSD-2-Clause license_family: BSD + purls: [] size: 2404332 timestamp: 1724459503486 - kind: conda @@ -13037,6 +11801,7 @@ packages: - libcxx >=17 license: BSD-2-Clause license_family: BSD + purls: [] size: 2153628 timestamp: 1724459465920 - kind: conda @@ -13053,6 +11818,7 @@ packages: - vs2015_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD + purls: [] size: 11597 timestamp: 1666792984220 - kind: conda @@ -13070,6 +11836,7 @@ packages: - tzdata license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later AND MPL-2.0 license_family: GPL + purls: [] size: 15141219 timestamp: 1727437660028 - kind: conda @@ -13089,6 +11856,7 @@ packages: - __glibc >=2.17 license: MIT license_family: MIT + purls: [] size: 3835339 timestamp: 1727786201305 - kind: conda @@ -13106,6 +11874,7 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: [] size: 3862809 timestamp: 1727787217223 - kind: conda @@ -13124,6 +11893,7 @@ packages: - __osx >=11.0 license: MIT license_family: MIT + purls: [] size: 3522930 timestamp: 1727786418703 - kind: conda @@ -13142,6 +11912,7 @@ packages: - __osx >=10.13 license: MIT license_family: MIT + purls: [] size: 3738226 timestamp: 1727786378888 - kind: conda @@ -13159,6 +11930,7 @@ packages: - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: APACHE + purls: [] size: 151494 timestamp: 1725532984828 - kind: conda @@ -13174,6 +11946,8 @@ packages: - python >=3.7 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/tenacity?source=hash-mapping size: 22802 timestamp: 1692026941198 - kind: conda @@ -13192,6 +11966,8 @@ packages: - tornado >=6.1.0 license: BSD-2-Clause license_family: BSD + purls: + - pkg:pypi/terminado?source=hash-mapping size: 22452 timestamp: 1710262728753 - kind: conda @@ -13210,6 +11986,8 @@ packages: - tornado >=6.1.0 license: BSD-2-Clause license_family: BSD + purls: + - pkg:pypi/terminado?source=hash-mapping size: 22717 timestamp: 1710265922593 - kind: conda @@ -13228,6 +12006,8 @@ packages: - tornado >=6.1.0 license: BSD-2-Clause license_family: BSD + purls: + - pkg:pypi/terminado?source=hash-mapping size: 22883 timestamp: 1710262943966 - kind: conda @@ -13247,6 +12027,8 @@ packages: - matplotlib-base >=3.3 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/tifffile?source=hash-mapping size: 174995 timestamp: 1692120265599 - kind: conda @@ -13266,6 +12048,8 @@ packages: - matplotlib-base >=3.3 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/tifffile?source=hash-mapping size: 180655 timestamp: 1727250532025 - kind: conda @@ -13282,6 +12066,8 @@ packages: - webencodings >=0.4 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/tinycss2?source=hash-mapping size: 25405 timestamp: 1713975078735 - kind: conda @@ -13297,6 +12083,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: TCL license_family: BSD + purls: [] size: 3270220 timestamp: 1699202389792 - kind: conda @@ -13312,6 +12099,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: TCL license_family: BSD + purls: [] size: 3145523 timestamp: 1699202432999 - kind: conda @@ -13329,6 +12117,7 @@ packages: - vc14_runtime >=14.29.30139 license: TCL license_family: BSD + purls: [] size: 3503410 timestamp: 1699202577803 - kind: conda @@ -13345,6 +12134,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: TCL license_family: BSD + purls: [] size: 3318875 timestamp: 1699202167581 - kind: conda @@ -13360,6 +12150,8 @@ packages: - python >=2.7 license: MIT license_family: MIT + purls: + - pkg:pypi/toml?source=hash-mapping size: 18433 timestamp: 1604308660817 - kind: conda @@ -13375,6 +12167,8 @@ packages: - python >=3.7 license: MIT license_family: MIT + purls: + - pkg:pypi/tomli?source=hash-mapping size: 18203 timestamp: 1727974767524 - kind: conda @@ -13393,6 +12187,8 @@ packages: - python_abi 3.10.* *_cp310 license: Apache-2.0 license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping size: 653350 timestamp: 1724956638966 - kind: conda @@ -13410,6 +12206,8 @@ packages: - python_abi 3.10.* *_cp310 license: Apache-2.0 license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping size: 651869 timestamp: 1724956270046 - kind: conda @@ -13428,6 +12226,8 @@ packages: - python_abi 3.10.* *_cp310 license: Apache-2.0 license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping size: 650505 timestamp: 1724960822818 - kind: conda @@ -13447,6 +12247,8 @@ packages: - vc14_runtime >=14.29.30139 license: Apache-2.0 license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping size: 653867 timestamp: 1724956678451 - kind: conda @@ -13462,6 +12264,8 @@ packages: - python >=3.8 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/traitlets?source=hash-mapping size: 110187 timestamp: 1713535244513 - kind: conda @@ -13483,6 +12287,8 @@ packages: - sortedcontainers license: MIT license_family: MIT + purls: + - pkg:pypi/trio?source=hash-mapping size: 674802 timestamp: 1729165664183 - kind: conda @@ -13505,6 +12311,8 @@ packages: - sortedcontainers license: MIT license_family: MIT + purls: + - pkg:pypi/trio?source=hash-mapping size: 674948 timestamp: 1729165821206 - kind: conda @@ -13527,6 +12335,8 @@ packages: - sortedcontainers license: MIT license_family: MIT + purls: + - pkg:pypi/trio?source=hash-mapping size: 675630 timestamp: 1729165833238 - kind: conda @@ -13548,6 +12358,8 @@ packages: - sortedcontainers license: MIT license_family: MIT + purls: + - pkg:pypi/trio?source=hash-mapping size: 674045 timestamp: 1729165617914 - kind: conda @@ -13566,6 +12378,8 @@ packages: - wsproto >=0.14 license: MIT license_family: MIT + purls: + - pkg:pypi/trio-websocket?source=hash-mapping size: 30714 timestamp: 1695817030933 - kind: conda @@ -13580,6 +12394,8 @@ packages: depends: - python >=3.6 license: Apache-2.0 AND MIT + purls: + - pkg:pypi/types-python-dateutil?source=hash-mapping size: 21765 timestamp: 1727940339297 - kind: conda @@ -13595,6 +12411,7 @@ packages: - typing_extensions 4.12.2 pyha770c72_0 license: PSF-2.0 license_family: PSF + purls: [] size: 10097 timestamp: 1717802659025 - kind: conda @@ -13610,6 +12427,8 @@ packages: - python >=3.8 license: PSF-2.0 license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping size: 39888 timestamp: 1717802653893 - kind: conda @@ -13625,6 +12444,8 @@ packages: - python >=3.6.1 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/typing-utils?source=hash-mapping size: 13829 timestamp: 1622899345711 - kind: conda @@ -13637,6 +12458,7 @@ packages: sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf md5: 8ac3367aafb1cc0a068483c580af8015 license: LicenseRef-Public-Domain + purls: [] size: 122354 timestamp: 1728047496079 - kind: conda @@ -13651,28 +12473,9 @@ packages: constrains: - vs2015_runtime >=14.29.30037 license: LicenseRef-MicrosoftWindowsSDK10 + purls: [] size: 559710 timestamp: 1728377334097 -- kind: conda - name: ucx - version: 1.14.1 - build: h64cca9d_5 - build_number: 5 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.14.1-h64cca9d_5.conda - sha256: a62f3fb56849dc37270f9078e1c8ba32328bc3ba4d32cf1f7dace48b431d5abe - md5: 39aa3b356d10d7e5add0c540945a0944 - depends: - - libgcc-ng >=12 - - libnuma >=2.0.16,<3.0a0 - - libstdcxx-ng >=12 - - rdma-core >=28.9,<29.0a0 - constrains: - - cuda-version >=11.2,<12 - license: BSD-3-Clause - license_family: BSD - size: 15210025 - timestamp: 1695214404131 - kind: conda name: uri-template version: 1.3.0 @@ -13686,6 +12489,8 @@ packages: - python >=3.7 license: MIT license_family: MIT + purls: + - pkg:pypi/uri-template?source=hash-mapping size: 23999 timestamp: 1688655976471 - kind: conda @@ -13705,6 +12510,8 @@ packages: - zstandard >=0.18.0 license: MIT license_family: MIT + purls: + - pkg:pypi/urllib3?source=hash-mapping size: 98076 timestamp: 1726496531769 - kind: conda @@ -13722,6 +12529,7 @@ packages: - vc14 license: BSD-3-Clause license_family: BSD + purls: [] size: 17447 timestamp: 1728400826998 - kind: conda @@ -13739,6 +12547,7 @@ packages: - vs2015_runtime 14.40.33810.* *_22 license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime license_family: Proprietary + purls: [] size: 750719 timestamp: 1728401055788 - kind: conda @@ -13755,6 +12564,8 @@ packages: - python license: MIT license_family: MIT + purls: + - pkg:pypi/vega-datasets?source=hash-mapping size: 183450 timestamp: 1606414171959 - kind: conda @@ -13775,6 +12586,8 @@ packages: - __osx >=10.13 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/vl-convert-python?source=hash-mapping size: 20936659 timestamp: 1728157975980 - kind: conda @@ -13794,6 +12607,8 @@ packages: - __osx >=10.13 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/vl-convert-python?source=hash-mapping size: 21704033 timestamp: 1728158827629 - kind: conda @@ -13814,6 +12629,8 @@ packages: - __glibc >=2.17 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/vl-convert-python?source=hash-mapping size: 23182077 timestamp: 1728158798404 - kind: conda @@ -13833,6 +12650,8 @@ packages: - vc14_runtime >=14.40.33810 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/vl-convert-python?source=hash-mapping size: 22858430 timestamp: 1728160711471 - kind: conda @@ -13858,6 +12677,8 @@ packages: - ipywidgets =8 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/voila?source=hash-mapping size: 2484888 timestamp: 1692275824749 - kind: conda @@ -13873,6 +12694,7 @@ packages: - vc14_runtime >=14.40.33810 license: BSD-3-Clause license_family: BSD + purls: [] size: 17453 timestamp: 1728400827536 - kind: conda @@ -13893,6 +12715,8 @@ packages: - __osx >=10.13 license: MIT license_family: MIT + purls: + - pkg:pypi/watchfiles?source=hash-mapping size: 344579 timestamp: 1725347109890 - kind: conda @@ -13914,6 +12738,8 @@ packages: - __glibc >=2.17 license: MIT license_family: MIT + purls: + - pkg:pypi/watchfiles?source=hash-mapping size: 390007 timestamp: 1725347081193 - kind: conda @@ -13935,6 +12761,8 @@ packages: - __osx >=11.0 license: MIT license_family: MIT + purls: + - pkg:pypi/watchfiles?source=hash-mapping size: 338064 timestamp: 1725347460256 - kind: conda @@ -13955,6 +12783,8 @@ packages: - vc14_runtime >=14.29.30139 license: MIT license_family: MIT + purls: + - pkg:pypi/watchfiles?source=hash-mapping size: 288216 timestamp: 1725347875153 - kind: conda @@ -13970,6 +12800,8 @@ packages: - python >=3.8 license: MIT license_family: MIT + purls: + - pkg:pypi/wcwidth?source=hash-mapping size: 32709 timestamp: 1704731373922 - kind: conda @@ -13985,6 +12817,8 @@ packages: - python >=3.5 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/webcolors?source=hash-mapping size: 18378 timestamp: 1723294800217 - kind: conda @@ -14001,6 +12835,8 @@ packages: - python >=2.6 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/webencodings?source=hash-mapping size: 15600 timestamp: 1694681458271 - kind: conda @@ -14016,6 +12852,8 @@ packages: - python >=3.8 license: Apache-2.0 license_family: APACHE + purls: + - pkg:pypi/websocket-client?source=hash-mapping size: 47066 timestamp: 1713923494501 - kind: conda @@ -14033,6 +12871,8 @@ packages: - python_abi 3.10.* *_cp310 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/websockets?source=hash-mapping size: 187372 timestamp: 1727013527111 - kind: conda @@ -14049,6 +12889,8 @@ packages: - python_abi 3.10.* *_cp310 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/websockets?source=hash-mapping size: 186245 timestamp: 1727013497195 - kind: conda @@ -14066,6 +12908,8 @@ packages: - python_abi 3.10.* *_cp310 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/websockets?source=hash-mapping size: 186724 timestamp: 1727013426337 - kind: conda @@ -14084,6 +12928,8 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/websockets?source=hash-mapping size: 189109 timestamp: 1727013888775 - kind: conda @@ -14099,6 +12945,8 @@ packages: - python >=3.8 license: MIT license_family: MIT + purls: + - pkg:pypi/wheel?source=hash-mapping size: 58585 timestamp: 1722797131787 - kind: conda @@ -14114,6 +12962,8 @@ packages: - python >=3.7 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/widgetsnbextension?source=hash-mapping size: 898656 timestamp: 1724331433259 - kind: conda @@ -14130,6 +12980,8 @@ packages: - __win - python >=3.6 license: LicenseRef-Public-Domain + purls: + - pkg:pypi/win-inet-pton?source=hash-mapping size: 9602 timestamp: 1727796413384 - kind: conda @@ -14145,6 +12997,7 @@ packages: platform: win license: MIT license_family: MIT + purls: [] size: 1176306 - kind: conda name: wrapt @@ -14162,6 +13015,8 @@ packages: - python_abi 3.10.* *_cp310 license: BSD-2-Clause license_family: BSD + purls: + - pkg:pypi/wrapt?source=hash-mapping size: 52539 timestamp: 1724958177999 - kind: conda @@ -14179,6 +13034,8 @@ packages: - python_abi 3.10.* *_cp310 license: BSD-2-Clause license_family: BSD + purls: + - pkg:pypi/wrapt?source=hash-mapping size: 51978 timestamp: 1724958148426 - kind: conda @@ -14197,6 +13054,8 @@ packages: - python_abi 3.10.* *_cp310 license: BSD-2-Clause license_family: BSD + purls: + - pkg:pypi/wrapt?source=hash-mapping size: 55354 timestamp: 1724958039989 - kind: conda @@ -14216,6 +13075,8 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-2-Clause license_family: BSD + purls: + - pkg:pypi/wrapt?source=hash-mapping size: 54079 timestamp: 1724958550547 - kind: conda @@ -14232,6 +13093,8 @@ packages: - python >=3.7 license: MIT license_family: MIT + purls: + - pkg:pypi/wsproto?source=hash-mapping size: 24731 timestamp: 1661356453883 - kind: conda @@ -14249,6 +13112,7 @@ packages: - xorg-xextproto >=7.3.0,<8.0a0 license: MIT license_family: MIT + purls: [] size: 11311 timestamp: 1727033761080 - kind: conda @@ -14265,6 +13129,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 22320 timestamp: 1726802558171 - kind: conda @@ -14281,6 +13146,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 30242 timestamp: 1726846706299 - kind: conda @@ -14297,6 +13163,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 58159 timestamp: 1727531850109 - kind: conda @@ -14315,6 +13182,7 @@ packages: - xorg-libice >=1.1.1,<2.0a0 license: MIT license_family: MIT + purls: [] size: 27516 timestamp: 1727634669421 - kind: conda @@ -14333,6 +13201,7 @@ packages: - xorg-xproto license: MIT license_family: MIT + purls: [] size: 828060 timestamp: 1712415742569 - kind: conda @@ -14348,6 +13217,7 @@ packages: - __osx >=10.13 license: MIT license_family: MIT + purls: [] size: 13176 timestamp: 1727034772877 - kind: conda @@ -14364,6 +13234,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 14679 timestamp: 1727034741045 - kind: conda @@ -14379,6 +13250,7 @@ packages: - m2w64-gcc-libs-core license: MIT license_family: MIT + purls: [] size: 51297 timestamp: 1684638355740 - kind: conda @@ -14394,6 +13266,7 @@ packages: - __osx >=11.0 license: MIT license_family: MIT + purls: [] size: 13515 timestamp: 1727034783560 - kind: conda @@ -14408,6 +13281,7 @@ packages: - m2w64-gcc-libs license: MIT license_family: MIT + purls: [] size: 67908 timestamp: 1610072296570 - kind: conda @@ -14422,6 +13296,7 @@ packages: - __osx >=10.13 license: MIT license_family: MIT + purls: [] size: 18465 timestamp: 1727794980957 - kind: conda @@ -14437,6 +13312,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 19901 timestamp: 1727794976192 - kind: conda @@ -14451,6 +13327,7 @@ packages: - __osx >=11.0 license: MIT license_family: MIT + purls: [] size: 18487 timestamp: 1727795205022 - kind: conda @@ -14468,6 +13345,7 @@ packages: - xorg-xextproto license: MIT license_family: MIT + purls: [] size: 50143 timestamp: 1677036907815 - kind: conda @@ -14485,6 +13363,7 @@ packages: - xorg-libx11 >=1.7.0,<2.0a0 license: MIT license_family: MIT + purls: [] size: 18145 timestamp: 1617717802636 - kind: conda @@ -14507,6 +13386,7 @@ packages: - xorg-xextproto >=7.3.0,<8.0a0 license: MIT license_family: MIT + purls: [] size: 46794 timestamp: 1722108216651 - kind: conda @@ -14523,6 +13403,7 @@ packages: - xorg-renderproto license: MIT license_family: MIT + purls: [] size: 37770 timestamp: 1688300707994 - kind: conda @@ -14543,6 +13424,7 @@ packages: - xorg-xproto license: MIT license_family: MIT + purls: [] size: 379256 timestamp: 1690288540492 - kind: conda @@ -14565,6 +13447,7 @@ packages: - xorg-recordproto license: MIT license_family: MIT + purls: [] size: 32931 timestamp: 1722575571554 - kind: conda @@ -14581,6 +13464,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 10290 timestamp: 1726846345776 - kind: conda @@ -14597,6 +13481,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 11867 timestamp: 1726802820431 - kind: conda @@ -14613,6 +13498,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 30549 timestamp: 1726846235301 - kind: conda @@ -14629,6 +13515,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 73315 timestamp: 1726845753874 - kind: conda @@ -14642,6 +13529,7 @@ packages: depends: - libgcc-ng >=12 license: LGPL-2.1 and GPL-2.0 + purls: [] size: 418368 timestamp: 1660346797927 - kind: conda @@ -14653,6 +13541,7 @@ packages: sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec md5: 39c6b54e94014701dd157f4f576ed211 license: LGPL-2.1 and GPL-2.0 + purls: [] size: 235693 timestamp: 1660346961024 - kind: conda @@ -14664,6 +13553,7 @@ packages: sha256: eb09823f34cc2dd663c0ec4ab13f246f45dcd52e5b8c47b9864361de5204a1c8 md5: a72f9d4ea13d55d745ff1ed594747f10 license: LGPL-2.1 and GPL-2.0 + purls: [] size: 238119 timestamp: 1660346964847 - kind: conda @@ -14678,6 +13568,7 @@ packages: - vc >=14.1,<15 - vs2015_runtime >=14.16.27033 license: LGPL-2.1 and GPL-2.0 + purls: [] size: 217804 timestamp: 1660346976440 - kind: conda @@ -14691,6 +13582,7 @@ packages: md5: d7e08fcf8259d742156188e8762b4d20 license: MIT license_family: MIT + purls: [] size: 84237 timestamp: 1641347062780 - kind: conda @@ -14704,6 +13596,7 @@ packages: md5: 4bb3f014845110883a3c5ee811fd84b4 license: MIT license_family: MIT + purls: [] size: 88016 timestamp: 1641347076660 - kind: conda @@ -14719,6 +13612,7 @@ packages: - libgcc-ng >=9.4.0 license: MIT license_family: MIT + purls: [] size: 89141 timestamp: 1641346969816 - kind: conda @@ -14735,6 +13629,7 @@ packages: - vs2015_runtime >=14.16.27012 license: MIT license_family: MIT + purls: [] size: 63274 timestamp: 1641347623319 - kind: conda @@ -14751,6 +13646,7 @@ packages: - nodejs >=14.10.0 license: BSD-2-Clause license_family: BSD + purls: [] size: 807029 timestamp: 1688182050573 - kind: conda @@ -14767,6 +13663,7 @@ packages: - nodejs >=14.10.0 license: BSD-2-Clause license_family: BSD + purls: [] size: 808466 timestamp: 1688182120492 - kind: conda @@ -14786,6 +13683,7 @@ packages: - libstdcxx >=13 license: MPL-2.0 license_family: MOZILLA + purls: [] size: 335528 timestamp: 1728364029042 - kind: conda @@ -14804,6 +13702,7 @@ packages: - libsodium >=1.0.20,<1.0.21.0a0 license: MPL-2.0 license_family: MOZILLA + purls: [] size: 280870 timestamp: 1728363954972 - kind: conda @@ -14823,6 +13722,7 @@ packages: - vc14_runtime >=14.29.30139 license: MPL-2.0 license_family: MOZILLA + purls: [] size: 2701749 timestamp: 1728364260886 - kind: conda @@ -14841,6 +13741,7 @@ packages: - libsodium >=1.0.20,<1.0.21.0a0 license: MPL-2.0 license_family: MOZILLA + purls: [] size: 290634 timestamp: 1728364170966 - kind: conda @@ -14858,6 +13759,7 @@ packages: - llvm-openmp >=17.0.6 license: BSD-3-Clause license_family: BSD + purls: [] size: 200112 timestamp: 1726925701356 - kind: conda @@ -14875,6 +13777,7 @@ packages: - llvm-openmp >=17.0.6 license: BSD-3-Clause license_family: BSD + purls: [] size: 210590 timestamp: 1726925557854 - kind: conda @@ -14893,6 +13796,7 @@ packages: - libstdcxx >=13 license: BSD-3-Clause license_family: BSD + purls: [] size: 279120 timestamp: 1726925529897 - kind: conda @@ -14910,6 +13814,7 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD + purls: [] size: 235412 timestamp: 1726926095834 - kind: conda @@ -14925,6 +13830,8 @@ packages: - python >=3.8 license: MIT license_family: MIT + purls: + - pkg:pypi/zipp?source=hash-mapping size: 21409 timestamp: 1726248679175 - kind: conda @@ -14941,6 +13848,7 @@ packages: - libzlib 1.3.1 h8359307_2 license: Zlib license_family: Other + purls: [] size: 77606 timestamp: 1727963209370 - kind: conda @@ -14958,6 +13866,7 @@ packages: - libzlib 1.3.1 hb9d3cd8_2 license: Zlib license_family: Other + purls: [] size: 92286 timestamp: 1727963153079 - kind: conda @@ -14974,6 +13883,7 @@ packages: - libzlib 1.3.1 hd23fc13_2 license: Zlib license_family: Other + purls: [] size: 88544 timestamp: 1727963189976 - kind: conda @@ -14988,6 +13898,7 @@ packages: - libgcc-ng >=12 license: Zlib license_family: Other + purls: [] size: 94553 timestamp: 1679094841423 - kind: conda @@ -15000,6 +13911,7 @@ packages: md5: 4852d8981e833f34c8ed32e4fb8e103b license: Zlib license_family: Other + purls: [] size: 84057 timestamp: 1679095058609 - kind: conda @@ -15012,6 +13924,7 @@ packages: md5: 813b5ad3ba92b75b84f40602b6d34ffb license: Zlib license_family: Other + purls: [] size: 93171 timestamp: 1679095009343 - kind: conda @@ -15028,6 +13941,7 @@ packages: - vs2015_runtime >=14.29.30139 license: Zlib license_family: Other + purls: [] size: 90788 timestamp: 1679095380986 - kind: conda @@ -15049,6 +13963,8 @@ packages: - zstd >=1.5.6,<1.6.0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping size: 320810 timestamp: 1725305704555 - kind: conda @@ -15069,6 +13985,8 @@ packages: - zstd >=1.5.6,<1.6.0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping size: 400765 timestamp: 1725305605347 - kind: conda @@ -15090,6 +14008,8 @@ packages: - zstd >=1.5.6,<1.6.0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping size: 408309 timestamp: 1725305719512 - kind: conda @@ -15112,6 +14032,8 @@ packages: - zstd >=1.5.6,<1.6.0a0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/zstandard?source=hash-mapping size: 311278 timestamp: 1725306039901 - kind: conda @@ -15129,6 +14051,7 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD + purls: [] size: 349143 timestamp: 1714723445995 - kind: conda @@ -15144,6 +14067,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 498900 timestamp: 1714723303098 - kind: conda @@ -15160,6 +14084,7 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 554846 timestamp: 1714722996770 - kind: conda @@ -15175,5 +14100,6 @@ packages: - libzlib >=1.2.13,<2.0.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 405089 timestamp: 1714723101397 diff --git a/pixi.toml b/pixi.toml index 211fcb939..d7b31d3f7 100644 --- a/pixi.toml +++ b/pixi.toml @@ -119,7 +119,6 @@ pip = "23.2.1.*" voila = "0.5.0.*" tenacity = "8.2.3.*" pytest-cov = "4.1.0.*" -flaky = "3.7.0.*" vega_datasets = "0.9.0.*" jupytext = "1.15.0.*" openjdk = "20.0.0.*" @@ -131,8 +130,7 @@ ruff = ">=0.6.9,<0.7" mypy = ">=1.11.2,<2" pixi-pycharm = ">=0.0.8,<0.0.9" scipy = "1.14.1.*" -pandas = ">=2.2.3,<3" -pyarrow = ">=13.0.0,<14" +flaky = ">=3.8.1,<4" # Dependencies are those required at runtime by the Python packages [dependencies] @@ -156,3 +154,6 @@ jpeg = "9e.*" giflib = "5.2.1.*" libglib = "2.76.4.*" glib = "2.76.4.*" + +[pypi-dependencies] +pyarrow = "==16" diff --git a/vegafusion-common/Cargo.toml b/vegafusion-common/Cargo.toml index d69e71ba5..7224ff2a9 100644 --- a/vegafusion-common/Cargo.toml +++ b/vegafusion-common/Cargo.toml @@ -42,6 +42,10 @@ workspace = true [dependencies.datafusion-functions] workspace = true +features = ["core_expressions", "string_expressions", "datetime_expressions", "hashbrown"] + +[dependencies.datafusion-functions-nested] +workspace = true [dependencies.datafusion-proto] workspace = true @@ -69,4 +73,4 @@ optional = true [dependencies.object_store] workspace = true -optional = true +optional = true \ No newline at end of file diff --git a/vegafusion-datafusion-udfs/Cargo.toml b/vegafusion-datafusion-udfs/Cargo.toml index 6d949f551..dbcd3c841 100644 --- a/vegafusion-datafusion-udfs/Cargo.toml +++ b/vegafusion-datafusion-udfs/Cargo.toml @@ -26,8 +26,5 @@ version = "1.6.9" path = "../vegafusion-core" version = "1.6.9" -[dependencies.datafusion-physical-expr] -workspace = true - [dependencies.datafusion-functions] workspace = true diff --git a/vegafusion-python/Cargo.toml b/vegafusion-python/Cargo.toml index 5f723c7e4..5bf7837c5 100644 --- a/vegafusion-python/Cargo.toml +++ b/vegafusion-python/Cargo.toml @@ -49,7 +49,7 @@ workspace = true [dependencies.vegafusion-common] path = "../vegafusion-common" -features = ["pyo3", "proto", "base64"] +features = ["pyo3", "base64"] version = "1.6.9" [dependencies.vegafusion-core] @@ -70,9 +70,6 @@ features = ["datafusion-conn"] path = "../vegafusion-dataframe" version = "1.6.9" -[dependencies.datafusion-proto] -workspace = true - [dependencies.tokio] workspace = true features = ["macros", "rt-multi-thread"] diff --git a/vegafusion-runtime/Cargo.toml b/vegafusion-runtime/Cargo.toml index da9c74919..b75267f51 100644 --- a/vegafusion-runtime/Cargo.toml +++ b/vegafusion-runtime/Cargo.toml @@ -65,9 +65,6 @@ workspace = true [dependencies.prost] workspace = true -[dependencies.prost-types] -workspace = true - [dependencies.uuid] version = "^1.2" features = ["v4"] diff --git a/vegafusion-wasm/Cargo.toml b/vegafusion-wasm/Cargo.toml index f8cf1ae02..1092f5f05 100644 --- a/vegafusion-wasm/Cargo.toml +++ b/vegafusion-wasm/Cargo.toml @@ -26,9 +26,6 @@ wasm-bindgen-test = "0.3.13" [dependencies.prost] workspace = true -[dependencies.prost-types] -workspace = true - [dependencies.futures] workspace = true From 3ec05097f218d22e8ba88ab7f44724e1021d9ed7 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 19 Oct 2024 15:34:24 -0400 Subject: [PATCH 16/36] v2: Remove Python sql connection logic (#524) * Remove Python sql connection / sql dataset * Remove rust python connection logic * Fix python tests * fmt --- vegafusion-python/src/connection.rs | 440 ------------------ vegafusion-python/src/lib.rs | 147 ++---- vegafusion-python/tests/test_pretransform.py | 174 +------ .../tests/test_pretransform_specs.py | 24 +- vegafusion-python/tests/test_sql_dataset.py | 17 - .../tests/test_transformed_data.py | 41 +- .../vegafusion/connection/__init__.py | 179 ------- .../vegafusion/connection/duckdb.py | 368 --------------- .../vegafusion/dataset/__init__.py | 3 - vegafusion-python/vegafusion/dataset/dfi.py | 169 ------- .../vegafusion/dataset/duckdb.py | 38 -- vegafusion-python/vegafusion/dataset/sql.py | 84 ---- vegafusion-python/vegafusion/runtime.py | 207 +++----- 13 files changed, 121 insertions(+), 1770 deletions(-) delete mode 100644 vegafusion-python/src/connection.rs delete mode 100644 vegafusion-python/tests/test_sql_dataset.py delete mode 100644 vegafusion-python/vegafusion/connection/__init__.py delete mode 100644 vegafusion-python/vegafusion/connection/duckdb.py delete mode 100644 vegafusion-python/vegafusion/dataset/__init__.py delete mode 100644 vegafusion-python/vegafusion/dataset/dfi.py delete mode 100644 vegafusion-python/vegafusion/dataset/duckdb.py delete mode 100644 vegafusion-python/vegafusion/dataset/sql.py diff --git a/vegafusion-python/src/connection.rs b/vegafusion-python/src/connection.rs deleted file mode 100644 index 381d38172..000000000 --- a/vegafusion-python/src/connection.rs +++ /dev/null @@ -1,440 +0,0 @@ -use arrow::datatypes::SchemaRef; -use async_trait::async_trait; -use pyo3::prelude::*; -use pyo3::types::{IntoPyDict, PyDict, PyString, PyTuple}; -use pyo3_arrow::PySchema; -use std::collections::HashMap; -use std::str::FromStr; -use std::sync::Arc; -use vegafusion_common::data::table::VegaFusionTable; -use vegafusion_core::{arrow::datatypes::Schema, error::Result}; -use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; -use vegafusion_sql::connection::{Connection, SqlConnection}; -use vegafusion_sql::dataframe::{CsvReadOptions, DataFrame, SqlDataFrame}; -use vegafusion_sql::dialect::Dialect; - -fn get_dialect_and_fallback_connection( - conn: &PyObject, -) -> Result<(Dialect, Option>)> { - let mut dialect = Python::with_gil(|py| -> std::result::Result<_, PyErr> { - let dialect_object = conn.call_method0(py, "dialect")?; - let dialect_string = dialect_object.extract::(py)?; - Ok(Dialect::from_str(&dialect_string)?) - })?; - - let fallback_conn = Python::with_gil( - |py| -> std::result::Result>, PyErr> { - let should_fallback_object = conn.call_method0(py, "fallback")?; - let should_fallback = should_fallback_object.extract::(py)?; - if should_fallback { - // Create fallback DataFusion connection. This will be used when SQL is encountered - // that isn't supported by the main connection. - let fallback_conn: DataFusionConnection = Default::default(); - Ok(Some(Arc::new(fallback_conn))) - } else { - Ok(None) - } - }, - )?; - - if fallback_conn.is_some() { - // If we are going to fall back to the DataFusion connection, remove the - // str_to_utc_timestamp scalar function so that timestamp parsing falls back to - // our DataFusion UDF, which matches Vega more closely than external SQL engines. - dialect.scalar_functions.remove("str_to_utc_timestamp"); - dialect.scalar_transformers.remove("str_to_utc_timestamp"); - } - Ok((dialect, fallback_conn)) -} - -fn perform_fetch_query(query: &str, schema: &Schema, conn: &PyObject) -> Result { - let table = Python::with_gil(|py| -> std::result::Result<_, PyErr> { - let query_object = PyString::new_bound(py, query); - let query_object = query_object.as_ref(); - let pyschema = PySchema::new(Arc::new(schema.clone())); - let args = PyTuple::new_bound(py, vec![query_object, pyschema.to_pyarrow(py)?.bind(py)]); - let table_object = conn.call_method_bound(py, "fetch_query", args, None)?; - VegaFusionTable::from_pyarrow(py, table_object.bind(py)) - })?; - Ok(table) -} - -#[pyclass] -#[derive(Clone)] -pub struct PySqlConnection { - conn: Arc, - dialect: Dialect, - fallback_conn: Option>, -} - -#[pymethods] -impl PySqlConnection { - #[new] - pub fn new(conn: PyObject) -> Result { - let (dialect, fallback_conn) = get_dialect_and_fallback_connection(&conn)?; - - Ok(Self { - conn: Arc::new(conn), - dialect, - fallback_conn, - }) - } -} - -#[async_trait] -impl Connection for PySqlConnection { - fn id(&self) -> String { - "pyduckdb".to_string() - } - - async fn tables(&self) -> Result> { - let tables = Python::with_gil(|py| -> std::result::Result<_, PyErr> { - let tables_object = self.conn.call_method0(py, "tables")?; - let tables_dict = tables_object.downcast_bound::(py)?; - - let mut tables: HashMap = HashMap::new(); - - for key in tables_dict.keys() { - let value = tables_dict.get_item(key.clone())?.unwrap(); - let pyschema = value.extract::()?; - let key_string = key.extract::()?; - tables.insert(key_string, pyschema.into_inner().as_ref().clone()); - } - Ok(tables) - })?; - - Ok(tables) - } - - /// Scan a named table into a DataFrame - async fn scan_table(&self, name: &str) -> Result> { - // Build DataFrame referencing the registered table - Ok(Arc::new( - SqlDataFrame::try_new( - Arc::new(self.clone()), - name, - self.fallback_conn.clone().into_iter().collect(), - ) - .await?, - )) - } - - /// Scan a VegaFusionTable into a DataFrame - async fn scan_arrow(&self, table: VegaFusionTable) -> Result> { - let random_id = uuid::Uuid::new_v4().to_string().replace('-', "_"); - let table_name = format!("arrow_{random_id}"); - let fallback_connection = Python::with_gil(|py| -> std::result::Result<_, PyErr> { - let pa_table = table.to_pyo3_arrow()?.to_pyarrow(py)?; - - // Register table with Python connection - let table_name_object = table_name.clone().into_py(py); - let is_temporary_object = true.into_py(py); - let args = - PyTuple::new_bound(py, vec![table_name_object, pa_table, is_temporary_object]); - - match self.conn.call_method1(py, "register_arrow", args) { - Ok(_) => {} - Err(err) => { - let err_bound = err.get_type_bound(py); - let exception_name = err_bound.name()?; - - // Check if we have a fallback connection and this is a RegistrationNotSupportedError - if let Some(fallback_connection) = &self.fallback_conn { - if exception_name == "RegistrationNotSupportedError" { - return Ok(Some(fallback_connection)); - } - } - return Err(err); - } - } - Ok(None) - })?; - - if let Some(fallback_connection) = fallback_connection { - // Try again with fallback connection - fallback_connection.scan_arrow(table).await - } else { - // Build DataFrame referencing the registered table - Ok(Arc::new( - SqlDataFrame::try_new( - Arc::new(self.clone()), - &table_name, - self.fallback_conn.clone().into_iter().collect(), - ) - .await?, - )) - } - } - - async fn scan_csv(&self, url: &str, opts: CsvReadOptions) -> Result> { - let random_id = uuid::Uuid::new_v4().to_string().replace('-', "_"); - let table_name = format!("csv_{random_id}"); - - let inner_opts = opts.clone(); - let fallback_connection = Python::with_gil(|py| -> std::result::Result<_, PyErr> { - // Build Python CsvReadOptions - let vegafusion_module = PyModule::import_bound(py, "vegafusion.connection")?; - let csv_opts_class = vegafusion_module.getattr("CsvReadOptions")?; - - let pyschema = inner_opts - .schema - .and_then(|schema| PySchema::new(Arc::new(schema)).to_pyarrow(py).ok()) - .into_py(py); - let kwargs = vec![ - ("has_header", inner_opts.has_header.into_py(py)), - ( - "delimeter", - (inner_opts.delimiter as char).to_string().into_py(py), - ), - ("file_extension", inner_opts.file_extension.into_py(py)), - ("schema", pyschema), - ] - .into_py_dict_bound(py); - let args = PyTuple::empty_bound(py); - let csv_opts = csv_opts_class.call(args, Some(&kwargs))?; - - // Register table with Python connection - let table_name_object = table_name.clone().into_py(py); - let path_name_object = url.to_string().into_py(py); - let is_temporary_object = true.into_py(py); - let args = PyTuple::new_bound( - py, - vec![ - table_name_object.bind(py), - path_name_object.bind(py), - &csv_opts, - is_temporary_object.bind(py), - ], - ); - - match self.conn.call_method1(py, "register_csv", args) { - Ok(_) => {} - Err(err) => { - let err_bound = err.get_type_bound(py); - let exception_name = err_bound.name()?; - - // Check if we have a fallback connection and this is a RegistrationNotSupportedError - if let Some(fallback_connection) = &self.fallback_conn { - if exception_name == "RegistrationNotSupportedError" { - return Ok(Some(fallback_connection)); - } - } - return Err(err); - } - } - Ok(None) - })?; - - if let Some(fallback_connection) = fallback_connection { - // Try again with fallback connection - fallback_connection.scan_csv(url, opts).await - } else { - // Build DataFrame referencing the registered table - Ok(Arc::new( - SqlDataFrame::try_new( - Arc::new(self.clone()), - &table_name, - self.fallback_conn.clone().into_iter().collect(), - ) - .await?, - )) - } - } - - async fn scan_arrow_file(&self, path: &str) -> Result> { - let random_id = uuid::Uuid::new_v4().to_string().replace('-', "_"); - let table_name = format!("arrow_file_{random_id}"); - - let fallback_connection = Python::with_gil(|py| -> std::result::Result<_, PyErr> { - // Register table with Python connection - let table_name_object = table_name.clone().into_py(py); - let path_name_object = path.to_string().into_py(py); - let is_temporary_object = true.into_py(py); - - let args = PyTuple::new_bound( - py, - vec![ - table_name_object.bind(py), - path_name_object.bind(py), - is_temporary_object.bind(py), - ], - ); - match self.conn.call_method1(py, "register_arrow_file", args) { - Ok(_) => {} - Err(err) => { - let err_bound = err.get_type_bound(py); - let exception_name = err_bound.name()?; - - // Check if we have a fallback connection and this is a RegistrationNotSupportedError - if let Some(fallback_connection) = &self.fallback_conn { - if exception_name == "RegistrationNotSupportedError" { - return Ok(Some(fallback_connection)); - } - } - return Err(err); - } - } - Ok(None) - })?; - - if let Some(fallback_connection) = fallback_connection { - // Try again with fallback connection - fallback_connection.scan_arrow_file(path).await - } else { - // Build DataFrame referencing the registered table - Ok(Arc::new( - SqlDataFrame::try_new( - Arc::new(self.clone()), - &table_name, - self.fallback_conn.clone().into_iter().collect(), - ) - .await?, - )) - } - } - - async fn scan_parquet(&self, path: &str) -> Result> { - let random_id = uuid::Uuid::new_v4().to_string().replace('-', "_"); - let table_name = format!("parquet_{random_id}"); - - let fallback_connection = Python::with_gil(|py| -> std::result::Result<_, PyErr> { - // Register table with Python connection - let table_name_object = table_name.clone().into_py(py); - let path_name_object = path.to_string().into_py(py); - let is_temporary_object = true.into_py(py); - - let args = PyTuple::new_bound( - py, - vec![ - table_name_object.bind(py), - path_name_object.bind(py), - is_temporary_object.bind(py), - ], - ); - match self.conn.call_method1(py, "register_parquet", args) { - Ok(_) => {} - Err(err) => { - let err_bound = err.get_type_bound(py); - let exception_name = err_bound.name()?; - - // Check if we have a fallback connection and this is a RegistrationNotSupportedError - if let Some(fallback_connection) = &self.fallback_conn { - if exception_name == "RegistrationNotSupportedError" { - return Ok(Some(fallback_connection)); - } - } - return Err(err); - } - } - Ok(None) - })?; - - if let Some(fallback_connection) = fallback_connection { - // Try again with fallback connection - fallback_connection.scan_parquet(path).await - } else { - // Build DataFrame referencing the registered table - Ok(Arc::new( - SqlDataFrame::try_new( - Arc::new(self.clone()), - &table_name, - self.fallback_conn.clone().into_iter().collect(), - ) - .await?, - )) - } - } -} - -#[async_trait] -impl SqlConnection for PySqlConnection { - async fn fetch_query(&self, query: &str, schema: &Schema) -> Result { - perform_fetch_query(query, schema, &self.conn) - } - - fn dialect(&self) -> &Dialect { - &self.dialect - } - - fn to_connection(&self) -> Arc { - Arc::new(self.clone()) - } -} - -#[pyclass] -#[derive(Clone)] -pub struct PySqlDataset { - pub dataset: Arc, - pub dialect: Dialect, - pub table_name: String, - pub table_schema: SchemaRef, - pub fallback_conn: Option>, -} - -#[pymethods] -impl PySqlDataset { - #[new] - pub fn new(dataset: PyObject) -> Result { - let (dialect, fallback_conn) = get_dialect_and_fallback_connection(&dataset)?; - let (table_name, table_schema) = Python::with_gil(|py| -> std::result::Result<_, PyErr> { - let table_name_obj = dataset.call_method0(py, "table_name")?; - let table_name = table_name_obj.extract::(py)?; - - let table_schema_obj = dataset.call_method0(py, "table_schema")?; - let pyschema = table_schema_obj.extract::(py)?; - Ok((table_name, pyschema.into_inner())) - })?; - - Ok(Self { - dataset: Arc::new(dataset), - dialect, - table_name, - table_schema, - fallback_conn, - }) - } -} - -#[async_trait] -impl Connection for PySqlDataset { - fn id(&self) -> String { - // Include random UUID in id because we can't be sure that the underlying data source - // hasn't changed between calls. - format!("pyduckdb-{}", uuid::Uuid::new_v4()) - } - - async fn tables(&self) -> Result> { - Ok( - vec![(self.table_name.clone(), self.table_schema.as_ref().clone())] - .into_iter() - .collect(), - ) - } - - async fn scan_table(&self, name: &str) -> Result> { - // Build DataFrame referencing the registered table - Ok(Arc::new( - SqlDataFrame::try_new( - Arc::new(self.clone()), - name, - self.fallback_conn.clone().into_iter().collect(), - ) - .await?, - )) - } -} - -#[async_trait] -impl SqlConnection for PySqlDataset { - async fn fetch_query(&self, query: &str, schema: &Schema) -> Result { - perform_fetch_query(query, schema, &self.dataset) - } - - fn dialect(&self) -> &Dialect { - &self.dialect - } - - fn to_connection(&self) -> Arc { - Arc::new(self.clone()) - } -} diff --git a/vegafusion-python/src/lib.rs b/vegafusion-python/src/lib.rs index a423b2e1b..da2aeb4c6 100644 --- a/vegafusion-python/src/lib.rs +++ b/vegafusion-python/src/lib.rs @@ -1,5 +1,3 @@ -pub mod connection; - use lazy_static::lazy_static; use pyo3; use pyo3::exceptions::PyValueError; @@ -23,7 +21,6 @@ use vegafusion_core::runtime::GrpcVegaFusionRuntime; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; -use crate::connection::{PySqlConnection, PySqlDataset}; use env_logger::{Builder, Target}; use pythonize::{depythonize, pythonize}; use serde_json::json; @@ -151,41 +148,22 @@ impl PyChartState { #[pyclass] struct PyVegaFusionRuntime { runtime: Arc, - tokio_runtime_connection: Arc, - tokio_runtime_current_thread: Arc, + tokio_runtime: Arc, } impl PyVegaFusionRuntime { fn process_inline_datasets( &self, inline_datasets: Option<&Bound>, - ) -> PyResult<(HashMap, bool)> { - let mut any_main_thread = false; + ) -> PyResult> { if let Some(inline_datasets) = inline_datasets { Python::with_gil(|py| -> PyResult<_> { - let vegafusion_dataset_module = PyModule::import_bound(py, "vegafusion.dataset")?; - let sql_dataset_type = vegafusion_dataset_module.getattr("SqlDataset")?; let imported_datasets = inline_datasets .iter() .map(|(name, inline_dataset)| { let inline_dataset = inline_dataset.to_object(py); let inline_dataset = inline_dataset.bind(py); - let dataset = if inline_dataset.is_instance(&sql_dataset_type)? { - let main_thread = inline_dataset - .call_method0("main_thread")? - .extract::()?; - any_main_thread = any_main_thread || main_thread; - let sql_dataset = PySqlDataset::new(inline_dataset.to_object(py))?; - let rt = if main_thread { - &self.tokio_runtime_current_thread - } else { - &self.tokio_runtime_connection - }; - let df = py.allow_threads(|| { - rt.block_on(sql_dataset.scan_table(&sql_dataset.table_name)) - })?; - VegaFusionDataset::DataFrame(df) - } else if inline_dataset.hasattr("__arrow_c_stream__")? { + let dataset = if inline_dataset.hasattr("__arrow_c_stream__")? { // Import via Arrow PyCapsule Interface let (table, hash) = VegaFusionTable::from_pyarrow_with_hash(py, inline_dataset)?; @@ -202,10 +180,10 @@ impl PyVegaFusionRuntime { Ok((name.to_string(), dataset)) }) .collect::>>()?; - Ok((imported_datasets, any_main_thread)) + Ok(imported_datasets) }) } else { - Ok((Default::default(), false)) + Ok(Default::default()) } } } @@ -213,38 +191,23 @@ impl PyVegaFusionRuntime { #[pymethods] impl PyVegaFusionRuntime { #[staticmethod] - #[pyo3(signature = (max_capacity=None, memory_limit=None, worker_threads=None, connection=None))] + #[pyo3(signature = (max_capacity=None, memory_limit=None, worker_threads=None))] pub fn new_embedded( max_capacity: Option, memory_limit: Option, worker_threads: Option, - connection: Option, ) -> PyResult { initialize_logging(); - let (conn, mut tokio_runtime_builder) = if let Some(pyconnection) = connection { - // Use Python connection and single-threaded tokio runtime (this avoids deadlocking the Python interpreter) - let conn = Arc::new(PySqlConnection::new(pyconnection)?) as Arc; - (conn, tokio::runtime::Builder::new_current_thread()) - } else { - // Use DataFusion connection and multi-threaded tokio runtime - let conn = Arc::new(DataFusionConnection::default()) as Arc; - let mut builder = tokio::runtime::Builder::new_multi_thread(); - if let Some(worker_threads) = worker_threads { - builder.worker_threads(worker_threads.max(1) as usize); - } - (conn, builder) - }; + // Use DataFusion connection and multi-threaded tokio runtime + let conn = Arc::new(DataFusionConnection::default()) as Arc; + let mut builder = tokio::runtime::Builder::new_multi_thread(); + if let Some(worker_threads) = worker_threads { + builder.worker_threads(worker_threads.max(1) as usize); + } // Build the tokio runtime - let tokio_runtime_connection = tokio_runtime_builder - .enable_all() - .thread_stack_size(TOKIO_THREAD_STACK_SIZE) - .build() - .external("Failed to create Tokio thread pool")?; - - // Create current thread runtime - let tokio_runtime_current_thread = tokio::runtime::Builder::new_current_thread() + let tokio_runtime_connection = builder .enable_all() .thread_stack_size(TOKIO_THREAD_STACK_SIZE) .build() @@ -252,8 +215,7 @@ impl PyVegaFusionRuntime { Ok(Self { runtime: Arc::new(VegaFusionRuntime::new(conn, max_capacity, memory_limit)), - tokio_runtime_connection: Arc::new(tokio_runtime_connection), - tokio_runtime_current_thread: Arc::new(tokio_runtime_current_thread), + tokio_runtime: Arc::new(tokio_runtime_connection), }) } @@ -278,8 +240,7 @@ impl PyVegaFusionRuntime { Ok(Self { runtime: Arc::new(runtime), - tokio_runtime_connection: tokio_runtime.clone(), - tokio_runtime_current_thread: tokio_runtime.clone(), + tokio_runtime: tokio_runtime.clone(), }) } @@ -299,21 +260,12 @@ impl PyVegaFusionRuntime { default_input_tz: default_input_tz.clone(), }; - let (inline_datasets, any_main_thread_sources) = - self.process_inline_datasets(inline_datasets)?; - - // Get runtime based on whether there were any Python data sources that require running - // on the main thread. In this case we need to use the current thread tokio runtime - let tokio_runtime = if any_main_thread_sources { - &self.tokio_runtime_current_thread - } else { - &self.tokio_runtime_connection - }; + let inline_datasets = self.process_inline_datasets(inline_datasets)?; py.allow_threads(|| { PyChartState::try_new( self.runtime.clone(), - tokio_runtime.clone(), + self.tokio_runtime.clone(), spec, inline_datasets, tz_config, @@ -336,8 +288,7 @@ impl PyVegaFusionRuntime { keep_signals: Option)>>, keep_datasets: Option)>>, ) -> PyResult<(PyObject, PyObject)> { - let (inline_datasets, any_main_thread_sources) = - self.process_inline_datasets(inline_datasets)?; + let inline_datasets = self.process_inline_datasets(inline_datasets)?; let spec = parse_json_spec(spec)?; let preserve_interactivity = preserve_interactivity.unwrap_or(false); @@ -351,16 +302,8 @@ impl PyVegaFusionRuntime { keep_variables.push((Variable::new_data(&name), scope)) } - // Get runtime based on whether there were any Python data sources that require running - // on the main thread. In this case we need to use the current thread tokio runtime - let rt = if any_main_thread_sources { - &self.tokio_runtime_current_thread - } else { - &self.tokio_runtime_connection - }; - let (spec, warnings) = py.allow_threads(|| { - rt.block_on( + self.tokio_runtime.block_on( self.runtime.pre_transform_spec( &spec, &inline_datasets, @@ -405,8 +348,7 @@ impl PyVegaFusionRuntime { row_limit: Option, inline_datasets: Option<&Bound>, ) -> PyResult<(PyObject, PyObject)> { - let (inline_datasets, any_main_thread_sources) = - self.process_inline_datasets(inline_datasets)?; + let inline_datasets = self.process_inline_datasets(inline_datasets)?; let spec = parse_json_spec(spec)?; // Build variables @@ -419,16 +361,8 @@ impl PyVegaFusionRuntime { }) .collect(); - // Get runtime based on whether there were any Python data sources that require running - // on the main thread. In this case we need to use the current thread tokio runtime - let rt = if any_main_thread_sources { - &self.tokio_runtime_current_thread - } else { - &self.tokio_runtime_connection - }; - let (values, warnings) = py.allow_threads(|| { - rt.block_on( + self.tokio_runtime.block_on( self.runtime.pre_transform_values( &spec, &inline_datasets, @@ -495,21 +429,12 @@ impl PyVegaFusionRuntime { keep_signals: Option)>>, keep_datasets: Option)>>, ) -> PyResult<(PyObject, Vec, PyObject)> { - let (inline_datasets, any_main_thread_sources) = - self.process_inline_datasets(inline_datasets)?; + let inline_datasets = self.process_inline_datasets(inline_datasets)?; let spec = parse_json_spec(spec)?; let preserve_interactivity = preserve_interactivity.unwrap_or(true); let extract_threshold = extract_threshold.unwrap_or(20); let extracted_format = extracted_format.unwrap_or_else(|| "pyarrow".to_string()); - // Get runtime based on whether there were any Python data sources that require running - // on the main thread. In this case we need to use the current thread tokio runtime - let rt = if any_main_thread_sources { - &self.tokio_runtime_current_thread - } else { - &self.tokio_runtime_connection - }; - // Build keep_variables let mut keep_variables: Vec = Vec::new(); for (name, scope) in keep_signals.unwrap_or_default() { @@ -526,17 +451,18 @@ impl PyVegaFusionRuntime { } let (tx_spec, datasets, warnings) = py.allow_threads(|| { - rt.block_on(self.runtime.pre_transform_extract( - &spec, - &inline_datasets, - &PreTransformExtractOpts { - local_tz, - default_input_tz, - preserve_interactivity, - extract_threshold: extract_threshold as i32, - keep_variables, - }, - )) + self.tokio_runtime + .block_on(self.runtime.pre_transform_extract( + &spec, + &inline_datasets, + &PreTransformExtractOpts { + local_tz, + default_input_tz, + preserve_interactivity, + extract_threshold: extract_threshold as i32, + keep_variables, + }, + )) })?; let warnings: Vec<_> = warnings @@ -604,9 +530,7 @@ impl PyVegaFusionRuntime { pub fn clear_cache(&self) -> PyResult<()> { if let Some(runtime) = self.runtime.as_any().downcast_ref::() { - Ok(self - .tokio_runtime_current_thread - .block_on(runtime.clear_cache())) + Ok(self.tokio_runtime.block_on(runtime.clear_cache())) } else { Err(PyValueError::new_err( "Current Runtime does not support clear_cache", @@ -722,7 +646,6 @@ pub fn build_pre_transform_spec_plan( fn _vegafusion(_py: Python, m: &Bound) -> PyResult<()> { m.add_class::()?; m.add_class::()?; - m.add_class::()?; m.add_function(wrap_pyfunction!(get_column_usage, m)?)?; m.add_function(wrap_pyfunction!(build_pre_transform_spec_plan, m)?)?; m.add_function(wrap_pyfunction!(get_virtual_memory, m)?)?; diff --git a/vegafusion-python/tests/test_pretransform.py b/vegafusion-python/tests/test_pretransform.py index 2aab84fcc..a3731ca57 100644 --- a/vegafusion-python/tests/test_pretransform.py +++ b/vegafusion-python/tests/test_pretransform.py @@ -1,5 +1,4 @@ import base64 -import decimal import json from datetime import date from importlib.util import find_spec @@ -17,17 +16,6 @@ def setup_module(module): vf.set_local_tz("UTC") -def get_connections(): - connections = ["datafusion"] - try: - if find_spec("duckdb") is not None: - connections.append("duckdb") - except ImportError: - pass - - return connections - - def order_items_spec(): return json.loads(r""" { @@ -1531,28 +1519,22 @@ def test_date32_pre_transform_dataset_polars(): ] -def test_date32_in_timeunit_duckdb_crash(): - try: - # Set this as the active connection - vf.runtime.set_connection("duckdb") - - # order_items includes a table://order_items data url - vega_spec = date32_timeunit_spec() - dataframe = pd.DataFrame( - { - "GO_LIVE_MONTH": [date(2021, 1, 1), date(2021, 2, 1)], - "PERCENT_GO_LIVES": [0.2, 0.3], - } - ) +def test_date32_in_timeunit_crash(): + # order_items includes a table://order_items data url + vega_spec = date32_timeunit_spec() + dataframe = pd.DataFrame( + { + "GO_LIVE_MONTH": [date(2021, 1, 1), date(2021, 2, 1)], + "PERCENT_GO_LIVES": [0.2, 0.3], + } + ) - datasets, warnings = vf.runtime.pre_transform_datasets( - vega_spec, ["data_1"], inline_datasets={"dataframe": dataframe} - ) - assert len(warnings) == 0 - assert len(datasets) == 1 - assert len(datasets[0]) == 2 - finally: - vf.runtime.set_connection("datafusion") + datasets, warnings = vf.runtime.pre_transform_datasets( + vega_spec, ["data_1"], inline_datasets={"dataframe": dataframe} + ) + assert len(warnings) == 0 + assert len(datasets) == 1 + assert len(datasets[0]) == 2 def test_period_in_column_name(): @@ -1659,117 +1641,10 @@ def test_pre_transform_dataset_dataframe_interface_protocol(): assert_frame_equal(result, expected) -def test_pre_transform_dataset_duckdb_conn(): - import duckdb - - n = 4050 - # Input a polars DataFrame (which follows the DataFrame Interface Protocol) - order_items = pd.DataFrame({"menu_item": [0] * n + [1] * (2 * n) + [2] * (3 * n)}) - - try: - # Create duckdb connection and register order_items with duckdb - conn = duckdb.connect() - conn.register("order_items", order_items) - - # Set this as the active connection - vf.runtime.set_connection(conn) - - # order_items includes a table://order_items data url - vega_spec = order_items_spec() - datasets, warnings = vf.runtime.pre_transform_datasets( - vega_spec, - ["data_0"], - ) - assert len(warnings) == 0 - assert len(datasets) == 1 - - result = datasets[0] - expected = pd.DataFrame({"menu_item": [0, 1, 2], "__count": [n, 2 * n, 3 * n]}) - pd.testing.assert_frame_equal(result, expected) - finally: - vf.runtime.set_connection("datafusion") - - -def test_pre_transform_dataset_duckdb_with_decimal_conn(): - import duckdb - - n = 4050 - # Input a polars DataFrame (which follows the DataFrame Interface Protocol) - order_items = pd.DataFrame( - {"menu_item_int": [0] * n + [1] * (2 * n) + [2] * (3 * n)} - ) - - try: - # Create duckdb connection and register order_items with duckdb - conn = duckdb.connect() - conn.register("order_items_int", order_items) - conn.query( - "SELECT menu_item_int::DECIMAL(12,2) as menu_item from order_items_int" - ).to_view("order_items") - - # Set this as the active connection - vf.runtime.set_connection(conn) - - # order_items includes a table://order_items data url - vega_spec = order_items_spec() - datasets, warnings = vf.runtime.pre_transform_datasets( - vega_spec, - ["data_0"], - ) - assert len(warnings) == 0 - assert len(datasets) == 1 - - result = datasets[0] - expected = pd.DataFrame( - { - "menu_item": [ - decimal.Decimal(0), - decimal.Decimal(1), - decimal.Decimal(2), - ], - "__count": [n, 2 * n, 3 * n], - } - ) - pd.testing.assert_frame_equal(result, expected) - finally: - vf.runtime.set_connection("datafusion") - - -def test_duckdb_timestamp_with_timezone(): - try: - vf.runtime.set_connection("duckdb") - dates_df = pd.DataFrame( - { - "date_col": [date(2022, 1, 1), date(2022, 1, 2), date(2022, 1, 3)], - } - ) - dates_df["date_col"] = pd.to_datetime(dates_df.date_col).dt.tz_localize("UTC") - spec = date_column_spec() - - (output_ds,), _warnings = vf.runtime.pre_transform_datasets( - spec, - ["data_0"], - "America/New_York", - default_input_tz="UTC", - inline_datasets={"dates": dates_df}, - ) - - # Timestamps are in the local timezone, so they should be midnight local time - assert list(output_ds.date_col) == [ - pd.Timestamp("2022-01-01 00:00:00", tz="UTC"), - pd.Timestamp("2022-01-02 00:00:00", tz="UTC"), - pd.Timestamp("2022-01-03 00:00:00", tz="UTC"), - ] - finally: - vf.runtime.set_connection("datafusion") - - def test_gh_268_hang(): """ Tests for hang reported in https://github.com/hex-inc/vegafusion/issues/268 """ - vf.runtime.set_connection("datafusion") - # Load movies into polars movies = pd.read_json( "https://raw.githubusercontent.com/vega/vega-datasets/main/data/movies.json" @@ -1788,24 +1663,7 @@ def test_gh_268_hang(): ) -def test_repeat_duckdb(): - """ - Tests for hang reported in https://github.com/hex-inc/vegafusion/issues/268 - """ - vf.runtime.set_connection("duckdb") - movies = pd.read_json( - "https://raw.githubusercontent.com/vega/vega-datasets/main/data/movies.json" - ) - spec = gh_268_hang_spec() - for _ in range(2): - vf.runtime.pre_transform_datasets( - spec, ["data_3"], inline_datasets={"movies_clean": movies} - ) - - -@pytest.mark.parametrize("connection", get_connections()) -def test_pivot_mixed_case(connection): - vf.runtime.set_connection(connection) +def test_pivot_mixed_case(): source_0 = pd.DataFrame.from_records( [ {"country": "Norway", "type": "gold", "count": 14}, diff --git a/vegafusion-python/tests/test_pretransform_specs.py b/vegafusion-python/tests/test_pretransform_specs.py index d7425616c..0f9c0d2fe 100644 --- a/vegafusion-python/tests/test_pretransform_specs.py +++ b/vegafusion-python/tests/test_pretransform_specs.py @@ -1,11 +1,7 @@ import json -from io import BytesIO from pathlib import Path import pytest -from skimage.io import imread -from skimage.metrics import structural_similarity as ssim -from vl_convert import vega_to_png import vegafusion as vf @@ -71,32 +67,14 @@ def test_it(category, name): # Define local timezone local_tz = "America/New_York" - # Pre-transform with DataFusion connection and convert to image - vf.runtime.set_connection("datafusion") + # Pre-transform and make sure there aren't errors (transformed, _) = vf.runtime.pre_transform_spec(spec, local_tz) - img_datafusion = imread(BytesIO(vega_to_png(transformed))) - - # Pre-transform with DuckDB connection and convert to image - vf.runtime.set_connection("duckdb") - (transformed, _) = vf.runtime.pre_transform_spec(spec, local_tz) - img_duckdb = imread(BytesIO(vega_to_png(transformed))) - - # Compare images - assert ( - img_datafusion.shape == img_duckdb.shape - ), "Size mismatch between datafusion and duckdb connections" - similarity = ssim(img_datafusion, img_duckdb, channel_axis=2) - print(similarity) - assert ( - similarity >= 0.998 - ), "Similarity failed between datafusion and duckdb connections" def test_pretransform_extract(): spec_file = spec_dir / "vegalite" / "rect_binned_heatmap.vg.json" spec = json.loads(spec_file.read_text("utf8")) - vf.runtime.set_connection("datafusion") (_transformed, datasets, warnings) = vf.runtime.pre_transform_extract(spec, "UTC") assert len(warnings) == 0 diff --git a/vegafusion-python/tests/test_sql_dataset.py b/vegafusion-python/tests/test_sql_dataset.py deleted file mode 100644 index 678f48228..000000000 --- a/vegafusion-python/tests/test_sql_dataset.py +++ /dev/null @@ -1,17 +0,0 @@ -import duckdb -import pytest - -from vegafusion.dataset.duckdb import DuckDbDataset - - -def test_sql_dataset_dfi(): - try: - import pyarrow.interchange as pi - except ImportError: - pytest.skip("DataFrame interface protocol requires pyarrow 11.0.0 or later") - - rel = duckdb.query("SELECT 1 as a") - dataset = DuckDbDataset(rel) - table = pi.from_dataframe(dataset) - assert table.num_rows == 1 - assert table.column_names == ["a"] diff --git a/vegafusion-python/tests/test_transformed_data.py b/vegafusion-python/tests/test_transformed_data.py index c322c5223..9b037d697 100644 --- a/vegafusion-python/tests/test_transformed_data.py +++ b/vegafusion-python/tests/test_transformed_data.py @@ -15,17 +15,6 @@ altair_mocks_dir = here / "altair_mocks" -def get_connections(): - connections = ["datafusion"] - - from importlib.util import find_spec - - if find_spec("duckdb") is not None: - connections.append("duckdb") - - return connections - - @pytest.mark.parametrize( "mock_name,expected_len,expected_cols", [ @@ -203,10 +192,7 @@ def get_connections(): ("simple/strip_chart", 400, ["Name", "Cylinders", "Origin"]), ], ) -@pytest.mark.parametrize("connection", get_connections()) -def test_transformed_data_for_mock(mock_name, expected_len, expected_cols, connection): - vf.runtime.set_connection(connection) - +def test_transformed_data_for_mock(mock_name, expected_len, expected_cols): mock_path = altair_mocks_dir / mock_name / "mock.py" mock_src = mock_path.read_text("utf8") chart = eval_block(mock_src) @@ -358,11 +344,7 @@ def test_transformed_data_for_mock(mock_name, expected_len, expected_cols, conne ), ], ) -@pytest.mark.parametrize("connection", get_connections()) -def test_multi_transformed_data_for_mock( - mock_name, expected_lens, all_expected_cols, connection -): - vf.runtime.set_connection(connection) +def test_multi_transformed_data_for_mock(mock_name, expected_lens, all_expected_cols): mock_path = altair_mocks_dir / mock_name / "mock.py" mock_src = mock_path.read_text("utf8") chart = eval_block(mock_src) @@ -407,7 +389,6 @@ def test_transformed_data_exclude(): @pytest.mark.skipif(pa_major_minor < (11, 0), reason="pyarrow 11+ required") def test_gh_286(): # https://github.com/hex-inc/vegafusion/issues/286 - vf.runtime.set_connection("datafusion") source = pl.from_pandas(data.seattle_weather()) chart = ( @@ -420,10 +401,7 @@ def test_gh_286(): assert len(transformed) == 53 -@pytest.mark.parametrize("connection", get_connections()) -def test_categorical_columns(connection): - vf.runtime.set_connection(connection) - +def test_categorical_columns(): df = pd.DataFrame( { "a": [0, 1, 2, 3, 4, 5], @@ -435,18 +413,13 @@ def test_categorical_columns(connection): transformed = chart.transformed_data() # Normalize the order of the categories to match the expected output - if connection == "datafusion": - transformed["categorical"] = pd.Series( - transformed["categorical"].tolist(), dtype="category" - ) + transformed["categorical"] = pd.Series( + transformed["categorical"].tolist(), dtype="category" + ) expected = pd.DataFrame( { - "categorical": ( - pd.Series(["A", "BB"], dtype="category") - if connection == "datafusion" - else ["A", "BB"] - ), + "categorical": (pd.Series(["A", "BB"], dtype="category")), "sum_a": [7, 8], } ) diff --git a/vegafusion-python/vegafusion/connection/__init__.py b/vegafusion-python/vegafusion/connection/__init__.py deleted file mode 100644 index b5381dc76..000000000 --- a/vegafusion-python/vegafusion/connection/__init__.py +++ /dev/null @@ -1,179 +0,0 @@ -from __future__ import annotations - -from abc import ABC, abstractmethod -from dataclasses import dataclass -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from pandas import DataFrame - from pyarrow import Schema, Table - - -@dataclass -class CsvReadOptions: - """ - CSV Read configuration options - """ - - has_header: bool - delimeter: str - file_extension: str - schema: Schema | None - - -class RegistrationNotSupportedError(RuntimeError): - pass - - -class SqlConnection(ABC): - """ - Python interface for SQL connections - """ - - @classmethod - def dialect(cls) -> str: - """ - Returns SQL dialect accepted by the connection - - :return: One of: - - "athena" - - "bigquery" - - "clickhouse" - - "databricks" - - "datafusion" - - "duckdb" - - "mysql" - - "postgres" - - "redshift" - - "snowflake" - """ - raise NotImplementedError() - - @abstractmethod - def tables(self) -> dict[str, Schema]: - """ - Returns the names and schema for the tables that are provided by the connection. - These are the tables that may be referenced by SQL queries passed to the - fetch_query method - - :return: dict from table name to pa.Schema - """ - raise NotImplementedError() - - @abstractmethod - def fetch_query(self, query: str, schema: Schema) -> Table: - """ - Returns the result of evaluating the requested query. The resulting pa.Table - should have a schema matching the provided schema - - :param query: SQL query string - :param schema: expected pyarrow Schema of resulting pyarrow Table - :return: pyarrow Table with query results - """ - raise NotImplementedError() - - def fallback(self) -> bool: - """ - Whether VegaFusion should fall back to the built-in DataFusion connection - when SQL is encountered that is not supported by this connection's SQL dialect - - :return: bool - """ - return True - - def register_pandas( - self, name: str, df: DataFrame, temporary: bool = False - ) -> None: - """ - Register the provided pandas DataFrame as a table with the provided name - - :param name: Table name - :param df: pandas DataFrame - :param temporary: Whether table is considered temporary, - and should be removed by unregister_temporary_tables - """ - raise RegistrationNotSupportedError( - "Connection does not support registration of pandas datasets" - ) - - def register_arrow(self, name: str, table: Table, temporary: bool = False) -> None: - """ - Register the provided pyarrow Table as a table with the provided name - :param name: Table name - :param table: pyarrow Table - :param temporary: Whether table is considered temporary, - and should be removed by unregister_temporary_tables - """ - raise RegistrationNotSupportedError( - "Connection does not support registration of arrow datasets" - ) - - def register_json(self, name: str, path: str, temporary: bool = False) -> None: - """ - Register the JSON file at the provided path as a table with the provided name - :param name: Table name - :param path: Path to JSON file - :param temporary: Whether table is considered temporary, - and should be removed by unregister_temporary_tables - """ - raise RegistrationNotSupportedError( - "Connection does not support registration of json datasets" - ) - - def register_csv( - self, name: str, path: str, options: CsvReadOptions, temporary: bool = False - ) -> None: - """ - Register the CSV file at the provided path as a table with the provided name - :param name: Table name - :param path: Path to CSV file - :param options: CSV options - :param temporary: Whether table is considered temporary, - and should be removed by unregister_temporary_tables - """ - raise RegistrationNotSupportedError( - "Connection does not support registration of csv datasets" - ) - - def register_parquet(self, name: str, path: str, temporary: bool = False) -> None: - """ - Register the Parquet file at the provided path as a table with the provided name - :param name: Table name - :param path: Path to parquet file - :param temporary: Whether table is considered temporary, - and should be removed by unregister_temporary_tables - """ - raise RegistrationNotSupportedError( - "Connection does not support registration of parquet datasets" - ) - - def register_arrow_file( - self, name: str, path: str, temporary: bool = False - ) -> None: - """ - Register the Arrow file at the provided path as a table with the provided name - :param name: Table name - :param path: Path to arrow file (aka feather file) - :param temporary: Whether table is considered temporary, - and should be removed by unregister_temporary_tables - """ - raise RegistrationNotSupportedError( - "Connection does not support registration of arrow file datasets" - ) - - def unregister(self, name: str) -> None: - """ - Unregister a table (temporary or otherwise) by name - :param name: Table name - """ - raise RegistrationNotSupportedError( - "Connection does not support unregistration" - ) - - def unregister_temporary_tables(self) -> None: - """ - Unregister all dynamically registered tables - """ - raise RegistrationNotSupportedError( - "Connection does not support unregistering temporary tables" - ) diff --git a/vegafusion-python/vegafusion/connection/duckdb.py b/vegafusion-python/vegafusion/connection/duckdb.py deleted file mode 100644 index 48a1c2bb2..000000000 --- a/vegafusion-python/vegafusion/connection/duckdb.py +++ /dev/null @@ -1,368 +0,0 @@ -from __future__ import annotations - -import logging -import re -import uuid -import warnings -from typing import Any - -import duckdb -import duckdb.typing -import pandas as pd -import pyarrow as pa -import pyarrow.feather -from packaging.version import Version - -from . import CsvReadOptions, SqlConnection - -# Table suffix name to use for raw registered table -RAW_PREFIX = "_vf_raw_" - - -def duckdb_type_name_to_pyarrow_type( - duckdb_type: str, -) -> pa.DataType: - duckdb_type = duckdb_type.upper() - if duckdb_type in ("VARCHAR", "JSON", "CHAR", "CATEGORICAL"): - return pa.string() - elif duckdb_type in ("REAL", "FLOAT4", "FLOAT"): - return pa.float32() - elif duckdb_type in ("DOUBLE", "FLOAT8"): - return pa.float64() - elif duckdb_type in ("TINYINT", "INT1"): - return pa.int8() - elif duckdb_type in ("SMALLINT", "INT2", "SHORT"): - return pa.int16() - elif duckdb_type in ("INTEGER", "INT4", "INT", "SIGNED"): - return pa.int32() - elif duckdb_type in ("BIGINT", "INT8", "LONG"): - return pa.int64() - elif duckdb_type.startswith("DECIMAL"): - matches = re.findall(r"\d+", duckdb_type) - precision = int(matches[0]) - scale = int(matches[1]) - return pa.decimal128(precision, scale) - elif duckdb_type == "UTINYINT": - return pa.uint8() - elif duckdb_type == "USMALLINT": - return pa.uint16() - elif duckdb_type == "UINTEGER": - return pa.uint32() - elif duckdb_type == "UBIGINT": - return pa.uint64() - elif duckdb_type == "BOOLEAN": - return pa.bool_() - elif duckdb_type == "DATE": - return pa.date32() - elif duckdb_type in ("TIMESTAMP", "TIMESTAMP_MS"): - return pa.timestamp("ms") - elif duckdb_type == "TIMESTAMP_NS": - return pa.timestamp("ns") - elif duckdb_type == "TIMESTAMP WITH TIME ZONE": - return pa.timestamp("ms", tz="UTC") - else: - raise ValueError(f"Unexpected DuckDB type: {duckdb_type}") - - -def duckdb_relation_to_schema(rel: duckdb.DuckDBPyRelation) -> pa.Schema: - schema_fields = {} - for col, type_name in zip(rel.columns, rel.dtypes): - try: - type_ = duckdb_type_name_to_pyarrow_type(str(type_name)) - schema_fields[col] = type_ - except ValueError: - # Skip columns with unrecognized types - pass - return pa.schema(schema_fields) - - -def pyarrow_type_to_duckdb_type_name(field_type: pa.Schema) -> str | None: - if field_type in (pa.utf8(), pa.large_utf8()): - return "VARCHAR" - elif field_type in (pa.float16(), pa.float32()): - return "FLOAT" - elif field_type == pa.float64(): - return "DOUBLE" - elif field_type == pa.int8(): - return "TINYINT" - elif field_type == pa.int16(): - return "SMALLINT" - elif field_type == pa.int32(): - return "INTEGER" - elif field_type == pa.int64(): - return "BIGINT" - elif field_type == pa.uint8(): - return "UTINYINT" - elif field_type == pa.uint16(): - return "USMALLINT" - elif field_type == pa.uint32(): - return "UINTEGER" - elif field_type == pa.uint64(): - return "UBIGINT" - elif field_type == pa.bool_(): - return "BOOLEAN" - elif field_type == pa.date32(): - return "DATE" - else: - return None - - -def pyarrow_schema_to_select_replace(schema: pa.Schema, table_name: str) -> str: - """ - Build `SELECT * REPLACE(...) from table_name` query that casts columns - to match the provided pyarrow schema. - - This is needed because sometimes the resulting DuckDB column types won't exactly - match those that DataFusion expects (e.g. DuckDB returning a DECIMAL(5) instead of - and int64). Types that are not covered by `pyarrow_type_to_duckdb_type_name` above - are passed through as-is. - """ - replaces = [] - for field_index in range(len(schema)): - field = schema.field(field_index) - field_name = field.name - field_type = field.type - - quoted_column = quote_column(field_name) - duckdb_type = pyarrow_type_to_duckdb_type_name(field_type) - if duckdb_type: - replaces.append(f"{quoted_column}::{duckdb_type} as {quoted_column}") - - if replaces: - replace_csv = ", ".join(replaces) - return f"SELECT * REPLACE({replace_csv}) FROM {table_name}" - else: - return f"SELECT * FROM {table_name}" - - -class DuckDbConnection(SqlConnection): - def __init__( - self, - connection: duckdb.DuckDBPyConnection | None = None, - fallback: bool = True, - verbose: bool = False, - ) -> None: - # Validate duckdb version - if Version(duckdb.__version__) < Version("0.7.0"): - raise ImportError( - "The VegaFusion DuckDB connection requires at least DuckDB " - "version 0.7.0\n" - f"Found version {duckdb.__version__}" - ) - - self._fallback = fallback - self._verbose = verbose - self._temp_tables: set[str] = set() - - if connection is None: - connection = duckdb.connect() - - # Install and load the httpfs extension only if we are creating - # the duckdb connection here. If a connection was passed in, don't - # assume it has internet access and the ability to install - # extensions - try: - connection.install_extension("httpfs") - connection.load_extension("httpfs") - except (OSError, duckdb.IOException, duckdb.InvalidInputException) as e: - warnings.warn( - f"Failed to install and load the DuckDB httpfs extension:\n{e}", - stacklevel=2, - ) - - # Use a less round number for pandas_analyze_sample (default is 1000) - connection.execute("SET GLOBAL pandas_analyze_sample=1007") - - # The icu extension is pre-bundled in Python, so no need to install it - connection.load_extension("icu") - - self.conn = connection - self.logger = logging.getLogger("DuckDbConnection") - - self._registered_table_schemas: dict[str, Any] = {} - - # Call self.tables to warm the cache of table schemas - self.tables() - - @classmethod - def dialect(cls) -> str: - return "duckdb" - - def fallback(self) -> bool: - return self._fallback - - def _replace_query_for_table(self, table_name: str) -> str: - """ - Build a `SELECT * REPLACE(...) FROM table_name` query for a table - that converts unsupported column types to varchar columns - """ - rel = self.conn.view(table_name) - replaces = [] - for col, type_name in zip(rel.columns, rel.dtypes): - quoted_col_name = quote_column(col) - try: - duckdb_type_name_to_pyarrow_type(str(type_name)) - # Skip columns with supported types - except ValueError: - # Convert unsupported types to strings (except struct) - if not str(type_name).startswith("STRUCT"): - replaces.append(f"{quoted_col_name}::varchar as {quoted_col_name}") - - if replaces: - replace_csv = ", ".join(replaces) - return f"SELECT * REPLACE({replace_csv}) FROM {table_name}" - else: - return f"SELECT * FROM {table_name}" - - def _schema_for_table(self, table_name: str) -> pa.Schema: - rel = self.conn.query(f'select * from "{table_name}" limit 1') - return duckdb_relation_to_schema(rel) - - def tables(self) -> dict[str, pa.Schema]: - result = {} - table_names = ( - self.conn.query("select table_name from information_schema.tables") - .to_df()["table_name"] - .tolist() - ) - - for table_name in table_names: - if table_name in self._registered_table_schemas: - # Registered tables are expected to only change when - # self.register_* is called, so use the cached version - result[table_name] = self._registered_table_schemas[table_name] - elif not table_name.startswith(RAW_PREFIX): - # Dynamically look up schema for tables that are registered with - # duckdb but not with the self.register_* methods. Skip raw tables - result[table_name] = self._schema_for_table(table_name) - - return result - - def fetch_query(self, query: str, schema: pa.Schema) -> pa.Table: - self.logger.info(f"Query:\n{query}\n") - if self._verbose: - print(f"DuckDB Query:\n{query}\n") - - # Save query result to temporary view - tmp_table = "_duckdb_tmp_tbl" + str(uuid.uuid4()).replace("-", "_") - self.conn.query(query).to_view(tmp_table) - - try: - # Run replacement query to cast types to match schema - replace_query = pyarrow_schema_to_select_replace(schema, tmp_table) - result = self.conn.query(replace_query).to_arrow_table(8096) - finally: - # Unregister temporary view - self.conn.unregister(tmp_table) - - return result - - def _update_temp_names(self, name: str, temporary: bool) -> None: - if temporary: - self._temp_tables.add(name) - elif name in self._temp_tables: - self._temp_tables.remove(name) - - def register_pandas( - self, name: str, df: pd.DataFrame, temporary: bool = False - ) -> None: - # Add _vf_order column to avoid the more expensive operation of computing it - # with a ROW_NUMBER function in duckdb - df = df.copy(deep=False) - df["_vf_order"] = range(0, len(df)) - - # Register raw DataFrame under name with prefix - raw_name = RAW_PREFIX + name - self.conn.register(raw_name, df) - - # then convert unsupported columns and register result as name - replace_query = self._replace_query_for_table(raw_name) - self.conn.query(replace_query).to_view(name) - - self._update_temp_names(name, temporary) - self._registered_table_schemas[name] = self._schema_for_table(name) - - def register_arrow( - self, name: str, table: pa.Table, temporary: bool = False - ) -> None: - # Register raw table under name with prefix - raw_name = RAW_PREFIX + name - self.conn.register(raw_name, table) - - # then convert unsupported columns and register result as name - replace_query = self._replace_query_for_table(raw_name) - self.conn.query(replace_query).to_view(name) - - self._update_temp_names(name, temporary) - self._registered_table_schemas[name] = table.schema - - def register_json(self, name: str, path: str, temporary: bool = False) -> None: - relation = self.conn.read_json(path) - relation.to_view(name) - self._update_temp_names(name, temporary) - self._registered_table_schemas[name] = self._schema_for_table(name) - - def register_csv( - self, name: str, path: str, options: CsvReadOptions, temporary: bool = False - ) -> None: - relation = self.conn.read_csv( - path, - header=options.has_header, - delimiter=options.delimeter, - all_varchar=True, - ) - if options.schema is not None: - replaces = [] - for col_name in options.schema.names: - field = options.schema.field_by_name(col_name) - quoted_col_name = quote_column(col_name) - dtype = field.type - if dtype == pa.string(): - # Everything is loaded as string - pass - elif dtype in (pa.float16(), pa.float32(), pa.float64()): - replaces.append(f"{quoted_col_name}::double as {quoted_col_name}") - elif dtype in (pa.int8(), pa.int16(), pa.int32(), pa.int64()): - replaces.append(f"{quoted_col_name}::int as {quoted_col_name}") - - if replaces: - query = f"SELECT * REPLACE({','.join(replaces)}) from _tbl" - relation = relation.query("_tbl", query) - - relation.to_view(name) - self._update_temp_names(name, temporary) - self._registered_table_schemas[name] = self._schema_for_table(name) - - def register_parquet(self, name: str, path: str, temporary: bool = False) -> None: - # Register raw table under name with prefix - raw_name = RAW_PREFIX + name - self.conn.read_parquet(path).to_view(raw_name) - - # then convert unsupported columns and register result as name - replace_query = self._replace_query_for_table(raw_name) - self.conn.query(replace_query).to_view(name) - - self._update_temp_names(name, temporary) - self._registered_table_schemas[name] = self._schema_for_table(name) - - def register_arrow_file( - self, name: str, path: str, temporary: bool = False - ) -> None: - arrow_table = pa.feather.read_table(path) - self.register_arrow(name, arrow_table, temporary) - - def unregister(self, name: str) -> None: - for view_name in [name, RAW_PREFIX + name]: - self.conn.unregister(view_name) - if view_name in self._temp_tables: - self._temp_tables.remove(view_name) - self._registered_table_schemas.pop(view_name, None) - - def unregister_temporary_tables(self) -> None: - for name in list(self._temp_tables): - self.conn.unregister(name) - self._temp_tables.remove(name) - - -def quote_column(name: str) -> str: - return '"' + name.replace('"', '""') + '"' diff --git a/vegafusion-python/vegafusion/dataset/__init__.py b/vegafusion-python/vegafusion/dataset/__init__.py deleted file mode 100644 index e8e011769..000000000 --- a/vegafusion-python/vegafusion/dataset/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .sql import SqlDataset - -__all__ = ["SqlDataset"] diff --git a/vegafusion-python/vegafusion/dataset/dfi.py b/vegafusion-python/vegafusion/dataset/dfi.py deleted file mode 100644 index 95ef34ef9..000000000 --- a/vegafusion-python/vegafusion/dataset/dfi.py +++ /dev/null @@ -1,169 +0,0 @@ -from __future__ import annotations - -from collections.abc import Sequence -from functools import cached_property -from typing import TYPE_CHECKING, Any, Optional, cast - -from .sql import SqlDataset - -if TYPE_CHECKING: - from pyarrow import Schema, Table - - -class SqlDatasetDataFrame: - """An implementation of the dataframe interchange protocol. - Based on https://github.com/ibis-project/ibis/pull/6733 - - This is a thin shim around the pyarrow implementation to allow for: - - Accessing a few of the metadata queries without executing the expression. - - Caching the execution on the dataframe object to avoid re-execution if - multiple methods are accessed. - - The dataframe interchange protocol may be found here: - https://data-apis.org/dataframe-protocol/latest/API.html - """ - - def __init__( - self, - dataset: SqlDataset, - nan_as_null: bool = False, - allow_copy: bool = True, - pyarrow_table: Optional[Table] = None, - ) -> None: - self._dataset = dataset - self._nan_as_null = nan_as_null - self._allow_copy = allow_copy - self._pyarrow_table = pyarrow_table - - @cached_property - def _pyarrow_df(self) -> Any: # noqa: ANN401 - """Returns the pyarrow implementation of the __dataframe__ protocol. - If the backing Dataset hasn't been executed yet, this will result - in executing and caching the result.""" - if self._pyarrow_table is None: - self._pyarrow_table = self._dataset.fetch_query( - f"select * from {self._dataset.table_name()}", - schema=self._dataset.table_schema(), - ) - return self._pyarrow_table.__dataframe__( - nan_as_null=self._nan_as_null, - allow_copy=self._allow_copy, - ) - - @cached_property - def _empty_pyarrow_df(self) -> Any: # noqa: ANN401 - """A pyarrow implementation of the __dataframe__ protocol for an - empty table with the same schema as this table. - Used for returning dtype information without executing the backing ibis - expression. - """ - schema = self._schema - return schema.empty_table().__dataframe__() - - @property - def _schema(self) -> Schema: - return self._dataset.table_schema() - - def _get_dtype(self, name: str) -> Any: # noqa: ANN401 - """Get the dtype info for a column named `name`.""" - return self._empty_pyarrow_df.get_column_by_name(name).dtype - - # These methods may all be handled without executing the query - def num_columns(self) -> int: - return len(self._schema.names) - - def column_names(self) -> list[str]: - return cast(list[str], self._schema.names) - - def get_column(self, i: int) -> DatasetColumn: - name = self._schema.names[i] - return self.get_column_by_name(name) - - def get_column_by_name(self, name: str) -> DatasetColumn: - return DatasetColumn(self, name) - - def get_columns(self) -> list[DatasetColumn]: - return [DatasetColumn(self, name) for name in self._schema.names] - - def select_columns(self, indices: Sequence[int]) -> SqlDatasetDataFrame: - names = [self._schema.names[i] for i in indices] - return self.select_columns_by_name(names) - - def select_columns_by_name(self, names: Sequence[str]) -> SqlDatasetDataFrame: - return cast(SqlDatasetDataFrame, self._pyarrow_df.select_columns_by_name(names)) - - def __dataframe__( - self, nan_as_null: bool = False, allow_copy: bool = True - ) -> SqlDatasetDataFrame: - return SqlDatasetDataFrame( - self._dataset, - nan_as_null=nan_as_null, - allow_copy=allow_copy, - pyarrow_table=self._pyarrow_table, - ) - - # These methods require executing the query - @property - def metadata(self) -> Any: # noqa: ANN401 - return self._pyarrow_df.metadata - - def num_rows(self) -> Optional[int]: - return cast(Optional[int], self._pyarrow_df.num_rows()) - - def num_chunks(self) -> int: - return cast(int, self._pyarrow_df.num_chunks()) - - def get_chunks(self, n_chunks: Optional[int] = None) -> Any: # noqa: ANN401 - return self._pyarrow_df.get_chunks(n_chunks=n_chunks) - - -class DatasetColumn: - def __init__(self, df: SqlDatasetDataFrame, name: str) -> None: - self._df = df - self._name = name - - @cached_property - def _pyarrow_col(self) -> Any: # noqa: ANN401 - """Returns the pyarrow implementation of the __dataframe__ protocol's - Column type. - If the backing SqlDataset hasn't been executed yet, this will result - in executing and caching the result.""" - return self._df._pyarrow_df.get_column_by_name(self._name) - - # These methods may all be handled without executing the query - @property - def dtype(self) -> Any: # noqa: ANN401 - return self._df._get_dtype(self._name) - - # These methods require executing the query - def size(self) -> int: - return cast(int, self._pyarrow_col.size()) - - @property - def describe_categorical(self) -> Any: # noqa: ANN401 - return self._pyarrow_col.describe_categorical - - @property - def offset(self) -> int: - return cast(int, self._pyarrow_col.offset) - - @property - def describe_null(self) -> Any: # noqa: ANN401 - return self._pyarrow_col.describe_null - - @property - def null_count(self) -> int: - return cast(int, self._pyarrow_col.null_count) - - @property - def metadata(self) -> Any: # noqa: ANN401 - return self._pyarrow_col.metadata - - def num_chunks(self) -> int: - return cast(int, self._pyarrow_col.num_chunks()) - - def get_chunks(self, n_chunks: Optional[int] = None) -> Any: # noqa: ANN401 - return self._pyarrow_col.get_chunks(n_chunks=n_chunks) - - def get_buffers(self) -> Any: # noqa: ANN401 - return self._pyarrow_col.get_buffers() diff --git a/vegafusion-python/vegafusion/dataset/duckdb.py b/vegafusion-python/vegafusion/dataset/duckdb.py deleted file mode 100644 index 17c5d2fc9..000000000 --- a/vegafusion-python/vegafusion/dataset/duckdb.py +++ /dev/null @@ -1,38 +0,0 @@ -import logging - -import pyarrow as pa -from duckdb import DuckDBPyRelation - -from ..connection.duckdb import duckdb_relation_to_schema -from .sql import SqlDataset - - -class DuckDbDataset(SqlDataset): - def dialect(self) -> str: - return "duckdb" - - def __init__( - self, relation: DuckDBPyRelation, fallback: bool = True, verbose: bool = False - ) -> None: - self._relation = relation - self._fallback = fallback - self._verbose = verbose - self._table_name = "tbl" - self._table_schema = duckdb_relation_to_schema(self._relation) - self.logger = logging.getLogger("DuckDbDataset") - - def table_name(self) -> str: - return self._table_name - - def table_schema(self) -> pa.Schema: - return self._table_schema - - def fetch_query(self, query: str, schema: pa.Schema) -> pa.Table: - self.logger.info(f"DuckDB Query:\n{query}\n") - if self._verbose: - print(f"DuckDB Query:\n{query}\n") - - return self._relation.query(self._table_name, query).to_arrow_table() - - def fallback(self) -> bool: - return self._fallback diff --git a/vegafusion-python/vegafusion/dataset/sql.py b/vegafusion-python/vegafusion/dataset/sql.py deleted file mode 100644 index e206242fc..000000000 --- a/vegafusion-python/vegafusion/dataset/sql.py +++ /dev/null @@ -1,84 +0,0 @@ -from __future__ import annotations - -from abc import ABC, abstractmethod -from typing import TYPE_CHECKING, Any - -if TYPE_CHECKING: - import pyarrow as pa - - from .dfi import SqlDatasetDataFrame - - -class SqlDataset(ABC): - """ - Python interface for VegaFusion Sql Dataset - """ - - def dialect(self) -> str: - """ - Returns SQL dialect accepted by the connection - - :return: One of: - - "athena" - - "bigquery" - - "clickhouse" - - "databricks" - - "datafusion" - - "duckdb" - - "mysql" - - "postgres" - - "redshift" - - "snowflake" - """ - raise NotImplementedError() - - @abstractmethod - def table_name(self) -> str: - """Name of source table for use in queries""" - raise NotImplementedError() - - @abstractmethod - def table_schema(self) -> pa.Schema: - """Schema of source table""" - raise NotImplementedError() - - @abstractmethod - def fetch_query(self, query: str, schema: pa.Schema) -> pa.Table: - """ - Returns the result of evaluating the requested query. The resulting pa.Table - should have a schema matching the provided schema - - :param query: SQL query string - :param schema: expected pyarrow Schema of resulting pyarrow Table - :return: pyarrow Table with query results - """ - raise NotImplementedError() - - def fallback(self) -> bool: - """ - Whether VegaFusion should fall back to the built-in DataFusion connection - when SQL is encountered that is not supported by this connection's SQL dialect - - :return: bool - """ - return True - - def main_thread(self) -> bool: - """ - True if the dataset must be evaluated run on the main thread. - This blocks multithreaded parallelization, but is sometimes required - - :return: bool - """ - return True - - def __dataframe__( - self, - nan_as_null: bool = False, - allow_copy: bool = True, - **kwargs: Any, # noqa: ANN401 - ) -> SqlDatasetDataFrame: - """DataFrame interchange protocol support""" - from .dfi import SqlDatasetDataFrame - - return SqlDatasetDataFrame(self, nan_as_null=nan_as_null, allow_copy=allow_copy) diff --git a/vegafusion-python/vegafusion/runtime.py b/vegafusion-python/vegafusion/runtime.py index 155cc9e44..4cfe45eb2 100644 --- a/vegafusion-python/vegafusion/runtime.py +++ b/vegafusion-python/vegafusion/runtime.py @@ -11,16 +11,12 @@ from vegafusion.transformer import DataFrameLike from vegafusion.utils import get_inline_column_usage -from .connection import SqlConnection -from .dataset import SqlDataset from .local_tz import get_local_tz if TYPE_CHECKING: - import duckdb # noqa: F401 import pandas as pd import polars as pl # noqa: F401 import pyarrow as pa - from duckdb import DuckDBPyConnection from narwhals.typing import IntoFrameT from vegafusion._vegafusion import ( @@ -162,7 +158,6 @@ def __init__( cache_capacity: int = 64, memory_limit: int | None = None, worker_threads: int | None = None, - connection: SqlConnection | None = None, ) -> None: """ Initialize a VegaFusionRuntime. @@ -171,14 +166,12 @@ def __init__( cache_capacity: Cache capacity. memory_limit: Memory limit. worker_threads: Number of worker threads. - connection: SQL connection (optional). """ self._runtime = None self._grpc_url: str | None = None self._cache_capacity = cache_capacity self._memory_limit = memory_limit self._worker_threads = worker_threads - self._connection = connection @property def runtime(self) -> PyVegaFusionRuntime: @@ -201,62 +194,9 @@ def runtime(self) -> PyVegaFusionRuntime: self.cache_capacity, self.memory_limit, self.worker_threads, - connection=self._connection, ) return self._runtime - def set_connection( - self, - connection: Literal["datafusion", "duckdb"] - | SqlConnection - | DuckDBPyConnection - | None = "datafusion", - ) -> None: - """ - Sets the connection to use to evaluate Vega data transformations. - - Named tables returned by the connection's `tables` method may be referenced in - Vega/Altair chart specifications using special dataset URLs. For example, if the - connection's `tables` method returns a dictionary that includes "tableA" as a - key, then this table may be referenced in a chart specification using the URL - "table://tableA" or "vegafusion+dataset://tableA". - - Args: - connection: One of: - - An instance of vegafusion.connection.SqlConnection - - An instance of a duckdb connection - - A string, one of: - - "datafusion" (default) - - "duckdb" - """ - # Don't import duckdb unless it's already loaded. If it's not loaded, - # then the input connection can't be a duckdb connection. - if not TYPE_CHECKING: - duckdb = sys.modules.get("duckdb", None) - - if isinstance(connection, str): - if connection == "datafusion": - # Connection of None uses DataFusion - connection = None - elif connection == "duckdb": - from vegafusion.connection.duckdb import DuckDbConnection - - connection = DuckDbConnection() - else: - raise ValueError(f"Unsupported connection name: {connection}") - elif duckdb is not None and isinstance(connection, duckdb.DuckDBPyConnection): - from vegafusion.connection.duckdb import DuckDbConnection - - connection = DuckDbConnection(connection) - elif not isinstance(connection, SqlConnection): - raise ValueError( - "connection argument must be a string or an instance of SqlConnection\n" - f"Received value of type {type(connection).__name__}: {connection}" - ) - - self._connection = connection - self.reset() - def grpc_connect(self, url: str) -> None: """ Connect to a VegaFusion server over gRPC at the provided gRPC url @@ -279,11 +219,11 @@ def using_grpc(self) -> bool: """ return self._grpc_url is not None - def _import_or_register_inline_datasets( + def _import_inline_datasets( self, - inline_datasets: dict[str, IntoFrameT | SqlDataset] | None = None, + inline_datasets: dict[str, IntoFrameT] | None = None, inline_dataset_usage: dict[str, list[str]] | None = None, - ) -> dict[str, Table | SqlDataset]: + ) -> dict[str, Table]: """ Import or register inline datasets. @@ -292,6 +232,8 @@ def _import_or_register_inline_datasets( pyarrow Tables. Inline datasets may be referenced by the input specification using the following url syntax 'vegafusion+dataset://{dataset_name}' or 'table://{dataset_name}'. + inline_dataset_usage: Columns that are referenced by datasets. If no + entry is found, then all columns should be included. """ if not TYPE_CHECKING: pd = sys.modules.get("pandas", None) @@ -299,12 +241,10 @@ def _import_or_register_inline_datasets( inline_datasets = inline_datasets or {} inline_dataset_usage = inline_dataset_usage or {} - imported_inline_datasets: dict[str, SqlDataset | Table] = {} + imported_inline_datasets: dict[str, Table] = {} for name, value in inline_datasets.items(): columns = inline_dataset_usage.get(name) - if isinstance(value, SqlDataset): - imported_inline_datasets[name] = value - elif pd is not None and pa is not None and isinstance(value, pd.DataFrame): + if pd is not None and pa is not None and isinstance(value, pd.DataFrame): # rename to help mypy inner_value: pd.DataFrame = value del value @@ -335,15 +275,6 @@ def _import_or_register_inline_datasets( inner_value = inner_value.assign( **{col: inner_value[col].astype("string[pyarrow]")} ) - if self._connection is not None: - try: - # Try registering DataFrame if supported - self._connection.register_pandas( - name, inner_value, temporary=True - ) - continue - except ValueError: - pass if hasattr(inner_value, "__arrow_c_stream__"): # TODO: this requires pyarrow 14.0.0 or later imported_inline_datasets[name] = Table(inner_value) @@ -455,47 +386,41 @@ def pre_transform_spec( eligible for pre-transforming """ local_tz = local_tz or get_local_tz() - imported_inline_dataset = self._import_or_register_inline_datasets( + imported_inline_dataset = self._import_inline_datasets( inline_datasets, get_inline_column_usage(spec) ) - try: - if data_encoding_threshold is None: - new_spec, warnings = self.runtime.pre_transform_spec( - spec, - local_tz=local_tz, - default_input_tz=default_input_tz, - row_limit=row_limit, - preserve_interactivity=preserve_interactivity, - inline_datasets=imported_inline_dataset, - keep_signals=parse_variables(keep_signals), - keep_datasets=parse_variables(keep_datasets), - ) - else: - # Use pre_transform_extract to extract large datasets - new_spec, datasets, warnings = self.runtime.pre_transform_extract( - spec, - local_tz=local_tz, - default_input_tz=default_input_tz, - preserve_interactivity=preserve_interactivity, - extract_threshold=data_encoding_threshold, - extracted_format=data_encoding_format, - inline_datasets=imported_inline_dataset, - keep_signals=parse_variables(keep_signals), - keep_datasets=parse_variables(keep_datasets), - ) - - # Insert encoded datasets back into spec - for name, scope, tbl in datasets: - group = get_mark_group_for_scope(new_spec, scope) or {} - for data in group.get("data", []): - if data.get("name", None) == name: - data["values"] = tbl + if data_encoding_threshold is None: + new_spec, warnings = self.runtime.pre_transform_spec( + spec, + local_tz=local_tz, + default_input_tz=default_input_tz, + row_limit=row_limit, + preserve_interactivity=preserve_interactivity, + inline_datasets=imported_inline_dataset, + keep_signals=parse_variables(keep_signals), + keep_datasets=parse_variables(keep_datasets), + ) + else: + # Use pre_transform_extract to extract large datasets + new_spec, datasets, warnings = self.runtime.pre_transform_extract( + spec, + local_tz=local_tz, + default_input_tz=default_input_tz, + preserve_interactivity=preserve_interactivity, + extract_threshold=data_encoding_threshold, + extracted_format=data_encoding_format, + inline_datasets=imported_inline_dataset, + keep_signals=parse_variables(keep_signals), + keep_datasets=parse_variables(keep_datasets), + ) - finally: - # Clean up temporary tables - if self._connection is not None: - self._connection.unregister_temporary_tables() + # Insert encoded datasets back into spec + for name, scope, tbl in datasets: + group = get_mark_group_for_scope(new_spec, scope) or {} + for data in group.get("data", []): + if data.get("name", None) == name: + data["values"] = tbl return new_spec, warnings @@ -529,7 +454,7 @@ def new_chart_state( ChartState object. """ local_tz = local_tz or get_local_tz() - inline_arrow_dataset = self._import_or_register_inline_datasets( + inline_arrow_dataset = self._import_inline_datasets( inline_datasets, get_inline_column_usage(spec) ) return ChartState( @@ -594,25 +519,21 @@ def pre_transform_datasets( pre_tx_vars = parse_variables(datasets) # Serialize inline datasets - inline_arrow_dataset = self._import_or_register_inline_datasets( + inline_arrow_dataset = self._import_inline_datasets( inline_datasets, inline_dataset_usage=get_inline_column_usage(spec) if trim_unused_columns else None, ) - try: - values, warnings = self.runtime.pre_transform_datasets( - spec, - pre_tx_vars, - local_tz=local_tz, - default_input_tz=default_input_tz, - row_limit=row_limit, - inline_datasets=inline_arrow_dataset, - ) - finally: - # Clean up registered tables (both inline and internal temporary tables) - if self._connection is not None: - self._connection.unregister_temporary_tables() + + values, warnings = self.runtime.pre_transform_datasets( + spec, + pre_tx_vars, + local_tz=local_tz, + default_input_tz=default_input_tz, + row_limit=row_limit, + inline_datasets=inline_arrow_dataset, + ) # Wrap result dataframes in native format, then with Narwhals so that # we can manipulate them with a uniform API @@ -734,25 +655,21 @@ def pre_transform_extract( """ local_tz = local_tz or get_local_tz() - inline_arrow_dataset = self._import_or_register_inline_datasets( + inline_arrow_dataset = self._import_inline_datasets( inline_datasets, get_inline_column_usage(spec) ) - try: - new_spec, datasets, warnings = self.runtime.pre_transform_extract( - spec, - local_tz=local_tz, - default_input_tz=default_input_tz, - preserve_interactivity=preserve_interactivity, - extract_threshold=extract_threshold, - extracted_format=extracted_format, - inline_datasets=inline_arrow_dataset, - keep_signals=keep_signals, - keep_datasets=keep_datasets, - ) - finally: - # Clean up temporary tables - if self._connection is not None: - self._connection.unregister_temporary_tables() + + new_spec, datasets, warnings = self.runtime.pre_transform_extract( + spec, + local_tz=local_tz, + default_input_tz=default_input_tz, + preserve_interactivity=preserve_interactivity, + extract_threshold=extract_threshold, + extracted_format=extracted_format, + inline_datasets=inline_arrow_dataset, + keep_signals=keep_signals, + keep_datasets=keep_datasets, + ) return new_spec, datasets, warnings From 83638105f9891d194ddd560fd626cc00b7dfe5ad Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 30 Oct 2024 19:55:59 -0400 Subject: [PATCH 17/36] v2: Implement transforms against DataFusion DataFrame, drop custom UDFs (#525) * wip refactor to use DataFusion's DataFrame * Add aggregate support * Port additional transforms * Port additional transforms * Port window transform * Port fold transform * Port impute transform * Port pivot transform * port timeunit * get schema from first batch * Don't require metadata match * start porting stack * finish stack transform port * Use object-store with DataFusion to load from http * wip time functions * parse %Y-%m-%d in UTC like the browser * Update timeunit transform to use datafusion operations * remove unused UDFs * json fallback to reqwest * Fix timezone parsing * Fix selection_test * all custom spec tests passing * get image_comparison tests passing * Get all vegafusion-runtime tests passing * fix * fix * remove more udfs * remove vegafusion-datafusion-udfs, vegafusion-dataframe, and vegafusion-sql crates * fix tests * clippy fix * format * warnings / format * python test updates * Update to datafusion main * fmt * re-enable format millis test, fix substr args * Support Utf8View in json writer * fix remaining python tests * fmt * clippy fix * fmt * work around wasm-pack error * add call to update-pkg.js * remove some stale comments --- Cargo.lock | 1136 +++------ Cargo.toml | 43 +- automation/bump_version.py | 3 - pixi.toml | 2 +- vegafusion-common/Cargo.toml | 4 + vegafusion-common/src/column.rs | 4 + vegafusion-common/src/data/json_writer.rs | 24 +- vegafusion-common/src/data/scalar.rs | 21 + vegafusion-common/src/data/table.rs | 8 +- vegafusion-common/src/error.rs | 20 + vegafusion-core/Cargo.toml | 4 - vegafusion-core/src/data/dataset.rs | 4 - vegafusion-core/src/runtime/grpc_runtime.rs | 8 +- vegafusion-core/src/runtime/runtime.rs | 10 +- vegafusion-dataframe/Cargo.toml | 33 - vegafusion-dataframe/README.md | 2 - vegafusion-dataframe/src/connection.rs | 51 - vegafusion-dataframe/src/csv.rs | 31 - vegafusion-dataframe/src/dataframe.rs | 147 -- vegafusion-dataframe/src/lib.rs | 11 - vegafusion-datafusion-udfs/Cargo.toml | 30 - vegafusion-datafusion-udfs/README.md | 4 - vegafusion-datafusion-udfs/src/lib.rs | 13 - .../src/udfs/array/indexof.rs | 163 -- .../src/udfs/array/mod.rs | 2 - .../src/udfs/array/span.rs | 110 - .../src/udfs/datetime/date_add_tz.rs | 86 - .../src/udfs/datetime/date_part_tz.rs | 112 - .../udfs/datetime/date_to_utc_timestamp.rs | 108 - .../src/udfs/datetime/date_trunc_tz.rs | 80 - .../udfs/datetime/epoch_to_utc_timestamp.rs | 77 - .../src/udfs/datetime/format_timestamp.rs | 136 -- .../src/udfs/datetime/from_utc_timestamp.rs | 139 -- .../src/udfs/datetime/mod.rs | 61 - .../src/udfs/datetime/str_to_utc_timestamp.rs | 156 -- .../src/udfs/datetime/to_utc_timestamp.rs | 162 -- .../udfs/datetime/utc_timestamp_to_epoch.rs | 85 - .../src/udfs/datetime/utc_timestamp_to_str.rs | 133 -- .../src/udfs/math/isfinite.rs | 84 - .../src/udfs/math/mod.rs | 1 - .../src/udfs/member/mod.rs | 220 -- vegafusion-datafusion-udfs/src/udfs/mod.rs | 6 - .../src/udfs/object/mod.rs | 79 - vegafusion-datafusion-udfs/src/udfs/util.rs | 38 - vegafusion-python/Cargo.toml | 9 - vegafusion-python/src/lib.rs | 20 +- .../altair_mocks/casestudy/falkensee/mock.py | 88 +- .../altair_mocks/line/trail_marker/mock.py | 7 +- .../tests/test_jupyter_widget.py | 3 +- vegafusion-python/tests/test_pretransform.py | 23 +- .../tests/test_transformed_data.py | 5 - vegafusion-runtime/Cargo.toml | 31 +- vegafusion-runtime/benches/spec_benchmarks.rs | 8 +- vegafusion-runtime/src/data/mod.rs | 1 + vegafusion-runtime/src/data/tasks.rs | 421 ++-- vegafusion-runtime/src/data/util.rs | 172 ++ vegafusion-runtime/src/datafusion/context.rs | 33 + vegafusion-runtime/src/datafusion/mod.rs | 3 + .../src/datafusion/udafs/mod.rs | 1 + .../src/datafusion/udafs/percentile.rs | 0 .../udfs/datetime/make_timestamptz.rs | 69 +- .../src/datafusion/udfs/datetime/mod.rs | 2 + .../src/datafusion}/udfs/datetime/timeunit.rs | 59 +- vegafusion-runtime/src/datafusion/udfs/mod.rs | 1 + .../builtin_functions/array/indexof.rs | 46 + .../builtin_functions/array/length.rs | 16 +- .../compiler/builtin_functions/array/mod.rs | 5 +- .../compiler/builtin_functions/array/span.rs | 37 +- .../data/vl_selection_test.rs | 30 +- .../date_time/date_format.rs | 173 +- .../builtin_functions/date_time/date_parts.rs | 128 +- .../builtin_functions/date_time/datetime.rs | 64 +- .../builtin_functions/date_time/time.rs | 50 +- .../date_time/time_offset.rs | 41 +- .../builtin_functions/math/isfinite.rs | 15 +- .../src/expression/compiler/call.rs | 53 +- .../src/expression/compiler/member.rs | 19 +- .../src/expression/compiler/mod.rs | 32 +- .../src/expression/compiler/object.rs | 24 +- .../src/expression/compiler/utils.rs | 70 +- vegafusion-runtime/src/lib.rs | 1 + vegafusion-runtime/src/signal/mod.rs | 4 +- vegafusion-runtime/src/task_graph/runtime.rs | 16 +- vegafusion-runtime/src/task_graph/task.rs | 14 +- vegafusion-runtime/src/transform/aggregate.rs | 16 +- vegafusion-runtime/src/transform/bin.rs | 31 +- vegafusion-runtime/src/transform/collect.rs | 15 +- vegafusion-runtime/src/transform/extent.rs | 27 +- vegafusion-runtime/src/transform/filter.rs | 21 +- vegafusion-runtime/src/transform/fold.rs | 105 +- vegafusion-runtime/src/transform/formula.rs | 13 +- .../src/transform/identifier.rs | 22 +- vegafusion-runtime/src/transform/impute.rs | 140 +- .../src/transform/joinaggregate.rs | 63 +- vegafusion-runtime/src/transform/mod.rs | 11 +- vegafusion-runtime/src/transform/pipeline.rs | 39 +- vegafusion-runtime/src/transform/pivot.rs | 65 +- vegafusion-runtime/src/transform/project.rs | 9 +- vegafusion-runtime/src/transform/sequence.rs | 16 +- vegafusion-runtime/src/transform/stack.rs | 246 +- vegafusion-runtime/src/transform/timeunit.rs | 445 ++-- vegafusion-runtime/src/transform/utils.rs | 194 ++ vegafusion-runtime/src/transform/window.rs | 50 +- .../bar_sort_x_axis_categorical.vg.json | 2 +- .../tests/specs/vega/heatmap.vg.json | 4 +- .../vegalite/circle_natural_disasters.vg.json | 2 +- vegafusion-runtime/tests/test_chart_state.rs | 4 +- .../test_destringify_selection_datasets.rs | 4 +- .../tests/test_expression_evaluation.rs | 19 +- .../tests/test_image_comparison.rs | 62 +- vegafusion-runtime/tests/test_planning.rs | 4 +- .../tests/test_pre_transform_extract.rs | 4 +- .../test_pre_transform_keep_variables.rs | 4 +- .../tests/test_pre_transform_values.rs | 56 +- .../tests/test_stringify_datetimes.rs | 12 +- .../tests/test_task_graph_runtime.rs | 6 +- .../tests/test_transform_bin.rs | 103 +- .../tests/test_transform_pivot.rs | 4 +- .../tests/test_transform_window.rs | 62 +- vegafusion-runtime/tests/util/check.rs | 13 +- vegafusion-runtime/tests/util/equality.rs | 72 +- .../util/vegajs_runtime/package-lock.json | 390 +-- .../tests/util/vegajs_runtime/package.json | 2 +- vegafusion-server/Cargo.toml | 8 +- vegafusion-server/src/main.rs | 4 +- vegafusion-sql/Cargo.toml | 143 -- vegafusion-sql/README.md | 2 - vegafusion-sql/src/compile/data_type.rs | 20 - vegafusion-sql/src/compile/expr.rs | 726 ------ vegafusion-sql/src/compile/function_arg.rs | 43 - vegafusion-sql/src/compile/mod.rs | 6 - vegafusion-sql/src/compile/order.rs | 68 - vegafusion-sql/src/compile/scalar.rs | 384 --- vegafusion-sql/src/compile/select.rs | 89 - .../src/connection/datafusion_conn.rs | 504 ---- vegafusion-sql/src/connection/mod.rs | 60 - vegafusion-sql/src/dataframe/mod.rs | 1575 ------------- vegafusion-sql/src/dialect/mod.rs | 2088 ----------------- .../src/dialect/transforms/date_add_tz.rs | 437 ---- .../src/dialect/transforms/date_part_tz.rs | 398 ---- .../transforms/date_to_utc_timestamp.rs | 365 --- .../src/dialect/transforms/date_trunc_tz.rs | 403 ---- .../transforms/epoch_ms_to_utc_timestamp.rs | 323 --- .../dialect/transforms/make_utc_timestamp.rs | 489 ---- vegafusion-sql/src/dialect/transforms/mod.rs | 10 - .../transforms/str_to_utc_timestamp.rs | 365 --- .../dialect/transforms/to_utc_timestamp.rs | 190 -- .../transforms/utc_timestamp_to_epoch_ms.rs | 272 --- .../transforms/utc_timestamp_to_str.rs | 361 --- vegafusion-sql/src/dialect/utils.rs | 5 - vegafusion-sql/src/lib.rs | 15 - vegafusion-sql/tests/expected/aggregate.toml | 174 -- vegafusion-sql/tests/expected/filter.toml | 71 - vegafusion-sql/tests/expected/fold.toml | 117 - vegafusion-sql/tests/expected/impute.toml | 324 --- .../tests/expected/joinaggregate.toml | 147 -- vegafusion-sql/tests/expected/limit.toml | 50 - vegafusion-sql/tests/expected/select.toml | 831 ------- .../tests/expected/select_window.toml | 358 --- vegafusion-sql/tests/expected/sort.toml | 155 -- vegafusion-sql/tests/expected/stack.toml | 174 -- vegafusion-sql/tests/expected/values.toml | 40 - vegafusion-sql/tests/test_aggregate.rs | 231 -- vegafusion-sql/tests/test_filter.rs | 58 - vegafusion-sql/tests/test_fold.rs | 120 - vegafusion-sql/tests/test_impute.rs | 349 --- vegafusion-sql/tests/test_joinaggregate.rs | 140 -- vegafusion-sql/tests/test_limit.rs | 38 - vegafusion-sql/tests/test_select.rs | 1493 ------------ vegafusion-sql/tests/test_sort.rs | 165 -- vegafusion-sql/tests/test_stack.rs | 152 -- vegafusion-sql/tests/test_values.rs | 34 - vegafusion-sql/tests/test_window.rs | 747 ------ vegafusion-sql/tests/utils/mod.rs | 108 - vegafusion-wasm/Cargo.toml | 2 +- vegafusion-wasm/package-lock.json | 1336 +---------- vegafusion-wasm/package.json | 23 +- vegafusion-wasm/scripts/update-pkg.js | 30 + 178 files changed, 2964 insertions(+), 21658 deletions(-) delete mode 100644 vegafusion-dataframe/Cargo.toml delete mode 100644 vegafusion-dataframe/README.md delete mode 100644 vegafusion-dataframe/src/connection.rs delete mode 100644 vegafusion-dataframe/src/csv.rs delete mode 100644 vegafusion-dataframe/src/dataframe.rs delete mode 100644 vegafusion-dataframe/src/lib.rs delete mode 100644 vegafusion-datafusion-udfs/Cargo.toml delete mode 100644 vegafusion-datafusion-udfs/README.md delete mode 100644 vegafusion-datafusion-udfs/src/lib.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/array/indexof.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/array/mod.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/array/span.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/datetime/date_add_tz.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/datetime/date_part_tz.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/datetime/date_to_utc_timestamp.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/datetime/date_trunc_tz.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/datetime/epoch_to_utc_timestamp.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/datetime/format_timestamp.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/datetime/from_utc_timestamp.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/datetime/mod.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/datetime/str_to_utc_timestamp.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/datetime/to_utc_timestamp.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/datetime/utc_timestamp_to_epoch.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/datetime/utc_timestamp_to_str.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/math/isfinite.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/math/mod.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/member/mod.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/mod.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/object/mod.rs delete mode 100644 vegafusion-datafusion-udfs/src/udfs/util.rs create mode 100644 vegafusion-runtime/src/data/util.rs create mode 100644 vegafusion-runtime/src/datafusion/context.rs create mode 100644 vegafusion-runtime/src/datafusion/mod.rs create mode 100644 vegafusion-runtime/src/datafusion/udafs/mod.rs rename vegafusion-datafusion-udfs/src/udafs/mod.rs => vegafusion-runtime/src/datafusion/udafs/percentile.rs (100%) rename vegafusion-datafusion-udfs/src/udfs/datetime/make_utc_timestamp.rs => vegafusion-runtime/src/datafusion/udfs/datetime/make_timestamptz.rs (79%) create mode 100644 vegafusion-runtime/src/datafusion/udfs/datetime/mod.rs rename {vegafusion-datafusion-udfs/src => vegafusion-runtime/src/datafusion}/udfs/datetime/timeunit.rs (86%) create mode 100644 vegafusion-runtime/src/datafusion/udfs/mod.rs create mode 100644 vegafusion-runtime/src/expression/compiler/builtin_functions/array/indexof.rs delete mode 100644 vegafusion-sql/Cargo.toml delete mode 100644 vegafusion-sql/README.md delete mode 100644 vegafusion-sql/src/compile/data_type.rs delete mode 100644 vegafusion-sql/src/compile/expr.rs delete mode 100644 vegafusion-sql/src/compile/function_arg.rs delete mode 100644 vegafusion-sql/src/compile/mod.rs delete mode 100644 vegafusion-sql/src/compile/order.rs delete mode 100644 vegafusion-sql/src/compile/scalar.rs delete mode 100644 vegafusion-sql/src/compile/select.rs delete mode 100644 vegafusion-sql/src/connection/datafusion_conn.rs delete mode 100644 vegafusion-sql/src/connection/mod.rs delete mode 100644 vegafusion-sql/src/dataframe/mod.rs delete mode 100644 vegafusion-sql/src/dialect/mod.rs delete mode 100644 vegafusion-sql/src/dialect/transforms/date_add_tz.rs delete mode 100644 vegafusion-sql/src/dialect/transforms/date_part_tz.rs delete mode 100644 vegafusion-sql/src/dialect/transforms/date_to_utc_timestamp.rs delete mode 100644 vegafusion-sql/src/dialect/transforms/date_trunc_tz.rs delete mode 100644 vegafusion-sql/src/dialect/transforms/epoch_ms_to_utc_timestamp.rs delete mode 100644 vegafusion-sql/src/dialect/transforms/make_utc_timestamp.rs delete mode 100644 vegafusion-sql/src/dialect/transforms/mod.rs delete mode 100644 vegafusion-sql/src/dialect/transforms/str_to_utc_timestamp.rs delete mode 100644 vegafusion-sql/src/dialect/transforms/to_utc_timestamp.rs delete mode 100644 vegafusion-sql/src/dialect/transforms/utc_timestamp_to_epoch_ms.rs delete mode 100644 vegafusion-sql/src/dialect/transforms/utc_timestamp_to_str.rs delete mode 100644 vegafusion-sql/src/dialect/utils.rs delete mode 100644 vegafusion-sql/src/lib.rs delete mode 100644 vegafusion-sql/tests/expected/aggregate.toml delete mode 100644 vegafusion-sql/tests/expected/filter.toml delete mode 100644 vegafusion-sql/tests/expected/fold.toml delete mode 100644 vegafusion-sql/tests/expected/impute.toml delete mode 100644 vegafusion-sql/tests/expected/joinaggregate.toml delete mode 100644 vegafusion-sql/tests/expected/limit.toml delete mode 100644 vegafusion-sql/tests/expected/select.toml delete mode 100644 vegafusion-sql/tests/expected/select_window.toml delete mode 100644 vegafusion-sql/tests/expected/sort.toml delete mode 100644 vegafusion-sql/tests/expected/stack.toml delete mode 100644 vegafusion-sql/tests/expected/values.toml delete mode 100644 vegafusion-sql/tests/test_aggregate.rs delete mode 100644 vegafusion-sql/tests/test_filter.rs delete mode 100644 vegafusion-sql/tests/test_fold.rs delete mode 100644 vegafusion-sql/tests/test_impute.rs delete mode 100644 vegafusion-sql/tests/test_joinaggregate.rs delete mode 100644 vegafusion-sql/tests/test_limit.rs delete mode 100644 vegafusion-sql/tests/test_select.rs delete mode 100644 vegafusion-sql/tests/test_sort.rs delete mode 100644 vegafusion-sql/tests/test_stack.rs delete mode 100644 vegafusion-sql/tests/test_values.rs delete mode 100644 vegafusion-sql/tests/test_window.rs delete mode 100644 vegafusion-sql/tests/utils/mod.rs create mode 100644 vegafusion-wasm/scripts/update-pkg.js diff --git a/Cargo.lock b/Cargo.lock index 2dcbbd640..5d632fe32 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -96,9 +96,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "23a1e53f0f5d86382dafe1cf314783b2044280f406e7e1506368220ad11b1338" dependencies = [ "anstyle", "anstyle-parse", @@ -111,43 +111,43 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "8365de52b16c035ff4fcafe0092ba9390540e3e352870ac09933bebcaa2c8c56" [[package]] name = "anstyle-parse" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.4" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.89" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" +checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" [[package]] name = "arrayref" @@ -163,9 +163,9 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "arrow" -version = "53.1.0" +version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9ba0d7248932f4e2a12fb37f0a2e3ec82b3bdedbac2a1dce186e036843b8f8c" +checksum = "4caf25cdc4a985f91df42ed9e9308e1adbcd341a31a72605c697033fcef163e3" dependencies = [ "arrow-arith", "arrow-array", @@ -184,9 +184,9 @@ dependencies = [ [[package]] name = "arrow-arith" -version = "53.1.0" +version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d60afcdc004841a5c8d8da4f4fa22d64eb19c0c01ef4bcedd77f175a7cf6e38f" +checksum = "91f2dfd1a7ec0aca967dfaa616096aec49779adc8eccec005e2f5e4111b1192a" dependencies = [ "arrow-array", "arrow-buffer", @@ -199,9 +199,9 @@ dependencies = [ [[package]] name = "arrow-array" -version = "53.1.0" +version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f16835e8599dbbb1659fd869d865254c4cf32c6c2bb60b6942ac9fc36bfa5da" +checksum = "d39387ca628be747394890a6e47f138ceac1aa912eab64f02519fed24b637af8" dependencies = [ "ahash", "arrow-buffer", @@ -216,9 +216,9 @@ dependencies = [ [[package]] name = "arrow-buffer" -version = "53.1.0" +version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a1f34f0faae77da6b142db61deba2cb6d60167592b178be317b341440acba80" +checksum = "9e51e05228852ffe3eb391ce7178a0f97d2cf80cc6ef91d3c4a6b3cb688049ec" dependencies = [ "bytes", "half", @@ -227,9 +227,9 @@ dependencies = [ [[package]] name = "arrow-cast" -version = "53.1.0" +version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "450e4abb5775bca0740bec0bcf1b1a5ae07eff43bd625661c4436d8e8e4540c4" +checksum = "d09aea56ec9fa267f3f3f6cdab67d8a9974cbba90b3aa38c8fe9d0bb071bd8c1" dependencies = [ "arrow-array", "arrow-buffer", @@ -248,9 +248,9 @@ dependencies = [ [[package]] name = "arrow-csv" -version = "53.1.0" +version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3a4e4d63830a341713e35d9a42452fbc6241d5f42fa5cf6a4681b8ad91370c4" +checksum = "c07b5232be87d115fde73e32f2ca7f1b353bff1b44ac422d3c6fc6ae38f11f0d" dependencies = [ "arrow-array", "arrow-buffer", @@ -267,9 +267,9 @@ dependencies = [ [[package]] name = "arrow-data" -version = "53.1.0" +version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b1e618bbf714c7a9e8d97203c806734f012ff71ae3adc8ad1b075689f540634" +checksum = "b98ae0af50890b494cebd7d6b04b35e896205c1d1df7b29a6272c5d0d0249ef5" dependencies = [ "arrow-buffer", "arrow-schema", @@ -279,9 +279,9 @@ dependencies = [ [[package]] name = "arrow-ipc" -version = "53.1.0" +version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98e983549259a2b97049af7edfb8f28b8911682040e99a94e4ceb1196bd65c2" +checksum = "0ed91bdeaff5a1c00d28d8f73466bcb64d32bbd7093b5a30156b4b9f4dba3eee" dependencies = [ "arrow-array", "arrow-buffer", @@ -294,9 +294,9 @@ dependencies = [ [[package]] name = "arrow-json" -version = "53.1.0" +version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b198b9c6fcf086501730efbbcb483317b39330a116125af7bb06467d04b352a3" +checksum = "0471f51260a5309307e5d409c9dc70aede1cd9cf1d4ff0f0a1e8e1a2dd0e0d3c" dependencies = [ "arrow-array", "arrow-buffer", @@ -314,9 +314,9 @@ dependencies = [ [[package]] name = "arrow-ord" -version = "53.1.0" +version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2427f37b4459a4b9e533045abe87a5183a5e0995a3fc2c2fd45027ae2cc4ef3f" +checksum = "2883d7035e0b600fb4c30ce1e50e66e53d8656aa729f2bfa4b51d359cf3ded52" dependencies = [ "arrow-array", "arrow-buffer", @@ -329,9 +329,9 @@ dependencies = [ [[package]] name = "arrow-row" -version = "53.1.0" +version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15959657d92e2261a7a323517640af87f5afd9fd8a6492e424ebee2203c567f6" +checksum = "552907e8e587a6fde4f8843fd7a27a576a260f65dab6c065741ea79f633fc5be" dependencies = [ "ahash", "arrow-array", @@ -343,18 +343,18 @@ dependencies = [ [[package]] name = "arrow-schema" -version = "53.1.0" +version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf0388a18fd7f7f3fe3de01852d30f54ed5182f9004db700fbe3ba843ed2794" +checksum = "539ada65246b949bd99ffa0881a9a15a4a529448af1a07a9838dd78617dafab1" dependencies = [ "bitflags 2.6.0", ] [[package]] name = "arrow-select" -version = "53.1.0" +version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b83e5723d307a38bf00ecd2972cd078d1339c7fd3eb044f609958a9a24463f3a" +checksum = "6259e566b752da6dceab91766ed8b2e67bf6270eb9ad8a6e07a33c1bede2b125" dependencies = [ "ahash", "arrow-array", @@ -366,9 +366,9 @@ dependencies = [ [[package]] name = "arrow-string" -version = "53.1.0" +version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab3db7c09dd826e74079661d84ed01ed06547cf75d52c2818ef776d0d852305" +checksum = "f3179ccbd18ebf04277a095ba7321b93fd1f774f18816bd5f6b3ce2f594edb6c" dependencies = [ "arrow-array", "arrow-buffer", @@ -397,44 +397,11 @@ dependencies = [ "wait-timeout", ] -[[package]] -name = "async-attributes" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" -dependencies = [ - "quote", - "syn 1.0.109", -] - -[[package]] -name = "async-channel" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener 2.5.3", - "futures-core", -] - -[[package]] -name = "async-channel" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" -dependencies = [ - "concurrent-queue", - "event-listener-strategy", - "futures-core", - "pin-project-lite", -] - [[package]] name = "async-compression" -version = "0.4.13" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e614738943d3f68c628ae3dbce7c3daffb196665f82f8c8ea6b65de73c79429" +checksum = "0cb8f1d480b0ea3783ab015936d2a55c87e219676f0c0b7dec61494043f21857" dependencies = [ "bzip2", "flate2", @@ -448,71 +415,13 @@ dependencies = [ "zstd-safe", ] -[[package]] -name = "async-executor" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "slab", -] - -[[package]] -name = "async-global-executor" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" -dependencies = [ - "async-channel 2.3.1", - "async-executor", - "async-io", - "async-lock 3.4.0", - "blocking", - "futures-lite", - "once_cell", -] - -[[package]] -name = "async-io" -version = "2.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" -dependencies = [ - "async-lock 3.4.0", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite", - "parking", - "polling", - "rustix", - "slab", - "tracing", - "windows-sys 0.59.0", -] - [[package]] name = "async-lock" version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" dependencies = [ - "event-listener 2.5.3", -] - -[[package]] -name = "async-lock" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" -dependencies = [ - "event-listener 5.3.1", - "event-listener-strategy", - "pin-project-lite", + "event-listener", ] [[package]] @@ -521,7 +430,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" dependencies = [ - "event-listener 2.5.3", + "event-listener", ] [[package]] @@ -532,34 +441,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", -] - -[[package]] -name = "async-std" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" -dependencies = [ - "async-attributes", - "async-channel 1.9.0", - "async-global-executor", - "async-io", - "async-lock 3.4.0", - "crossbeam-utils", - "futures-channel", - "futures-core", - "futures-io", - "futures-lite", - "gloo-timers", - "kv-log-macro", - "log", - "memchr", - "once_cell", - "pin-project-lite", - "pin-utils", - "slab", - "wasm-bindgen-futures", + "syn", ] [[package]] @@ -581,15 +463,9 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] -[[package]] -name = "async-task" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" - [[package]] name = "async-trait" version = "0.1.83" @@ -598,7 +474,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] @@ -655,7 +531,7 @@ dependencies = [ "futures-util", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.30", + "hyper 0.14.31", "itoa", "matchit", "memchr", @@ -757,24 +633,11 @@ dependencies = [ "generic-array", ] -[[package]] -name = "blocking" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" -dependencies = [ - "async-channel 2.3.1", - "async-task", - "futures-io", - "futures-lite", - "piper", -] - [[package]] name = "brotli" -version = "6.0.0" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" +checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -810,9 +673,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" +checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" [[package]] name = "byteorder" @@ -822,9 +685,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.2" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" [[package]] name = "bzip2" @@ -855,9 +718,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.1.28" +version = "1.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e80e3b6a3ab07840e1cae9b0666a63970dc28e8ed5ffbcdacbfc760c281bfc1" +checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" dependencies = [ "jobserver", "libc", @@ -978,9 +841,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.19" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7be5744db7978a28d9df86a214130d106a89ce49644cbc4e3f0c22c3fba30615" +checksum = "b97f376d85a664d5837dbae44bf546e6477a679ff6610010f17276f686d867e8" dependencies = [ "clap_builder", "clap_derive", @@ -988,9 +851,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.19" +version = "4.5.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5fbc17d3ef8278f55b282b2a2e75ae6f6c7d4bb70ed3d0382375104bfafdb4b" +checksum = "19bc80abd44e4bed93ca373a0704ccbd1b710dc5749406201bb018272808dc54" dependencies = [ "anstream", "anstyle", @@ -1007,7 +870,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] @@ -1033,9 +896,9 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "colorchoice" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "combine" @@ -1058,15 +921,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "concurrent-queue" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "console_error_panic_hook" version = "0.1.7" @@ -1253,9 +1107,8 @@ dependencies = [ [[package]] name = "datafusion" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee907b081e45e1d14e1f327e89ef134f91fcebad0bfc2dc229fa9f6044379682" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "ahash", "arrow", @@ -1310,9 +1163,8 @@ dependencies = [ [[package]] name = "datafusion-catalog" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c2b914f6e33c429af7d8696c72a47ed9225d7e2b82c747ebdfa2408ed53579f" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "arrow-schema", "async-trait", @@ -1325,9 +1177,8 @@ dependencies = [ [[package]] name = "datafusion-common" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a84f8e76330c582a6b8ada0b2c599ca46cfe46b7585e458fc3f4092bc722a18" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "ahash", "arrow", @@ -1337,6 +1188,7 @@ dependencies = [ "chrono", "half", "hashbrown 0.14.5", + "indexmap 2.6.0", "instant", "libc", "num_cpus", @@ -1349,9 +1201,8 @@ dependencies = [ [[package]] name = "datafusion-common-runtime" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf08cc30d92720d557df13bd5a5696213bd5ea0f38a866d8d85055d866fba774" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "log", "tokio", @@ -1359,9 +1210,8 @@ dependencies = [ [[package]] name = "datafusion-execution" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86bc4183d5c45b9f068a6f351678a0d1eb1225181424542bb75db18ec280b822" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "arrow", "chrono", @@ -1380,9 +1230,8 @@ dependencies = [ [[package]] name = "datafusion-expr" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "202119ce58e4d103e37ae64aab40d4e574c97bdd2bea994bf307b175fcbfa74d" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "ahash", "arrow", @@ -1392,7 +1241,9 @@ dependencies = [ "datafusion-common", "datafusion-expr-common", "datafusion-functions-aggregate-common", + "datafusion-functions-window-common", "datafusion-physical-expr-common", + "indexmap 2.6.0", "paste", "serde_json", "sqlparser", @@ -1402,20 +1253,19 @@ dependencies = [ [[package]] name = "datafusion-expr-common" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8b181ce8569216abb01ef3294aa16c0a40d7d39350c2ff01ede00f167a535f2" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "arrow", "datafusion-common", + "itertools 0.13.0", "paste", ] [[package]] name = "datafusion-functions" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4124b8066444e05a24472f852e94cf56546c0f4d92d00f018f207216902712" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "arrow", "arrow-buffer", @@ -1440,9 +1290,8 @@ dependencies = [ [[package]] name = "datafusion-functions-aggregate" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b94acdac235ea21810150a89751617ef2db7e32eba27f54be48a81bde2bfe119" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "ahash", "arrow", @@ -1454,16 +1303,15 @@ dependencies = [ "datafusion-physical-expr", "datafusion-physical-expr-common", "half", + "indexmap 2.6.0", "log", "paste", - "sqlparser", ] [[package]] name = "datafusion-functions-aggregate-common" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c9ea085bbf900bf16e2ca0f56fc56236b2e4f2e1a2cccb67bcd83c5ab4ad0ef" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "ahash", "arrow", @@ -1475,9 +1323,8 @@ dependencies = [ [[package]] name = "datafusion-functions-nested" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c882e61665ed60c5ce9b061c1e587aeb8ae5ae4bcb5e5f2465139ab25328e0f" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "arrow", "arrow-array", @@ -1498,21 +1345,31 @@ dependencies = [ [[package]] name = "datafusion-functions-window" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a354ce96df3ca6d025093adac9fd55ca09931c9b6f2630140721a95873fde4" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "datafusion-common", "datafusion-expr", + "datafusion-functions-window-common", + "datafusion-physical-expr", "datafusion-physical-expr-common", "log", + "paste", +] + +[[package]] +name = "datafusion-functions-window-common" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" +dependencies = [ + "datafusion-common", + "datafusion-physical-expr-common", ] [[package]] name = "datafusion-optimizer" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf677c74fb7b5a1899ef52709e4a70fff3ed80bdfb4bbe495909810e83d5f39" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "arrow", "async-trait", @@ -1530,9 +1387,8 @@ dependencies = [ [[package]] name = "datafusion-physical-expr" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b077999f6eb6c43d6b25bc66332a3be2f693c382840f008dd763b8540f9530" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "ahash", "arrow", @@ -1541,30 +1397,25 @@ dependencies = [ "arrow-ord", "arrow-schema", "arrow-string", - "base64 0.22.1", "chrono", "datafusion-common", - "datafusion-execution", "datafusion-expr", "datafusion-expr-common", "datafusion-functions-aggregate-common", "datafusion-physical-expr-common", "half", "hashbrown 0.14.5", - "hex", "indexmap 2.6.0", "itertools 0.13.0", "log", "paste", "petgraph", - "regex", ] [[package]] name = "datafusion-physical-expr-common" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce847f885c2b13bbe29f5c8b7948797131aa470af6e16d2a94f4428b4f4f1bd" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "ahash", "arrow", @@ -1576,13 +1427,14 @@ dependencies = [ [[package]] name = "datafusion-physical-optimizer" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d13238e3b9fdd62a4c18760bfef714bb990d1e1d3430e9f416aae4b3cfaa71af" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ + "arrow", "arrow-schema", "datafusion-common", "datafusion-execution", + "datafusion-expr-common", "datafusion-physical-expr", "datafusion-physical-plan", "itertools 0.13.0", @@ -1590,9 +1442,8 @@ dependencies = [ [[package]] name = "datafusion-physical-plan" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faba6f55a7eaf0241d07d12c2640de52742646b10f754485d5192bdfe2c9ceae" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "ahash", "arrow", @@ -1606,8 +1457,8 @@ dependencies = [ "datafusion-common-runtime", "datafusion-execution", "datafusion-expr", - "datafusion-functions-aggregate", "datafusion-functions-aggregate-common", + "datafusion-functions-window-common", "datafusion-physical-expr", "datafusion-physical-expr-common", "futures", @@ -1625,9 +1476,8 @@ dependencies = [ [[package]] name = "datafusion-proto" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585357d621fa03ea85a7fefca79ebc5ef0ee13a7f82be0762a414879a4d190a7" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "arrow", "chrono", @@ -1641,9 +1491,8 @@ dependencies = [ [[package]] name = "datafusion-proto-common" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4db6534382f92f528bdb5d925b4214c31ffd84fa7fe1eff3ed0d2f1286851ab8" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "arrow", "chrono", @@ -1654,15 +1503,15 @@ dependencies = [ [[package]] name = "datafusion-sql" -version = "42.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad8d96a9b52e1aa24f9373696a815be828193efce7cb0bbd2140b6bb67d1819" +version = "42.1.0" +source = "git+https://github.com/apache/datafusion.git?rev=b30d12a73fb9867180c2fdf8ddc818b45f957bac#b30d12a73fb9867180c2fdf8ddc818b45f957bac" dependencies = [ "arrow", "arrow-array", "arrow-schema", "datafusion-common", "datafusion-expr", + "indexmap 2.6.0", "log", "regex", "sqlparser", @@ -1714,15 +1563,6 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" -[[package]] -name = "encoding_rs" -version = "0.8.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" -dependencies = [ - "cfg-if", -] - [[package]] name = "env_logger" version = "0.10.2" @@ -1758,27 +1598,6 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" -[[package]] -name = "event-listener" -version = "5.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" -dependencies = [ - "concurrent-queue", - "parking", - "pin-project-lite", -] - -[[package]] -name = "event-listener-strategy" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" -dependencies = [ - "event-listener 5.3.1", - "pin-project-lite", -] - [[package]] name = "fastrand" version = "2.1.1" @@ -1883,19 +1702,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" -[[package]] -name = "futures-lite" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "parking", - "pin-project-lite", -] - [[package]] name = "futures-macro" version = "0.3.31" @@ -1904,7 +1710,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] @@ -1988,18 +1794,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" -[[package]] -name = "gloo-timers" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - [[package]] name = "h2" version = "0.3.26" @@ -2186,9 +1980,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.30" +version = "0.14.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" +checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" dependencies = [ "bytes", "futures-channel", @@ -2210,9 +2004,9 @@ dependencies = [ [[package]] name = "hyper" -version = "1.4.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" dependencies = [ "bytes", "futures-channel", @@ -2228,20 +2022,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.30", - "rustls 0.21.12", - "tokio", - "tokio-rustls 0.24.1", -] - [[package]] name = "hyper-rustls" version = "0.27.3" @@ -2250,14 +2030,15 @@ checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http 1.1.0", - "hyper 1.4.1", + "hyper 1.5.0", "hyper-util", - "rustls 0.23.14", + "rustls 0.23.15", "rustls-native-certs", "rustls-pki-types", "tokio", "tokio-rustls 0.26.0", "tower-service", + "webpki-roots", ] [[package]] @@ -2266,7 +2047,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper 0.14.30", + "hyper 0.14.31", "pin-project-lite", "tokio", "tokio-io-timeout", @@ -2283,7 +2064,7 @@ dependencies = [ "futures-util", "http 1.1.0", "http-body 1.0.1", - "hyper 1.4.1", + "hyper 1.5.0", "pin-project-lite", "socket2", "tokio", @@ -2494,9 +2275,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] @@ -2512,15 +2293,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "kv-log-macro" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" -dependencies = [ - "log", -] - [[package]] name = "lazy_static" version = "1.5.0" @@ -2593,15 +2365,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.159" +version = "0.2.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" [[package]] name = "libm" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +checksum = "a00419de735aac21d53b0de5ce2c03bd3627277cf471300f27ebc89f7d828047" [[package]] name = "linux-raw-sys" @@ -2636,9 +2408,6 @@ name = "log" version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" -dependencies = [ - "value-bag", -] [[package]] name = "lru" @@ -2716,21 +2485,11 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - [[package]] name = "minicov" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71e683cd655513b99affab7d317deb690528255a0d5f717f1024093c12b169" +checksum = "def6d99771d7c499c26ad4d40eb6645eafd3a1553b35fc26ea5a489a45e82d9a" dependencies = [ "cc", "walkdir", @@ -2934,9 +2693,9 @@ dependencies = [ [[package]] name = "object_store" -version = "0.11.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a0c4b3a0e31f8b66f71ad8064521efa773910196e2cde791436f13409f3b45" +checksum = "6eb4c22c6154a1e759d7099f9ffad7cc5ef8245f9efbab4a41b92623079c82f3" dependencies = [ "async-trait", "base64 0.22.1", @@ -2944,14 +2703,14 @@ dependencies = [ "chrono", "futures", "humantime", - "hyper 1.4.1", + "hyper 1.5.0", "itertools 0.13.0", "md-5", "parking_lot 0.12.3", "percent-encoding", "quick-xml", "rand", - "reqwest 0.12.8", + "reqwest", "ring", "serde", "serde_json", @@ -3004,12 +2763,6 @@ version = "6.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" -[[package]] -name = "parking" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" - [[package]] name = "parking_lot" version = "0.11.2" @@ -3060,9 +2813,9 @@ dependencies = [ [[package]] name = "parquet" -version = "53.1.0" +version = "53.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "310c46a70a3ba90d98fec39fa2da6d9d731e544191da6fb56c9d199484d0dd3e" +checksum = "dea02606ba6f5e856561d8d507dba8bac060aefca2a6c0f1aa1d361fed91ff3e" dependencies = [ "ahash", "arrow-array", @@ -3166,29 +2919,29 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.6" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf123a161dde1e524adf36f90bc5d8d3462824a9c43553ad07a8183161189ec" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.6" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -3196,17 +2949,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "piper" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" -dependencies = [ - "atomic-waker", - "fastrand", - "futures-io", -] - [[package]] name = "pixelmatch" version = "0.1.0" @@ -3262,21 +3004,6 @@ dependencies = [ "miniz_oxide 0.3.7", ] -[[package]] -name = "polling" -version = "3.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" -dependencies = [ - "cfg-if", - "concurrent-queue", - "hermit-abi 0.4.0", - "pin-project-lite", - "rustix", - "tracing", - "windows-sys 0.59.0", -] - [[package]] name = "portable-atomic" version = "1.9.0" @@ -3285,9 +3012,9 @@ checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" [[package]] name = "portable-atomic-util" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdd8420072e66d54a407b3316991fe946ce3ab1083a7f575b2463866624704d" +checksum = "90a7d5beecc52a491b54d6dd05c7a45ba1801666a5baad9fdbfc6fef8d2d206c" dependencies = [ "portable-atomic", ] @@ -3333,19 +3060,19 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.22" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.79", + "syn", ] [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" dependencies = [ "unicode-ident", ] @@ -3387,7 +3114,7 @@ dependencies = [ "prost 0.12.6", "prost-types", "regex", - "syn 2.0.79", + "syn", "tempfile", ] @@ -3401,7 +3128,7 @@ dependencies = [ "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] @@ -3414,7 +3141,7 @@ dependencies = [ "itertools 0.13.0", "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] @@ -3437,9 +3164,9 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.22.4" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00e89ce2565d6044ca31a3eb79a334c3a79a841120a98f64eea9f579564cb691" +checksum = "3d922163ba1f79c04bc49073ba7b32fd5a8d3b76a87c955921234b8e77333c51" dependencies = [ "cfg-if", "chrono", @@ -3474,9 +3201,9 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.22.4" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8afbaf3abd7325e08f35ffb8deb5892046fcb2608b703db6a583a5ba4cea01e" +checksum = "bc38c5feeb496c8321091edf3d63e9a6829eab4b863b4a6a65f26f3e9cc6b179" dependencies = [ "once_cell", "target-lexicon", @@ -3484,9 +3211,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.22.4" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec15a5ba277339d04763f4c23d85987a5b08cbb494860be141e6a10a8eb88022" +checksum = "94845622d88ae274d2729fcefc850e63d7a3ddff5e3ce11bd88486db9f1d357d" dependencies = [ "libc", "pyo3-build-config", @@ -3494,27 +3221,27 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.22.4" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15e0f01b5364bcfbb686a52fc4181d412b708a68ed20c330db9fc8d2c2bf5a43" +checksum = "e655aad15e09b94ffdb3ce3d217acf652e26bbc37697ef012f5e5e348c716e5e" dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.79", + "syn", ] [[package]] name = "pyo3-macros-backend" -version = "0.22.4" +version = "0.22.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a09b550200e1e5ed9176976d0060cbc2ea82dc8515da07885e7b8153a85caacb" +checksum = "ae1e3f09eecd94618f60a455a23def79f79eba4dc561a97324bf9ac8c6df30ce" dependencies = [ "heck", "proc-macro2", "pyo3-build-config", "quote", - "syn 2.0.79", + "syn", ] [[package]] @@ -3548,7 +3275,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash 2.0.0", - "rustls 0.23.14", + "rustls 0.23.15", "socket2", "thiserror", "tokio", @@ -3565,7 +3292,7 @@ dependencies = [ "rand", "ring", "rustc-hash 2.0.0", - "rustls 0.23.14", + "rustls 0.23.15", "slab", "thiserror", "tinyvec", @@ -3670,9 +3397,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.11.0" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -3703,48 +3430,6 @@ version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" -[[package]] -name = "reqwest" -version = "0.11.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" -dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.30", - "hyper-rustls 0.24.2", - "ipnet", - "js-sys", - "log", - "mime", - "mime_guess", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls 0.21.12", - "rustls-pemfile 1.0.4", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper 0.1.2", - "system-configuration", - "tokio", - "tokio-rustls 0.24.1", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots", - "winreg", -] - [[package]] name = "reqwest" version = "0.12.8" @@ -3753,14 +3438,15 @@ checksum = "f713147fbe92361e52392c73b8c9e48c04c6625bce969ef54dc901e58e042a7b" dependencies = [ "base64 0.22.1", "bytes", + "futures-channel", "futures-core", "futures-util", "h2 0.4.6", "http 1.1.0", "http-body 1.0.1", "http-body-util", - "hyper 1.4.1", - "hyper-rustls 0.27.3", + "hyper 1.5.0", + "hyper-rustls", "hyper-util", "ipnet", "js-sys", @@ -3770,7 +3456,7 @@ dependencies = [ "percent-encoding", "pin-project-lite", "quinn", - "rustls 0.23.14", + "rustls 0.23.15", "rustls-native-certs", "rustls-pemfile 2.2.0", "rustls-pki-types", @@ -3787,42 +3473,41 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", + "webpki-roots", "windows-registry", ] [[package]] name = "reqwest-middleware" -version = "0.2.5" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a735987236a8e238bf0296c7e351b999c188ccc11477f311b82b55c93984216" +checksum = "562ceb5a604d3f7c885a792d42c199fd8af239d0a51b2fa6a78aafa092452b04" dependencies = [ "anyhow", "async-trait", - "http 0.2.12", - "reqwest 0.11.27", + "http 1.1.0", + "reqwest", "serde", - "task-local-extensions", "thiserror", + "tower-service", ] [[package]] name = "reqwest-retry" -version = "0.3.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9af20b65c2ee9746cc575acb6bd28a05ffc0d15e25c992a8f4462d8686aacb4f" +checksum = "a83df1aaec00176d0fabb65dea13f832d2a446ca99107afc17c5d2d4981221d0" dependencies = [ "anyhow", "async-trait", - "chrono", "futures", "getrandom", - "http 0.2.12", - "hyper 0.14.30", + "http 1.1.0", + "hyper 1.5.0", "parking_lot 0.11.2", - "reqwest 0.11.27", + "reqwest", "reqwest-middleware", "retry-policies", - "task-local-extensions", "tokio", "tracing", "wasm-timer", @@ -3830,12 +3515,10 @@ dependencies = [ [[package]] name = "retry-policies" -version = "0.2.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17dd00bff1d737c40dbcd47d4375281bf4c17933f9eef0a185fc7bacca23ecbd" +checksum = "5875471e6cab2871bc150ecb8c727db5113c9338cc3354dc5ee3425b6aa40a1c" dependencies = [ - "anyhow", - "chrono", "rand", ] @@ -3888,22 +3571,10 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.79", + "syn", "unicode-ident", ] -[[package]] -name = "rstest_reuse" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88530b681abe67924d42cca181d070e3ac20e0740569441a9e35a7cedd2b34a4" -dependencies = [ - "quote", - "rand", - "rustc_version", - "syn 2.0.79", -] - [[package]] name = "rustc-demangle" version = "0.1.24" @@ -3933,9 +3604,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.37" +version = "0.38.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" +checksum = "aa260229e6538e52293eeb577aabd09945a09d6d9cc0fc550ed7529056c2e32a" dependencies = [ "bitflags 2.6.0", "errno", @@ -3958,9 +3629,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.14" +version = "0.23.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "415d9944693cb90382053259f89fbb077ea730ad7273047ec63b19bc9b160ba8" +checksum = "5fbb44d7acc4e873d613422379f69f237a1b141928c02f6bc6ccfddddc2d7993" dependencies = [ "once_cell", "ring", @@ -4003,9 +3674,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e696e35370c65c9c541198af4543ccd580cf17fc25d8e05c5a242b202488c55" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" [[package]] name = "rustls-webpki" @@ -4030,9 +3701,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] name = "ryu" @@ -4123,29 +3794,29 @@ checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" [[package]] name = "serde" -version = "1.0.210" +version = "1.0.213" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" +checksum = "3ea7893ff5e2466df8d720bb615088341b295f849602c6956047f8f80f0e9bc1" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.210" +version = "1.0.213" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" +checksum = "7e85ad2009c50b58e87caa8cd6dac16bdf511bbfb7af6c33df902396aa480fa5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] name = "serde_json" -version = "1.0.128" +version = "1.0.132" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" dependencies = [ "indexmap 2.6.0", "itoa", @@ -4154,15 +3825,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_spanned" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" -dependencies = [ - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -4231,7 +3893,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] @@ -4258,9 +3920,9 @@ checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "sqlparser" -version = "0.50.0" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2e5b515a2bd5168426033e9efbfd05500114833916f1d5c268f938b4ee130ac" +checksum = "5fe11944a61da0da3f592e19a45ebe5ab92dc14a779907ff1f08fbb797bfefc7" dependencies = [ "log", "sqlparser_derive", @@ -4274,7 +3936,7 @@ checksum = "01b2e185515564f15375f593fb966b5718bc624ba77fe49fa4616ad619690554" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] @@ -4308,7 +3970,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.79", + "syn", ] [[package]] @@ -4319,20 +3981,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.79" +version = "2.0.85" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" +checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56" dependencies = [ "proc-macro2", "quote", @@ -4368,42 +4019,12 @@ dependencies = [ "windows", ] -[[package]] -name = "system-configuration" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" -dependencies = [ - "bitflags 1.3.2", - "core-foundation", - "system-configuration-sys", -] - -[[package]] -name = "system-configuration-sys" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "target-lexicon" version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" -[[package]] -name = "task-local-extensions" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba323866e5d033818e3240feeb9f7db2c4296674e4d9e16b97b7bf8f490434e8" -dependencies = [ - "pin-utils", -] - [[package]] name = "tempfile" version = "3.13.0" @@ -4450,7 +4071,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] @@ -4461,7 +4082,7 @@ checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn", "test-case-core", ] @@ -4473,22 +4094,22 @@ checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.64" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" +checksum = "5d11abd9594d9b38965ef50805c5e469ca9cc6f197f883f717e0269a3057b3d5" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.64" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" +checksum = "ae71770322cbd277e69d762a16c444af02aa0575ac0d174f0b9562d3b37f8602" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] @@ -4549,9 +4170,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.40.0" +version = "1.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +checksum = "145f3413504347a2be84393cc8a7d2fb4d863b375909ea59f2158261aa258bbb" dependencies = [ "backtrace", "bytes", @@ -4581,7 +4202,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] @@ -4600,7 +4221,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.14", + "rustls 0.23.15", "rustls-pki-types", "tokio", ] @@ -4629,40 +4250,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "toml" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" -dependencies = [ - "serde", - "serde_spanned", - "toml_datetime", - "toml_edit", -] - -[[package]] -name = "toml_datetime" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" -dependencies = [ - "serde", -] - -[[package]] -name = "toml_edit" -version = "0.19.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.6.0", - "serde", - "serde_spanned", - "toml_datetime", - "winnow", -] - [[package]] name = "tonic" version = "0.10.2" @@ -4677,7 +4264,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.30", + "hyper 0.14.31", "hyper-timeout", "percent-encoding", "pin-project", @@ -4703,7 +4290,7 @@ dependencies = [ "proc-macro2", "prost-build", "quote", - "syn 2.0.79", + "syn", ] [[package]] @@ -4716,7 +4303,7 @@ dependencies = [ "bytes", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.30", + "hyper 0.14.31", "pin-project", "tokio-stream", "tonic", @@ -4795,7 +4382,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] @@ -4838,15 +4425,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "unicase" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-bidi" version = "0.3.17" @@ -4911,19 +4489,13 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ "getrandom", ] -[[package]] -name = "value-bag" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" - [[package]] name = "vegafusion" version = "1.6.9" @@ -4946,9 +4518,7 @@ dependencies = [ "uuid", "vegafusion-common", "vegafusion-core", - "vegafusion-dataframe", "vegafusion-runtime", - "vegafusion-sql", ] [[package]] @@ -4972,6 +4542,7 @@ dependencies = [ "serde_json", "sqlparser", "thiserror", + "url", ] [[package]] @@ -5005,42 +4576,13 @@ dependencies = [ "tonic", "tonic-build", "vegafusion-common", - "vegafusion-dataframe", -] - -[[package]] -name = "vegafusion-dataframe" -version = "1.6.9" -dependencies = [ - "arrow", - "async-trait", - "datafusion-common", - "datafusion-expr", - "datafusion-functions-window", - "pyo3", - "sqlparser", - "vegafusion-common", -] - -[[package]] -name = "vegafusion-datafusion-udfs" -version = "1.6.9" -dependencies = [ - "chrono", - "chrono-tz 0.9.0", - "datafusion-functions", - "lazy_static", - "ordered-float 3.9.2", - "regex", - "vegafusion-common", - "vegafusion-core", ] [[package]] name = "vegafusion-runtime" version = "1.6.9" dependencies = [ - "async-lock 2.8.0", + "async-lock", "async-recursion", "async-trait", "base64 0.21.7", @@ -5048,6 +4590,7 @@ dependencies = [ "chrono", "chrono-tz 0.9.0", "criterion", + "datafusion", "datafusion-common", "datafusion-expr", "datafusion-functions", @@ -5072,7 +4615,7 @@ dependencies = [ "pixelmatch", "prost 0.12.6", "regex", - "reqwest 0.11.27", + "reqwest", "reqwest-middleware", "reqwest-retry", "rgb", @@ -5083,12 +4626,10 @@ dependencies = [ "tempfile", "test-case", "tokio", + "url", "uuid", "vegafusion-common", "vegafusion-core", - "vegafusion-dataframe", - "vegafusion-datafusion-udfs", - "vegafusion-sql", ] [[package]] @@ -5096,7 +4637,8 @@ name = "vegafusion-server" version = "1.6.9" dependencies = [ "assert_cmd", - "clap 4.5.19", + "clap 4.5.20", + "datafusion", "futures-util", "h2 0.3.26", "predicates", @@ -5112,46 +4654,6 @@ dependencies = [ "vegafusion-common", "vegafusion-core", "vegafusion-runtime", - "vegafusion-sql", -] - -[[package]] -name = "vegafusion-sql" -version = "1.6.9" -dependencies = [ - "arrow", - "async-std", - "async-trait", - "chrono", - "datafusion", - "datafusion-common", - "datafusion-expr", - "datafusion-functions", - "datafusion-functions-aggregate", - "datafusion-functions-window", - "deterministic-hash", - "lazy_static", - "log", - "object_store", - "pyo3", - "pyo3-arrow", - "regex", - "reqwest 0.11.27", - "reqwest-middleware", - "reqwest-retry", - "rstest", - "rstest_reuse", - "serde", - "serde_json", - "sqlparser", - "tempfile", - "tokio", - "toml", - "url", - "uuid", - "vegafusion-common", - "vegafusion-dataframe", - "vegafusion-datafusion-udfs", ] [[package]] @@ -5218,9 +4720,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", "once_cell", @@ -5229,24 +4731,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.79", + "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", @@ -5256,9 +4758,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5266,28 +4768,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "wasm-bindgen-test" -version = "0.3.43" +version = "0.3.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68497a05fb21143a08a7d24fc81763384a3072ee43c44e86aad1744d6adef9d9" +checksum = "d381749acb0943d357dcbd8f0b100640679883fcdeeef04def49daf8d33a5426" dependencies = [ "console_error_panic_hook", "js-sys", @@ -5300,20 +4802,20 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.43" +version = "0.3.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8220be1fa9e4c889b30fd207d4906657e7e90b12e0e6b0c8b8d8709f5de021" +checksum = "c97b2ef2c8d627381e51c071c2ab328eac606d3f69dd82bcbca20a9e389d95f0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] name = "wasm-streams" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e072d4e72f700fb3443d8fe94a39315df013eef1104903cdb0a2abd322bbecd" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ "futures-util", "js-sys", @@ -5339,9 +4841,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", @@ -5349,9 +4851,12 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.4" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" +checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" +dependencies = [ + "rustls-pki-types", +] [[package]] name = "weezl" @@ -5429,7 +4934,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] @@ -5440,7 +4945,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] @@ -5491,15 +4996,6 @@ dependencies = [ "windows-targets 0.42.2", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -5533,21 +5029,6 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", -] - [[package]] name = "windows-targets" version = "0.52.6" @@ -5570,12 +5051,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -5588,12 +5063,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" @@ -5606,12 +5075,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -5630,12 +5093,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" @@ -5648,12 +5105,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" @@ -5666,12 +5117,6 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -5684,37 +5129,12 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "xz2" version = "0.1.7" @@ -5742,7 +5162,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.79", + "syn", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index b498f8934..085eb1a72 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,9 +4,6 @@ members = [ "vegafusion-common", "vegafusion-core", "vegafusion-runtime", - "vegafusion-dataframe", - "vegafusion-datafusion-udfs", - "vegafusion-sql", "vegafusion-python", "vegafusion-wasm", "vegafusion-server", @@ -15,14 +12,16 @@ members = [ [workspace.dependencies] arrow = { version = "53.1.0", default-features = false } -sqlparser = { version = "0.50.0" } +sqlparser = { version = "0.51.0" } chrono = { version = "0.4.35", default-features = false } chrono-tz = { version = "0.9.0", features = [ "case-insensitive", "filter-by-regex", ] } deterministic-hash = "1.0.1" -reqwest = { version = "0.11.22", default-features = false } +reqwest = { version = "0.12.8", default-features = false } +reqwest-middleware = { version = "0.3" } +reqwest-retry = "0.6" tokio = { version = "1.36.0" } pyo3 = { version = "0.22.4" } pythonize = { version = "0.22" } @@ -33,55 +32,67 @@ object_store = { version = "0.11.0" } lazy_static = { version = "1.5" } async-trait = "0.1.73" futures = "0.3.21" +url = "2.3.1" [workspace.dependencies.serde_json] version = "1.0.91" default-features = false [workspace.dependencies.datafusion] -version = "42.0.0" +git = "https://github.com/apache/datafusion.git" +rev = "b30d12a73fb9867180c2fdf8ddc818b45f957bac" default-features = false features = ["parquet", "nested_expressions"] [workspace.dependencies.datafusion-common] -version = "42.0.0" +git = "https://github.com/apache/datafusion.git" +rev = "b30d12a73fb9867180c2fdf8ddc818b45f957bac" # no default features [workspace.dependencies.datafusion-expr] -version = "42.0.0" +git = "https://github.com/apache/datafusion.git" +rev = "b30d12a73fb9867180c2fdf8ddc818b45f957bac" # no default features [workspace.dependencies.datafusion-proto] -version = "42.0.0" +git = "https://github.com/apache/datafusion.git" +rev = "b30d12a73fb9867180c2fdf8ddc818b45f957bac" default-features = false features = ["parquet"] [workspace.dependencies.datafusion-proto-common] -version = "42.0.0" +git = "https://github.com/apache/datafusion.git" +rev = "b30d12a73fb9867180c2fdf8ddc818b45f957bac" default-features = false [workspace.dependencies.datafusion-physical-expr] -version = "42.0.0" +git = "https://github.com/apache/datafusion.git" +rev = "b30d12a73fb9867180c2fdf8ddc818b45f957bac" default-features = false [workspace.dependencies.datafusion-optimizer] -version = "42.0.0" +git = "https://github.com/apache/datafusion.git" +rev = "b30d12a73fb9867180c2fdf8ddc818b45f957bac" default-features = false [workspace.dependencies.datafusion-functions] -version = "42.0.0" +git = "https://github.com/apache/datafusion.git" +rev = "b30d12a73fb9867180c2fdf8ddc818b45f957bac" default-features = false [workspace.dependencies.datafusion-functions-nested] -version = "42.0.0" +git = "https://github.com/apache/datafusion.git" +rev = "b30d12a73fb9867180c2fdf8ddc818b45f957bac" # no default features [workspace.dependencies.datafusion-functions-aggregate] -version = "42.0.0" +git = "https://github.com/apache/datafusion.git" +rev = "b30d12a73fb9867180c2fdf8ddc818b45f957bac" # no default features [workspace.dependencies.datafusion-functions-window] -version = "42.0.0" +git = "https://github.com/apache/datafusion.git" +rev = "b30d12a73fb9867180c2fdf8ddc818b45f957bac" # no default features # Profile with good speed for local development and testing diff --git a/automation/bump_version.py b/automation/bump_version.py index 2a5ec9d61..8847dfb36 100644 --- a/automation/bump_version.py +++ b/automation/bump_version.py @@ -18,9 +18,6 @@ def bump_version(version): cargo_packages = [ "vegafusion-common", "vegafusion-core", - "vegafusion-datafusion-udfs", - "vegafusion-dataframe", - "vegafusion-sql", "vegafusion-runtime", "vegafusion-python", "vegafusion-server", diff --git a/pixi.toml b/pixi.toml index d7b31d3f7..7b786ff91 100644 --- a/pixi.toml +++ b/pixi.toml @@ -68,7 +68,7 @@ build-wasm = { cmd = "cd vegafusion-wasm && npm install && wasm-pack build --rel "install-wasm-toolchain", "install-wasm-pack", ] } -pack-wasm = { cmd = "cd vegafusion-wasm && wasm-pack pack", depends_on = [ +pack-wasm = { cmd = "cd vegafusion-wasm && wasm-pack pack && node scripts/update-pkg.js", depends_on = [ "build-wasm", ] } diff --git a/vegafusion-common/Cargo.toml b/vegafusion-common/Cargo.toml index 7224ff2a9..a512c8514 100644 --- a/vegafusion-common/Cargo.toml +++ b/vegafusion-common/Cargo.toml @@ -63,6 +63,10 @@ optional = true workspace = true optional = true +[dependencies.url] +workspace = true +optional = true + [dependencies.jni] version = "0.21.1" optional = true diff --git a/vegafusion-common/src/column.rs b/vegafusion-common/src/column.rs index 30b509fd7..31f90a73a 100644 --- a/vegafusion-common/src/column.rs +++ b/vegafusion-common/src/column.rs @@ -6,6 +6,10 @@ pub fn flat_col(col_name: &str) -> Expr { Expr::Column(Column::from_name(col_name)) } +pub fn relation_col(col_name: &str, relation_name: &str) -> Expr { + Expr::Column(Column::new(Some(relation_name), col_name)) +} + pub fn unescaped_col(col_name: &str) -> Expr { flat_col(&unescape_field(col_name)) } diff --git a/vegafusion-common/src/data/json_writer.rs b/vegafusion-common/src/data/json_writer.rs index c69b6d136..4ea3ab17b 100644 --- a/vegafusion-common/src/data/json_writer.rs +++ b/vegafusion-common/src/data/json_writer.rs @@ -35,17 +35,16 @@ //! [`record_batches_to_json_rows`]: //! -use std::iter; -use std::{fmt::Debug, io::Write}; - -use serde_json::map::Map as JsonMap; -use serde_json::Value; - use arrow::array::*; use arrow::datatypes::*; use arrow::error::{ArrowError, Result}; use arrow::json::JsonSerializable; use arrow::record_batch::RecordBatch; +use datafusion_common::cast::as_string_view_array; +use serde_json::map::Map as JsonMap; +use serde_json::Value; +use std::iter; +use std::{fmt::Debug, io::Write}; fn primitive_array_to_json(array: &ArrayRef) -> Result> where @@ -273,6 +272,19 @@ fn set_column_for_json_rows( DataType::LargeUtf8 => { set_column_by_array_type!(as_largestring_array, col_name, rows, array, row_count); } + DataType::Utf8View => { + let arr = as_string_view_array(array)?; + rows.iter_mut() + .zip(arr.iter()) + .take(row_count) + .for_each(|(row, maybe_value)| { + if let Some(v) = maybe_value { + row.insert(col_name.to_string(), v.into()); + } else { + row.insert(col_name.to_string(), Value::Null); + } + }); + } DataType::Date32 => { // Write as integer UTC milliseconds let arr = array.as_any().downcast_ref::().unwrap(); diff --git a/vegafusion-common/src/data/scalar.rs b/vegafusion-common/src/data/scalar.rs index 1d87d2d48..dc4aef564 100644 --- a/vegafusion-common/src/data/scalar.rs +++ b/vegafusion-common/src/data/scalar.rs @@ -24,6 +24,7 @@ pub trait ScalarValueHelpers { #[cfg(feature = "json")] fn to_json(&self) -> Result; + fn to_i32(&self) -> Result; fn to_f64(&self) -> Result; fn to_f64x2(&self) -> Result<[f64; 2]>; fn to_scalar_string(&self) -> Result; @@ -163,6 +164,26 @@ impl ScalarValueHelpers for ScalarValue { Ok(res) } + fn to_i32(&self) -> Result { + Ok(match self { + ScalarValue::Float32(Some(e)) => *e as i32, + ScalarValue::Float64(Some(e)) => *e as i32, + ScalarValue::Int8(Some(e)) => *e as i32, + ScalarValue::Int16(Some(e)) => *e as i32, + ScalarValue::Int32(Some(e)) => *e, + ScalarValue::Int64(Some(e)) => *e as i32, + ScalarValue::UInt8(Some(e)) => *e as i32, + ScalarValue::UInt16(Some(e)) => *e as i32, + ScalarValue::UInt32(Some(e)) => *e as i32, + ScalarValue::UInt64(Some(e)) => *e as i32, + _ => { + return Err(VegaFusionError::internal(format!( + "Cannot convert {self} to i32" + ))) + } + }) + } + fn to_f64(&self) -> Result { Ok(match self { ScalarValue::Float32(Some(e)) => *e as f64, diff --git a/vegafusion-common/src/data/table.rs b/vegafusion-common/src/data/table.rs index 1dc876bb2..5c4f8de3b 100644 --- a/vegafusion-common/src/data/table.rs +++ b/vegafusion-common/src/data/table.rs @@ -70,15 +70,15 @@ impl VegaFusionTable { .map(|f| f.as_ref().clone().with_nullable(true)) .collect(); let schema = Arc::new(Schema::new(schema_fields)); - if partitions.iter().all(|batches| { - let batch_schema_fields: Vec<_> = batches + if partitions.iter().all(|batch| { + let batch_schema_fields: Vec<_> = batch .schema() .fields .iter() .map(|f| f.as_ref().clone().with_nullable(true)) .collect(); let batch_schema = Arc::new(Schema::new(batch_schema_fields)); - schema.contains(&batch_schema) + schema.fields.contains(&batch_schema.fields) }) { Ok(Self { schema, @@ -605,7 +605,7 @@ fn hash_array_data(array_data: &ArrayData, state: &mut H) { // For nested types (list, struct), recursively hash child arrays let child_data = array_data.child_data(); for child in child_data { - hash_array_data(&child, state); + hash_array_data(child, state); } } diff --git a/vegafusion-common/src/error.rs b/vegafusion-common/src/error.rs index 228759c6b..2101e331b 100644 --- a/vegafusion-common/src/error.rs +++ b/vegafusion-common/src/error.rs @@ -19,6 +19,9 @@ use base64::DecodeError as Base64DecodeError; #[cfg(feature = "object_store")] use object_store::{path::Error as ObjectStorePathError, Error as ObjectStoreError}; +#[cfg(feature = "url")] +use url::ParseError as UrlParseError; + pub type Result = result::Result; #[derive(Clone, Debug, Default)] @@ -97,6 +100,10 @@ pub enum VegaFusionError { #[cfg(feature = "object_store")] #[error("ObjectStoreError Error: {0}\n{1}")] ObjectStoreError(ObjectStoreError, ErrorContext), + + #[cfg(feature = "url")] + #[error("url::ParseError Error: {0}\n{1}")] + UrlParseError(UrlParseError, ErrorContext), } impl VegaFusionError { @@ -187,6 +194,11 @@ impl VegaFusionError { context.contexts.push(context_fn().into()); VegaFusionError::ObjectStoreError(err, context) } + #[cfg(feature = "url")] + UrlParseError(err, mut context) => { + context.contexts.push(context_fn().into()); + VegaFusionError::UrlParseError(err, context) + } } } @@ -280,6 +292,8 @@ impl VegaFusionError { ObjectStoreError(err, context) => { VegaFusionError::ExternalError(err.to_string(), context.clone()) } + #[cfg(feature = "url")] + UrlParseError(err, context) => VegaFusionError::UrlParseError(*err, context.clone()), } } } @@ -412,6 +426,12 @@ impl From for VegaFusionError { } } +#[cfg(feature = "url")] +impl From for VegaFusionError { + fn from(err: UrlParseError) -> Self { + Self::UrlParseError(err, Default::default()) + } +} pub trait ToExternalError { fn external>(self, context: S) -> Result; } diff --git a/vegafusion-core/Cargo.toml b/vegafusion-core/Cargo.toml index e6913237d..8da08080a 100644 --- a/vegafusion-core/Cargo.toml +++ b/vegafusion-core/Cargo.toml @@ -56,10 +56,6 @@ version = "1.6.9" [dependencies.datafusion-common] workspace = true -[dependencies.vegafusion-dataframe] -path = "../vegafusion-dataframe" -version = "1.6.9" - [dependencies.pyo3] workspace = true optional = true diff --git a/vegafusion-core/src/data/dataset.rs b/vegafusion-core/src/data/dataset.rs index 02f0f2876..701549ae3 100644 --- a/vegafusion-core/src/data/dataset.rs +++ b/vegafusion-core/src/data/dataset.rs @@ -1,21 +1,17 @@ use crate::error::Result; use std::collections::hash_map::DefaultHasher; use std::hash::{Hash, Hasher}; -use std::sync::Arc; use vegafusion_common::data::table::VegaFusionTable; -use vegafusion_dataframe::dataframe::DataFrame; #[derive(Clone)] pub enum VegaFusionDataset { Table { table: VegaFusionTable, hash: u64 }, - DataFrame(Arc), } impl VegaFusionDataset { pub fn fingerprint(&self) -> String { match self { VegaFusionDataset::Table { hash, .. } => hash.to_string(), - VegaFusionDataset::DataFrame(df) => df.fingerprint().to_string(), } } diff --git a/vegafusion-core/src/runtime/grpc_runtime.rs b/vegafusion-core/src/runtime/grpc_runtime.rs index 74a7ecc03..fc4a7eaf3 100644 --- a/vegafusion-core/src/runtime/grpc_runtime.rs +++ b/vegafusion-core/src/runtime/grpc_runtime.rs @@ -48,7 +48,7 @@ impl VegaFusionRuntimeTrait for GrpcVegaFusionRuntime { indices: &[NodeValueIndex], inline_datasets: &HashMap, ) -> Result> { - let inline_datasets = encode_inline_datasets(&inline_datasets)?; + let inline_datasets = encode_inline_datasets(inline_datasets)?; let request = QueryRequest { request: Some(query_request::Request::TaskGraphValues( TaskGraphValueRequest { @@ -82,7 +82,7 @@ impl VegaFusionRuntimeTrait for GrpcVegaFusionRuntime { inline_datasets: &HashMap, options: &PreTransformSpecOpts, ) -> Result<(ChartSpec, Vec)> { - let inline_datasets = encode_inline_datasets(&inline_datasets)?; + let inline_datasets = encode_inline_datasets(inline_datasets)?; let request = PreTransformSpecRequest { spec: serde_json::to_string(spec)?, @@ -115,7 +115,7 @@ impl VegaFusionRuntimeTrait for GrpcVegaFusionRuntime { Vec, Vec, )> { - let inline_datasets = encode_inline_datasets(&inline_datasets)?; + let inline_datasets = encode_inline_datasets(inline_datasets)?; let request = PreTransformExtractRequest { spec: serde_json::to_string(spec)?, @@ -157,7 +157,7 @@ impl VegaFusionRuntimeTrait for GrpcVegaFusionRuntime { inline_datasets: &HashMap, options: &PreTransformValuesOpts, ) -> Result<(Vec, Vec)> { - let inline_datasets = encode_inline_datasets(&inline_datasets)?; + let inline_datasets = encode_inline_datasets(inline_datasets)?; let request = PreTransformValuesRequest { spec: serde_json::to_string(spec)?, diff --git a/vegafusion-core/src/runtime/runtime.rs b/vegafusion-core/src/runtime/runtime.rs index 752abc55e..120349f10 100644 --- a/vegafusion-core/src/runtime/runtime.rs +++ b/vegafusion-core/src/runtime/runtime.rs @@ -133,7 +133,7 @@ pub trait VegaFusionRuntimeTrait: Send + Sync { ) .await?; - apply_pre_transform_datasets(input_spec, &plan, init, options.row_limit.map(|l| l as u32)) + apply_pre_transform_datasets(input_spec, &plan, init, options.row_limit) } async fn pre_transform_extract( @@ -398,13 +398,9 @@ pub fn encode_inline_datasets( datasets: &HashMap, ) -> Result> { datasets - .into_iter() + .iter() .map(|(name, dataset)| { - let VegaFusionDataset::Table { table, hash: _ } = dataset else { - return Err(VegaFusionError::internal( - "grpc runtime suppors Arrow tables only, not general Datasets".to_string(), - )); - }; + let VegaFusionDataset::Table { table, hash: _ } = dataset; Ok(InlineDataset { name: name.clone(), table: table.to_ipc_bytes()?, diff --git a/vegafusion-dataframe/Cargo.toml b/vegafusion-dataframe/Cargo.toml deleted file mode 100644 index ca133af78..000000000 --- a/vegafusion-dataframe/Cargo.toml +++ /dev/null @@ -1,33 +0,0 @@ -[package] -name = "vegafusion-dataframe" -license = "BSD-3-Clause" -version = "1.6.9" -edition = "2021" -description = "VegaFusion's DataFrame and Connection traits" - - -[dependencies.async-trait] -workspace = true - -[dependencies.vegafusion-common] -path = "../vegafusion-common" -version = "1.6.9" - -[dependencies.sqlparser] -workspace = true - -[dependencies.datafusion-common] -workspace = true - -[dependencies.datafusion-expr] -workspace = true - -[dependencies.datafusion-functions-window] -workspace = true - -[dependencies.arrow] -workspace = true - -[dependencies.pyo3] -workspace = true -optional = true diff --git a/vegafusion-dataframe/README.md b/vegafusion-dataframe/README.md deleted file mode 100644 index 52875eecb..000000000 --- a/vegafusion-dataframe/README.md +++ /dev/null @@ -1,2 +0,0 @@ -## vegafusion-dataframe -This crate contains the `Connection` and `DataFrame` traits. Implementations of these traits are provided in other crates (e.g `vegafusion-sql`) \ No newline at end of file diff --git a/vegafusion-dataframe/src/connection.rs b/vegafusion-dataframe/src/connection.rs deleted file mode 100644 index 328cb3471..000000000 --- a/vegafusion-dataframe/src/connection.rs +++ /dev/null @@ -1,51 +0,0 @@ -use crate::csv::CsvReadOptions; -use crate::dataframe::DataFrame; -use arrow::datatypes::Schema; -use async_trait::async_trait; -use std::collections::HashMap; -use std::sync::Arc; -use vegafusion_common::data::table::VegaFusionTable; -use vegafusion_common::error::{Result, VegaFusionError}; - -#[async_trait] -pub trait Connection: Send + Sync + 'static { - fn id(&self) -> String; - - /// Name and schema of the tables that are provided by this connection - async fn tables(&self) -> Result>; - - /// Scan a named table into a DataFrame - async fn scan_table(&self, _name: &str) -> Result> { - Err(VegaFusionError::sql_not_supported( - "scan_table not supported by connection", - )) - } - - /// Scan a VegaFusionTable into a DataFrame - async fn scan_arrow(&self, _table: VegaFusionTable) -> Result> { - Err(VegaFusionError::sql_not_supported( - "scan_arrow not supported by connection", - )) - } - - /// Scan a CSV file into a DataFrame - async fn scan_csv(&self, _url: &str, _opts: CsvReadOptions) -> Result> { - Err(VegaFusionError::sql_not_supported( - "scan_csv not supported by connection", - )) - } - - /// Scan an Arrow file (aka Feather file) into a DataFrame - async fn scan_arrow_file(&self, _url: &str) -> Result> { - Err(VegaFusionError::sql_not_supported( - "scan_arrow_file not supported by connection", - )) - } - - /// Scan an Parquet file into a DataFrame - async fn scan_parquet(&self, _url: &str) -> Result> { - Err(VegaFusionError::sql_not_supported( - "scan_parquet not supported by connection", - )) - } -} diff --git a/vegafusion-dataframe/src/csv.rs b/vegafusion-dataframe/src/csv.rs deleted file mode 100644 index bb95b1e4d..000000000 --- a/vegafusion-dataframe/src/csv.rs +++ /dev/null @@ -1,31 +0,0 @@ -use arrow::datatypes::Schema; - -/// Options that control the reading of CSV files. -/// Simplification of CsvReadOptions from DataFusion -#[derive(Clone, Debug)] -pub struct CsvReadOptions { - /// Does the CSV file have a header? - /// - /// If schema inference is run on a file with no headers, default column names - /// are created. - pub has_header: bool, - /// An optional column delimiter. Defaults to `b','`. - pub delimiter: u8, - /// An optional schema representing the CSV files. If None, CSV reader will try to infer it - /// based on data in file. - pub schema: Option, - /// File extension; only files with this extension are selected for data input. - /// Defaults to `FileType::CSV.get_ext().as_str()`. - pub file_extension: String, -} - -impl Default for CsvReadOptions { - fn default() -> Self { - Self { - has_header: true, - delimiter: b',', - schema: None, - file_extension: ".csv".to_string(), - } - } -} diff --git a/vegafusion-dataframe/src/dataframe.rs b/vegafusion-dataframe/src/dataframe.rs deleted file mode 100644 index 1c9544c1e..000000000 --- a/vegafusion-dataframe/src/dataframe.rs +++ /dev/null @@ -1,147 +0,0 @@ -use crate::connection::Connection; -use arrow::compute::concat_batches; -use arrow::datatypes::{Schema, SchemaRef}; -use arrow::record_batch::RecordBatch; -use async_trait::async_trait; -use datafusion_common::{DFSchema, ScalarValue}; -use datafusion_expr::expr::WildcardOptions; -use datafusion_expr::{Expr, SortExpr}; -use datafusion_functions_window::row_number::row_number; -use std::any::Any; -use std::fmt::{Display, Formatter}; -use std::sync::Arc; -use vegafusion_common::data::table::VegaFusionTable; -use vegafusion_common::error::{Result, ResultWithContext, VegaFusionError}; - -#[async_trait] -pub trait DataFrame: Send + Sync + 'static { - fn as_any(&self) -> &dyn Any; - - fn schema(&self) -> Schema; - - fn schema_df(&self) -> Result { - Ok(DFSchema::try_from(self.schema())?) - } - - fn connection(&self) -> Arc; - - fn fingerprint(&self) -> u64; - - async fn collect(&self) -> Result; - - async fn collect_flat(&self) -> Result { - let mut arrow_schema = Arc::new(self.schema()) as SchemaRef; - let table = self.collect().await?; - if let Some(batch) = table.batches.first() { - arrow_schema = batch.schema() - } - concat_batches(&arrow_schema, table.batches.as_slice()) - .with_context(|| String::from("Failed to concatenate RecordBatches")) - } - - async fn sort(&self, _exprs: Vec, _limit: Option) -> Result> { - Err(VegaFusionError::sql_not_supported("sort not supported")) - } - - async fn select(&self, _exprs: Vec) -> Result> { - Err(VegaFusionError::sql_not_supported("select not supported")) - } - - async fn aggregate( - &self, - _group_exprs: Vec, - _aggr_exprs: Vec, - ) -> Result> { - Err(VegaFusionError::sql_not_supported( - "aggregate not supported", - )) - } - - async fn joinaggregate( - &self, - _group_expr: Vec, - _aggr_expr: Vec, - ) -> Result> { - Err(VegaFusionError::sql_not_supported( - "joinaggregate not supported", - )) - } - - async fn filter(&self, _predicate: Expr) -> Result> { - Err(VegaFusionError::sql_not_supported("filter not supported")) - } - - async fn limit(&self, _limit: i32) -> Result> { - Err(VegaFusionError::sql_not_supported("limit not supported")) - } - - async fn fold( - &self, - _fields: &[String], - _value_col: &str, - _key_col: &str, - _order_field: Option<&str>, - ) -> Result> { - Err(VegaFusionError::sql_not_supported("fold not supported")) - } - - async fn stack( - &self, - _field: &str, - _orderby: Vec, - _groupby: &[String], - _start_field: &str, - _stop_field: &str, - _mode: StackMode, - ) -> Result> { - Err(VegaFusionError::sql_not_supported("stack not supported")) - } - - async fn impute( - &self, - _field: &str, - _value: ScalarValue, - _key: &str, - _groupby: &[String], - _order_field: Option<&str>, - ) -> Result> { - Err(VegaFusionError::sql_not_supported("impute not supported")) - } - - async fn with_index(&self, index_name: &str) -> Result> { - if self.schema().column_with_name(index_name).is_some() { - // Column is already present, don't overwrite - self.select(vec![Expr::Wildcard { - qualifier: None, - options: WildcardOptions::default(), - }]) - .await - } else { - let selections = vec![ - row_number().alias(index_name), - Expr::Wildcard { - qualifier: None, - options: WildcardOptions::default(), - }, - ]; - self.select(selections).await - } - } -} - -#[derive(Debug, Clone)] -pub enum StackMode { - Zero, - Center, - Normalize, -} - -impl Display for StackMode { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - match self { - StackMode::Zero => write!(f, "zero"), - StackMode::Center => write!(f, "center"), - StackMode::Normalize => write!(f, "normalize"), - } - } -} diff --git a/vegafusion-dataframe/src/lib.rs b/vegafusion-dataframe/src/lib.rs deleted file mode 100644 index 35bdbdd73..000000000 --- a/vegafusion-dataframe/src/lib.rs +++ /dev/null @@ -1,11 +0,0 @@ -pub mod connection; -pub mod csv; -pub mod dataframe; - -#[cfg(test)] -mod tests { - #[test] - fn it_works() { - assert_eq!(2 + 2, 4); - } -} diff --git a/vegafusion-datafusion-udfs/Cargo.toml b/vegafusion-datafusion-udfs/Cargo.toml deleted file mode 100644 index dbcd3c841..000000000 --- a/vegafusion-datafusion-udfs/Cargo.toml +++ /dev/null @@ -1,30 +0,0 @@ -[package] -name = "vegafusion-datafusion-udfs" -license = "BSD-3-Clause" -version = "1.6.9" -edition = "2021" -description = "Custom DataFusion UDFs used by VegaFusion" - -[dependencies] -ordered-float = "3.6.0" -regex = "^1.5.5" - -[dependencies.lazy_static] -workspace = true - -[dependencies.chrono] -workspace = true - -[dependencies.chrono-tz] -workspace = true - -[dependencies.vegafusion-common] -path = "../vegafusion-common" -version = "1.6.9" - -[dependencies.vegafusion-core] -path = "../vegafusion-core" -version = "1.6.9" - -[dependencies.datafusion-functions] -workspace = true diff --git a/vegafusion-datafusion-udfs/README.md b/vegafusion-datafusion-udfs/README.md deleted file mode 100644 index fb9d1462e..000000000 --- a/vegafusion-datafusion-udfs/README.md +++ /dev/null @@ -1,4 +0,0 @@ -## vegafusion-datafusion-udfs -This crate contains the definitions of the DataFusion UDFs that are used to implement select Vega expression functions and transforms. These UDFs are used in two places. - - The `DataFusionConnection` provided by `vegafusion-sql` adds these UDFs to its `SessionContext` so that they are available for use in SQL querires. - - The `vegafusion-runtime` crate uses these UDFs for the evaluation of signal expressions and for simplifying expressions passed to the `filter` and `formula` transforms. Note: Even when a non-DataFusion Connection is used, DataFusion is still used for signal evaluation and expression simplification. diff --git a/vegafusion-datafusion-udfs/src/lib.rs b/vegafusion-datafusion-udfs/src/lib.rs deleted file mode 100644 index 40a0d416c..000000000 --- a/vegafusion-datafusion-udfs/src/lib.rs +++ /dev/null @@ -1,13 +0,0 @@ -#[macro_use] -extern crate lazy_static; - -pub mod udafs; -pub mod udfs; - -#[cfg(test)] -mod tests { - #[test] - fn it_works() { - assert_eq!(2 + 2, 4); - } -} diff --git a/vegafusion-datafusion-udfs/src/udfs/array/indexof.rs b/vegafusion-datafusion-udfs/src/udfs/array/indexof.rs deleted file mode 100644 index 4e8e6cbf5..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/array/indexof.rs +++ /dev/null @@ -1,163 +0,0 @@ -use ordered_float::NotNan; -use std::any::Any; -use std::collections::HashMap; -use std::sync::Arc; -use vegafusion_common::arrow::array::{ - new_null_array, Array, ArrayRef, Float64Array, Int32Array, StringArray, -}; -use vegafusion_common::arrow::compute::cast; -use vegafusion_common::arrow::datatypes::DataType; -use vegafusion_common::data::scalar::{ArrayRefHelpers, ScalarValueHelpers}; -use vegafusion_common::datafusion_common::{DataFusionError, ScalarValue}; -use vegafusion_common::datafusion_expr::{ColumnarValue, ScalarUDFImpl, Signature, Volatility}; -use vegafusion_common::datatypes::{is_numeric_datatype, is_string_datatype}; - -/// `indexof(array, value)` -/// -/// Returns the first index of value in the input array. -/// -/// See https://vega.github.io/vega/docs/expressions/#indexof -/// and https://vega.github.io/vega/docs/expressions/#string_indexof -#[derive(Debug, Clone)] -pub struct IndexOfUDF { - signature: Signature, -} - -impl Default for IndexOfUDF { - fn default() -> Self { - Self::new() - } -} - -impl IndexOfUDF { - pub fn new() -> Self { - let signature = Signature::any(2, Volatility::Immutable); - Self { signature } - } -} - -impl ScalarUDFImpl for IndexOfUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - "indexof" - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type(&self, _arg_types: &[DataType]) -> Result { - Ok(DataType::Int32) - } - - fn invoke(&self, args: &[ColumnarValue]) -> Result { - // Signature ensures there is a single argument - let (array, array_dtype) = match &args[0] { - ColumnarValue::Scalar(ScalarValue::List(array)) => { - let scalar_array = array.value(0).to_scalar_vec()?; - (scalar_array, array.value(0).data_type().clone()) - } - _ => { - return Err(DataFusionError::Internal( - "index of array argument may not be a ColumnarValue::Array".to_string(), - )) - } - }; - - let arg = &args[1]; - Ok(match arg { - ColumnarValue::Scalar(value) => { - let value_dtype = value.data_type(); - if is_numeric_datatype(&value_dtype) && is_numeric_datatype(&array_dtype) { - let indices = build_notnan_index_map(array.as_slice()); - if let Ok(value) = value.to_f64() { - match NotNan::new(value) { - Ok(v) => { - let index = indices.get(&v).cloned().unwrap_or(-1); - ColumnarValue::Scalar(ScalarValue::Int32(Some(index))) - } - Err(_) => { - // nan is always not found - ColumnarValue::Scalar(ScalarValue::Int32(Some(-1))) - } - } - } else { - // non numeric (e.g. NULL) always not found - ColumnarValue::Scalar(ScalarValue::Int32(Some(-1))) - } - } else if is_string_datatype(&value_dtype) && is_string_datatype(&array_dtype) { - let indices = array - .into_iter() - .enumerate() - .map(|(i, v)| (v.to_scalar_string().unwrap(), i as i32)) - .collect::>(); - - let value_string = value.to_scalar_string().unwrap(); - let index = indices.get(&value_string).cloned().unwrap_or(-1); - ColumnarValue::Scalar(ScalarValue::Int32(Some(index))) - } else { - // null - ColumnarValue::Scalar(ScalarValue::try_from(&DataType::Int32).unwrap()) - } - } - ColumnarValue::Array(value) => { - let value_dtype = value.data_type().clone(); - if is_numeric_datatype(&value_dtype) && is_numeric_datatype(&array_dtype) { - let indices = build_notnan_index_map(array.as_slice()); - let value_f64 = cast(value, &DataType::Float64)?; - let value_f64 = value_f64.as_any().downcast_ref::().unwrap(); - - let mut indices_builder = Int32Array::builder(value_f64.len()); - for v in value_f64 { - indices_builder.append_value(match v { - Some(v) => match NotNan::new(v) { - Ok(v) => indices.get(&v).cloned().unwrap_or(-1), - Err(_) => -1, - }, - None => -1, - }) - } - ColumnarValue::Array(Arc::new(indices_builder.finish()) as ArrayRef) - } else if is_string_datatype(&value_dtype) && is_string_datatype(&array_dtype) { - let indices = array - .into_iter() - .enumerate() - .map(|(i, v)| (v.to_scalar_string().unwrap(), i as i32)) - .collect::>(); - - let value = value.as_any().downcast_ref::().unwrap(); - - let mut indices_builder = Int32Array::builder(value.len()); - for s in value { - indices_builder.append_value(match s { - Some(s) => indices.get(s).cloned().unwrap_or(-1), - None => -1, - }) - } - ColumnarValue::Array(Arc::new(indices_builder.finish()) as ArrayRef) - } else { - // Array of i32 nulls - ColumnarValue::Array(new_null_array(&DataType::Int32, array.len())) - } - } - }) - } -} - -fn build_notnan_index_map(array: &[ScalarValue]) -> HashMap, i32> { - array - .iter() - .enumerate() - .filter_map(|(i, v)| { - if let Ok(v) = v.to_f64() { - if let Ok(v) = NotNan::new(v) { - return Some((v, i as i32)); - } - } - None - }) - .collect::>() -} diff --git a/vegafusion-datafusion-udfs/src/udfs/array/mod.rs b/vegafusion-datafusion-udfs/src/udfs/array/mod.rs deleted file mode 100644 index 72e68adb0..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/array/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod indexof; -pub mod span; diff --git a/vegafusion-datafusion-udfs/src/udfs/array/span.rs b/vegafusion-datafusion-udfs/src/udfs/array/span.rs deleted file mode 100644 index 5a6760ea2..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/array/span.rs +++ /dev/null @@ -1,110 +0,0 @@ -use std::any::Any; -use std::sync::Arc; -use vegafusion_common::arrow::array::Array; -use vegafusion_common::arrow::array::ListArray; -use vegafusion_common::arrow::datatypes::{DataType, Field}; -use vegafusion_common::data::scalar::ScalarValueHelpers; -use vegafusion_common::datafusion_common::{DataFusionError, ScalarValue}; -use vegafusion_common::datafusion_expr::{ColumnarValue, ScalarUDFImpl, Signature, Volatility}; - -/// `span(array)` -/// -/// Returns the span of array: the difference between the last and first elements, -/// or array[array.length-1] - array[0]. -/// -/// See https://vega.github.io/vega/docs/expressions/#span -#[derive(Debug, Clone)] -pub struct SpanUDF { - signature: Signature, -} - -impl Default for SpanUDF { - fn default() -> Self { - Self::new() - } -} - -impl SpanUDF { - pub fn new() -> Self { - let signature = Signature::uniform( - 1, - vec![ - DataType::Float64, // For null - DataType::Null, // For null - DataType::List(Arc::new(Field::new("item", DataType::Float64, true))), - ], - Volatility::Immutable, - ); - Self { signature } - } -} - -impl ScalarUDFImpl for SpanUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - "span" - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type(&self, _arg_types: &[DataType]) -> Result { - Ok(DataType::Float64) - } - - fn invoke(&self, args: &[ColumnarValue]) -> Result { - // Signature ensures there is a single argument - let arg = &args[0]; - Ok(match arg { - ColumnarValue::Scalar(value) => { - match value { - ScalarValue::Null => ColumnarValue::Scalar(ScalarValue::from(0.0)), - ScalarValue::Float64(_) => { - // Span of scalar (including null) is 0 - ColumnarValue::Scalar(ScalarValue::from(0.0)) - } - ScalarValue::List(arr) => { - // Unwrap single element ListArray - let arr = arr.as_any().downcast_ref::().unwrap(); - let arr = arr.value(0); - if arr.is_empty() { - ColumnarValue::Scalar(ScalarValue::from(0.0)) - } else { - match arr.data_type() { - DataType::Float64 => { - let first = ScalarValue::try_from_array(&arr, 0) - .unwrap() - .to_f64() - .unwrap(); - let last = ScalarValue::try_from_array(&arr, arr.len() - 1) - .unwrap() - .to_f64() - .unwrap(); - ColumnarValue::Scalar(ScalarValue::from(last - first)) - } - _ => { - return Err(DataFusionError::Internal(format!( - "Unexpected element type for span function: {}", - arr.data_type() - ))) - } - } - } - } - _ => { - return Err(DataFusionError::Internal(format!( - "Unexpected type passed to span: {value}" - ))) - } - } - } - ColumnarValue::Array(_array) => { - todo!("Span on column not yet implemented") - } - }) - } -} diff --git a/vegafusion-datafusion-udfs/src/udfs/datetime/date_add_tz.rs b/vegafusion-datafusion-udfs/src/udfs/datetime/date_add_tz.rs deleted file mode 100644 index 971f29705..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/datetime/date_add_tz.rs +++ /dev/null @@ -1,86 +0,0 @@ -use std::any::Any; -use vegafusion_common::datafusion_common::DataFusionError; -use vegafusion_common::datafusion_expr::{ScalarUDFImpl, TypeSignature}; -use vegafusion_common::{ - arrow::datatypes::{DataType, TimeUnit}, - datafusion_expr::{ColumnarValue, ScalarUDF, Signature, Volatility}, -}; - -#[derive(Debug, Clone)] -pub struct DateAddTzUDF { - signature: Signature, -} - -impl Default for DateAddTzUDF { - fn default() -> Self { - Self::new() - } -} - -impl DateAddTzUDF { - pub fn new() -> Self { - let signature = Signature::one_of( - vec![ - TypeSignature::Exact(vec![ - DataType::Utf8, - DataType::Int32, - DataType::Date32, - DataType::Utf8, - ]), - TypeSignature::Exact(vec![ - DataType::Utf8, - DataType::Int32, - DataType::Date64, - DataType::Utf8, - ]), - TypeSignature::Exact(vec![ - DataType::Utf8, - DataType::Int32, - DataType::Timestamp(TimeUnit::Millisecond, None), - DataType::Utf8, - ]), - TypeSignature::Exact(vec![ - DataType::Utf8, - DataType::Int32, - DataType::Timestamp(TimeUnit::Nanosecond, None), - DataType::Utf8, - ]), - ], - Volatility::Immutable, - ); - Self { signature } - } -} - -impl ScalarUDFImpl for DateAddTzUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - "date_add_tz" - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type(&self, _arg_types: &[DataType]) -> Result { - Ok(DataType::Timestamp(TimeUnit::Millisecond, None)) - } - - fn invoke( - &self, - _args: &[ColumnarValue], - ) -> vegafusion_common::datafusion_common::Result { - unimplemented!("date_add_tz function is not implemented by DataFusion") - } -} - -fn make_date_add_tz_udf() -> ScalarUDF { - ScalarUDF::from(DateAddTzUDF::new()) -} - -lazy_static! { - pub static ref DATE_ADD_TZ_UDF: ScalarUDF = make_date_add_tz_udf(); -} diff --git a/vegafusion-datafusion-udfs/src/udfs/datetime/date_part_tz.rs b/vegafusion-datafusion-udfs/src/udfs/datetime/date_part_tz.rs deleted file mode 100644 index b703a79e9..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/datetime/date_part_tz.rs +++ /dev/null @@ -1,112 +0,0 @@ -use crate::udfs::datetime::from_utc_timestamp::from_utc_timestamp; -use crate::udfs::datetime::to_utc_timestamp::to_timestamp_ms; -use datafusion_functions::datetime::date_part; -use std::any::Any; -use std::str::FromStr; -use vegafusion_common::datafusion_expr::{ScalarUDFImpl, TypeSignature}; -use vegafusion_common::{ - arrow::datatypes::{DataType, TimeUnit}, - datafusion_common::DataFusionError, - datafusion_expr::{ColumnarValue, ScalarUDF, Signature, Volatility}, -}; - -#[derive(Debug, Clone)] -pub struct DatePartTzUDF { - signature: Signature, -} - -impl Default for DatePartTzUDF { - fn default() -> Self { - Self::new() - } -} - -impl DatePartTzUDF { - pub fn new() -> Self { - let signature = Signature::one_of( - vec![ - TypeSignature::Exact(vec![ - DataType::Utf8, // part - DataType::Date32, - DataType::Utf8, // timezone - ]), - TypeSignature::Exact(vec![ - DataType::Utf8, // part - DataType::Date64, - DataType::Utf8, // timezone - ]), - TypeSignature::Exact(vec![ - DataType::Utf8, // part - DataType::Timestamp(TimeUnit::Millisecond, None), - DataType::Utf8, // timezone - ]), - TypeSignature::Exact(vec![ - DataType::Utf8, // part - DataType::Timestamp(TimeUnit::Nanosecond, None), - DataType::Utf8, // timezone - ]), - ], - Volatility::Immutable, - ); - Self { signature } - } -} - -impl ScalarUDFImpl for DatePartTzUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - "date_part_tz" - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type(&self, _arg_types: &[DataType]) -> Result { - Ok(DataType::Float64) - } - - fn invoke(&self, args: &[ColumnarValue]) -> Result { - // [1] data array - let timestamp_array = match &args[1] { - ColumnarValue::Array(array) => array.clone(), - ColumnarValue::Scalar(scalar) => scalar.to_array()?, - }; - - let timestamp_array = to_timestamp_ms(×tamp_array)?; - - // [2] timezone string - let tz_str = if let ColumnarValue::Scalar(default_input_tz) = &args[2] { - default_input_tz.to_string() - } else { - return Err(DataFusionError::Internal( - "Expected default_input_tz to be a scalar".to_string(), - )); - }; - - // Convert timestamp to desired time zone - let timestamp_in_tz = if tz_str == "UTC" { - timestamp_array - } else { - let tz = chrono_tz::Tz::from_str(&tz_str).map_err(|_err| { - DataFusionError::Internal(format!("Failed to parse {tz_str} as a timezone")) - })?; - from_utc_timestamp(timestamp_array, tz)? - }; - let timestamp_in_tz = ColumnarValue::Array(timestamp_in_tz); - - // Use DataFusion's built-in date_part implementation - let udf = date_part(); - udf.invoke(&[ - args[0].clone(), // Part - timestamp_in_tz, // Timestamp converted to timezone - ]) - } -} - -lazy_static! { - pub static ref DATE_PART_TZ_UDF: ScalarUDF = ScalarUDF::from(DatePartTzUDF::new()); -} diff --git a/vegafusion-datafusion-udfs/src/udfs/datetime/date_to_utc_timestamp.rs b/vegafusion-datafusion-udfs/src/udfs/datetime/date_to_utc_timestamp.rs deleted file mode 100644 index e08df1592..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/datetime/date_to_utc_timestamp.rs +++ /dev/null @@ -1,108 +0,0 @@ -use chrono::{DateTime, TimeZone}; -use std::any::Any; -use std::str::FromStr; -use std::sync::Arc; -use vegafusion_common::arrow::compute::try_unary; -use vegafusion_common::arrow::error::ArrowError; -use vegafusion_common::datafusion_expr::ScalarUDFImpl; -use vegafusion_common::{ - arrow::{ - array::{ArrayRef, Date32Array, TimestampMillisecondArray}, - datatypes::{DataType, TimeUnit}, - }, - datafusion_common::{DataFusionError, ScalarValue}, - datafusion_expr::{ColumnarValue, ScalarUDF, Signature, Volatility}, -}; - -#[derive(Debug, Clone)] -pub struct DateToUtcTimestampUDF { - signature: Signature, -} - -impl Default for DateToUtcTimestampUDF { - fn default() -> Self { - Self::new() - } -} - -impl DateToUtcTimestampUDF { - pub fn new() -> Self { - let signature = Signature::exact( - vec![DataType::Date32, DataType::Utf8], - Volatility::Immutable, - ); - Self { signature } - } -} - -impl ScalarUDFImpl for DateToUtcTimestampUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - "date_to_utc_timestamp" - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type(&self, _arg_types: &[DataType]) -> Result { - Ok(DataType::Timestamp(TimeUnit::Millisecond, None)) - } - - fn invoke(&self, args: &[ColumnarValue]) -> Result { - // [0] data array - let date_array = match &args[0] { - ColumnarValue::Array(array) => array.clone(), - ColumnarValue::Scalar(scalar) => scalar.to_array()?, - }; - - // [1] timezone string - let tz_str = if let ColumnarValue::Scalar(default_input_tz) = &args[1] { - default_input_tz.to_string() - } else { - return Err(DataFusionError::Internal( - "Expected default_input_tz to be a scalar".to_string(), - )); - }; - let tz = chrono_tz::Tz::from_str(&tz_str).map_err(|_err| { - DataFusionError::Internal(format!("Failed to parse {tz_str} as a timezone")) - })?; - - let s_per_day = 60 * 60 * 24_i64; - let date_array = date_array.as_any().downcast_ref::().unwrap(); - - let timestamp_array: TimestampMillisecondArray = try_unary(date_array, |v| { - // Build naive datetime for time - let seconds = (v as i64) * s_per_day; - let nanoseconds = 0_u32; - let naive_local_datetime = DateTime::from_timestamp(seconds, nanoseconds) - .expect("invalid or out-of-range datetime") - .naive_utc(); - - // Compute UTC date time when naive date time is interpreted in the provided timezone - let local_datetime = tz - .from_local_datetime(&naive_local_datetime) - .earliest() - .ok_or(ArrowError::ComputeError("date out of bounds".to_string()))?; - - // Get timestamp millis (in UTC) - Ok(local_datetime.timestamp_millis()) - })?; - let timestamp_array = Arc::new(timestamp_array) as ArrayRef; - - // maybe back to scalar - if timestamp_array.len() != 1 { - Ok(ColumnarValue::Array(timestamp_array)) - } else { - ScalarValue::try_from_array(×tamp_array, 0).map(ColumnarValue::Scalar) - } - } -} - -lazy_static! { - pub static ref DATE_TO_UTC_TIMESTAMP_UDF: ScalarUDF = - ScalarUDF::from(DateToUtcTimestampUDF::new()); -} diff --git a/vegafusion-datafusion-udfs/src/udfs/datetime/date_trunc_tz.rs b/vegafusion-datafusion-udfs/src/udfs/datetime/date_trunc_tz.rs deleted file mode 100644 index 6035210bb..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/datetime/date_trunc_tz.rs +++ /dev/null @@ -1,80 +0,0 @@ -use std::any::Any; -use vegafusion_common::datafusion_expr::{ScalarUDFImpl, TypeSignature}; -use vegafusion_common::{ - arrow::datatypes::{DataType, TimeUnit}, - datafusion_expr::{ColumnarValue, ScalarUDF, Signature, Volatility}, -}; - -#[derive(Debug, Clone)] -pub struct DateTruncTzUDF { - signature: Signature, -} - -impl Default for DateTruncTzUDF { - fn default() -> Self { - Self::new() - } -} - -impl DateTruncTzUDF { - pub fn new() -> Self { - let signature = Signature::one_of( - vec![ - TypeSignature::Exact(vec![ - DataType::Utf8, // part - DataType::Date32, - DataType::Utf8, // timezone - ]), - TypeSignature::Exact(vec![ - DataType::Utf8, // part - DataType::Date64, - DataType::Utf8, // timezone - ]), - TypeSignature::Exact(vec![ - DataType::Utf8, // part - DataType::Timestamp(TimeUnit::Millisecond, None), - DataType::Utf8, // timezone - ]), - TypeSignature::Exact(vec![ - DataType::Utf8, // part - DataType::Timestamp(TimeUnit::Nanosecond, None), - DataType::Utf8, // timezone - ]), - ], - Volatility::Immutable, - ); - Self { signature } - } -} - -impl ScalarUDFImpl for DateTruncTzUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - "date_trunc_tz" - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type( - &self, - _arg_types: &[DataType], - ) -> vegafusion_common::datafusion_common::Result { - Ok(DataType::Timestamp(TimeUnit::Millisecond, None)) - } - - fn invoke( - &self, - _args: &[ColumnarValue], - ) -> vegafusion_common::datafusion_common::Result { - unimplemented!("date_trunc_tz function is not implemented by DataFusion") - } -} - -lazy_static! { - pub static ref DATE_TRUNC_TZ_UDF: ScalarUDF = ScalarUDF::from(DateTruncTzUDF::new()); -} diff --git a/vegafusion-datafusion-udfs/src/udfs/datetime/epoch_to_utc_timestamp.rs b/vegafusion-datafusion-udfs/src/udfs/datetime/epoch_to_utc_timestamp.rs deleted file mode 100644 index 57fc3903c..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/datetime/epoch_to_utc_timestamp.rs +++ /dev/null @@ -1,77 +0,0 @@ -use std::any::Any; -use vegafusion_common::datafusion_expr::ScalarUDFImpl; -use vegafusion_common::{ - arrow::{ - compute::cast, - datatypes::{DataType, TimeUnit}, - }, - datafusion_common::ScalarValue, - datafusion_expr::{ColumnarValue, ScalarUDF, Signature, Volatility}, -}; - -#[derive(Debug, Clone)] -pub struct EpochMsToUtcTimestampUDF { - signature: Signature, -} - -impl Default for EpochMsToUtcTimestampUDF { - fn default() -> Self { - Self::new() - } -} - -impl EpochMsToUtcTimestampUDF { - pub fn new() -> Self { - let signature = Signature::exact(vec![DataType::Int64], Volatility::Immutable); - Self { signature } - } -} - -impl ScalarUDFImpl for EpochMsToUtcTimestampUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - "epoch_ms_to_utc_timestamp" - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type( - &self, - _arg_types: &[DataType], - ) -> vegafusion_common::datafusion_common::Result { - Ok(DataType::Timestamp(TimeUnit::Millisecond, None)) - } - - fn invoke( - &self, - args: &[ColumnarValue], - ) -> vegafusion_common::datafusion_common::Result { - // [0] data array - let timestamp_array = match &args[0] { - ColumnarValue::Array(array) => array.clone(), - ColumnarValue::Scalar(scalar) => scalar.to_array()?, - }; - - let timestamp_array = cast( - ×tamp_array, - &DataType::Timestamp(TimeUnit::Millisecond, None), - )?; - - // maybe back to scalar - if timestamp_array.len() != 1 { - Ok(ColumnarValue::Array(timestamp_array)) - } else { - ScalarValue::try_from_array(×tamp_array, 0).map(ColumnarValue::Scalar) - } - } -} - -lazy_static! { - pub static ref EPOCH_MS_TO_UTC_TIMESTAMP_UDF: ScalarUDF = - ScalarUDF::from(EpochMsToUtcTimestampUDF::new()); -} diff --git a/vegafusion-datafusion-udfs/src/udfs/datetime/format_timestamp.rs b/vegafusion-datafusion-udfs/src/udfs/datetime/format_timestamp.rs deleted file mode 100644 index f1d591c7f..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/datetime/format_timestamp.rs +++ /dev/null @@ -1,136 +0,0 @@ -use crate::udfs::datetime::to_utc_timestamp::to_timestamp_ms; -use chrono::DateTime; -use std::any::Any; -use std::sync::Arc; -use vegafusion_common::datafusion_expr::ScalarUDFImpl; -use vegafusion_common::{ - arrow::{ - array::{ArrayRef, StringArray, TimestampMillisecondArray}, - datatypes::{DataType, TimeUnit}, - }, - datafusion_common::{DataFusionError, ScalarValue}, - datafusion_expr::{ColumnarValue, ScalarUDF, Signature, TypeSignature, Volatility}, -}; - -#[derive(Debug, Clone)] -pub struct FormatTimestampUDF { - signature: Signature, -} - -impl Default for FormatTimestampUDF { - fn default() -> Self { - Self::new() - } -} - -impl FormatTimestampUDF { - pub fn new() -> Self { - let signature = Signature::one_of( - vec![ - TypeSignature::Exact(vec![DataType::Date32, DataType::Utf8]), - TypeSignature::Exact(vec![DataType::Date64, DataType::Utf8]), - TypeSignature::Exact(vec![ - DataType::Timestamp(TimeUnit::Millisecond, None), - DataType::Utf8, - ]), - TypeSignature::Exact(vec![ - DataType::Timestamp(TimeUnit::Nanosecond, None), - DataType::Utf8, - ]), - ], - Volatility::Immutable, - ); - Self { signature } - } -} - -impl ScalarUDFImpl for FormatTimestampUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - "format_timestamp" - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type( - &self, - _arg_types: &[DataType], - ) -> vegafusion_common::datafusion_common::Result { - Ok(DataType::Utf8) - } - - fn invoke( - &self, - args: &[ColumnarValue], - ) -> vegafusion_common::datafusion_common::Result { - // Argument order - // [0] data array - let data_array = match &args[0] { - ColumnarValue::Array(array) => array.clone(), - ColumnarValue::Scalar(scalar) => scalar.to_array()?, - }; - - // [1] time format string - let d3_format_str = if let ColumnarValue::Scalar(format_str) = &args[1] { - format_str.to_string() - } else { - return Err(DataFusionError::Internal( - "Expected format string to be a scalar".to_string(), - )); - }; - - // Convert D3 format specification into chrono format specification - let format_str = convert_d3_format_string(&d3_format_str); - - if matches!(data_array.data_type(), DataType::Null) { - return Ok(ColumnarValue::Array(data_array)); - } - - let data_array = to_timestamp_ms(&data_array)?; - - let utc_millis_array = data_array - .as_any() - .downcast_ref::() - .unwrap(); - - let formatted = Arc::new(StringArray::from_iter(utc_millis_array.iter().map( - |utc_millis| { - utc_millis.and_then(|utc_millis| { - // Load as UTC datetime - let utc_seconds = utc_millis / 1_000; - let utc_nanos = (utc_millis % 1_000 * 1_000_000) as u32; - let naive_datetime = - DateTime::from_timestamp(utc_seconds, utc_nanos)?.naive_utc(); - - // Format as string - let formatted = naive_datetime.format(&format_str); - Some(formatted.to_string()) - }) - }, - ))) as ArrayRef; - - // maybe back to scalar - if formatted.len() != 1 { - Ok(ColumnarValue::Array(formatted)) - } else { - ScalarValue::try_from_array(&formatted, 0).map(ColumnarValue::Scalar) - } - } -} - -fn convert_d3_format_string(d3_format_str: &str) -> String { - // %f is microseconds in D3 but nanoseconds in chrono, this is %6f in chrono - let format_str = d3_format_str.replace("%f", "%6f"); - - // %L is milliseconds in D3, this is %3f in chrono - format_str.replace("%L", "%3f") -} - -lazy_static! { - pub static ref FORMAT_TIMESTAMP_UDF: ScalarUDF = ScalarUDF::from(FormatTimestampUDF::new()); -} diff --git a/vegafusion-datafusion-udfs/src/udfs/datetime/from_utc_timestamp.rs b/vegafusion-datafusion-udfs/src/udfs/datetime/from_utc_timestamp.rs deleted file mode 100644 index ca154c10e..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/datetime/from_utc_timestamp.rs +++ /dev/null @@ -1,139 +0,0 @@ -use chrono::DateTime; -use chrono::TimeZone; -use chrono_tz::Tz; -use std::any::Any; -use std::str::FromStr; -use std::sync::Arc; -use vegafusion_common::arrow::array::Array; -use vegafusion_common::datafusion_expr::ScalarUDFImpl; -use vegafusion_common::{ - arrow::{ - array::{ArrayRef, TimestampMillisecondArray}, - datatypes::{DataType, TimeUnit}, - }, - datafusion_common::{DataFusionError, ScalarValue}, - datafusion_expr::{ColumnarValue, ScalarUDF, Signature, TypeSignature, Volatility}, -}; - -use crate::udfs::datetime::to_utc_timestamp::to_timestamp_ms; - -#[derive(Debug, Clone)] -pub struct FromUtcTimestampUDF { - signature: Signature, -} - -impl Default for FromUtcTimestampUDF { - fn default() -> Self { - Self::new() - } -} - -impl FromUtcTimestampUDF { - pub fn new() -> Self { - let signature = Signature::one_of( - vec![ - TypeSignature::Exact(vec![DataType::Date32, DataType::Utf8]), - TypeSignature::Exact(vec![DataType::Date64, DataType::Utf8]), - TypeSignature::Exact(vec![ - DataType::Timestamp(TimeUnit::Millisecond, None), - DataType::Utf8, - ]), - TypeSignature::Exact(vec![ - DataType::Timestamp(TimeUnit::Nanosecond, None), - DataType::Utf8, - ]), - ], - Volatility::Immutable, - ); - Self { signature } - } -} - -impl ScalarUDFImpl for FromUtcTimestampUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - "from_utc_timestamp" - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type( - &self, - _arg_types: &[DataType], - ) -> vegafusion_common::datafusion_common::Result { - Ok(DataType::Timestamp(TimeUnit::Millisecond, None)) - } - - fn invoke( - &self, - args: &[ColumnarValue], - ) -> vegafusion_common::datafusion_common::Result { - // [0] data array - let timestamp_array = match &args[0] { - ColumnarValue::Array(array) => array.clone(), - ColumnarValue::Scalar(scalar) => scalar.to_array()?, - }; - - // [1] timezone string - let tz_str = if let ColumnarValue::Scalar(default_input_tz) = &args[1] { - default_input_tz.to_string() - } else { - return Err(DataFusionError::Internal( - "Expected default_input_tz to be a scalar".to_string(), - )); - }; - let tz = chrono_tz::Tz::from_str(&tz_str).map_err(|_err| { - DataFusionError::Internal(format!("Failed to parse {tz_str} as a timezone")) - })?; - - let result_array = from_utc_timestamp(timestamp_array, tz)?; - - // maybe back to scalar - if result_array.len() != 1 { - Ok(ColumnarValue::Array(result_array)) - } else { - ScalarValue::try_from_array(&result_array, 0).map(ColumnarValue::Scalar) - } - } -} - -pub fn from_utc_timestamp(timestamp_array: ArrayRef, tz: Tz) -> Result { - let timestamp_array = to_timestamp_ms(×tamp_array)?; - let timestamp_array = timestamp_array - .as_any() - .downcast_ref::() - .unwrap(); - - let timestamp_array = TimestampMillisecondArray::from( - timestamp_array - .iter() - .map(|v| { - v.and_then(|v| { - // Build naive datetime for time - let seconds = v / 1000; - let milliseconds = v % 1000; - let nanoseconds = (milliseconds * 1_000_000) as u32; - let naive_utc_datetime = - DateTime::from_timestamp(seconds, nanoseconds)?.naive_utc(); - - // Create local datetime, interpreting the naive datetime as utc - let local_datetime = tz.from_utc_datetime(&naive_utc_datetime); - let naive_local_datetime = local_datetime.naive_local(); - - Some(naive_local_datetime.and_utc().timestamp_millis()) - }) - }) - .collect::>>(), - ); - - Ok(Arc::new(timestamp_array) as ArrayRef) -} - -lazy_static! { - pub static ref FROM_UTC_TIMESTAMP_UDF: ScalarUDF = ScalarUDF::from(FromUtcTimestampUDF::new()); -} diff --git a/vegafusion-datafusion-udfs/src/udfs/datetime/mod.rs b/vegafusion-datafusion-udfs/src/udfs/datetime/mod.rs deleted file mode 100644 index 3c1a3d757..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/datetime/mod.rs +++ /dev/null @@ -1,61 +0,0 @@ -pub mod date_add_tz; -pub mod date_part_tz; -pub mod date_to_utc_timestamp; -pub mod date_trunc_tz; -pub mod epoch_to_utc_timestamp; -pub mod format_timestamp; -pub mod from_utc_timestamp; -pub mod make_utc_timestamp; -pub mod str_to_utc_timestamp; -pub mod timeunit; -pub mod to_utc_timestamp; -pub mod utc_timestamp_to_epoch; -pub mod utc_timestamp_to_str; - -use crate::udfs::datetime::str_to_utc_timestamp::datetime_strs_to_timestamp_millis; -use std::sync::Arc; -use vegafusion_common::arrow::{ - array::{ArrayRef, Date32Array, Int64Array, StringArray}, - compute::{cast, unary}, - datatypes::{DataType, TimeUnit}, -}; -use vegafusion_common::datafusion_common::DataFusionError; - -pub fn process_input_datetime( - arg: &ArrayRef, - default_input_tz: &chrono_tz::Tz, -) -> Result { - Ok(match arg.data_type() { - DataType::Utf8 => { - let array = arg.as_any().downcast_ref::().unwrap(); - cast( - &datetime_strs_to_timestamp_millis(array, &Some(*default_input_tz)), - &DataType::Int64, - ) - .expect("Failed to case timestamp to Int64") - } - DataType::Timestamp(TimeUnit::Millisecond, _) => { - cast(arg, &DataType::Int64).expect("Failed to case timestamp to Int64") - } - DataType::Timestamp(_, _) => { - let arg_ms = cast(arg, &DataType::Timestamp(TimeUnit::Millisecond, None)) - .expect("Failed to convert timestamp[ns] to timestamp[ms]"); - cast(&arg_ms, &DataType::Int64).expect("Failed to case timestamp to Int64") - } - DataType::Date32 => { - let ms_per_day = 1000 * 60 * 60 * 24_i64; - let array = arg.as_any().downcast_ref::().unwrap(); - - let array: Int64Array = unary(array, |v| (v as i64) * ms_per_day); - Arc::new(array) as ArrayRef as _ - } - DataType::Date64 => (cast(arg, &DataType::Int64).unwrap()) as _, - DataType::Int64 => arg.clone(), - DataType::Float64 => cast(arg, &DataType::Int64).expect("Failed to cast float to int"), - _ => { - return Err(DataFusionError::Internal( - "Unexpected data type for date part function:".to_string(), - )) - } - }) -} diff --git a/vegafusion-datafusion-udfs/src/udfs/datetime/str_to_utc_timestamp.rs b/vegafusion-datafusion-udfs/src/udfs/datetime/str_to_utc_timestamp.rs deleted file mode 100644 index 7a5e9d450..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/datetime/str_to_utc_timestamp.rs +++ /dev/null @@ -1,156 +0,0 @@ -use std::any::Any; -use std::{str::FromStr, sync::Arc}; -use vegafusion_common::arrow::array::{ArrayRef, StringArray, TimestampMillisecondArray}; -use vegafusion_common::arrow::datatypes::{DataType, TimeUnit}; -use vegafusion_common::datafusion_common::{DataFusionError, ScalarValue}; -use vegafusion_common::datafusion_expr::{ - ColumnarValue, ScalarUDF, ScalarUDFImpl, Signature, Volatility, -}; -use vegafusion_core::planning::parse_datetime::parse_datetime; - -pub fn parse_datetime_to_utc_millis( - date_str: &str, - default_input_tz: &Option, -) -> Option { - // Parse to datetime - let parsed_utc = parse_datetime(date_str, default_input_tz)?; - - // Extract milliseconds - Some(parsed_utc.timestamp_millis()) -} - -pub fn datetime_strs_to_timestamp_millis( - date_strs: &StringArray, - default_input_tz: &Option, -) -> ArrayRef { - let millis_array = TimestampMillisecondArray::from( - date_strs - .iter() - .map(|date_str| -> Option { - date_str - .and_then(|date_str| parse_datetime_to_utc_millis(date_str, default_input_tz)) - }) - .collect::>>(), - ); - - Arc::new(millis_array) as ArrayRef -} - -#[derive(Debug, Clone)] -pub struct StrToUtcTimestampUDF { - signature: Signature, -} - -impl Default for StrToUtcTimestampUDF { - fn default() -> Self { - Self::new() - } -} - -impl StrToUtcTimestampUDF { - pub fn new() -> Self { - let signature = - Signature::exact(vec![DataType::Utf8, DataType::Utf8], Volatility::Immutable); - Self { signature } - } -} - -impl ScalarUDFImpl for StrToUtcTimestampUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - "str_to_utc_timestamp" - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type( - &self, - _arg_types: &[DataType], - ) -> vegafusion_common::datafusion_common::Result { - Ok(DataType::Timestamp(TimeUnit::Millisecond, None)) - } - - fn invoke( - &self, - args: &[ColumnarValue], - ) -> vegafusion_common::datafusion_common::Result { - // [0] data array - let str_array = match &args[0] { - ColumnarValue::Array(array) => array.clone(), - ColumnarValue::Scalar(scalar) => scalar.to_array()?, - }; - - // [1] timezone string - let tz_str = if let ColumnarValue::Scalar(default_input_tz) = &args[1] { - default_input_tz.to_string() - } else { - return Err(DataFusionError::Internal( - "Expected default_input_tz to be a scalar".to_string(), - )); - }; - let tz = chrono_tz::Tz::from_str(&tz_str).map_err(|_err| { - DataFusionError::Internal(format!("Failed to parse {tz_str} as a timezone")) - })?; - - let str_array = str_array.as_any().downcast_ref::().unwrap(); - - let timestamp_array = datetime_strs_to_timestamp_millis(str_array, &Some(tz)); - - // maybe back to scalar - if timestamp_array.len() != 1 { - Ok(ColumnarValue::Array(timestamp_array)) - } else { - ScalarValue::try_from_array(×tamp_array, 0).map(ColumnarValue::Scalar) - } - } -} - -lazy_static! { - pub static ref STR_TO_UTC_TIMESTAMP_UDF: ScalarUDF = - ScalarUDF::from(StrToUtcTimestampUDF::new()); -} -#[cfg(test)] -mod tests { - use super::*; - use chrono::Utc; - - #[test] - fn test_parse_datetime() { - let local_tz = Some(chrono_tz::Tz::America__New_York); - let utc = Some(chrono_tz::Tz::UTC); - let res = parse_datetime("2020-05-16T09:30:00+05:00", &utc).unwrap(); - let utc_res = res.with_timezone(&Utc); - println!("res: {res}"); - println!("utc_res: {utc_res}"); - - let res = parse_datetime("2020-05-16T09:30:00", &utc).unwrap(); - let utc_res = res.with_timezone(&Utc); - println!("res: {res}"); - println!("utc_res: {utc_res}"); - - let res = parse_datetime("2020-05-16T09:30:00", &local_tz).unwrap(); - let utc_res = res.with_timezone(&Utc); - println!("res: {res}"); - println!("utc_res: {utc_res}"); - - let res = parse_datetime("2001/02/05 06:20", &local_tz).unwrap(); - let utc_res = res.with_timezone(&Utc); - println!("res: {res}"); - println!("utc_res: {utc_res}"); - - let res = parse_datetime("2001/02/05 06:20", &utc).unwrap(); - let utc_res = res.with_timezone(&Utc); - println!("res: {res}"); - println!("utc_res: {utc_res}"); - - let res = parse_datetime("2000-01-01T08:00:00.000Z", &utc).unwrap(); - let utc_res = res.with_timezone(&Utc); - println!("res: {res}"); - println!("utc_res: {utc_res}"); - } -} diff --git a/vegafusion-datafusion-udfs/src/udfs/datetime/to_utc_timestamp.rs b/vegafusion-datafusion-udfs/src/udfs/datetime/to_utc_timestamp.rs deleted file mode 100644 index 01c74a5df..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/datetime/to_utc_timestamp.rs +++ /dev/null @@ -1,162 +0,0 @@ -use chrono::Timelike; -use chrono::{DateTime, TimeZone}; -use chrono_tz::Tz; -use std::any::Any; -use std::str::FromStr; -use std::sync::Arc; -use vegafusion_common::arrow::array::Array; -use vegafusion_common::datafusion_expr::ScalarUDFImpl; -use vegafusion_common::{ - arrow::{ - array::{ArrayRef, TimestampMillisecondArray}, - compute::cast, - datatypes::{DataType, TimeUnit}, - }, - datafusion_common::{DataFusionError, ScalarValue}, - datafusion_expr::{ColumnarValue, ScalarUDF, Signature, Volatility}, -}; - -#[derive(Debug, Clone)] -pub struct ToUtcTimestampUDF { - signature: Signature, -} - -impl Default for ToUtcTimestampUDF { - fn default() -> Self { - Self::new() - } -} - -impl ToUtcTimestampUDF { - pub fn new() -> Self { - // Signature should be (Timestamp, UTF8), but specifying Timestamp in the signature - // requires specifying the timezone explicitly, and DataFusion doesn't currently - // coerce between timezones. - let signature: Signature = Signature::any(2, Volatility::Immutable); - Self { signature } - } -} - -impl ScalarUDFImpl for ToUtcTimestampUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - "to_utc_timestamp" - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type( - &self, - _arg_types: &[DataType], - ) -> vegafusion_common::datafusion_common::Result { - Ok(DataType::Timestamp(TimeUnit::Millisecond, None)) - } - - fn invoke( - &self, - args: &[ColumnarValue], - ) -> vegafusion_common::datafusion_common::Result { - // [0] data array - let timestamp_array = match &args[0] { - ColumnarValue::Array(array) => array.clone(), - ColumnarValue::Scalar(scalar) => scalar.to_array()?, - }; - - // [1] timezone string - let tz_str = if let ColumnarValue::Scalar(default_input_tz) = &args[1] { - default_input_tz.to_string() - } else { - return Err(DataFusionError::Internal( - "Expected default_input_tz to be a scalar".to_string(), - )); - }; - let tz = chrono_tz::Tz::from_str(&tz_str).map_err(|_err| { - DataFusionError::Internal(format!("Failed to parse {tz_str} as a timezone")) - })?; - - let result_array = to_utc_timestamp(timestamp_array, tz)?; - - // maybe back to scalar - if result_array.len() != 1 { - Ok(ColumnarValue::Array(result_array)) - } else { - ScalarValue::try_from_array(&result_array, 0).map(ColumnarValue::Scalar) - } - } -} - -pub fn to_utc_timestamp(timestamp_array: ArrayRef, tz: Tz) -> Result { - // Normalize input to integer array of milliseconds - let timestamp_array = to_timestamp_ms(×tamp_array)?; - let timestamp_millis = timestamp_array - .as_any() - .downcast_ref::() - .unwrap(); - let timestamp_array = TimestampMillisecondArray::from( - timestamp_millis - .iter() - .map(|v| { - v.and_then(|v| { - // Build naive datetime for time - let seconds = v / 1000; - let milliseconds = v % 1000; - let nanoseconds = (milliseconds * 1_000_000) as u32; - let naive_local_datetime = - DateTime::from_timestamp(seconds, nanoseconds)?.naive_utc(); - - // Get UTC offset when the naive datetime is considered to be in local time - let local_datetime = if let Some(local_datetime) = - tz.from_local_datetime(&naive_local_datetime).earliest() - { - Some(local_datetime) - } else { - // Try adding 1 hour to handle daylight savings boundaries - let hour = naive_local_datetime.hour(); - let new_naive_local_datetime = naive_local_datetime.with_hour(hour + 1)?; - tz.from_local_datetime(&new_naive_local_datetime).earliest() - }; - - // Get timestamp millis (in UTC) - local_datetime.map(|local_datetime| local_datetime.timestamp_millis()) - }) - }) - .collect::>>(), - ); - - Ok(Arc::new(timestamp_array) as ArrayRef) -} - -pub fn to_timestamp_ms(array: &ArrayRef) -> Result { - match array.data_type() { - DataType::Timestamp(time_unit, _) => { - if time_unit == &TimeUnit::Millisecond { - Ok(array.clone()) - } else { - Ok(cast( - array, - &DataType::Timestamp(TimeUnit::Millisecond, None), - )?) - } - } - DataType::Date32 => Ok(cast( - array, - &DataType::Timestamp(TimeUnit::Millisecond, None), - )?), - DataType::Date64 => Ok(cast( - array, - &DataType::Timestamp(TimeUnit::Millisecond, None), - )?), - dtype => Err(DataFusionError::Internal(format!( - "Unexpected datatime in to_timestamp_ms: {dtype:?}" - ))), - } -} - -lazy_static! { - pub static ref TO_UTC_TIMESTAMP_UDF: ScalarUDF = ScalarUDF::from(ToUtcTimestampUDF::new()); -} diff --git a/vegafusion-datafusion-udfs/src/udfs/datetime/utc_timestamp_to_epoch.rs b/vegafusion-datafusion-udfs/src/udfs/datetime/utc_timestamp_to_epoch.rs deleted file mode 100644 index 3a19ff217..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/datetime/utc_timestamp_to_epoch.rs +++ /dev/null @@ -1,85 +0,0 @@ -use crate::udfs::datetime::to_utc_timestamp::to_timestamp_ms; -use std::any::Any; -use vegafusion_common::datafusion_expr::{ScalarUDFImpl, TypeSignature}; -use vegafusion_common::{ - arrow::{ - compute::cast, - datatypes::{DataType, TimeUnit}, - }, - datafusion_common::ScalarValue, - datafusion_expr::{ColumnarValue, ScalarUDF, Signature, Volatility}, -}; - -#[derive(Debug, Clone)] -pub struct UtcTimestampToEpochUDF { - signature: Signature, -} - -impl Default for UtcTimestampToEpochUDF { - fn default() -> Self { - Self::new() - } -} - -impl UtcTimestampToEpochUDF { - pub fn new() -> Self { - let signature = Signature::one_of( - vec![ - TypeSignature::Exact(vec![DataType::Date32]), - TypeSignature::Exact(vec![DataType::Date64]), - TypeSignature::Exact(vec![DataType::Timestamp(TimeUnit::Millisecond, None)]), - TypeSignature::Exact(vec![DataType::Timestamp(TimeUnit::Nanosecond, None)]), - ], - Volatility::Immutable, - ); - Self { signature } - } -} - -impl ScalarUDFImpl for UtcTimestampToEpochUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - "utc_timestamp_to_epoch_ms" - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type( - &self, - _arg_types: &[DataType], - ) -> vegafusion_common::datafusion_common::Result { - Ok(DataType::Int64) - } - - fn invoke( - &self, - args: &[ColumnarValue], - ) -> vegafusion_common::datafusion_common::Result { - // [0] data array - let data_array = match &args[0] { - ColumnarValue::Array(array) => array.clone(), - ColumnarValue::Scalar(scalar) => scalar.to_array()?, - }; - let data_array = to_timestamp_ms(&data_array)?; - - // cast timestamp millis to Int64 - let result_array = cast(&data_array, &DataType::Int64)?; - - // maybe back to scalar - if result_array.len() != 1 { - Ok(ColumnarValue::Array(result_array)) - } else { - ScalarValue::try_from_array(&result_array, 0).map(ColumnarValue::Scalar) - } - } -} - -lazy_static! { - pub static ref UTC_TIMESTAMP_TO_EPOCH_MS: ScalarUDF = - ScalarUDF::from(UtcTimestampToEpochUDF::new()); -} diff --git a/vegafusion-datafusion-udfs/src/udfs/datetime/utc_timestamp_to_str.rs b/vegafusion-datafusion-udfs/src/udfs/datetime/utc_timestamp_to_str.rs deleted file mode 100644 index 92192f08c..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/datetime/utc_timestamp_to_str.rs +++ /dev/null @@ -1,133 +0,0 @@ -use crate::udfs::datetime::from_utc_timestamp::from_utc_timestamp; -use crate::udfs::datetime::to_utc_timestamp::to_timestamp_ms; -use chrono::DateTime; -use std::any::Any; -use std::str::FromStr; -use std::sync::Arc; -use vegafusion_common::arrow::array::{ArrayRef, StringArray, TimestampMillisecondArray}; -use vegafusion_common::datafusion_common::{DataFusionError, ScalarValue}; -use vegafusion_common::datafusion_expr::{ScalarUDFImpl, TypeSignature}; -use vegafusion_common::{ - arrow::datatypes::{DataType, TimeUnit}, - datafusion_expr::{ColumnarValue, ScalarUDF, Signature, Volatility}, -}; - -#[derive(Debug, Clone)] -pub struct UtcTimestampToStrUDF { - signature: Signature, -} - -impl Default for UtcTimestampToStrUDF { - fn default() -> Self { - Self::new() - } -} - -impl UtcTimestampToStrUDF { - pub fn new() -> Self { - let signature = Signature::one_of( - vec![ - TypeSignature::Exact(vec![DataType::Date32, DataType::Utf8]), - TypeSignature::Exact(vec![DataType::Date64, DataType::Utf8]), - TypeSignature::Exact(vec![ - DataType::Timestamp(TimeUnit::Millisecond, None), - DataType::Utf8, - ]), - TypeSignature::Exact(vec![ - DataType::Timestamp(TimeUnit::Nanosecond, None), - DataType::Utf8, - ]), - ], - Volatility::Immutable, - ); - Self { signature } - } -} - -impl ScalarUDFImpl for UtcTimestampToStrUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - "utc_timestamp_to_str" - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type( - &self, - _arg_types: &[DataType], - ) -> vegafusion_common::datafusion_common::Result { - Ok(DataType::Utf8) - } - - fn invoke( - &self, - args: &[ColumnarValue], - ) -> vegafusion_common::datafusion_common::Result { - // Argument order - // [0] data array - let timestamp_array = match &args[0] { - ColumnarValue::Array(array) => array.clone(), - ColumnarValue::Scalar(scalar) => scalar.to_array()?, - }; - - let timestamp_array = to_timestamp_ms(×tamp_array)?; - if matches!(timestamp_array.data_type(), DataType::Null) { - return Ok(ColumnarValue::Array(timestamp_array)); - } - - // [1] timezone string - let tz_str = if let ColumnarValue::Scalar(default_input_tz) = &args[1] { - default_input_tz.to_string() - } else { - return Err(DataFusionError::Internal( - "Expected default_input_tz to be a scalar".to_string(), - )); - }; - - // Convert timestamp to desired time zone - let timestamp_in_tz = if tz_str == "UTC" { - timestamp_array - } else { - let tz = chrono_tz::Tz::from_str(&tz_str).map_err(|_err| { - DataFusionError::Internal(format!("Failed to parse {tz_str} as a timezone")) - })?; - from_utc_timestamp(timestamp_array, tz)? - }; - - let timestamp_in_tz = timestamp_in_tz - .as_any() - .downcast_ref::() - .unwrap(); - - let formatted = Arc::new(StringArray::from_iter(timestamp_in_tz.iter().map( - |utc_millis| { - utc_millis.and_then(|utc_millis| { - // Load as UTC datetime - let utc_seconds = utc_millis / 1_000; - let utc_nanos = (utc_millis % 1_000 * 1_000_000) as u32; - DateTime::from_timestamp(utc_seconds, utc_nanos).map(|datetime| { - let formatted = datetime.naive_utc().format("%Y-%m-%dT%H:%M:%S.%3f"); - formatted.to_string() - }) - }) - }, - ))) as ArrayRef; - - // maybe back to scalar - if formatted.len() != 1 { - Ok(ColumnarValue::Array(formatted)) - } else { - ScalarValue::try_from_array(&formatted, 0).map(ColumnarValue::Scalar) - } - } -} - -lazy_static! { - pub static ref UTC_TIMESTAMP_TO_STR_UDF: ScalarUDF = - ScalarUDF::from(UtcTimestampToStrUDF::new()); -} diff --git a/vegafusion-datafusion-udfs/src/udfs/math/isfinite.rs b/vegafusion-datafusion-udfs/src/udfs/math/isfinite.rs deleted file mode 100644 index edf44dcad..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/math/isfinite.rs +++ /dev/null @@ -1,84 +0,0 @@ -use std::any::Any; -use std::sync::Arc; -use vegafusion_common::arrow::array::{BooleanArray, Float32Array, Float64Array}; -use vegafusion_common::arrow::datatypes::DataType; -use vegafusion_common::datafusion_common::{DataFusionError, ScalarValue}; -use vegafusion_common::datafusion_expr::{ - ColumnarValue, ScalarUDF, ScalarUDFImpl, Signature, Volatility, -}; - -/// `isFinite(value)` -/// -/// Returns true if value is a finite number. -/// -/// See: https://vega.github.io/vega/docs/expressions/#isFinite -#[derive(Debug, Clone)] -pub struct IsFiniteUDF { - signature: Signature, -} - -impl Default for IsFiniteUDF { - fn default() -> Self { - Self::new() - } -} - -impl IsFiniteUDF { - pub fn new() -> Self { - let signature = Signature::any(1, Volatility::Immutable); - Self { signature } - } -} - -impl ScalarUDFImpl for IsFiniteUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - "isfinite" - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type(&self, _arg_types: &[DataType]) -> Result { - Ok(DataType::Boolean) - } - - fn invoke(&self, args: &[ColumnarValue]) -> Result { - // Signature ensures there is a single argument - match &args[0] { - ColumnarValue::Scalar(arg) => { - let res = match arg { - ScalarValue::Float32(Some(v)) => v.is_finite(), - ScalarValue::Float64(Some(v)) => v.is_finite(), - _ => true, - }; - Ok(ColumnarValue::Scalar(ScalarValue::from(res))) - } - ColumnarValue::Array(arg) => { - let is_finite_array = match arg.data_type() { - DataType::Float32 => { - let array = arg.as_any().downcast_ref::().unwrap(); - BooleanArray::from_unary(array, |a| a.is_finite()) - } - DataType::Float64 => { - let array = arg.as_any().downcast_ref::().unwrap(); - BooleanArray::from_unary(array, |a| a.is_finite()) - } - _ => { - // No other type can be non-finite - BooleanArray::from(vec![true; arg.len()]) - } - }; - Ok(ColumnarValue::Array(Arc::new(is_finite_array))) - } - } - } -} - -lazy_static! { - pub static ref ISFINITE_UDF: ScalarUDF = ScalarUDF::from(IsFiniteUDF::new()); -} diff --git a/vegafusion-datafusion-udfs/src/udfs/math/mod.rs b/vegafusion-datafusion-udfs/src/udfs/math/mod.rs deleted file mode 100644 index cbe4d8772..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/math/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod isfinite; diff --git a/vegafusion-datafusion-udfs/src/udfs/member/mod.rs b/vegafusion-datafusion-udfs/src/udfs/member/mod.rs deleted file mode 100644 index 24f9f47c9..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/member/mod.rs +++ /dev/null @@ -1,220 +0,0 @@ -use std::any::Any; -use vegafusion_common::arrow::array::{new_null_array, Array, Int32Array, ListArray, StructArray}; -use vegafusion_common::arrow::compute::kernels; -use vegafusion_common::arrow::datatypes::DataType; -use vegafusion_common::datafusion_common::{DataFusionError, ScalarValue}; -use vegafusion_common::datafusion_expr::{ - ColumnarValue, ScalarUDF, ScalarUDFImpl, Signature, Volatility, -}; -use vegafusion_common::error::{Result, VegaFusionError}; - -#[derive(Debug, Clone)] -pub struct GetObjectMemberUDF { - field_type: DataType, - field_index: usize, - signature: Signature, - name: String, -} - -impl GetObjectMemberUDF { - pub fn new(property_name: String, object_type: DataType) -> Result { - let signature = Signature::exact(vec![object_type.clone()], Volatility::Immutable); - let name = format!("get[{property_name}]"); - - let (field_index, field_type) = if let DataType::Struct(fields) = &object_type { - match fields - .iter() - .enumerate() - .find(|(_i, f)| f.name() == &property_name) - { - Some((field_index, field)) => (field_index, field.data_type().clone()), - None => { - return Err(VegaFusionError::compilation(format!( - "No object property named {property_name}" - ))) - } - } - } else { - return Err(VegaFusionError::compilation( - "Target of object property access is not a Struct type", - )); - }; - - Ok(Self { - field_type, - field_index, - signature, - name, - }) - } -} - -impl ScalarUDFImpl for GetObjectMemberUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - self.name.as_str() - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type( - &self, - _arg_types: &[DataType], - ) -> std::result::Result { - Ok(self.field_type.clone()) - } - - fn invoke( - &self, - args: &[ColumnarValue], - ) -> std::result::Result { - // Signature ensures there is a single argument - let arg = &args[0]; - - match arg { - ColumnarValue::Scalar(ScalarValue::Struct(arg)) => { - let c = arg.column(self.field_index); - Ok(ColumnarValue::Scalar(ScalarValue::try_from_array(c, 0)?)) - } - ColumnarValue::Array(object) => { - let struct_array = object.as_any().downcast_ref::().unwrap(); - Ok(ColumnarValue::Array( - struct_array.column(self.field_index).clone(), - )) - } - _ => Err(DataFusionError::Internal(format!( - "Unexpected object type for member access: {:?}", - arg.data_type() - ))), - } - } -} - -pub fn make_get_object_member_udf( - object_type: &DataType, - property_name: &str, -) -> Result { - Ok(ScalarUDF::from(GetObjectMemberUDF::new( - property_name.to_string(), - object_type.clone(), - )?)) -} - -#[derive(Debug, Clone)] -pub struct ArrayElementUDF { - name: String, - signature: Signature, - index: i32, -} - -impl ArrayElementUDF { - pub fn new(index: i32) -> Self { - let signature = Signature::any(1, Volatility::Immutable); - Self { - name: format!("get[{index}]"), - signature, - index, - } - } -} - -impl ScalarUDFImpl for ArrayElementUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - self.name.as_str() - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type( - &self, - arg_types: &[DataType], - ) -> std::result::Result { - let new_dtype = match &arg_types[0] { - DataType::List(field) => field.data_type().clone(), - dtype => { - return Err(DataFusionError::Internal(format!( - "Unsupported datatype for get index {dtype:?}" - ))) - } - }; - Ok(new_dtype) - } - - fn invoke( - &self, - args: &[ColumnarValue], - ) -> std::result::Result { - // Signature ensures there is a single argument - let arg = &args[0]; - Ok(match arg { - ColumnarValue::Scalar(value) => { - match value { - ScalarValue::List(arr) => { - let arr = arr.as_any().downcast_ref::().unwrap(); - match ScalarValue::try_from_array(&arr.value(0), self.index as usize) { - Ok(element) => { - // Scalar element of list - ColumnarValue::Scalar(element.clone()) - } - _ => { - // out of bounds, null - ColumnarValue::Scalar(ScalarValue::try_from(arr.data_type())?) - } - } - } - _ => { - // null - ColumnarValue::Scalar(ScalarValue::try_from(&DataType::Float64).unwrap()) - } - } - } - ColumnarValue::Array(array) => { - match array.data_type() { - DataType::List(_) => { - // There is not substring-like kernel for general list arrays. - // So instead, build indices into the flat buffer and use take - let array = array.as_any().downcast_ref::().unwrap(); - let mut take_index_builder = Int32Array::builder(array.len()); - let offsets = array.value_offsets(); - let _flat_values = array.values(); - - for i in 0..array.len() { - let el_start = offsets[i]; - let el_stop = offsets[i + 1]; - if el_start + self.index < el_stop { - take_index_builder.append_value(el_start + self.index); - } else { - take_index_builder.append_null(); - } - } - - let result = kernels::take::take( - array.values().as_ref(), - &take_index_builder.finish(), - Default::default(), - ) - .unwrap(); - - ColumnarValue::Array(result) - } - _ => ColumnarValue::Array(new_null_array(&DataType::Float64, array.len())), - } - } - }) - } -} - -pub fn make_get_element_udf(index: i32) -> ScalarUDF { - ScalarUDF::from(ArrayElementUDF::new(index)) -} diff --git a/vegafusion-datafusion-udfs/src/udfs/mod.rs b/vegafusion-datafusion-udfs/src/udfs/mod.rs deleted file mode 100644 index 40f35087d..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -pub mod array; -pub mod datetime; -pub mod math; -pub mod member; -pub mod object; -pub mod util; diff --git a/vegafusion-datafusion-udfs/src/udfs/object/mod.rs b/vegafusion-datafusion-udfs/src/udfs/object/mod.rs deleted file mode 100644 index 458464813..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/object/mod.rs +++ /dev/null @@ -1,79 +0,0 @@ -use crate::udfs::util::make_scalar_function; -use std::any::Any; -use std::sync::Arc; -use vegafusion_common::arrow::array::{ArrayRef, StructArray}; -use vegafusion_common::arrow::datatypes::{DataType, Field, FieldRef, Fields}; -use vegafusion_common::datafusion_common::DataFusionError; -use vegafusion_common::datafusion_expr::{ - ColumnarValue, ScalarUDF, ScalarUDFImpl, Signature, Volatility, -}; - -#[derive(Debug, Clone)] -struct ObjectConstructorUDF { - signature: Signature, - fields: Vec, - struct_dtype: DataType, - name: String, -} - -impl ObjectConstructorUDF { - pub fn new(keys: &[String], value_types: &[DataType]) -> Self { - // Build fields vector - let fields: Vec<_> = keys - .iter() - .zip(value_types.iter()) - .map(|(k, dtype)| Field::new(k, dtype.clone(), true)) - .collect(); - let struct_dtype = DataType::Struct(Fields::from(fields.clone())); - - // Build name - let name_csv: Vec<_> = keys - .iter() - .zip(value_types) - .map(|(k, dtype)| format!("{k}: {dtype}")) - .collect(); - let name = format!("object{{{}}}", name_csv.join(",")); - Self { - signature: Signature::any(keys.len(), Volatility::Immutable), - fields, - struct_dtype, - name, - } - } -} - -impl ScalarUDFImpl for ObjectConstructorUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - self.name.as_str() - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type(&self, _arg_types: &[DataType]) -> Result { - Ok(self.struct_dtype.clone()) - } - - fn invoke(&self, args: &[ColumnarValue]) -> Result { - let fields = self.fields.clone(); - let object_constructor = move |args: &[ArrayRef]| { - let pairs: Vec<_> = fields - .iter() - .zip(args.iter()) - .map(|(f, v)| (FieldRef::new(f.clone()), v.clone())) - .collect(); - Ok(Arc::new(StructArray::from(pairs)) as ArrayRef) - }; - let object_constructor = make_scalar_function(object_constructor); - object_constructor(args) - } -} - -pub fn make_object_constructor_udf(keys: &[String], value_types: &[DataType]) -> ScalarUDF { - ScalarUDF::from(ObjectConstructorUDF::new(keys, value_types)) -} diff --git a/vegafusion-datafusion-udfs/src/udfs/util.rs b/vegafusion-datafusion-udfs/src/udfs/util.rs deleted file mode 100644 index 9d3a745ea..000000000 --- a/vegafusion-datafusion-udfs/src/udfs/util.rs +++ /dev/null @@ -1,38 +0,0 @@ -use std::sync::Arc; -use vegafusion_common::arrow::array::ArrayRef; -use vegafusion_common::datafusion_common::{DataFusionError, ScalarValue}; -use vegafusion_common::datafusion_expr::{ColumnarValue, ScalarFunctionImplementation}; - -pub fn make_scalar_function(inner: F) -> ScalarFunctionImplementation -where - F: Fn(&[ArrayRef]) -> Result + Sync + Send + 'static, -{ - Arc::new(move |args: &[ColumnarValue]| { - // first, identify if any of the arguments is an Array. If yes, store its `len`, - // as any scalar will need to be converted to an array of len `len`. - let len = args - .iter() - .fold(Option::::None, |acc, arg| match arg { - ColumnarValue::Scalar(_) => acc, - ColumnarValue::Array(a) => Some(a.len()), - }); - - let is_scalar = len.is_none(); - - let inferred_length = len.unwrap_or(1); - let args = args - .iter() - .map(|arg| arg.clone().into_array(inferred_length)) - .collect::, DataFusionError>>()?; - - let result = (inner)(&args); - - if is_scalar { - // If all inputs are scalar, keeps output as scalar - let result = result.and_then(|arr| ScalarValue::try_from_array(&arr, 0)); - result.map(ColumnarValue::Scalar) - } else { - result.map(ColumnarValue::Array) - } - }) -} diff --git a/vegafusion-python/Cargo.toml b/vegafusion-python/Cargo.toml index 5bf7837c5..8a0a80a14 100644 --- a/vegafusion-python/Cargo.toml +++ b/vegafusion-python/Cargo.toml @@ -61,15 +61,6 @@ version = "1.6.9" path = "../vegafusion-runtime" version = "1.6.9" -[dependencies.vegafusion-sql] -path = "../vegafusion-sql" -version = "1.6.9" -features = ["datafusion-conn"] - -[dependencies.vegafusion-dataframe] -path = "../vegafusion-dataframe" -version = "1.6.9" - [dependencies.tokio] workspace = true features = ["macros", "rt-multi-thread"] diff --git a/vegafusion-python/src/lib.rs b/vegafusion-python/src/lib.rs index da2aeb4c6..80842b993 100644 --- a/vegafusion-python/src/lib.rs +++ b/vegafusion-python/src/lib.rs @@ -1,5 +1,4 @@ use lazy_static::lazy_static; -use pyo3; use pyo3::exceptions::PyValueError; use pyo3::prelude::*; use pyo3::types::{PyBytes, PyDict, PyList, PyTuple}; @@ -35,10 +34,9 @@ use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::task_graph::graph::ScopedVariable; use vegafusion_core::task_graph::task_value::TaskValue; use vegafusion_runtime::tokio_runtime::TOKIO_THREAD_STACK_SIZE; -use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; -use vegafusion_sql::connection::Connection; use vegafusion_core::runtime::VegaFusionRuntimeTrait; +use vegafusion_runtime::datafusion::context::make_datafusion_context; static INIT: Once = Once::new(); @@ -200,7 +198,6 @@ impl PyVegaFusionRuntime { initialize_logging(); // Use DataFusion connection and multi-threaded tokio runtime - let conn = Arc::new(DataFusionConnection::default()) as Arc; let mut builder = tokio::runtime::Builder::new_multi_thread(); if let Some(worker_threads) = worker_threads { builder.worker_threads(worker_threads.max(1) as usize); @@ -214,7 +211,11 @@ impl PyVegaFusionRuntime { .external("Failed to create Tokio thread pool")?; Ok(Self { - runtime: Arc::new(VegaFusionRuntime::new(conn, max_capacity, memory_limit)), + runtime: Arc::new(VegaFusionRuntime::new( + Arc::new(make_datafusion_context()), + max_capacity, + memory_limit, + )), tokio_runtime: Arc::new(tokio_runtime_connection), }) } @@ -229,7 +230,7 @@ impl PyVegaFusionRuntime { let runtime = tokio_runtime.block_on(async move { let innter_url = url; let uri = - Uri::from_str(&innter_url).map_err(|e| VegaFusionError::internal(e.to_string()))?; + Uri::from_str(innter_url).map_err(|e| VegaFusionError::internal(e.to_string()))?; GrpcVegaFusionRuntime::try_new(Channel::builder(uri).connect().await.map_err(|e| { let msg = format!("Error connecting to gRPC server at {}: {}", innter_url, e); @@ -440,13 +441,13 @@ impl PyVegaFusionRuntime { for (name, scope) in keep_signals.unwrap_or_default() { keep_variables.push(PreTransformVariable { variable: Some(Variable::new_signal(&name)), - scope: scope, + scope, }); } for (name, scope) in keep_datasets.unwrap_or_default() { keep_variables.push(PreTransformVariable { variable: Some(Variable::new_data(&name)), - scope: scope, + scope, }); } @@ -530,7 +531,8 @@ impl PyVegaFusionRuntime { pub fn clear_cache(&self) -> PyResult<()> { if let Some(runtime) = self.runtime.as_any().downcast_ref::() { - Ok(self.tokio_runtime.block_on(runtime.clear_cache())) + self.tokio_runtime.block_on(runtime.clear_cache()); + Ok(()) } else { Err(PyValueError::new_err( "Current Runtime does not support clear_cache", diff --git a/vegafusion-python/tests/altair_mocks/casestudy/falkensee/mock.py b/vegafusion-python/tests/altair_mocks/casestudy/falkensee/mock.py index 3f25bcfc4..7412902d2 100644 --- a/vegafusion-python/tests/altair_mocks/casestudy/falkensee/mock.py +++ b/vegafusion-python/tests/altair_mocks/casestudy/falkensee/mock.py @@ -1,58 +1,58 @@ # https://altair-viz.github.io/gallery/falkensee.html import altair as alt -import pandas as pd +import polars as pl +from datetime import date source = [ - {"year": "1875", "population": 1309}, - {"year": "1890", "population": 1558}, - {"year": "1910", "population": 4512}, - {"year": "1925", "population": 8180}, - {"year": "1933", "population": 15915}, - {"year": "1939", "population": 24824}, - {"year": "1946", "population": 28275}, - {"year": "1950", "population": 29189}, - {"year": "1964", "population": 29881}, - {"year": "1971", "population": 26007}, - {"year": "1981", "population": 24029}, - {"year": "1985", "population": 23340}, - {"year": "1989", "population": 22307}, - {"year": "1990", "population": 22087}, - {"year": "1991", "population": 22139}, - {"year": "1992", "population": 22105}, - {"year": "1993", "population": 22242}, - {"year": "1994", "population": 22801}, - {"year": "1995", "population": 24273}, - {"year": "1996", "population": 25640}, - {"year": "1997", "population": 27393}, - {"year": "1998", "population": 29505}, - {"year": "1999", "population": 32124}, - {"year": "2000", "population": 33791}, - {"year": "2001", "population": 35297}, - {"year": "2002", "population": 36179}, - {"year": "2003", "population": 36829}, - {"year": "2004", "population": 37493}, - {"year": "2005", "population": 38376}, - {"year": "2006", "population": 39008}, - {"year": "2007", "population": 39366}, - {"year": "2008", "population": 39821}, - {"year": "2009", "population": 40179}, - {"year": "2010", "population": 40511}, - {"year": "2011", "population": 40465}, - {"year": "2012", "population": 40905}, - {"year": "2013", "population": 41258}, - {"year": "2014", "population": 41777}, + {"year": date(1875, 1, 1), "population": 1309}, + {"year": date(1890, 1, 1), "population": 1558}, + {"year": date(1910, 1, 1), "population": 4512}, + {"year": date(1925, 1, 1), "population": 8180}, + {"year": date(1933, 1, 1), "population": 15915}, + {"year": date(1939, 1, 1), "population": 24824}, + {"year": date(1946, 1, 1), "population": 28275}, + {"year": date(1950, 1, 1), "population": 29189}, + {"year": date(1964, 1, 1), "population": 29881}, + {"year": date(1971, 1, 1), "population": 26007}, + {"year": date(1981, 1, 1), "population": 24029}, + {"year": date(1985, 1, 1), "population": 23340}, + {"year": date(1989, 1, 1), "population": 22307}, + {"year": date(1990, 1, 1), "population": 22087}, + {"year": date(1991, 1, 1), "population": 22139}, + {"year": date(1992, 1, 1), "population": 22105}, + {"year": date(1993, 1, 1), "population": 22242}, + {"year": date(1994, 1, 1), "population": 22801}, + {"year": date(1995, 1, 1), "population": 24273}, + {"year": date(1996, 1, 1), "population": 25640}, + {"year": date(1997, 1, 1), "population": 27393}, + {"year": date(1998, 1, 1), "population": 29505}, + {"year": date(1999, 1, 1), "population": 32124}, + {"year": date(2000, 1, 1), "population": 33791}, + {"year": date(2001, 1, 1), "population": 35297}, + {"year": date(2002, 1, 1), "population": 36179}, + {"year": date(2003, 1, 1), "population": 36829}, + {"year": date(2004, 1, 1), "population": 37493}, + {"year": date(2005, 1, 1), "population": 38376}, + {"year": date(2006, 1, 1), "population": 39008}, + {"year": date(2007, 1, 1), "population": 39366}, + {"year": date(2008, 1, 1), "population": 39821}, + {"year": date(2009, 1, 1), "population": 40179}, + {"year": date(2010, 1, 1), "population": 40511}, + {"year": date(2011, 1, 1), "population": 40465}, + {"year": date(2012, 1, 1), "population": 40905}, + {"year": date(2013, 1, 1), "population": 41258}, + {"year": date(2014, 1, 1), "population": 41777}, ] source2 = [ - {"start": "1933", "end": "1945", "event": "Nazi Rule"}, - {"start": "1948", "end": "1989", "event": "GDR (East Germany)"}, + {"start": date(1933, 1, 1), "end": date(1945, 1, 1), "event": "Nazi Rule"}, + {"start": date(1948, 1, 1), "end": date(1989, 1, 1), "event": "GDR (East Germany)"}, ] -source = pd.DataFrame(source) -source2 = pd.DataFrame(source2) - +source = pl.DataFrame(source) +source2 = pl.DataFrame(source2) line = ( alt.Chart(source) diff --git a/vegafusion-python/tests/altair_mocks/line/trail_marker/mock.py b/vegafusion-python/tests/altair_mocks/line/trail_marker/mock.py index c61286a12..2a5889ca5 100644 --- a/vegafusion-python/tests/altair_mocks/line/trail_marker/mock.py +++ b/vegafusion-python/tests/altair_mocks/line/trail_marker/mock.py @@ -1,11 +1,12 @@ # https://altair-viz.github.io/gallery/trail_marker.html -# With year column converted to a string. VegaFusion doesn't need this, but the altair case isn't handling +# With year column converted to a datetime64. VegaFusion doesn't need this, but the altair case isn't handling # an integer year column correctly. import altair as alt from vega_datasets import data source = data.wheat() -source["year"] = source.year.astype(str) +source["year"].astype("datetime64[ms]") -alt.Chart(source).mark_trail().encode(x="year:T", y="wheat:Q", size="wheat:Q") +chart = alt.Chart(source).mark_trail().encode(x="year:T", y="wheat:Q", size="wheat:Q") +chart \ No newline at end of file diff --git a/vegafusion-python/tests/test_jupyter_widget.py b/vegafusion-python/tests/test_jupyter_widget.py index 91386af0b..3c7a9d0bf 100644 --- a/vegafusion-python/tests/test_jupyter_widget.py +++ b/vegafusion-python/tests/test_jupyter_widget.py @@ -184,7 +184,8 @@ def setup_module(module): ("line/layer_line_color_rule", 1.0, 0.25), ("line/multi_series", 1.0, 0.25), ("line/with_ci", 1.0, 0.25), - ("line/trail_marker", 1.0, 0.25), + # Altair not rendering x-axis ticks as expected + ("line/trail_marker", 0.95, 0.25), ("line/with_datum", 1.0, 0.25), ("line/with_color_datum", 1.0, 0.25), ("maps/choropleth", 1.0, 0.25), diff --git a/vegafusion-python/tests/test_pretransform.py b/vegafusion-python/tests/test_pretransform.py index a3731ca57..da8072fd2 100644 --- a/vegafusion-python/tests/test_pretransform.py +++ b/vegafusion-python/tests/test_pretransform.py @@ -1,10 +1,12 @@ import base64 +import datetime import json from datetime import date from importlib.util import find_spec import pandas as pd import polars as pl +import polars.testing as pl_testing import pyarrow as pa import pytest from pandas import NaT, Timestamp @@ -1470,7 +1472,7 @@ def test_pre_transform_planner_warning2(): def test_date32_pre_transform_dataset(): - # Test to make sure that date32 columns are interpreted in the local timezone + # Test to make sure that date32 columns round trip as dates dates_df = pd.DataFrame( { "date_col": [date(2022, 1, 1), date(2022, 1, 2), date(2022, 1, 3)], @@ -1487,15 +1489,11 @@ def test_date32_pre_transform_dataset(): ) # Timestamps are in the local timezone, so they should be midnight local time - assert list(output_ds.date_col) == [ - pd.Timestamp("2022-01-01 00:00:00-0500", tz="America/New_York"), - pd.Timestamp("2022-01-02 00:00:00-0500", tz="America/New_York"), - pd.Timestamp("2022-01-03 00:00:00-0500", tz="America/New_York"), - ] + pd.testing.assert_series_equal(output_ds.date_col, dates_df.date_col) def test_date32_pre_transform_dataset_polars(): - # Test to make sure that date32 columns are interpreted in the local timezone + # Test to make sure that date32 columns round trip as dates dates_df = pl.DataFrame( { "date_col": [date(2022, 1, 1), date(2022, 1, 2), date(2022, 1, 3)], @@ -1511,12 +1509,7 @@ def test_date32_pre_transform_dataset_polars(): inline_datasets={"dates": dates_df}, ) - # Timestamps are in the local timezone, so they should be midnight local time - assert list(output_ds["date_col"]) == [ - pd.Timestamp("2022-01-01 00:00:00-0500", tz="America/New_York"), - pd.Timestamp("2022-01-02 00:00:00-0500", tz="America/New_York"), - pd.Timestamp("2022-01-03 00:00:00-0500", tz="America/New_York"), - ] + pl_testing.assert_series_equal(output_ds["date_col"], dates_df["date_col"]) def test_date32_in_timeunit_crash(): @@ -1605,7 +1598,7 @@ def test_nat_values(): dataset = datasets[0] assert dataset.to_dict("records")[0] == { "NULL_TEST": pd.Timestamp("2011-03-01 00:00:00+0000", tz="UTC"), - "ORDER_DATE": Timestamp("2011-03-01 00:00:00+0000", tz="UTC"), + "ORDER_DATE": datetime.date(2011, 3, 1), "SALES": 457.568, "SALES_end": 457.568, "SALES_start": 0.0, @@ -1644,6 +1637,8 @@ def test_pre_transform_dataset_dataframe_interface_protocol(): def test_gh_268_hang(): """ Tests for hang reported in https://github.com/hex-inc/vegafusion/issues/268 + + Also tests Utf8View input from Polars """ # Load movies into polars movies = pd.read_json( diff --git a/vegafusion-python/tests/test_transformed_data.py b/vegafusion-python/tests/test_transformed_data.py index 9b037d697..6f6327f2f 100644 --- a/vegafusion-python/tests/test_transformed_data.py +++ b/vegafusion-python/tests/test_transformed_data.py @@ -240,11 +240,6 @@ def test_transformed_data_for_mock(mock_name, expected_len, expected_cols): [713, 7, 7], [["year", "decade"], ["scaled_date", "first_date"], ["end"]], ), - ( - "casestudy/falkensee", - [2, 38, 38], - [["event", "start"], ["population", "year"], ["year"]], - ), ( "casestudy/us_employment", [120, 1, 2], diff --git a/vegafusion-runtime/Cargo.toml b/vegafusion-runtime/Cargo.toml index b75267f51..42fb9ef0f 100644 --- a/vegafusion-runtime/Cargo.toml +++ b/vegafusion-runtime/Cargo.toml @@ -28,8 +28,6 @@ deterministic-hash = "1.0.1" log = "0.4.17" env_logger = "0.10.0" ordered-float = "3.6.0" -reqwest-retry = "0.3.0" -reqwest-middleware = "0.2.0" [dev-dependencies] futures-util = "0.3.21" @@ -40,9 +38,18 @@ pixelmatch = "0.1.0" rgb = "0.8.32" lodepng = "3.6.1" +[dependencies.url] +workspace = true + [dependencies.serde_json] workspace = true +[dependencies.reqwest-middleware] +workspace = true + +[dependencies.reqwest-retry] +workspace = true + [dependencies.async-trait] workspace = true @@ -54,7 +61,7 @@ workspace = true [dependencies.object_store] workspace = true -features = ["aws"] +features = ["aws", "http"] [dependencies.chrono] workspace = true @@ -74,7 +81,7 @@ workspace = true [dependencies.vegafusion-common] path = "../vegafusion-common" -features = ["json", "sqlparser", "prettyprint", "object_store"] +features = ["json", "sqlparser", "prettyprint", "object_store", "url"] version = "1.6.9" [dependencies.vegafusion-core] @@ -82,18 +89,13 @@ path = "../vegafusion-core" features = ["sqlparser"] version = "1.6.9" -[dependencies.vegafusion-datafusion-udfs] -path = "../vegafusion-datafusion-udfs" -version = "1.6.9" - -[dependencies.vegafusion-dataframe] -path = "../vegafusion-dataframe" -version = "1.6.9" - [dependencies.serde] version = "1.0.137" features = ["derive"] +[dependencies.datafusion] +workspace = true + [dependencies.datafusion-common] workspace = true @@ -135,8 +137,3 @@ features = ["blocking", "rustls-tls"] [dev-dependencies.criterion] version = "0.4.0" features = ["async_tokio"] - -[dev-dependencies.vegafusion-sql] -path = "../vegafusion-sql" -version = "1.6.9" -features = ["datafusion-conn"] diff --git a/vegafusion-runtime/benches/spec_benchmarks.rs b/vegafusion-runtime/benches/spec_benchmarks.rs index c7db684d8..986d44919 100644 --- a/vegafusion-runtime/benches/spec_benchmarks.rs +++ b/vegafusion-runtime/benches/spec_benchmarks.rs @@ -52,7 +52,8 @@ async fn eval_spec_get_variable(full_spec: ChartSpec, var: &ScopedVariable) -> V let task_graph_mapping = task_graph.build_mapping(); // Initialize task graph runtime - let runtime = VegaFusionRuntime::new(Arc::new(DataFusionConnection::default()), Some(64), None); + let ctx = make_datafusion_context(); + let runtime = VegaFusionRuntime::new(Arc::new(ctx), Some(64), None); let node_index = task_graph_mapping.get(var).unwrap(); @@ -103,7 +104,8 @@ async fn eval_spec_sequence(full_spec: ChartSpec, full_updates: Vec tokio::runtime::Runtime { tokio::runtime::Builder::new_multi_thread() diff --git a/vegafusion-runtime/src/data/mod.rs b/vegafusion-runtime/src/data/mod.rs index f053a00b2..acf5fd64f 100644 --- a/vegafusion-runtime/src/data/mod.rs +++ b/vegafusion-runtime/src/data/mod.rs @@ -1 +1,2 @@ pub mod tasks; +pub mod util; diff --git a/vegafusion-runtime/src/data/tasks.rs b/vegafusion-runtime/src/data/tasks.rs index 7dbb54d21..2a6bcf84a 100644 --- a/vegafusion-runtime/src/data/tasks.rs +++ b/vegafusion-runtime/src/data/tasks.rs @@ -2,6 +2,7 @@ use crate::expression::compiler::compile; use crate::expression::compiler::config::CompilationConfig; use crate::expression::compiler::utils::ExprHelpers; use crate::task_graph::task::TaskCall; +use std::borrow::Cow; use async_trait::async_trait; @@ -10,6 +11,13 @@ use std::collections::{HashMap, HashSet}; use std::path::Path; use vegafusion_core::data::dataset::VegaFusionDataset; +use datafusion::datasource::listing::ListingTableUrl; +use datafusion::datasource::object_store::ObjectStoreUrl; +use datafusion::execution::options::{ArrowReadOptions, ReadOptions}; +use datafusion::parquet::data_type::AsBytes; +use datafusion::prelude::{CsvReadOptions, DataFrame, ParquetReadOptions, SessionContext}; +use datafusion_common::config::TableOptions; +use datafusion_functions::expr_fn::make_date; use std::sync::Arc; use tokio::io::AsyncReadExt; @@ -27,24 +35,20 @@ use vegafusion_core::proto::gen::transforms::TransformPipeline; use vegafusion_core::task_graph::task::{InputVariable, TaskDependencies}; use vegafusion_core::task_graph::task_value::TaskValue; +use crate::data::util::{DataFrameUtils, SessionContextUtils}; +use crate::transform::utils::str_to_timestamp; use object_store::aws::AmazonS3Builder; -use object_store::ObjectStore; +use object_store::http::HttpBuilder; +use object_store::{ClientOptions, ObjectStore}; use reqwest_middleware::{ClientBuilder, ClientWithMiddleware}; use reqwest_retry::{policies::ExponentialBackoff, RetryTransientMiddleware}; -use vegafusion_common::arrow::datatypes::{DataType, Field, Schema}; +use vegafusion_common::arrow::datatypes::{DataType, Field, Schema, TimeUnit}; use vegafusion_common::column::flat_col; use vegafusion_common::data::table::VegaFusionTable; use vegafusion_common::data::ORDER_COL; use vegafusion_common::datatypes::{is_integer_datatype, is_string_datatype}; use vegafusion_core::proto::gen::transforms::transform::TransformKind; use vegafusion_core::spec::visitors::extract_inline_dataset; -use vegafusion_dataframe::connection::Connection; -use vegafusion_dataframe::csv::CsvReadOptions; -use vegafusion_dataframe::dataframe::DataFrame; -use vegafusion_datafusion_udfs::udfs::datetime::date_to_utc_timestamp::DATE_TO_UTC_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::make_utc_timestamp::MAKE_UTC_TIMESTAMP; -use vegafusion_datafusion_udfs::udfs::datetime::str_to_utc_timestamp::STR_TO_UTC_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::to_utc_timestamp::TO_UTC_TIMESTAMP_UDF; pub fn build_compilation_config( input_vars: &[InputVariable], @@ -83,7 +87,7 @@ impl TaskCall for DataUrlTask { values: &[TaskValue], tz_config: &Option, inline_datasets: HashMap, - conn: Arc, + ctx: Arc, ) -> Result<(TaskValue, Vec)> { // Build compilation config for url signal (if any) and transforms (if any) let config = build_compilation_config(&self.input_vars(), values, tz_config); @@ -117,37 +121,36 @@ impl TaskCall for DataUrlTask { file_type.as_deref() }; - let registered_tables = conn.tables().await?; let df = if let Some(inline_name) = extract_inline_dataset(&url) { let inline_name = inline_name.trim().to_string(); if let Some(inline_dataset) = inline_datasets.get(&inline_name) { match inline_dataset { VegaFusionDataset::Table { table, .. } => { - conn.scan_arrow(table.clone().with_ordering()?).await? + let table = table.clone().with_ordering()?; + ctx.vegafusion_table(table).await? } - VegaFusionDataset::DataFrame(df) => df.clone(), } - } else if registered_tables.contains_key(&inline_name) { - conn.scan_table(&inline_name).await? + } else if let Ok(df) = ctx.table(&inline_name).await { + df } else { return Err(VegaFusionError::internal(format!( "No inline dataset named {inline_name}" ))); } } else if file_type == Some("csv") || (file_type.is_none() && url.ends_with(".csv")) { - read_csv(&url, &parse, conn, false).await? + read_csv(&url, &parse, ctx, false).await? } else if file_type == Some("tsv") || (file_type.is_none() && url.ends_with(".tsv")) { - read_csv(&url, &parse, conn, true).await? + read_csv(&url, &parse, ctx, true).await? } else if file_type == Some("json") || (file_type.is_none() && url.ends_with(".json")) { - read_json(&url, conn).await? + read_json(&url, ctx).await? } else if file_type == Some("arrow") || (file_type.is_none() && (url.ends_with(".arrow") || url.ends_with(".feather"))) { - read_arrow(&url, conn).await? + read_arrow(&url, ctx).await? } else if file_type == Some("parquet") || (file_type.is_none() && (url.ends_with(".parquet"))) { - read_parquet(&url, conn).await? + read_parquet(&url, ctx).await? } else { return Err(VegaFusionError::internal(format!( "Invalid url file extension {url}" @@ -155,7 +158,7 @@ impl TaskCall for DataUrlTask { }; // Ensure there is an ordering column present - let df = if df.schema().column_with_name(ORDER_COL).is_none() { + let df = if df.schema().inner().column_with_name(ORDER_COL).is_none() { df.with_index(ORDER_COL).await? } else { df @@ -172,7 +175,7 @@ impl TaskCall for DataUrlTask { } async fn eval_sql_df( - sql_df: Arc, + sql_df: DataFrame, pipeline: &Option, config: &CompilationConfig, ) -> Result<(TaskValue, Vec)> { @@ -186,7 +189,10 @@ async fn eval_sql_df( pipeline.eval_sql(sql_df, config).await? } else { // No transforms, just remove any ordering column - (sql_df.collect().await?.without_ordering()?, Vec::new()) + ( + sql_df.collect_to_table().await?.without_ordering()?, + Vec::new(), + ) }; let table_value = TaskValue::Table(transformed_df); @@ -289,10 +295,10 @@ fn check_builtin_dataset(url: String) -> String { } } -async fn pre_process_column_types(df: Arc) -> Result> { +async fn pre_process_column_types(df: DataFrame) -> Result { let mut selections: Vec = Vec::new(); let mut pre_proc_needed = false; - for field in df.schema().fields.iter() { + for field in df.schema().fields().iter() { if field.data_type() == &DataType::LargeUtf8 { // Work around https://github.com/apache/arrow-rs/issues/2654 by converting // LargeUtf8 to Utf8 @@ -309,17 +315,18 @@ async fn pre_process_column_types(df: Arc) -> Result, - sql_df: Arc, + sql_df: DataFrame, tz_config: &Option, -) -> Result> { +) -> Result { // Perform specialized date parsing let mut date_fields: Vec = Vec::new(); let mut df = sql_df; @@ -327,35 +334,48 @@ async fn process_datetimes( for spec in &formats.specs { let datatype = &spec.datatype; if datatype.starts_with("date") || datatype.starts_with("utc") { - let schema = df.schema_df()?; + // look for format string + let (typ, fmt) = if let Some((typ, fmt)) = datatype.split_once(':') { + if fmt.starts_with("'") && fmt.ends_with("'") { + (typ.to_lowercase(), Some(fmt[1..fmt.len() - 1].to_string())) + } else { + (typ.to_lowercase(), None) + } + } else { + (datatype.to_lowercase(), None) + }; + + let schema = df.schema(); if let Ok(date_field) = schema.field_with_unqualified_name(&spec.name) { let dtype = date_field.data_type(); let date_expr = if is_string_datatype(dtype) { - let default_input_tz_str = tz_config - .map(|tz_config| tz_config.default_input_tz.to_string()) - .unwrap_or_else(|| "UTC".to_string()); - - Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*STR_TO_UTC_TIMESTAMP_UDF).clone()), - args: vec![flat_col(&spec.name), lit(default_input_tz_str)], - }) + // Compute default timezone + let default_input_tz_str = if typ == "utc" || tz_config.is_none() { + "UTC".to_string() + } else { + tz_config.unwrap().default_input_tz.to_string() + }; + + if let Some(fmt) = fmt { + // Parse with single explicit format + str_to_timestamp( + flat_col(&spec.name), + &default_input_tz_str, + schema, + Some(fmt.as_str()), + )? + } else { + // Parse with auto formats, then localize to default_input_tz + str_to_timestamp( + flat_col(&spec.name), + &default_input_tz_str, + schema, + None, + )? + } } else if is_integer_datatype(dtype) { - // Assume Year was parsed numerically, use local time - let tz_config = - tz_config.with_context(|| "No local timezone info provided")?; - Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*MAKE_UTC_TIMESTAMP).clone()), - args: vec![ - flat_col(&spec.name), // year - lit(0), // month - lit(1), // day - lit(0), // hour - lit(0), // minute - lit(0), // second - lit(0), // millisecond - lit(tz_config.default_input_tz.to_string()), // time zone - ], - }) + // Assume Year was parsed numerically, return Date32 + make_date(flat_col(&spec.name), lit(1), lit(1)) } else { continue; }; @@ -376,7 +396,7 @@ async fn process_datetimes( }) .collect(); columns.push(date_expr.alias(&spec.name)); - df = df.select(columns).await? + df = df.select(columns)? } } } @@ -392,47 +412,38 @@ async fn process_datetimes( if !date_fields.contains(field.name()) { let expr = match field.data_type() { DataType::Timestamp(_, tz) => match tz { - Some(tz) => { - // Timestamp has explicit timezone - Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*TO_UTC_TIMESTAMP_UDF).clone()), - args: vec![flat_col(field.name()), lit(tz.as_ref())], - }) + Some(_) => { + // Timestamp has explicit timezone, all good + flat_col(field.name()) } _ => { - // Naive timestamp, interpret as default_input_tz + // Naive timestamp, localize to default_input_tz let tz_config = tz_config.with_context(|| "No local timezone info provided")?; - Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*TO_UTC_TIMESTAMP_UDF).clone()), - args: vec![ - flat_col(field.name()), - lit(tz_config.default_input_tz.to_string()), - ], - }) + flat_col(field.name()).try_cast_to( + &DataType::Timestamp( + TimeUnit::Millisecond, + Some(tz_config.default_input_tz.to_string().into()), + ), + schema, + )? } }, DataType::Date64 => { let tz_config = tz_config.with_context(|| "No local timezone info provided")?; - Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*TO_UTC_TIMESTAMP_UDF).clone()), - args: vec![ - flat_col(field.name()), - lit(tz_config.default_input_tz.to_string()), - ], - }) - } - DataType::Date32 => { - let tz_config = - tz_config.with_context(|| "No local timezone info provided")?; - - Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*DATE_TO_UTC_TIMESTAMP_UDF).clone()), - args: vec![flat_col(field.name()), lit(tz_config.local_tz.to_string())], - }) + // Cast to naive timestamp, then localize to timestamp with timezone + flat_col(field.name()) + .try_cast_to(&DataType::Timestamp(TimeUnit::Millisecond, None), schema)? + .try_cast_to( + &DataType::Timestamp( + TimeUnit::Millisecond, + Some(tz_config.default_input_tz.to_string().into()), + ), + schema, + )? } _ => flat_col(field.name()), }; @@ -448,7 +459,7 @@ async fn process_datetimes( }) .collect::>>()?; - df.select(selection).await + Ok(df.select(selection)?) } #[async_trait] @@ -458,7 +469,7 @@ impl TaskCall for DataValuesTask { values: &[TaskValue], tz_config: &Option, _inline_datasets: HashMap, - conn: Arc, + ctx: Arc, ) -> Result<(TaskValue, Vec)> { // Deserialize data into table let values_table = VegaFusionTable::from_ipc_bytes(&self.values)?; @@ -496,7 +507,7 @@ impl TaskCall for DataValuesTask { let config = build_compilation_config(&self.input_vars(), values, tz_config); // Process datetime columns - let df = conn.scan_arrow(values_table).await?; + let df = ctx.vegafusion_table(values_table).await?; let sql_df = process_datetimes(&parse, df, &config.tz_config).await?; let (table, output_values) = pipeline.eval_sql(sql_df, &config).await?; @@ -504,9 +515,9 @@ impl TaskCall for DataValuesTask { (table, output_values) } else { // No transforms - let values_df = conn.scan_arrow(values_table).await?; + let values_df = ctx.vegafusion_table(values_table).await?; let values_df = process_datetimes(&parse, values_df, tz_config).await?; - (values_df.collect().await?, Vec::new()) + (values_df.collect_to_table().await?, Vec::new()) }; let table_value = TaskValue::Table(transformed_table); @@ -522,7 +533,7 @@ impl TaskCall for DataSourceTask { values: &[TaskValue], tz_config: &Option, _inline_datasets: HashMap, - conn: Arc, + ctx: Arc, ) -> Result<(TaskValue, Vec)> { let input_vars = self.input_vars(); let mut config = build_compilation_config(&input_vars, values, tz_config); @@ -546,7 +557,7 @@ impl TaskCall for DataSourceTask { .unwrap_or(false) { let pipeline = self.pipeline.as_ref().unwrap(); - let sql_df = conn.scan_arrow(source_table).await?; + let sql_df = ctx.vegafusion_table(source_table).await?; let (table, output_values) = pipeline.eval_sql(sql_df, &config).await?; (table, output_values) @@ -563,9 +574,9 @@ impl TaskCall for DataSourceTask { async fn read_csv( url: &str, parse: &Option, - conn: Arc, + ctx: Arc, is_tsv: bool, -) -> Result> { +) -> Result { // Build base CSV options let mut csv_opts = if is_tsv { CsvReadOptions { @@ -577,26 +588,36 @@ async fn read_csv( }; // Add file extension based on URL - if let Some(ext) = Path::new(url).extension().and_then(|ext| ext.to_str()) { - csv_opts.file_extension = ext.to_string(); + let ext = if let Some(ext) = Path::new(url).extension().and_then(|ext| ext.to_str()) { + ext.to_string() } else { - csv_opts.file_extension = "".to_string(); - } + "".to_string() + }; + + csv_opts.file_extension = ext.as_str(); + + maybe_register_object_stores_for_url(&ctx, url)?; // Build schema from Vega parse options - let schema = build_csv_schema(parse); - csv_opts.schema = schema; + let schema = build_csv_schema(&csv_opts, parse, url, &ctx).await?; + csv_opts.schema = Some(&schema); - conn.scan_csv(url, csv_opts).await + Ok(ctx.read_csv(url, csv_opts).await?) } -fn build_csv_schema(parse: &Option) -> Option { +/// Build final schema by combining the input and inferred schemas +async fn build_csv_schema( + csv_opts: &CsvReadOptions<'_>, + parse: &Option, + uri: impl Into, + ctx: &SessionContext, +) -> Result { // Get HashMap of provided columns formats let format_specs = if let Some(parse) = parse { match parse { Parse::String(_) => { // auto, use inferred schema - return None; + HashMap::new() } Parse::Object(field_specs) => field_specs .specs @@ -608,7 +629,8 @@ fn build_csv_schema(parse: &Option) -> Option { HashMap::new() }; - let new_fields: Vec<_> = format_specs + // Map formats to fields + let field_types: HashMap<_, _> = format_specs .iter() .map(|(name, vega_type)| { let dtype = match vega_type.as_str() { @@ -618,67 +640,166 @@ fn build_csv_schema(parse: &Option) -> Option { "string" => DataType::Utf8, _ => DataType::Utf8, }; - Field::new(name, dtype, true) + (name.clone(), dtype) }) .collect(); - Some(Schema::new(new_fields)) + // Get inferred schema + let table_path = ListingTableUrl::parse(uri.into().as_str())?; + let listing_options = + csv_opts.to_listing_options(&ctx.copied_config(), TableOptions::default()); + let inferred_schema = listing_options + .infer_schema(&ctx.state(), &table_path) + .await?; + + // Override inferred schema based on parse options + let new_fields: Vec<_> = inferred_schema + .fields() + .iter() + .map(|field| { + // Use provided field type, but fall back to string for unprovided columns + let dtype = field_types + .get(field.name()) + .cloned() + .unwrap_or(DataType::Utf8); + Field::new(field.name(), dtype, true) + }) + .collect(); + Ok(Schema::new(new_fields)) } -async fn read_json(url: &str, conn: Arc) -> Result> { - // Read to json Value from local file or url. - let value: serde_json::Value = if url.starts_with("http://") || url.starts_with("https://") { - // Perform get request to collect file contents as text - let body = make_request_client() - .get(url) - .send() - .await - .external(&format!("Failed to get URL data from {url}"))? - .text() - .await - .external("Failed to convert URL data to text")?; - - serde_json::from_str(&body)? - } else if let Some(bucket_path) = url.strip_prefix("s3://") { - let s3= AmazonS3Builder::from_env().with_url(url).build().with_context(|| - "Failed to initialize s3 connection from environment variables.\n\ - See https://docs.rs/object_store/latest/object_store/aws/struct.AmazonS3Builder.html#method.from_env".to_string() - )?; - let Some((_, path)) = bucket_path.split_once('/') else { - return Err(VegaFusionError::specification(format!( - "Invalid s3 URL: {url}" - ))); - }; - let path = object_store::path::Path::from_url_path(path)?; - let get_result = s3.get(&path).await?; - let b = get_result.bytes().await?; - let text = String::from_utf8_lossy(b.as_ref()); - serde_json::from_str(text.as_ref())? - } else { - // Assume local file - let mut file = tokio::fs::File::open(url) - .await - .external(format!("Failed to open as local file: {url}"))?; +async fn read_json(url: &str, ctx: Arc) -> Result { + let value: serde_json::Value = + if let Some(base_url) = maybe_register_object_stores_for_url(&ctx, url)? { + // Create single use object store that points directly to file + let store = ctx.runtime_env().object_store(&base_url)?; + let child_url = url.strip_prefix(&base_url.to_string()).unwrap(); + match store.get(&child_url.into()).await { + Ok(get_res) => { + let bytes = get_res.bytes().await?; + let text: Cow = String::from_utf8_lossy(bytes.as_bytes()); + serde_json::from_str(text.as_ref())? + } + Err(e) => { + if url.starts_with("http://") || url.starts_with("https://") { + // Fallback to direct reqwest implementation. This is needed in some cases because + // the object-store http implementation has stricter requirements on what the + // server provides. For example the content-length header is required. + let response = make_request_client() + .get(url) + .send() + .await + .external(format!("Failed to fetch URL: {url}"))?; + + let text = response + .text() + .await + .external("Failed to read response as text")?; + serde_json::from_str(&text)? + } else { + return Err(VegaFusionError::from(e)); + } + } + } + } else { + // Assume local file + let mut file = tokio::fs::File::open(url) + .await + .external(format!("Failed to open as local file: {url}"))?; - let mut json_str = String::new(); - file.read_to_string(&mut json_str) - .await - .external("Failed to read file contents to string")?; + let mut json_str = String::new(); + file.read_to_string(&mut json_str) + .await + .external("Failed to read file contents to string")?; - serde_json::from_str(&json_str)? - }; + serde_json::from_str(&json_str)? + }; let table = VegaFusionTable::from_json(&value)?.with_ordering()?; + ctx.vegafusion_table(table).await +} - conn.scan_arrow(table).await +async fn read_arrow(url: &str, ctx: Arc) -> Result { + maybe_register_object_stores_for_url(&ctx, url)?; + Ok(ctx.read_arrow(url, ArrowReadOptions::default()).await?) } -async fn read_arrow(url: &str, conn: Arc) -> Result> { - conn.scan_arrow_file(url).await +async fn read_parquet(url: &str, ctx: Arc) -> Result { + maybe_register_object_stores_for_url(&ctx, url)?; + Ok(ctx.read_parquet(url, ParquetReadOptions::default()).await?) } -async fn read_parquet(url: &str, conn: Arc) -> Result> { - conn.scan_parquet(url).await +fn maybe_register_object_stores_for_url( + ctx: &SessionContext, + url: &str, +) -> Result> { + // Handle object store registration for non-local sources + let maybe_register_http_store = |prefix: &str| -> Result> { + if let Some(path) = url.strip_prefix(prefix) { + let Some((root, _)) = path.split_once('/') else { + return Err(VegaFusionError::specification(format!( + "Invalid https URL: {url}" + ))); + }; + let base_url_str = format!("https://{root}"); + let base_url = url::Url::parse(&base_url_str)?; + + // Register store for url if not already registered + let object_store_url = ObjectStoreUrl::parse(&base_url_str)?; + if ctx + .runtime_env() + .object_store(object_store_url.clone()) + .is_err() + { + let client_options = ClientOptions::new().with_allow_http(true); + let http_store = HttpBuilder::new() + .with_url(base_url.clone()) + .with_client_options(client_options) + .build()?; + + ctx.register_object_store(&base_url, Arc::new(http_store)); + } + return Ok(Some(object_store_url)); + } + Ok(None) + }; + + // Register https:// + if let Some(url) = maybe_register_http_store("https://")? { + return Ok(Some(url)); + } + + // Register http:// + if let Some(url) = maybe_register_http_store("http://")? { + return Ok(Some(url)); + } + + // Register s3:// + if let Some(bucket_path) = url.strip_prefix("s3://") { + let Some((bucket, _)) = bucket_path.split_once('/') else { + return Err(VegaFusionError::specification(format!( + "Invalid s3 URL: {url}" + ))); + }; + // Register store for url if not already registered + let base_url_str = format!("s3://{bucket}/"); + let object_store_url = ObjectStoreUrl::parse(&base_url_str)?; + if ctx + .runtime_env() + .object_store(object_store_url.clone()) + .is_err() + { + let base_url = url::Url::parse(&base_url_str)?; + let s3 = AmazonS3Builder::from_env().with_url(base_url.clone()).build().with_context(|| + "Failed to initialize s3 connection from environment variables.\n\ + See https://docs.rs/object_store/latest/object_store/aws/struct.AmazonS3Builder.html#method.from_env".to_string() + )?; + ctx.register_object_store(&base_url, Arc::new(s3)); + } + return Ok(Some(object_store_url)); + } + + Ok(None) } pub fn make_request_client() -> ClientWithMiddleware { diff --git a/vegafusion-runtime/src/data/util.rs b/vegafusion-runtime/src/data/util.rs new file mode 100644 index 000000000..2262c171f --- /dev/null +++ b/vegafusion-runtime/src/data/util.rs @@ -0,0 +1,172 @@ +use async_trait::async_trait; +use datafusion::datasource::{provider_as_source, MemTable}; +use datafusion::prelude::{DataFrame, SessionContext}; +use datafusion_common::tree_node::{Transformed, TreeNode, TreeNodeRewriter}; +use datafusion_common::TableReference; +use datafusion_expr::expr::WildcardOptions; +use datafusion_expr::{col, Expr, LogicalPlanBuilder, UNNAMED_TABLE}; +use datafusion_functions_window::row_number::row_number; +use std::sync::Arc; +use vegafusion_common::arrow::array::RecordBatch; +use vegafusion_common::arrow::compute::concat_batches; +use vegafusion_common::data::table::VegaFusionTable; +use vegafusion_common::error::ResultWithContext; + +#[async_trait] +pub trait SessionContextUtils { + async fn vegafusion_table( + &self, + tbl: VegaFusionTable, + ) -> vegafusion_common::error::Result; +} + +#[async_trait] +impl SessionContextUtils for SessionContext { + async fn vegafusion_table( + &self, + tbl: VegaFusionTable, + ) -> vegafusion_common::error::Result { + let mem_table = MemTable::try_new(tbl.schema.clone(), vec![tbl.batches])?; + + // Based on self.read_batch() + Ok(DataFrame::new( + self.state(), + LogicalPlanBuilder::scan(UNNAMED_TABLE, provider_as_source(Arc::new(mem_table)), None)? + .build()?, + )) + } +} + +#[async_trait] +pub trait DataFrameUtils { + async fn collect_to_table(self) -> vegafusion_common::error::Result; + async fn collect_flat(self) -> vegafusion_common::error::Result; + async fn with_index(self, index_name: &str) -> vegafusion_common::error::Result; + + /// Variant of aggregate that can handle agg expressions that include projections on top + /// of aggregations. Also includes groupby expressions in the final result + fn aggregate_mixed( + self, + group_expr: Vec, + aggr_expr: Vec, + ) -> vegafusion_common::error::Result; + fn alias(self, name: impl Into) -> vegafusion_common::error::Result; +} + +#[async_trait] +impl DataFrameUtils for DataFrame { + async fn collect_to_table(self) -> vegafusion_common::error::Result { + let mut arrow_schema = self.schema().inner().clone(); + let batches = self.collect().await?; + if let Some(batch) = batches.first() { + // use first batch schema if present + arrow_schema = batch.schema() + } + VegaFusionTable::try_new(arrow_schema, batches) + } + + async fn collect_flat(self) -> vegafusion_common::error::Result { + let mut arrow_schema = self.schema().inner().clone(); + let batches = self.collect().await?; + if let Some(batch) = batches.first() { + arrow_schema = batch.schema() + } + concat_batches(&arrow_schema, batches.as_slice()) + .with_context(|| String::from("Failed to concatenate RecordBatches")) + } + + async fn with_index(self, index_name: &str) -> vegafusion_common::error::Result { + if self.schema().inner().column_with_name(index_name).is_some() { + // Column is already present, don't overwrite + Ok(self.select(vec![Expr::Wildcard { + qualifier: None, + options: WildcardOptions::default(), + }])?) + } else { + let selections = vec![ + row_number().alias(index_name), + Expr::Wildcard { + qualifier: None, + options: WildcardOptions::default(), + }, + ]; + Ok(self.select(selections)?) + } + } + + fn aggregate_mixed( + self, + group_expr: Vec, + aggr_expr: Vec, + ) -> vegafusion_common::error::Result { + let mut select_exprs: Vec = Vec::new(); + + // Extract pure agg expressions + let mut agg_rewriter = PureAggRewriter::new(); + + for agg_expr in aggr_expr { + let select_expr = agg_expr.rewrite(&mut agg_rewriter)?; + select_exprs.push(select_expr.data) + } + + // Apply pure agg functions + let df = self.aggregate(group_expr.clone(), agg_rewriter.pure_aggs)?; + + // Add groupby exprs to selection + select_exprs.extend(group_expr); + + // Apply projection on top of aggs + Ok(df.select(select_exprs)?) + } + + fn alias(self, name: impl Into) -> vegafusion_common::error::Result { + let (state, plan) = self.into_parts(); + Ok(DataFrame::new( + state, + LogicalPlanBuilder::new(plan).alias(name)?.build()?, + )) + } +} + +pub struct PureAggRewriter { + pub pure_aggs: Vec, + pub next_id: usize, +} + +impl Default for PureAggRewriter { + fn default() -> Self { + Self::new() + } +} + +impl PureAggRewriter { + pub fn new() -> Self { + Self { + pure_aggs: vec![], + next_id: 0, + } + } + + fn new_agg_name(&mut self) -> String { + let name = format!("_agg_{}", self.next_id); + self.next_id += 1; + name + } +} + +impl TreeNodeRewriter for PureAggRewriter { + type Node = Expr; + + fn f_down(&mut self, node: Expr) -> datafusion_common::Result> { + if let Expr::AggregateFunction(agg) = node { + // extract agg and replace with column + let name = self.new_agg_name(); + self.pure_aggs + .push(Expr::AggregateFunction(agg).alias(&name)); + Ok(Transformed::new_transformed(col(name), true)) + } else { + // Return expr node unchanged + Ok(Transformed::no(node)) + } + } +} diff --git a/vegafusion-runtime/src/datafusion/context.rs b/vegafusion-runtime/src/datafusion/context.rs new file mode 100644 index 000000000..6e461a69d --- /dev/null +++ b/vegafusion-runtime/src/datafusion/context.rs @@ -0,0 +1,33 @@ +use crate::datafusion::udafs::percentile::{Q1_UDF, Q3_UDF}; +use crate::datafusion::udfs::datetime::make_timestamptz::MAKE_UTC_TIMESTAMP; +use crate::datafusion::udfs::datetime::timeunit::TIMEUNIT_START_UDF; +use datafusion::execution::runtime_env::RuntimeEnv; +use datafusion::execution::SessionStateBuilder; +use datafusion::prelude::{SessionConfig, SessionContext}; +use std::sync::Arc; + +pub fn make_datafusion_context() -> SessionContext { + let mut config = SessionConfig::new(); + let options = config.options_mut(); + options.optimizer.skip_failed_rules = true; + let runtime = Arc::new(RuntimeEnv::default()); + let session_state = SessionStateBuilder::new() + .with_config(config) + .with_runtime_env(runtime) + .with_default_features() + .build(); + + let ctx = SessionContext::new_with_state(session_state); + + // datetime + ctx.register_udf((*MAKE_UTC_TIMESTAMP).clone()); + + // timeunit + ctx.register_udf((*TIMEUNIT_START_UDF).clone()); + + // q1/q3 aggregate functions + ctx.register_udaf((*Q1_UDF).clone()); + ctx.register_udaf((*Q3_UDF).clone()); + + ctx +} diff --git a/vegafusion-runtime/src/datafusion/mod.rs b/vegafusion-runtime/src/datafusion/mod.rs new file mode 100644 index 000000000..16e197d37 --- /dev/null +++ b/vegafusion-runtime/src/datafusion/mod.rs @@ -0,0 +1,3 @@ +pub mod context; +pub mod udafs; +pub mod udfs; diff --git a/vegafusion-runtime/src/datafusion/udafs/mod.rs b/vegafusion-runtime/src/datafusion/udafs/mod.rs new file mode 100644 index 000000000..edb7043ab --- /dev/null +++ b/vegafusion-runtime/src/datafusion/udafs/mod.rs @@ -0,0 +1 @@ +pub mod percentile; diff --git a/vegafusion-datafusion-udfs/src/udafs/mod.rs b/vegafusion-runtime/src/datafusion/udafs/percentile.rs similarity index 100% rename from vegafusion-datafusion-udfs/src/udafs/mod.rs rename to vegafusion-runtime/src/datafusion/udafs/percentile.rs diff --git a/vegafusion-datafusion-udfs/src/udfs/datetime/make_utc_timestamp.rs b/vegafusion-runtime/src/datafusion/udfs/datetime/make_timestamptz.rs similarity index 79% rename from vegafusion-datafusion-udfs/src/udfs/datetime/make_utc_timestamp.rs rename to vegafusion-runtime/src/datafusion/udfs/datetime/make_timestamptz.rs index cf139b824..a0761aa9d 100644 --- a/vegafusion-datafusion-udfs/src/udfs/datetime/make_utc_timestamp.rs +++ b/vegafusion-runtime/src/datafusion/udfs/datetime/make_timestamptz.rs @@ -2,7 +2,7 @@ use chrono::{DateTime, TimeZone, Timelike}; use std::any::Any; use std::str::FromStr; use std::sync::Arc; -use vegafusion_common::datafusion_expr::ScalarUDFImpl; +use vegafusion_common::datafusion_expr::{expr, lit, Expr, ScalarUDFImpl}; use vegafusion_common::{ arrow::{ array::{Array, ArrayRef, Int64Array, TimestampMillisecondBuilder}, @@ -14,28 +14,30 @@ use vegafusion_common::{ }; #[derive(Debug, Clone)] -pub struct MakeUtcTimestampUDF { +pub struct MakeTimestamptzUDF { signature: Signature, } -impl Default for MakeUtcTimestampUDF { +impl Default for MakeTimestamptzUDF { fn default() -> Self { Self::new() } } -impl MakeUtcTimestampUDF { +impl MakeTimestamptzUDF { pub fn new() -> Self { - let signature = Signature::exact( + // Use Signature::coercible instead of Signature::exact so that float will be + // truncated to ints. + let signature = Signature::coercible( vec![ - DataType::Float64, // year - DataType::Float64, // month - DataType::Float64, // date - DataType::Float64, // hour - DataType::Float64, // minute - DataType::Float64, // second - DataType::Float64, // millisecond - DataType::Utf8, // time zone + DataType::Int64, // year + DataType::Int64, // month + DataType::Int64, // date + DataType::Int64, // hour + DataType::Int64, // minute + DataType::Int64, // second + DataType::Int64, // millisecond + DataType::Utf8, // time zone ], Volatility::Immutable, ); @@ -43,13 +45,13 @@ impl MakeUtcTimestampUDF { } } -impl ScalarUDFImpl for MakeUtcTimestampUDF { +impl ScalarUDFImpl for MakeTimestamptzUDF { fn as_any(&self) -> &dyn Any { self } fn name(&self) -> &str { - "make_utc_timestamp" + "make_timestamptz" } fn signature(&self) -> &Signature { @@ -60,7 +62,10 @@ impl ScalarUDFImpl for MakeUtcTimestampUDF { &self, _arg_types: &[DataType], ) -> vegafusion_common::datafusion_common::Result { - Ok(DataType::Timestamp(TimeUnit::Millisecond, None)) + Ok(DataType::Timestamp( + TimeUnit::Millisecond, + Some("UTC".into()), + )) } fn invoke( @@ -103,6 +108,7 @@ impl ScalarUDFImpl for MakeUtcTimestampUDF { let years = cast(&args[0], &DataType::Int64).unwrap(); let years = years.as_any().downcast_ref::().unwrap(); + // Months are one-based. let months = cast(&args[1], &DataType::Int64).unwrap(); let months = months.as_any().downcast_ref::().unwrap(); @@ -122,7 +128,7 @@ impl ScalarUDFImpl for MakeUtcTimestampUDF { let millis = millis.as_any().downcast_ref::().unwrap(); let num_rows = years.len(); - let mut datetime_builder = TimestampMillisecondBuilder::new(); + let mut datetime_builder = TimestampMillisecondBuilder::new().with_timezone("UTC"); for i in 0..num_rows { if years.is_null(i) @@ -153,7 +159,7 @@ impl ScalarUDFImpl for MakeUtcTimestampUDF { let datetime: Option> = input_tz .with_ymd_and_hms( year as i32, - month as u32 + 1, + month as u32, day as u32, hour as u32, minute as u32, @@ -184,6 +190,31 @@ impl ScalarUDFImpl for MakeUtcTimestampUDF { } } +pub fn make_timestamptz( + year: Expr, + month: Expr, + date: Expr, + hour: Expr, + minute: Expr, + second: Expr, + millisecond: Expr, + tz: &str, +) -> Expr { + Expr::ScalarFunction(expr::ScalarFunction { + func: Arc::new(ScalarUDF::from(MakeTimestamptzUDF::new())), + args: vec![ + year, + month, + date, + hour, + minute, + second, + millisecond, + lit(tz), + ], + }) +} + lazy_static! { - pub static ref MAKE_UTC_TIMESTAMP: ScalarUDF = ScalarUDF::from(MakeUtcTimestampUDF::new()); + pub static ref MAKE_UTC_TIMESTAMP: ScalarUDF = ScalarUDF::from(MakeTimestamptzUDF::new()); } diff --git a/vegafusion-runtime/src/datafusion/udfs/datetime/mod.rs b/vegafusion-runtime/src/datafusion/udfs/datetime/mod.rs new file mode 100644 index 000000000..8e573edd6 --- /dev/null +++ b/vegafusion-runtime/src/datafusion/udfs/datetime/mod.rs @@ -0,0 +1,2 @@ +pub mod make_timestamptz; +pub mod timeunit; diff --git a/vegafusion-datafusion-udfs/src/udfs/datetime/timeunit.rs b/vegafusion-runtime/src/datafusion/udfs/datetime/timeunit.rs similarity index 86% rename from vegafusion-datafusion-udfs/src/udfs/datetime/timeunit.rs rename to vegafusion-runtime/src/datafusion/udfs/datetime/timeunit.rs index 1a01a1821..9bf4e8361 100644 --- a/vegafusion-datafusion-udfs/src/udfs/datetime/timeunit.rs +++ b/vegafusion-runtime/src/datafusion/udfs/datetime/timeunit.rs @@ -1,16 +1,15 @@ -use crate::udfs::datetime::process_input_datetime; use chrono::{DateTime, Datelike, NaiveDate, NaiveDateTime, TimeZone, Timelike, Utc, Weekday}; use std::any::Any; use std::str::FromStr; use std::sync::Arc; -use vegafusion_common::arrow::array::{ArrayRef, Int64Array, TimestampMillisecondArray}; +use vegafusion_common::arrow::array::{ArrayRef, TimestampMillisecondArray}; use vegafusion_common::arrow::compute::try_unary; use vegafusion_common::arrow::datatypes::{DataType, TimeUnit}; use vegafusion_common::arrow::error::ArrowError; use vegafusion_common::arrow::temporal_conversions::date64_to_datetime; use vegafusion_common::datafusion_common::{DataFusionError, ScalarValue}; use vegafusion_common::datafusion_expr::{ - ColumnarValue, ScalarUDF, ScalarUDFImpl, Signature, TypeSignature, Volatility, + ColumnarValue, ScalarUDF, ScalarUDFImpl, Signature, Volatility, }; fn extract_bool(value: &ColumnarValue) -> std::result::Result { @@ -41,7 +40,6 @@ fn unpack_timeunit_udf_args( })?; let timestamp = columns[0].clone().into_array(1)?; - let timestamp = process_input_datetime(×tamp, &tz)?; Ok(( timestamp, @@ -278,31 +276,21 @@ impl Default for TimeunitStartUDF { impl TimeunitStartUDF { pub fn new() -> Self { - let make_sig = |timestamp_dtype: DataType| -> TypeSignature { - TypeSignature::Exact(vec![ - timestamp_dtype, // [0] timestamp - DataType::Utf8, // [1] timezone - DataType::Boolean, // [2] Year - DataType::Boolean, // [3] Quarter - DataType::Boolean, // [4] Month - DataType::Boolean, // [5] Date - DataType::Boolean, // [6] Week - DataType::Boolean, // [7] Day - DataType::Boolean, // [8] DayOfYear - DataType::Boolean, // [9] Hours - DataType::Boolean, // [10] Minutes - DataType::Boolean, // [11] Seconds - DataType::Boolean, // [12] Milliseconds - ]) - }; - - let signature = Signature::one_of( + let signature = Signature::exact( vec![ - make_sig(DataType::Int64), - make_sig(DataType::Date64), - make_sig(DataType::Date32), - make_sig(DataType::Timestamp(TimeUnit::Millisecond, None)), - make_sig(DataType::Timestamp(TimeUnit::Nanosecond, None)), + DataType::Timestamp(TimeUnit::Millisecond, Some("UTC".into())), // [0] timestamp + DataType::Utf8, // [1] timezone + DataType::Boolean, // [2] Year + DataType::Boolean, // [3] Quarter + DataType::Boolean, // [4] Month + DataType::Boolean, // [5] Date + DataType::Boolean, // [6] Week + DataType::Boolean, // [7] Day + DataType::Boolean, // [8] DayOfYear + DataType::Boolean, // [9] Hours + DataType::Boolean, // [10] Minutes + DataType::Boolean, // [11] Seconds + DataType::Boolean, // [12] Milliseconds ], Volatility::Immutable, ); @@ -328,7 +316,10 @@ impl ScalarUDFImpl for TimeunitStartUDF { &self, _arg_types: &[DataType], ) -> vegafusion_common::datafusion_common::Result { - Ok(DataType::Timestamp(TimeUnit::Millisecond, None)) + Ok(DataType::Timestamp( + TimeUnit::Millisecond, + Some("UTC".into()), + )) } fn invoke( @@ -336,8 +327,10 @@ impl ScalarUDFImpl for TimeunitStartUDF { args: &[ColumnarValue], ) -> vegafusion_common::datafusion_common::Result { let (timestamp, tz, units_mask) = unpack_timeunit_udf_args(args)?; - - let array = timestamp.as_any().downcast_ref::().unwrap(); + let array = timestamp + .as_any() + .downcast_ref::() + .unwrap(); let result_array: TimestampMillisecondArray = try_unary(array, |value| { Ok( perform_timeunit_start_from_utc(value, units_mask.as_slice(), tz)? @@ -345,7 +338,9 @@ impl ScalarUDFImpl for TimeunitStartUDF { ) })?; - Ok(ColumnarValue::Array(Arc::new(result_array) as ArrayRef)) + Ok(ColumnarValue::Array( + Arc::new(result_array.with_timezone("UTC")) as ArrayRef, + )) } } diff --git a/vegafusion-runtime/src/datafusion/udfs/mod.rs b/vegafusion-runtime/src/datafusion/udfs/mod.rs new file mode 100644 index 000000000..75e4d4b9a --- /dev/null +++ b/vegafusion-runtime/src/datafusion/udfs/mod.rs @@ -0,0 +1 @@ +pub mod datetime; diff --git a/vegafusion-runtime/src/expression/compiler/builtin_functions/array/indexof.rs b/vegafusion-runtime/src/expression/compiler/builtin_functions/array/indexof.rs new file mode 100644 index 000000000..f469b079c --- /dev/null +++ b/vegafusion-runtime/src/expression/compiler/builtin_functions/array/indexof.rs @@ -0,0 +1,46 @@ +use datafusion_common::DFSchema; +use datafusion_expr::{lit, Expr, ExprSchemable}; +use datafusion_functions::expr_fn::{coalesce, strpos}; +use datafusion_functions_nested::expr_fn::array_position; +use std::ops::Sub; +use vegafusion_common::arrow::datatypes::DataType; +use vegafusion_common::error::{ResultWithContext, VegaFusionError}; + +pub fn indexof_transform( + args: &[Expr], + schema: &DFSchema, +) -> vegafusion_common::error::Result { + if args.len() == 2 { + let array_expr = args[0].clone(); + let item_expr = args[1].clone(); + let dtype = array_expr + .get_type(schema) + .with_context(|| format!("Failed to infer type of expression: {array_expr:?}"))?; + + let indexof_expr = match dtype { + DataType::Utf8 | DataType::LargeUtf8 => { + Ok(coalesce(vec![ + strpos(array_expr, item_expr).sub(lit(1)), + lit(-1) + ])) + }, + DataType::List(_) | DataType::LargeList(_) | DataType::FixedSizeList(_, _) => { + Ok(coalesce(vec![ + array_position(array_expr, item_expr, lit(1)).sub(lit(1)), + lit(-1) + ])) + }, + _ => Err(VegaFusionError::parse(format!( + "indexof function support array and string arguments. Received argument with type {:?}", + dtype + ))), + }?; + + Ok(indexof_expr.cast_to(&DataType::Float64, schema)?) + } else { + Err(VegaFusionError::parse(format!( + "indexof requires a single argument. Received {} arguments", + args.len() + ))) + } +} diff --git a/vegafusion-runtime/src/expression/compiler/builtin_functions/array/length.rs b/vegafusion-runtime/src/expression/compiler/builtin_functions/array/length.rs index 1b029a2a8..31051e08e 100644 --- a/vegafusion-runtime/src/expression/compiler/builtin_functions/array/length.rs +++ b/vegafusion-runtime/src/expression/compiler/builtin_functions/array/length.rs @@ -1,5 +1,5 @@ use datafusion_common::DFSchema; -use datafusion_expr::{expr, Expr, ExprSchemable}; +use datafusion_expr::{Expr, ExprSchemable}; use datafusion_functions::unicode::expr_fn::character_length; use datafusion_functions_nested::length::array_length; @@ -17,14 +17,12 @@ pub fn length_transform( .with_context(|| format!("Failed to infer type of expression: {arg:?}"))?; let len_expr = match dtype { - DataType::Utf8 | DataType::LargeUtf8 => Ok(Expr::Cast(expr::Cast { - expr: Box::new(character_length(arg)), - data_type: DataType::Float64 - })), - DataType::List(_) | DataType::LargeList(_) | DataType::FixedSizeList(_, _) => Ok(Expr::Cast(expr::Cast { - expr: Box::new(array_length(arg)), - data_type: DataType::Float64 - })), + DataType::Utf8 | DataType::LargeUtf8 => { + Ok(character_length(arg)) + }, + DataType::List(_) | DataType::LargeList(_) | DataType::FixedSizeList(_, _) => { + Ok(array_length(arg)) + }, _ => Err(VegaFusionError::parse(format!( "length function support array and string arguments. Received argument with type {:?}", dtype diff --git a/vegafusion-runtime/src/expression/compiler/builtin_functions/array/mod.rs b/vegafusion-runtime/src/expression/compiler/builtin_functions/array/mod.rs index 687393174..936329d15 100644 --- a/vegafusion-runtime/src/expression/compiler/builtin_functions/array/mod.rs +++ b/vegafusion-runtime/src/expression/compiler/builtin_functions/array/mod.rs @@ -1,4 +1,3 @@ +pub mod indexof; pub mod length; - -// // Span transform not in use yet -// pub mod span; +pub mod span; diff --git a/vegafusion-runtime/src/expression/compiler/builtin_functions/array/span.rs b/vegafusion-runtime/src/expression/compiler/builtin_functions/array/span.rs index 22fca919a..c5aeafb4a 100644 --- a/vegafusion-runtime/src/expression/compiler/builtin_functions/array/span.rs +++ b/vegafusion-runtime/src/expression/compiler/builtin_functions/array/span.rs @@ -1,12 +1,11 @@ -use std::ops::Sub; use datafusion_common::DFSchema; -use datafusion_expr::{BuiltinScalarFunction, Expr, expr, ExprSchemable, lit, ScalarFunctionDefinition, when}; +use datafusion_expr::{lit, when, Expr, ExprSchemable}; +use datafusion_functions_nested::expr_fn::array_element; +use datafusion_functions_nested::length::array_length; +use std::ops::Sub; use vegafusion_common::arrow::datatypes::DataType; use vegafusion_common::error::{ResultWithContext, VegaFusionError}; -// Note: I believe this implementation of span, using built-in DataFusion functions, is correct. -// But the DataFusion simplifier doesn't seem to know how to simplify it, which is what we use for -// scalar evaluation, so we can't use it yet. pub fn span_transform(args: &[Expr], schema: &DFSchema) -> vegafusion_common::error::Result { if args.len() == 1 { let arg = args[0].clone(); @@ -15,32 +14,22 @@ pub fn span_transform(args: &[Expr], schema: &DFSchema) -> vegafusion_common::er .with_context(|| format!("Failed to infer type of expression: {arg:?}"))?; match dtype { - DataType::List(field) | DataType::LargeList(field) | DataType::FixedSizeList(field, _) => { + DataType::List(field) + | DataType::LargeList(field) + | DataType::FixedSizeList(field, _) => { if field.data_type().is_numeric() { - let len = Expr::ScalarFunction(expr::ScalarFunction { - func_def: ScalarFunctionDefinition::BuiltIn(BuiltinScalarFunction::ArrayLength), - args: vec![arg.clone()], - }).cast_to(&DataType::Int32, schema)?; - - let first_el = Expr::ScalarFunction(expr::ScalarFunction { - func_def: ScalarFunctionDefinition::BuiltIn(BuiltinScalarFunction::ArrayElement), - args: vec![arg.clone(), lit(1)], - }); - - let last_el = Expr::ScalarFunction(expr::ScalarFunction { - func_def: ScalarFunctionDefinition::BuiltIn(BuiltinScalarFunction::ArrayElement), - args: vec![arg.clone(), len.clone()], - }); - + let len = array_length(arg.clone()).cast_to(&DataType::Int32, schema)?; + let first_el = array_element(arg.clone(), lit(1)); + let last_el = array_element(arg.clone(), len.clone()); Ok(when(len.eq(lit(0)), lit(0.0)).otherwise(last_el.sub(first_el))?) } else { Ok(lit(0.0)) } - }, + } _ => { // Span of non-array is zero Ok(lit(0.0)) - }, + } } } else { Err(VegaFusionError::parse(format!( @@ -48,4 +37,4 @@ pub fn span_transform(args: &[Expr], schema: &DFSchema) -> vegafusion_common::er args.len() ))) } -} \ No newline at end of file +} diff --git a/vegafusion-runtime/src/expression/compiler/builtin_functions/data/vl_selection_test.rs b/vegafusion-runtime/src/expression/compiler/builtin_functions/data/vl_selection_test.rs index e29c32f5e..22578646f 100644 --- a/vegafusion-runtime/src/expression/compiler/builtin_functions/data/vl_selection_test.rs +++ b/vegafusion-runtime/src/expression/compiler/builtin_functions/data/vl_selection_test.rs @@ -4,12 +4,12 @@ use std::collections::HashMap; use std::convert::TryFrom; use crate::task_graph::timezone::RuntimeTzConfig; +use crate::transform::utils::to_epoch_millis; use datafusion_expr::expr::Case; use datafusion_expr::{expr, lit, Between, Expr, ExprSchemable}; use datafusion_functions::expr_fn::ceil; use std::str::FromStr; -use std::sync::Arc; -use vegafusion_common::arrow::datatypes::{DataType, TimeUnit}; +use vegafusion_common::arrow::datatypes::DataType; use vegafusion_common::column::flat_col; use vegafusion_common::data::scalar::{ArrayRefHelpers, ScalarValue}; use vegafusion_common::data::table::VegaFusionTable; @@ -23,8 +23,6 @@ use vegafusion_core::proto::gen::expression::literal::Value; use vegafusion_core::proto::gen::{ expression::expression::Expr as ProtoExpr, expression::Expression, expression::Literal, }; -use vegafusion_datafusion_udfs::udfs::datetime::str_to_utc_timestamp::STR_TO_UTC_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::utc_timestamp_to_epoch::UTC_TIMESTAMP_TO_EPOCH_MS; /// Op #[derive(Debug, Clone)] @@ -129,12 +127,9 @@ impl FieldSpec { // Convert timestamp column to integer milliseconds before comparisons. let field_col = if matches!( field_col.get_type(schema)?, - DataType::Timestamp(TimeUnit::Millisecond, _) + DataType::Timestamp(_, _) | DataType::Date32 | DataType::Date64 ) { - Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*UTC_TIMESTAMP_TO_EPOCH_MS).clone()), - args: vec![field_col], - }) + to_epoch_millis(field_col, default_input_tz, schema)? } else { field_col }; @@ -267,20 +262,19 @@ impl FieldSpec { ) -> Result { match scalar { ScalarValue::Utf8(Some(s)) + | ScalarValue::LargeUtf8(Some(s)) + | ScalarValue::Utf8View(Some(s)) if parse_datetime(&s, &Some(chrono_tz::UTC)).is_some() && is_numeric_datatype(field_type) => { - let timestamp_expr = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*STR_TO_UTC_TIMESTAMP_UDF).clone()), - args: vec![lit(s), lit(default_input_tz)], - }); - let ms_expr = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*UTC_TIMESTAMP_TO_EPOCH_MS).clone()), - args: vec![timestamp_expr], - }); + let ms_expr = to_epoch_millis(lit(s), default_input_tz, schema)?; cast_to(ms_expr, field_type, schema) } - ScalarValue::Utf8(Some(s)) if field_type == &DataType::Boolean => { + ScalarValue::Utf8(Some(s)) + | ScalarValue::LargeUtf8(Some(s)) + | ScalarValue::Utf8View(Some(s)) + if field_type == &DataType::Boolean => + { // If comparing string to boolean, treat "false" and "" as false, // all others as true Ok(match s.as_str() { diff --git a/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/date_format.rs b/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/date_format.rs index bd4468343..fa4fa52ea 100644 --- a/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/date_format.rs +++ b/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/date_format.rs @@ -1,27 +1,24 @@ +use crate::expression::compiler::utils::ExprHelpers; use crate::task_graph::timezone::RuntimeTzConfig; -use datafusion_expr::{expr, lit, Expr, ExprSchemable}; -use std::sync::Arc; +use crate::transform::timeunit::to_timestamp_col; +use datafusion_expr::{lit, Expr}; +use datafusion_functions::expr_fn::to_char; +use std::collections::HashMap; use vegafusion_common::arrow::datatypes::DataType; use vegafusion_common::datafusion_common::{DFSchema, ScalarValue}; -use vegafusion_common::datatypes::{cast_to, is_numeric_datatype}; use vegafusion_core::arrow::datatypes::TimeUnit; use vegafusion_core::error::{Result, VegaFusionError}; -use vegafusion_datafusion_udfs::udfs::datetime::epoch_to_utc_timestamp::EPOCH_MS_TO_UTC_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::format_timestamp::FORMAT_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::from_utc_timestamp::FROM_UTC_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::str_to_utc_timestamp::STR_TO_UTC_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::utc_timestamp_to_str::UTC_TIMESTAMP_TO_STR_UDF; pub fn time_format_fn( tz_config: &RuntimeTzConfig, args: &[Expr], schema: &DFSchema, ) -> Result { - let format_str = extract_format_str(args)?; + let format_str = d3_to_chrono_format(&extract_format_str(args)?); // Handle format timezone override let format_tz_str = if args.len() >= 3 { - // Second argument is a an override local timezone string + // Second argument is an override local timezone string let format_tz_expr = &args[2]; if let Expr::Literal(ScalarValue::Utf8(Some(format_tz_str))) = format_tz_expr { format_tz_str.clone() @@ -34,33 +31,17 @@ pub fn time_format_fn( tz_config.local_tz.to_string() }; - let mut timestamptz_expr = - to_timestamptz_expr(&args[0], schema, &tz_config.default_input_tz.to_string())?; + let timestamptz_expr = to_timestamp_col( + args[0].clone(), + schema, + &tz_config.default_input_tz.to_string(), + )? + .try_cast_to( + &DataType::Timestamp(TimeUnit::Millisecond, Some(format_tz_str.into())), + schema, + )?; - if format_str == "%Y-%m-%dT%H:%M:%S.%L" { - // Special case for ISO-8601 format with milliseconds. The UTC_TIMESTAMP_TO_STR_UDF - // is compatible with more SQL dialects, so we want to use it if possible - let udf_args = vec![timestamptz_expr, lit(&format_tz_str)]; - Ok(Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*UTC_TIMESTAMP_TO_STR_UDF).clone()), - args: udf_args, - })) - } else { - // General case - if format_tz_str.to_ascii_lowercase() != "utc" { - timestamptz_expr = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*FROM_UTC_TIMESTAMP_UDF).clone()), - args: vec![timestamptz_expr, lit(format_tz_str)], - }) - } - - let udf_args = vec![timestamptz_expr, lit(format_str)]; - - Ok(Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*FORMAT_TIMESTAMP_UDF).clone()), - args: udf_args, - })) - } + Ok(to_char(timestamptz_expr, lit(format_str))) } pub fn utc_format_fn( @@ -68,56 +49,18 @@ pub fn utc_format_fn( args: &[Expr], schema: &DFSchema, ) -> Result { - let format_str = extract_format_str(args)?; - let timestamptz_expr = - to_timestamptz_expr(&args[0], schema, &tz_config.default_input_tz.to_string())?; - - if format_str == "%Y-%m-%dT%H:%M:%S.%L" { - // Special case for ISO-8601 format with milliseconds. The UTC_TIMESTAMP_TO_STR_UDF - // is compatible with more SQL dialects, so we want to use it if possible - let udf_args = vec![timestamptz_expr, lit("UTC")]; - Ok(Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*UTC_TIMESTAMP_TO_STR_UDF).clone()), - args: udf_args, - })) - } else { - // General case - let udf_args = vec![timestamptz_expr, lit(format_str)]; - Ok(Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*FORMAT_TIMESTAMP_UDF).clone()), - args: udf_args, - })) - } -} + let format_str = d3_to_chrono_format(&extract_format_str(args)?); + let timestamptz_expr = to_timestamp_col( + args[0].clone(), + schema, + &tz_config.default_input_tz.to_string(), + )? + .try_cast_to( + &DataType::Timestamp(TimeUnit::Millisecond, Some("UTC".into())), + schema, + )?; -fn to_timestamptz_expr(arg: &Expr, schema: &DFSchema, default_input_tz: &str) -> Result { - Ok(match arg.get_type(schema)? { - DataType::Date32 => Expr::Cast(expr::Cast { - expr: Box::new(arg.clone()), - data_type: DataType::Timestamp(TimeUnit::Millisecond, None), - }), - DataType::Date64 => Expr::Cast(expr::Cast { - expr: Box::new(arg.clone()), - data_type: DataType::Timestamp(TimeUnit::Millisecond, None), - }), - DataType::Timestamp(_, _) => arg.clone(), - DataType::Utf8 => Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*STR_TO_UTC_TIMESTAMP_UDF).clone()), - args: vec![arg.clone(), lit(default_input_tz)], - }), - DataType::Null => arg.clone(), - dtype if is_numeric_datatype(&dtype) || matches!(dtype, DataType::Boolean) => { - Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*EPOCH_MS_TO_UTC_TIMESTAMP_UDF).clone()), - args: vec![cast_to(arg.clone(), &DataType::Int64, schema)?], - }) - } - dtype => { - return Err(VegaFusionError::internal(format!( - "Invalid argument type to timeFormat function: {dtype:?}" - ))) - } - }) + Ok(to_char(timestamptz_expr, lit(format_str))) } pub fn extract_format_str(args: &[Expr]) -> Result { @@ -140,3 +83,63 @@ pub fn extract_format_str(args: &[Expr]) -> Result { }?; Ok(format_str) } + +pub fn d3_to_chrono_format(format: &str) -> String { + // Initialize mapping of special cases + let mut special_cases = HashMap::new(); + special_cases.insert("%L", "%3f"); // D3 milliseconds to Chrono's 3-digit fractional seconds + special_cases.insert("%f", "%6f"); // D3 microseconds to Chrono's 6-digit fractional seconds + special_cases.insert("%Q", ""); // D3 milliseconds since epoch not supported + special_cases.insert("%q", ""); // Quarter not directly supported in Chrono + special_cases.insert("%Z", "%:z"); // D3's %Z is similar to Chrono's %:z (offset without colon) + + let mut result = String::new(); + let mut chars = format.chars().peekable(); + + while let Some(c) = chars.next() { + if c == '%' { + if let Some(&next_char) = chars.peek() { + let specifier = format!(r"%{next_char}"); + if let Some(replacement) = special_cases.get(specifier.as_str()) { + result.push_str(replacement); + } else { + result.push_str(&specifier); + } + chars.next(); + } + } else { + result.push(c); + } + } + + result +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_basic_conversion() { + assert_eq!(d3_to_chrono_format("%Y-%m-%d"), "%Y-%m-%d"); + assert_eq!(d3_to_chrono_format("%H:%M:%S"), "%H:%M:%S"); + assert_eq!(d3_to_chrono_format("%%"), "%%"); + } + + #[test] + fn test_special_cases() { + assert_eq!(d3_to_chrono_format("%L"), "%3f"); + assert_eq!(d3_to_chrono_format("%f"), "%6f"); + assert_eq!(d3_to_chrono_format("%Z"), "%:z"); + assert_eq!(d3_to_chrono_format("%Q"), ""); + assert_eq!(d3_to_chrono_format("%q"), ""); + } + + #[test] + fn test_complex_format() { + assert_eq!( + d3_to_chrono_format("%Y-%m-%d %H:%M:%S.%L %Z"), + "%Y-%m-%d %H:%M:%S.%3f %:z" + ); + } +} diff --git a/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/date_parts.rs b/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/date_parts.rs index 51a5d49f6..51257ebe8 100644 --- a/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/date_parts.rs +++ b/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/date_parts.rs @@ -1,112 +1,79 @@ use crate::expression::compiler::call::TzTransformFn; +use crate::expression::compiler::utils::ExprHelpers; use crate::task_graph::timezone::RuntimeTzConfig; -use datafusion_expr::{expr, lit, Expr, ExprSchemable}; -use datafusion_functions::expr_fn::floor; +use crate::transform::timeunit::to_timestamp_col; +use datafusion_expr::{lit, Expr}; +use datafusion_functions::expr_fn::{date_part, floor}; use std::sync::Arc; use vegafusion_common::arrow::datatypes::{DataType, TimeUnit}; use vegafusion_common::datafusion_common::DFSchema; -use vegafusion_common::datatypes::{cast_to, is_numeric_datatype}; -use vegafusion_core::error::{Result, VegaFusionError}; -use vegafusion_datafusion_udfs::udfs::datetime::date_part_tz::DATE_PART_TZ_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::epoch_to_utc_timestamp::EPOCH_MS_TO_UTC_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::str_to_utc_timestamp::STR_TO_UTC_TIMESTAMP_UDF; +use vegafusion_core::error::Result; pub fn make_local_datepart_transform(part: &str, tx: Option Expr>) -> TzTransformFn { let part = part.to_string(); - let local_datepart_transform = move |tz_config: &RuntimeTzConfig, - args: &[Expr], - schema: &DFSchema| - -> Result { - let arg = - extract_timestamp_arg(&part, args, schema, &tz_config.default_input_tz.to_string())?; - let udf_args = vec![lit(part.clone()), arg, lit(tz_config.local_tz.to_string())]; - let mut expr = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(DATE_PART_TZ_UDF.clone()), - args: udf_args, - }); + let local_datepart_transform = + move |tz_config: &RuntimeTzConfig, args: &[Expr], schema: &DFSchema| -> Result { + let arg = args.first().unwrap().clone(); + let arg = to_timestamp_col(arg, schema, &tz_config.default_input_tz.to_string())?; + let mut expr = date_part( + lit(part.clone()), + arg.try_cast_to( + &DataType::Timestamp( + TimeUnit::Millisecond, + Some(tz_config.local_tz.to_string().into()), + ), + schema, + )?, + ); - if let Some(tx) = tx { - expr = tx(expr) - } + if let Some(tx) = tx { + expr = tx(expr) + } - Ok(expr) - }; + Ok(expr) + }; Arc::new(local_datepart_transform) } pub fn make_utc_datepart_transform(part: &str, tx: Option Expr>) -> TzTransformFn { let part = part.to_string(); - let utc_datepart_transform = move |tz_config: &RuntimeTzConfig, - args: &[Expr], - schema: &DFSchema| - -> Result { - let arg = - extract_timestamp_arg(&part, args, schema, &tz_config.default_input_tz.to_string())?; - let udf_args = vec![lit(part.clone()), arg, lit("UTC")]; - let mut expr = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(DATE_PART_TZ_UDF.clone()), - args: udf_args, - }); + let utc_datepart_transform = + move |tz_config: &RuntimeTzConfig, args: &[Expr], schema: &DFSchema| -> Result { + let arg = to_timestamp_col( + args.first().unwrap().clone(), + schema, + &tz_config.default_input_tz.to_string(), + )?; + let mut expr = date_part( + lit(part.clone()), + arg.try_cast_to( + &DataType::Timestamp(TimeUnit::Millisecond, Some("UTC".into())), + schema, + )?, + ); - if let Some(tx) = tx { - expr = tx(expr) - } + if let Some(tx) = tx { + expr = tx(expr) + } - Ok(expr) - }; + Ok(expr) + }; Arc::new(utc_datepart_transform) } -fn extract_timestamp_arg( - part: &str, - args: &[Expr], - schema: &DFSchema, - default_input_tz: &str, -) -> Result { - if let Some(arg) = args.first() { - Ok(match arg.get_type(schema)? { - DataType::Date32 => Expr::Cast(expr::Cast { - expr: Box::new(arg.clone()), - data_type: DataType::Timestamp(TimeUnit::Millisecond, None), - }), - DataType::Date64 => Expr::Cast(expr::Cast { - expr: Box::new(arg.clone()), - data_type: DataType::Timestamp(TimeUnit::Millisecond, None), - }), - DataType::Timestamp(_, _) => arg.clone(), - DataType::Utf8 => Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*STR_TO_UTC_TIMESTAMP_UDF).clone()), - args: vec![arg.clone(), lit(default_input_tz)], - }), - dtype if is_numeric_datatype(&dtype) => Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*EPOCH_MS_TO_UTC_TIMESTAMP_UDF).clone()), - args: vec![cast_to(arg.clone(), &DataType::Int64, schema)?], - }), - dtype => { - return Err(VegaFusionError::compilation(format!( - "Invalid data type for {part} function: {dtype:?}" - ))) - } - }) - } else { - Err(VegaFusionError::compilation(format!( - "{} expects a single argument, received {}", - part, - args.len() - ))) - } -} - lazy_static! { // Local Transforms pub static ref YEAR_TRANSFORM: TzTransformFn = make_local_datepart_transform("year", None); pub static ref QUARTER_TRANSFORM: TzTransformFn = make_local_datepart_transform("quarter", None); + + // Months are zero-based in Vega pub static ref MONTH_TRANSFORM: TzTransformFn = make_local_datepart_transform( "month", Some(|expr| expr - lit(1.0)) ); + pub static ref DAYOFYEAR_TRANSFORM: TzTransformFn = make_local_datepart_transform("doy", None); pub static ref DATE_TRANSFORM: TzTransformFn = @@ -131,10 +98,13 @@ lazy_static! { make_utc_datepart_transform("year", None); pub static ref UTCQUARTER_TRANSFORM: TzTransformFn = make_utc_datepart_transform("quarter", None); + + // Months are zero-based in Vega pub static ref UTCMONTH_TRANSFORM: TzTransformFn = make_utc_datepart_transform( "month", Some(|expr| expr - lit(1.0)) ); + pub static ref UTCDAYOFYEAR_TRANSFORM: TzTransformFn = make_utc_datepart_transform("doy", None); pub static ref UTCDATE_TRANSFORM: TzTransformFn = diff --git a/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/datetime.rs b/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/datetime.rs index 4cf3a1ccc..9d789aabc 100644 --- a/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/datetime.rs +++ b/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/datetime.rs @@ -1,15 +1,13 @@ +use crate::datafusion::udfs::datetime::make_timestamptz::make_timestamptz; use crate::task_graph::timezone::RuntimeTzConfig; -use datafusion_expr::{expr, lit, Expr, ExprSchemable}; -use std::ops::Deref; +use crate::transform::utils::{from_epoch_millis, str_to_timestamp}; +use datafusion_expr::{lit, Expr, ExprSchemable}; +use std::ops::Add; use std::str::FromStr; -use std::sync::Arc; use vegafusion_common::arrow::datatypes::DataType; use vegafusion_common::datafusion_common::{DFSchema, ScalarValue}; use vegafusion_common::datatypes::{cast_to, is_numeric_datatype, is_string_datatype}; use vegafusion_core::error::{Result, ResultWithContext, VegaFusionError}; -use vegafusion_datafusion_udfs::udfs::datetime::epoch_to_utc_timestamp::EPOCH_MS_TO_UTC_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::make_utc_timestamp::MAKE_UTC_TIMESTAMP; -use vegafusion_datafusion_udfs::udfs::datetime::str_to_utc_timestamp::STR_TO_UTC_TIMESTAMP_UDF; pub fn to_date_transform( tz_config: &RuntimeTzConfig, @@ -24,7 +22,7 @@ pub fn to_date_transform( if is_string_datatype(&dtype) { let default_input_tz = if args.len() == 2 { - // Second argument is a an override local timezone string + // Second argument is an override local timezone string let input_tz_expr = &args[1]; if let Expr::Literal(ScalarValue::Utf8(Some(input_tz_str))) = input_tz_expr { if input_tz_str == "local" { @@ -43,15 +41,10 @@ pub fn to_date_transform( tz_config.default_input_tz }; - Ok(Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*STR_TO_UTC_TIMESTAMP_UDF).clone()), - args: vec![arg, lit(default_input_tz.to_string())], - })) + let ex = str_to_timestamp(arg, &default_input_tz.to_string(), schema, None)?; + Ok(ex) } else if is_numeric_datatype(&dtype) { - Ok(Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*EPOCH_MS_TO_UTC_TIMESTAMP_UDF).clone()), - args: vec![cast_to(arg, &DataType::Int64, schema)?], - })) + from_epoch_millis(arg, schema) } else { Ok(arg) } @@ -64,27 +57,31 @@ pub fn datetime_transform_fn( ) -> Result { if args.len() == 1 { // Datetime from string or integer in milliseconds - let mut arg = args[0].clone(); + let arg = args[0].clone(); let dtype = arg .get_type(schema) .with_context(|| format!("Failed to infer type of expression: {arg:?}"))?; if is_string_datatype(&dtype) { let default_input_tz_str = tz_config.default_input_tz.to_string(); - arg = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*STR_TO_UTC_TIMESTAMP_UDF).clone()), - args: vec![arg, lit(default_input_tz_str)], - }) + str_to_timestamp(arg, &default_input_tz_str, schema, None) + } else { + from_epoch_millis(arg, schema) } - - cast_to(arg, &DataType::Int64, schema) } else { let udf_args = extract_datetime_component_args(args, &tz_config.default_input_tz.to_string(), schema)?; - Ok(Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*MAKE_UTC_TIMESTAMP).clone()), - args: udf_args, - })) + + Ok(make_timestamptz( + udf_args[0].clone(), // year + udf_args[1].clone().add(lit(1)), // month (arg 1-based, vega uses zero-based) + udf_args[2].clone(), // day + udf_args[3].clone(), // hour + udf_args[4].clone(), // minute + udf_args[5].clone(), // second + udf_args[6].clone(), // millisecond + &tz_config.local_tz.to_string(), + )) } } @@ -95,10 +92,17 @@ pub fn make_datetime_components_fn( ) -> Result { let udf_args = extract_datetime_component_args(args, &tz_config.default_input_tz.to_string(), schema)?; - Ok(Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(MAKE_UTC_TIMESTAMP.deref().clone()), - args: udf_args, - })) + + Ok(make_timestamptz( + udf_args[0].clone(), // year + udf_args[1].clone().add(lit(1)), // month (arg 1-based, vega uses zero-based) + udf_args[2].clone(), // day + udf_args[3].clone(), // hour + udf_args[4].clone(), // minute + udf_args[5].clone(), // second + udf_args[6].clone(), // millisecond + "UTC", + )) } fn extract_datetime_component_args( diff --git a/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/time.rs b/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/time.rs index baeacedc3..9e119b6e1 100644 --- a/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/time.rs +++ b/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/time.rs @@ -1,12 +1,8 @@ use crate::task_graph::timezone::RuntimeTzConfig; -use datafusion_expr::{expr, lit, Expr, ExprSchemable}; -use std::sync::Arc; -use vegafusion_common::arrow::datatypes::DataType; +use crate::transform::utils::to_epoch_millis; +use datafusion_expr::Expr; use vegafusion_common::datafusion_common::DFSchema; -use vegafusion_common::datatypes::{cast_to, is_numeric_datatype}; use vegafusion_common::error::{Result, VegaFusionError}; -use vegafusion_datafusion_udfs::udfs::datetime::str_to_utc_timestamp::STR_TO_UTC_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::utc_timestamp_to_epoch::UTC_TIMESTAMP_TO_EPOCH_MS; pub fn time_fn(tz_config: &RuntimeTzConfig, args: &[Expr], schema: &DFSchema) -> Result { // Validate number of arguments @@ -18,41 +14,9 @@ pub fn time_fn(tz_config: &RuntimeTzConfig, args: &[Expr], schema: &DFSchema) -> } // Extract first and only arg - let arg = &args[0]; - - // Dispatch handling on data type - let expr = match arg.get_type(schema)? { - DataType::Timestamp(_, _) | DataType::Date32 | DataType::Date64 => { - Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*UTC_TIMESTAMP_TO_EPOCH_MS).clone()), - args: vec![arg.clone()], - }) - } - DataType::Utf8 => { - let mut udf_args = vec![lit(tz_config.default_input_tz.to_string())]; - udf_args.extend(Vec::from(args)); - Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*UTC_TIMESTAMP_TO_EPOCH_MS).clone()), - args: vec![Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*STR_TO_UTC_TIMESTAMP_UDF).clone()), - args: vec![arg.clone(), lit(tz_config.default_input_tz.to_string())], - })], - }) - } - DataType::Int64 => { - // Keep int argument as-is - arg.clone() - } - dtype if is_numeric_datatype(&dtype) || matches!(dtype, DataType::Boolean) => { - // Cast other numeric types to Int64 - cast_to(arg.clone(), &DataType::Int64, schema)? - } - dtype => { - return Err(VegaFusionError::internal(format!( - "Invalid argument type to time function: {dtype:?}" - ))) - } - }; - - Ok(expr) + to_epoch_millis( + args[0].clone(), + &tz_config.default_input_tz.to_string(), + schema, + ) } diff --git a/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/time_offset.rs b/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/time_offset.rs index cf6f606f5..e5592d0dd 100644 --- a/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/time_offset.rs +++ b/vegafusion-runtime/src/expression/compiler/builtin_functions/date_time/time_offset.rs @@ -1,15 +1,15 @@ use crate::task_graph::timezone::RuntimeTzConfig; +use crate::transform::timeunit::to_timestamp_col; use datafusion_common::{DFSchema, ScalarValue}; -use datafusion_expr::{expr, lit, Expr}; -use std::sync::Arc; +use datafusion_expr::{interval_datetime_lit, interval_year_month_lit, Expr}; +use std::ops::Add; use vegafusion_common::data::scalar::ScalarValueHelpers; use vegafusion_common::error::VegaFusionError; -use vegafusion_datafusion_udfs::udfs::datetime::date_add_tz::DATE_ADD_TZ_UDF; pub fn time_offset_fn( tz_config: &RuntimeTzConfig, args: &[Expr], - _schema: &DFSchema, + schema: &DFSchema, ) -> vegafusion_common::error::Result { if args.len() < 2 || args.len() > 3 { return Err(VegaFusionError::compilation(format!( @@ -40,12 +40,12 @@ pub fn time_offset_fn( let dtype = scalar_value.data_type(); if dtype.is_integer() { // Negate inner integer - lit(scalar_value.negate()) + scalar_value.negate().to_i32()? } else if dtype.is_floating() { let step_float = scalar_value.to_f64()?; if step_float.fract() == 0.0 { // cast to negative integer literal - lit(-step_float as i32) + -step_float as i32 } else { return make_err(); } @@ -58,12 +58,12 @@ pub fn time_offset_fn( } else if let Expr::Literal(scalar_value) = step_arg { let dtype = scalar_value.data_type(); if dtype.is_integer() { - lit(scalar_value.clone()) + scalar_value.clone().to_i32()? } else if dtype.is_floating() { let step_float = scalar_value.to_f64()?; if step_float.fract() == 0.0 { // cast to integer literal - lit(step_float as i32) + step_float as i32 } else { return make_err(); } @@ -74,18 +74,19 @@ pub fn time_offset_fn( return make_err(); } } else { - lit(1) + 1 }; - let mut udf_args = vec![lit(tz_config.local_tz.to_string())]; - udf_args.extend(Vec::from(args)); - Ok(Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*DATE_ADD_TZ_UDF).clone()), - args: vec![ - lit(unit), - step, - timestamp.clone(), - lit(tz_config.local_tz.to_string()), - ], - })) + let timestamp = to_timestamp_col( + timestamp.clone(), + schema, + &tz_config.default_input_tz.to_string(), + )?; + let interval = match unit.to_lowercase().as_str() { + unit @ ("year" | "month") => interval_year_month_lit(&format!("{step} {unit}")), + "quarter" => interval_year_month_lit(&format!("{} month", step * 3)), + unit => interval_datetime_lit(&format!("{step} {unit}")), + }; + + Ok(timestamp.add(interval)) } diff --git a/vegafusion-runtime/src/expression/compiler/builtin_functions/math/isfinite.rs b/vegafusion-runtime/src/expression/compiler/builtin_functions/math/isfinite.rs index 4a71a39e1..f188161c0 100644 --- a/vegafusion-runtime/src/expression/compiler/builtin_functions/math/isfinite.rs +++ b/vegafusion-runtime/src/expression/compiler/builtin_functions/math/isfinite.rs @@ -1,9 +1,7 @@ -use datafusion_expr::{expr, lit, Expr, ExprSchemable, ScalarUDF}; -use std::sync::Arc; +use datafusion_expr::{in_list, lit, Expr, ExprSchemable}; use vegafusion_common::arrow::datatypes::DataType; use vegafusion_common::datafusion_common::DFSchema; use vegafusion_common::error::{Result, ResultWithContext, VegaFusionError}; -use vegafusion_datafusion_udfs::udfs::math::isfinite::IsFiniteUDF; /// `isFinite(value)` /// @@ -18,12 +16,11 @@ pub fn is_finite_fn(args: &[Expr], schema: &DFSchema) -> Result { .with_context(|| format!("Failed to infer type of expression: {arg:?}"))?; Ok(match dtype { - DataType::Float16 | DataType::Float32 | DataType::Float64 => { - Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(ScalarUDF::from(IsFiniteUDF::new())), - args: vec![arg], - }) - } + DataType::Float16 | DataType::Float32 | DataType::Float64 => in_list( + arg, + vec![lit(f32::NAN), lit(f32::INFINITY), lit(f32::NEG_INFINITY)], + true, + ), _ => { // Non-float types cannot be non-finite lit(true) diff --git a/vegafusion-runtime/src/expression/compiler/call.rs b/vegafusion-runtime/src/expression/compiler/call.rs index ece2f37c2..48ea606b3 100644 --- a/vegafusion-runtime/src/expression/compiler/call.rs +++ b/vegafusion-runtime/src/expression/compiler/call.rs @@ -3,29 +3,9 @@ use crate::expression::compiler::builtin_functions::date_time::datetime::{ datetime_transform_fn, make_datetime_components_fn, to_date_transform, }; -use crate::expression::compiler::builtin_functions::type_checking::isvalid::is_valid_fn; -use crate::expression::compiler::compile; -use crate::expression::compiler::config::CompilationConfig; -use datafusion_expr::{expr, Expr, ScalarUDF}; -use datafusion_functions::expr_fn::isnan; -use datafusion_functions::math::{ - abs, acos, asin, atan, ceil, cos, exp, floor, ln, power, round, sin, sqrt, tan, -}; -use std::collections::HashMap; -use std::ops::Deref; -use std::sync::Arc; -use vegafusion_common::arrow::datatypes::DataType; -use vegafusion_common::data::table::VegaFusionTable; -use vegafusion_common::datafusion_common::DFSchema; -use vegafusion_common::datatypes::cast_to; -use vegafusion_common::error::{Result, ResultWithContext, VegaFusionError}; -use vegafusion_core::proto::gen::expression::{ - expression, literal, CallExpression, Expression, Literal, -}; -use vegafusion_datafusion_udfs::udfs::array::indexof::IndexOfUDF; -use vegafusion_datafusion_udfs::udfs::array::span::SpanUDF; - +use crate::expression::compiler::builtin_functions::array::indexof::indexof_transform; use crate::expression::compiler::builtin_functions::array::length::length_transform; +use crate::expression::compiler::builtin_functions::array::span::span_transform; use crate::expression::compiler::builtin_functions::data::data_fn::data_fn; use crate::expression::compiler::builtin_functions::data::vl_selection_resolve::vl_selection_resolve_fn; use crate::expression::compiler::builtin_functions::data::vl_selection_test::vl_selection_test_fn; @@ -44,10 +24,29 @@ use crate::expression::compiler::builtin_functions::date_time::time_offset::time use crate::expression::compiler::builtin_functions::format::format_transform; use crate::expression::compiler::builtin_functions::math::isfinite::is_finite_fn; use crate::expression::compiler::builtin_functions::type_checking::isdate::is_date_fn; +use crate::expression::compiler::builtin_functions::type_checking::isvalid::is_valid_fn; use crate::expression::compiler::builtin_functions::type_coercion::to_boolean::to_boolean_transform; use crate::expression::compiler::builtin_functions::type_coercion::to_number::to_number_transform; use crate::expression::compiler::builtin_functions::type_coercion::to_string::to_string_transform; +use crate::expression::compiler::compile; +use crate::expression::compiler::config::CompilationConfig; use crate::task_graph::timezone::RuntimeTzConfig; +use datafusion_expr::{expr, Expr, ScalarUDF}; +use datafusion_functions::expr_fn::isnan; +use datafusion_functions::math::{ + abs, acos, asin, atan, ceil, cos, exp, floor, ln, power, round, sin, sqrt, tan, +}; +use std::collections::HashMap; +use std::ops::Deref; +use std::sync::Arc; +use vegafusion_common::arrow::datatypes::DataType; +use vegafusion_common::data::table::VegaFusionTable; +use vegafusion_common::datafusion_common::DFSchema; +use vegafusion_common::datatypes::cast_to; +use vegafusion_common::error::{Result, ResultWithContext, VegaFusionError}; +use vegafusion_core::proto::gen::expression::{ + expression, literal, CallExpression, Expression, Literal, +}; pub type MacroFn = Arc Result + Send + Sync>; pub type TransformFn = Arc Result + Send + Sync>; @@ -266,18 +265,12 @@ pub fn default_callables() -> HashMap { callables.insert( "span".to_string(), - VegaFusionCallable::ScalarUDF { - udf: Arc::new(ScalarUDF::from(SpanUDF::new())), - cast: None, - }, + VegaFusionCallable::Transform(Arc::new(span_transform)), ); callables.insert( "indexof".to_string(), - VegaFusionCallable::ScalarUDF { - udf: Arc::new(ScalarUDF::from(IndexOfUDF::new())), - cast: None, - }, + VegaFusionCallable::Transform(Arc::new(indexof_transform)), ); // Date parts diff --git a/vegafusion-runtime/src/expression/compiler/member.rs b/vegafusion-runtime/src/expression/compiler/member.rs index 408f07a96..e084a4d7d 100644 --- a/vegafusion-runtime/src/expression/compiler/member.rs +++ b/vegafusion-runtime/src/expression/compiler/member.rs @@ -2,10 +2,10 @@ use crate::expression::compiler::builtin_functions::array::length::length_transf use crate::expression::compiler::compile; use crate::expression::compiler::config::CompilationConfig; use crate::expression::compiler::utils::ExprHelpers; -use datafusion_expr::{expr, lit, Expr}; -use datafusion_functions::expr_fn::substring; +use datafusion_expr::{lit, Expr}; +use datafusion_functions::expr_fn::{get_field, substring}; +use datafusion_functions_nested::expr_fn::array_element; use std::convert::TryFrom; -use std::sync::Arc; use vegafusion_common::arrow::array::Int64Array; use vegafusion_common::arrow::compute::cast; use vegafusion_common::arrow::datatypes::DataType; @@ -14,7 +14,6 @@ use vegafusion_common::datafusion_common::{DFSchema, ScalarValue}; use vegafusion_common::datatypes::{data_type, is_numeric_datatype}; use vegafusion_core::error::{Result, ResultWithContext, VegaFusionError}; use vegafusion_core::proto::gen::expression::{Identifier, MemberExpression}; -use vegafusion_datafusion_udfs::udfs::member::{make_get_element_udf, make_get_object_member_udf}; pub fn compile_member( node: &MemberExpression, @@ -73,10 +72,7 @@ pub fn compile_member( let expr = match dtype { DataType::Struct(ref fields) => { if fields.iter().any(|f| f.name() == &property_string) { - Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(make_get_object_member_udf(&dtype, &property_string)?), - args: vec![compiled_object], - }) + get_field(compiled_object, property_string) } else { // Property does not exist, return null return Ok(lit(ScalarValue::try_from(&DataType::Float64).unwrap())); @@ -88,7 +84,7 @@ pub fn compile_member( } else if matches!(dtype, DataType::Utf8 | DataType::LargeUtf8) { if let Some(index) = index { // SQL substr function is 1-indexed so add one - substring(compiled_object, lit((index + 1) as i64), lit(1i64)) + substring(compiled_object, lit((index + 1) as i32), lit(1i64)) } else { return Err(VegaFusionError::compilation(format!( "Non-numeric element index: {property_string}" @@ -96,10 +92,7 @@ pub fn compile_member( } } else if matches!(dtype, DataType::List(_) | DataType::FixedSizeList(_, _)) { if let Some(index) = index { - Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(make_get_element_udf(index as i32)), - args: vec![compiled_object], - }) + array_element(compiled_object, lit((index + 1) as i32)) } else { return Err(VegaFusionError::compilation(format!( "Non-numeric element index: {property_string}" diff --git a/vegafusion-runtime/src/expression/compiler/mod.rs b/vegafusion-runtime/src/expression/compiler/mod.rs index 3f8a435e9..55fb79b71 100644 --- a/vegafusion-runtime/src/expression/compiler/mod.rs +++ b/vegafusion-runtime/src/expression/compiler/mod.rs @@ -68,7 +68,7 @@ mod test_compile { use datafusion_common::utils::array_into_list_array; use datafusion_common::{DFSchema, ScalarValue}; use datafusion_expr::expr::{BinaryExpr, Case, TryCast}; - use datafusion_expr::{expr, lit, not, Expr, Operator}; + use datafusion_expr::{lit, not, Expr, Operator}; use std::collections::HashMap; use std::convert::TryFrom; @@ -77,7 +77,6 @@ mod test_compile { use vegafusion_common::column::flat_col; use vegafusion_core::arrow::array::{new_empty_array, Float64Array}; use vegafusion_core::arrow::datatypes::Fields; - use vegafusion_datafusion_udfs::udfs::object::make_object_constructor_udf; #[test] fn test_compile_literal_float() { @@ -460,32 +459,8 @@ mod test_compile { let expr = parse("{a: 1, 'two': {three: 3}}").unwrap(); let result_expr = compile(&expr, &Default::default(), None).unwrap(); - let expected_expr = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(make_object_constructor_udf( - &["a".to_string(), "two".to_string()], - &[ - DataType::Float64, - DataType::Struct(Fields::from(vec![Field::new( - "three", - DataType::Float64, - true, - )])), - ], - )), - args: vec![ - lit(1.0), - Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(make_object_constructor_udf( - &["three".to_string()], - &[DataType::Float64], - )), - args: vec![lit(3.0)], - }), - ], - }); - - println!("expr: {result_expr:?}"); - assert_eq!(result_expr, expected_expr); + // Check compiled representation + assert_eq!(result_expr.to_string(), "named_struct(Utf8(\"a\"), Float64(1), Utf8(\"two\"), named_struct(Utf8(\"three\"), Float64(3)))"); // Check evaluated value let result_value = result_expr.eval_to_scalar().unwrap(); @@ -497,6 +472,7 @@ mod test_compile { ), ]); + // Check evaluated value println!("value: {result_value:?}"); // ScalarValue::from(...) creates a Field with nullable=false. We always use nullable=true, diff --git a/vegafusion-runtime/src/expression/compiler/object.rs b/vegafusion-runtime/src/expression/compiler/object.rs index 580206824..aaa9d6721 100644 --- a/vegafusion-runtime/src/expression/compiler/object.rs +++ b/vegafusion-runtime/src/expression/compiler/object.rs @@ -1,33 +1,23 @@ use crate::expression::compiler::{compile, config::CompilationConfig}; -use datafusion_expr::{expr, Expr, ExprSchemable}; -use std::sync::Arc; -use vegafusion_common::arrow::datatypes::DataType; +use datafusion_expr::{lit, Expr}; +use datafusion_functions::expr_fn::named_struct; use vegafusion_common::datafusion_common::DFSchema; use vegafusion_core::error::Result; use vegafusion_core::proto::gen::expression::ObjectExpression; -use vegafusion_datafusion_udfs::udfs::object::make_object_constructor_udf; pub fn compile_object( node: &ObjectExpression, config: &CompilationConfig, schema: &DFSchema, ) -> Result { - let mut keys: Vec = Vec::new(); - let mut values: Vec = Vec::new(); - let mut value_types: Vec = Vec::new(); + let mut named_struct_args = Vec::new(); for prop in &node.properties { - let expr = compile(prop.value(), config, Some(schema))?; let name = prop.key().to_object_key_string(); - keys.push(name); - value_types.push(expr.get_type(schema)?); - values.push(expr) + let value_expr = compile(prop.value(), config, Some(schema))?; + named_struct_args.push(lit(name)); + named_struct_args.push(value_expr); } - let udf = make_object_constructor_udf(keys.as_slice(), value_types.as_slice()); - - Ok(Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(udf), - args: values, - })) + Ok(named_struct(named_struct_args)) } diff --git a/vegafusion-runtime/src/expression/compiler/utils.rs b/vegafusion-runtime/src/expression/compiler/utils.rs index 7a5a657c3..496d16d51 100644 --- a/vegafusion-runtime/src/expression/compiler/utils.rs +++ b/vegafusion-runtime/src/expression/compiler/utils.rs @@ -1,11 +1,13 @@ -use datafusion_common::ScalarValue; +use crate::datafusion::context::make_datafusion_context; +use datafusion::physical_expr::PhysicalExpr; +use datafusion::physical_plan::ColumnarValue; +use datafusion_common::{ExprSchema, ScalarValue}; use datafusion_expr::utils::expr_to_columns; -use datafusion_expr::{Expr, ExprSchemable}; -use datafusion_optimizer::simplify_expressions::{ExprSimplifier, SimplifyInfo}; +use datafusion_expr::{Expr, ExprSchemable, TryCast}; +use datafusion_optimizer::simplify_expressions::SimplifyInfo; use datafusion_physical_expr::execution_props::ExecutionProps; use std::collections::HashSet; use std::convert::TryFrom; -use std::ops::Deref; use std::sync::Arc; use vegafusion_common::arrow::array::{ArrayRef, BooleanArray}; use vegafusion_common::arrow::datatypes::DataType; @@ -21,13 +23,17 @@ lazy_static! { .unwrap(); pub static ref UNIT_SCHEMA: DFSchema = DFSchema::try_from(UNIT_RECORD_BATCH.schema().as_ref().clone()).unwrap(); - // pub static ref SESSION_STATE: SessionState = default_session_builder(Default::default()); - // pub static ref PLANNER: DefaultPhysicalPlanner = Default::default(); } pub trait ExprHelpers { fn columns(&self) -> Result>; + fn to_phys_expr(&self) -> Result>; fn eval_to_scalar(&self) -> Result; + fn try_cast_to( + self, + cast_to_type: &DataType, + schema: &dyn ExprSchema, + ) -> datafusion_common::Result; } impl ExprHelpers for Expr { @@ -38,16 +44,52 @@ impl ExprHelpers for Expr { Ok(columns) } + fn to_phys_expr(&self) -> Result> { + let ctx = make_datafusion_context(); + let phys_expr = ctx.create_physical_expr(self.clone(), &UNIT_SCHEMA)?; + Ok(phys_expr) + } + fn eval_to_scalar(&self) -> Result { - let simplifier = ExprSimplifier::new(VfSimplifyInfo::from(UNIT_SCHEMA.deref().clone())); - let simplified_expr = simplifier.simplify(self.clone())?; - if let Expr::Literal(scalar) = simplified_expr { - Ok(scalar) - } else { - Err(VegaFusionError::internal(format!( - "Failed to evaluate expression to scalar value: {self}\nsimplified to: {simplified_expr}\n" - ))) + if !self.columns()?.is_empty() { + return Err(VegaFusionError::compilation(format!( + "Cannot eval_to_scalar for Expr with column references: {self:?}" + ))); + } + + let phys_expr = self.to_phys_expr()?; + let col_result = phys_expr.evaluate(&UNIT_RECORD_BATCH)?; + match col_result { + ColumnarValue::Scalar(scalar) => Ok(scalar), + ColumnarValue::Array(array) => { + if array.len() != 1 { + return Err(VegaFusionError::compilation(format!( + "Unexpected non-scalar array result when evaluate expr: {self:?}" + ))); + } + ScalarValue::try_from_array(&array, 0).with_context(|| { + format!( + "Failed to convert scalar array result to ScalarValue in expr: {self:?}" + ) + }) + } + } + } + + fn try_cast_to( + self, + cast_to_type: &DataType, + schema: &dyn ExprSchema, + ) -> datafusion_common::Result { + // Based on cast_to, using TryCast instead of Cast + let this_type = self.get_type(schema)?; + if this_type == *cast_to_type { + return Ok(self); } + Ok(Expr::TryCast(TryCast::new( + Box::new(self), + cast_to_type.clone(), + ))) } } diff --git a/vegafusion-runtime/src/lib.rs b/vegafusion-runtime/src/lib.rs index 0e2835524..44c54f0b5 100644 --- a/vegafusion-runtime/src/lib.rs +++ b/vegafusion-runtime/src/lib.rs @@ -3,6 +3,7 @@ extern crate lazy_static; extern crate core; pub mod data; +pub mod datafusion; pub mod expression; pub mod signal; pub mod task_graph; diff --git a/vegafusion-runtime/src/signal/mod.rs b/vegafusion-runtime/src/signal/mod.rs index 161f9f83d..9bdb3ef0b 100644 --- a/vegafusion-runtime/src/signal/mod.rs +++ b/vegafusion-runtime/src/signal/mod.rs @@ -3,6 +3,7 @@ use crate::expression::compiler::compile; use crate::expression::compiler::utils::ExprHelpers; use crate::task_graph::task::TaskCall; use async_trait::async_trait; +use datafusion::prelude::SessionContext; use std::collections::HashMap; use std::sync::Arc; use vegafusion_core::data::dataset::VegaFusionDataset; @@ -12,7 +13,6 @@ use vegafusion_core::error::Result; use vegafusion_core::proto::gen::tasks::SignalTask; use vegafusion_core::task_graph::task::TaskDependencies; use vegafusion_core::task_graph::task_value::TaskValue; -use vegafusion_dataframe::connection::Connection; #[async_trait] impl TaskCall for SignalTask { @@ -21,7 +21,7 @@ impl TaskCall for SignalTask { values: &[TaskValue], tz_config: &Option, _inline_datasets: HashMap, - _conn: Arc, + _ctx: Arc, ) -> Result<(TaskValue, Vec)> { let config = build_compilation_config(&self.input_vars(), values, tz_config); let expression = self.expr.as_ref().unwrap(); diff --git a/vegafusion-runtime/src/task_graph/runtime.rs b/vegafusion-runtime/src/task_graph/runtime.rs index b9b8a70ff..99003e19d 100644 --- a/vegafusion-runtime/src/task_graph/runtime.rs +++ b/vegafusion-runtime/src/task_graph/runtime.rs @@ -2,6 +2,7 @@ use crate::task_graph::cache::VegaFusionCache; use crate::task_graph::task::TaskCall; use crate::task_graph::timezone::RuntimeTzConfig; use async_recursion::async_recursion; +use datafusion::prelude::SessionContext; use futures_util::{future, FutureExt}; use std::any::Any; use std::collections::HashMap; @@ -13,25 +14,24 @@ use vegafusion_core::error::{Result, ResultWithContext, VegaFusionError}; use vegafusion_core::proto::gen::tasks::{task::TaskKind, NodeValueIndex, TaskGraph}; use vegafusion_core::runtime::VegaFusionRuntimeTrait; use vegafusion_core::task_graph::task_value::{NamedTaskValue, TaskValue}; -use vegafusion_dataframe::connection::Connection; type CacheValue = (TaskValue, Vec); #[derive(Clone)] pub struct VegaFusionRuntime { pub cache: VegaFusionCache, - pub conn: Arc, + pub ctx: Arc, } impl VegaFusionRuntime { pub fn new( - conn: Arc, + ctx: Arc, capacity: Option, memory_limit: Option, ) -> Self { Self { cache: VegaFusionCache::new(capacity, memory_limit), - conn, + ctx, } } @@ -48,7 +48,7 @@ impl VegaFusionRuntime { node_value_index.node_index as usize, self.cache.clone(), inline_datasets, - self.conn.clone(), + self.ctx.clone(), )) .catch_unwind() .await; @@ -132,7 +132,7 @@ async fn get_or_compute_node_value( node_index: usize, cache: VegaFusionCache, inline_datasets: HashMap, - conn: Arc, + ctx: Arc, ) -> Result { // Get the cache key for requested node let node = task_graph.node(node_index).unwrap(); @@ -164,7 +164,7 @@ async fn get_or_compute_node_value( input_node_index, cloned_cache.clone(), inline_datasets.clone(), - conn.clone(), + ctx.clone(), ))); } @@ -191,7 +191,7 @@ async fn get_or_compute_node_value( }) .collect::>>()?; - task.eval(&input_values, &tz_config, inline_datasets, conn) + task.eval(&input_values, &tz_config, inline_datasets, ctx) .await }; diff --git a/vegafusion-runtime/src/task_graph/task.rs b/vegafusion-runtime/src/task_graph/task.rs index fc54b7809..9382bc2d7 100644 --- a/vegafusion-runtime/src/task_graph/task.rs +++ b/vegafusion-runtime/src/task_graph/task.rs @@ -1,5 +1,6 @@ use crate::task_graph::timezone::RuntimeTzConfig; use async_trait::async_trait; +use datafusion::prelude::SessionContext; use std::collections::HashMap; use std::convert::TryInto; use std::sync::Arc; @@ -8,7 +9,6 @@ use vegafusion_core::error::Result; use vegafusion_core::proto::gen::tasks::task::TaskKind; use vegafusion_core::proto::gen::tasks::Task; use vegafusion_core::task_graph::task_value::TaskValue; -use vegafusion_dataframe::connection::Connection; #[async_trait] pub trait TaskCall { @@ -17,7 +17,7 @@ pub trait TaskCall { values: &[TaskValue], tz_config: &Option, inline_datasets: HashMap, - conn: Arc, + ctx: Arc, ) -> Result<(TaskValue, Vec)>; } @@ -28,14 +28,14 @@ impl TaskCall for Task { values: &[TaskValue], tz_config: &Option, inline_datasets: HashMap, - conn: Arc, + ctx: Arc, ) -> Result<(TaskValue, Vec)> { match self.task_kind() { TaskKind::Value(value) => Ok((value.try_into()?, Default::default())), - TaskKind::DataUrl(task) => task.eval(values, tz_config, inline_datasets, conn).await, - TaskKind::DataValues(task) => task.eval(values, tz_config, inline_datasets, conn).await, - TaskKind::DataSource(task) => task.eval(values, tz_config, inline_datasets, conn).await, - TaskKind::Signal(task) => task.eval(values, tz_config, inline_datasets, conn).await, + TaskKind::DataUrl(task) => task.eval(values, tz_config, inline_datasets, ctx).await, + TaskKind::DataValues(task) => task.eval(values, tz_config, inline_datasets, ctx).await, + TaskKind::DataSource(task) => task.eval(values, tz_config, inline_datasets, ctx).await, + TaskKind::Signal(task) => task.eval(values, tz_config, inline_datasets, ctx).await, } } } diff --git a/vegafusion-runtime/src/transform/aggregate.rs b/vegafusion-runtime/src/transform/aggregate.rs index 7c278aa67..35cfe3721 100644 --- a/vegafusion-runtime/src/transform/aggregate.rs +++ b/vegafusion-runtime/src/transform/aggregate.rs @@ -7,7 +7,10 @@ use datafusion_functions_aggregate::variance::{var_pop_udaf, var_samp_udaf}; use sqlparser::ast::NullTreatment; use std::collections::HashMap; +use crate::data::util::DataFrameUtils; +use crate::datafusion::udafs::percentile::{Q1_UDF, Q3_UDF}; use async_trait::async_trait; +use datafusion::prelude::DataFrame; use datafusion_expr::expr; use datafusion_functions_aggregate::expr_fn::{avg, count, count_distinct, max, min, sum}; use datafusion_functions_aggregate::stddev::{stddev_pop_udaf, stddev_udaf}; @@ -23,38 +26,37 @@ use vegafusion_core::error::{Result, VegaFusionError}; use vegafusion_core::proto::gen::transforms::{Aggregate, AggregateOp}; use vegafusion_core::task_graph::task_value::TaskValue; use vegafusion_core::transform::aggregate::op_name; -use vegafusion_dataframe::dataframe::DataFrame; -use vegafusion_datafusion_udfs::udafs::{Q1_UDF, Q3_UDF}; #[async_trait] impl TransformTrait for Aggregate { async fn eval( &self, - dataframe: Arc, + dataframe: DataFrame, _config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { + ) -> Result<(DataFrame, Vec)> { let group_exprs: Vec<_> = self .groupby .iter() .filter(|c| { dataframe .schema() + .inner() .column_with_name(&unescape_field(c)) .is_some() }) .map(|c| unescaped_col(c)) .collect(); - let (mut agg_exprs, projections) = get_agg_and_proj_exprs(self, &dataframe.schema_df()?)?; + let (mut agg_exprs, projections) = get_agg_and_proj_exprs(self, dataframe.schema())?; // Append ordering column to aggregations agg_exprs.push(min(flat_col(ORDER_COL)).alias(ORDER_COL)); // Perform aggregation - let grouped_dataframe = dataframe.aggregate(group_exprs, agg_exprs).await?; + let grouped_dataframe = dataframe.aggregate_mixed(group_exprs, agg_exprs)?; // Make final projection - let grouped_dataframe = grouped_dataframe.select(projections).await?; + let grouped_dataframe = grouped_dataframe.select(projections)?; Ok((grouped_dataframe, Vec::new())) } diff --git a/vegafusion-runtime/src/transform/bin.rs b/vegafusion-runtime/src/transform/bin.rs index 372c81a7d..f8de61962 100644 --- a/vegafusion-runtime/src/transform/bin.rs +++ b/vegafusion-runtime/src/transform/bin.rs @@ -7,6 +7,7 @@ use async_trait::async_trait; use datafusion_expr::expr::WildcardOptions; use datafusion_expr::lit; +use datafusion::prelude::DataFrame; use datafusion_common::scalar::ScalarValue; use datafusion_common::utils::array_into_list_array; use datafusion_common::DFSchema; @@ -21,16 +22,15 @@ use vegafusion_common::datatypes::to_numeric; use vegafusion_core::error::{Result, VegaFusionError}; use vegafusion_core::proto::gen::transforms::Bin; use vegafusion_core::task_graph::task_value::TaskValue; -use vegafusion_dataframe::dataframe::DataFrame; #[async_trait] impl TransformTrait for Bin { async fn eval( &self, - sql_df: Arc, + sql_df: DataFrame, config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { - let schema = sql_df.schema_df()?; + ) -> Result<(DataFrame, Vec)> { + let schema = sql_df.schema().clone(); // Compute binning solution let params = calculate_bin_params(self, &schema, config)?; @@ -47,22 +47,20 @@ impl TransformTrait for Bin { // Compute output signal value let output_value = compute_output_value(self, start, stop, step); - let numeric_field = to_numeric(unescaped_col(&self.field), &sql_df.schema_df()?)?; + let numeric_field = to_numeric(unescaped_col(&self.field), sql_df.schema())?; // Add column with bin index let bin_index_name = "__bin_index"; let bin_index = floor((numeric_field.clone().sub(lit(start)).div(lit(step))).add(lit(1.0e-14))) .alias(bin_index_name); - let sql_df = sql_df - .select(vec![ - Expr::Wildcard { - qualifier: None, - options: WildcardOptions::default(), - }, - bin_index, - ]) - .await?; + let sql_df = sql_df.select(vec![ + Expr::Wildcard { + qualifier: None, + options: WildcardOptions::default(), + }, + bin_index, + ])?; // Add column with bin start let bin_start = (flat_col(bin_index_name).mul(lit(step))).add(lit(start)); @@ -88,6 +86,7 @@ impl TransformTrait for Bin { let mut select_exprs = sql_df .schema() + .inner() .fields .iter() .filter_map(|field| { @@ -100,7 +99,7 @@ impl TransformTrait for Bin { .collect::>(); select_exprs.push(bin_start); - let sql_df = sql_df.select(select_exprs).await?; + let sql_df = sql_df.select(select_exprs)?; // Add bin end column let bin_end_name = self.alias_1.clone().unwrap_or_else(|| "bin1".to_string()); @@ -122,7 +121,7 @@ impl TransformTrait for Bin { select_exprs.push(flat_col(&bin_start_name)); select_exprs.push(bin_end); - let sql_df = sql_df.select(select_exprs).await?; + let sql_df = sql_df.select(select_exprs)?; Ok((sql_df, output_value.into_iter().collect())) } diff --git a/vegafusion-runtime/src/transform/collect.rs b/vegafusion-runtime/src/transform/collect.rs index 90861e974..9ca9991dd 100644 --- a/vegafusion-runtime/src/transform/collect.rs +++ b/vegafusion-runtime/src/transform/collect.rs @@ -10,19 +10,19 @@ use vegafusion_core::error::{Result, ResultWithContext}; use vegafusion_core::proto::gen::transforms::{Collect, SortOrder}; use async_trait::async_trait; +use datafusion::prelude::DataFrame; use datafusion_expr::WindowFrame; use vegafusion_common::column::{flat_col, unescaped_col}; use vegafusion_common::data::ORDER_COL; use vegafusion_core::task_graph::task_value::TaskValue; -use vegafusion_dataframe::dataframe::DataFrame; #[async_trait] impl TransformTrait for Collect { async fn eval( &self, - dataframe: Arc, + dataframe: DataFrame, _config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { + ) -> Result<(DataFrame, Vec)> { // Build vector of sort expressions let sort_exprs: Vec<_> = self .fields @@ -30,7 +30,12 @@ impl TransformTrait for Collect { .into_iter() .zip(&self.order) .filter_map(|(field, order)| { - if dataframe.schema().column_with_name(&field).is_some() { + if dataframe + .schema() + .inner() + .column_with_name(&field) + .is_some() + { let sort_expr = unescaped_col(&field).sort( *order == SortOrder::Ascending as i32, *order == SortOrder::Ascending as i32, @@ -58,6 +63,7 @@ impl TransformTrait for Collect { // Build vector of selections let mut selections = dataframe .schema() + .inner() .fields .iter() .filter_map(|field| { @@ -72,7 +78,6 @@ impl TransformTrait for Collect { let result = dataframe .select(selections) - .await .with_context(|| "Collect transform failed".to_string())?; Ok((result, Default::default())) } diff --git a/vegafusion-runtime/src/transform/extent.rs b/vegafusion-runtime/src/transform/extent.rs index c471b2148..598370d76 100644 --- a/vegafusion-runtime/src/transform/extent.rs +++ b/vegafusion-runtime/src/transform/extent.rs @@ -2,37 +2,37 @@ use crate::expression::compiler::config::CompilationConfig; use crate::transform::TransformTrait; use async_trait::async_trait; +use crate::data::util::DataFrameUtils; +use datafusion::arrow::array::RecordBatch; +use datafusion::prelude::DataFrame; use datafusion_common::utils::array_into_list_array; use datafusion_common::{DFSchema, ScalarValue}; use datafusion_expr::Expr; use datafusion_functions_aggregate::expr_fn::{max, min}; use std::sync::Arc; use vegafusion_common::column::unescaped_col; -use vegafusion_common::data::table::VegaFusionTable; use vegafusion_common::datatypes::to_numeric; use vegafusion_common::error::{Result, ResultWithContext}; use vegafusion_core::proto::gen::transforms::Extent; use vegafusion_core::task_graph::task_value::TaskValue; -use vegafusion_dataframe::dataframe::DataFrame; #[async_trait] impl TransformTrait for Extent { async fn eval( &self, - sql_df: Arc, + sql_df: DataFrame, _config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { + ) -> Result<(DataFrame, Vec)> { let output_values = if self.signal.is_some() { - let (min_expr, max_expr) = min_max_exprs(self.field.as_str(), &sql_df.schema_df()?)?; + let (min_expr, max_expr) = min_max_exprs(self.field.as_str(), sql_df.schema())?; let extent_df = sql_df - .aggregate(Vec::new(), vec![min_expr, max_expr]) - .await - .unwrap(); + .clone() + .aggregate(Vec::new(), vec![min_expr, max_expr])?; // Eval to single row dataframe and extract scalar values - let result_table = extent_df.collect().await?; - let extent_list = extract_extent_list(&result_table)?; + let result_batch = extent_df.collect_flat().await?; + let extent_list = extract_extent_list(&result_batch)?; vec![extent_list] } else { Vec::new() @@ -49,12 +49,11 @@ fn min_max_exprs(field: &str, schema: &DFSchema) -> Result<(Expr, Expr)> { Ok((min_expr, max_expr)) } -fn extract_extent_list(table: &VegaFusionTable) -> Result { - let result_rb = table.to_record_batch()?; - let min_val_array = result_rb +fn extract_extent_list(batch: &RecordBatch) -> Result { + let min_val_array = batch .column_by_name("__min_val") .with_context(|| "No column named __min_val".to_string())?; - let max_val_array = result_rb + let max_val_array = batch .column_by_name("__max_val") .with_context(|| "No column named __max_val".to_string())?; diff --git a/vegafusion-runtime/src/transform/filter.rs b/vegafusion-runtime/src/transform/filter.rs index 6125418ab..3dc95f71d 100644 --- a/vegafusion-runtime/src/transform/filter.rs +++ b/vegafusion-runtime/src/transform/filter.rs @@ -2,38 +2,29 @@ use crate::expression::compiler::compile; use crate::expression::compiler::config::CompilationConfig; use crate::transform::TransformTrait; use async_trait::async_trait; -use datafusion_optimizer::simplify_expressions::ExprSimplifier; -use std::sync::Arc; +use datafusion::prelude::DataFrame; use vegafusion_common::datatypes::to_boolean; -use crate::expression::compiler::utils::VfSimplifyInfo; use vegafusion_core::error::Result; use vegafusion_core::proto::gen::transforms::Filter; use vegafusion_core::task_graph::task_value::TaskValue; -use vegafusion_dataframe::dataframe::DataFrame; #[async_trait] impl TransformTrait for Filter { async fn eval( &self, - dataframe: Arc, + dataframe: DataFrame, config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { + ) -> Result<(DataFrame, Vec)> { let filter_expr = compile( self.expr.as_ref().unwrap(), config, - Some(&dataframe.schema_df()?), + Some(dataframe.schema()), )?; // Cast filter expr to boolean - let filter_expr = to_boolean(filter_expr, &dataframe.schema_df()?)?; - - // Simplify expression prior to evaluation - let simplifier = ExprSimplifier::new(VfSimplifyInfo::from(dataframe.schema_df()?)); - let simplified_expr = simplifier.simplify(filter_expr)?; - - let result = dataframe.filter(simplified_expr).await?; - + let filter_expr = to_boolean(filter_expr, dataframe.schema())?; + let result = dataframe.filter(filter_expr)?; Ok((result, Default::default())) } } diff --git a/vegafusion-runtime/src/transform/fold.rs b/vegafusion-runtime/src/transform/fold.rs index 579a7a5df..b9a8f008e 100644 --- a/vegafusion-runtime/src/transform/fold.rs +++ b/vegafusion-runtime/src/transform/fold.rs @@ -2,21 +2,26 @@ use crate::expression::compiler::config::CompilationConfig; use crate::transform::TransformTrait; use async_trait::async_trait; +use datafusion::prelude::DataFrame; +use datafusion_common::ScalarValue; +use datafusion_expr::{expr, lit, Expr, WindowFrame, WindowFunctionDefinition}; +use datafusion_functions_window::row_number::RowNumber; +use sqlparser::ast::NullTreatment; use std::sync::Arc; +use vegafusion_common::column::flat_col; use vegafusion_common::data::ORDER_COL; use vegafusion_common::error::Result; use vegafusion_common::escape::unescape_field; use vegafusion_core::proto::gen::transforms::Fold; use vegafusion_core::task_graph::task_value::TaskValue; -use vegafusion_dataframe::dataframe::DataFrame; #[async_trait] impl TransformTrait for Fold { async fn eval( &self, - dataframe: Arc, + dataframe: DataFrame, _config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { + ) -> Result<(DataFrame, Vec)> { let field_cols: Vec<_> = self.fields.iter().map(|f| unescape_field(f)).collect(); let key_col = unescape_field( &self @@ -33,9 +38,95 @@ impl TransformTrait for Fold { .unwrap_or_else(|| "value".to_string()), ); - let result = dataframe - .fold(field_cols.as_slice(), &value_col, &key_col, Some(ORDER_COL)) - .await?; - Ok((result, Default::default())) + // Build selection that includes all input fields that + // aren't shadowed by key/value cols + let input_selection = dataframe + .schema() + .fields() + .iter() + .filter_map(|f| { + if f.name() == &key_col || f.name() == &value_col { + None + } else { + Some(flat_col(f.name())) + } + }) + .collect::>(); + + // Build union of subqueries that select and rename each field + let mut subquery_union: Option = None; + + let field_order_col = format!("{ORDER_COL}_field"); + for (i, field) in field_cols.iter().enumerate() { + // Clone input selection and add key/val cols to it + let mut subquery_selection = input_selection.clone(); + subquery_selection.push(lit(field).alias(key_col.clone())); + if dataframe.schema().inner().column_with_name(field).is_some() { + // Field exists as a column in the parent table + subquery_selection.push(flat_col(field).alias(value_col.clone())); + } else { + // Field does not exist in parent table, fill in NULL instead + subquery_selection.push(lit(ScalarValue::Null).alias(value_col.clone())); + } + + // Add order column + subquery_selection.push(lit(i as u32).alias(&field_order_col)); + + let subquery_df = dataframe.clone().select(subquery_selection)?; + if let Some(union) = subquery_union { + subquery_union = Some(union.union(subquery_df)?); + } else { + subquery_union = Some(subquery_df); + } + } + + // Unwrap + let Some(subquery_union) = subquery_union else { + // Return input dataframe as-is + return Ok((dataframe, Default::default())); + }; + + // Compute final selection, start with all the non-order input columns + let mut final_selections = dataframe + .schema() + .fields() + .iter() + .filter_map(|f| { + if f.name() == ORDER_COL { + None + } else { + Some(flat_col(f.name())) + } + }) + .collect::>(); + + // Add key and value columns + final_selections.push(flat_col(&key_col)); + final_selections.push(flat_col(&value_col)); + + // Add new order column + let final_order_expr = Expr::WindowFunction(expr::WindowFunction { + fun: WindowFunctionDefinition::WindowUDF(Arc::new(RowNumber::new().into())), + args: vec![], + partition_by: vec![], + order_by: vec![ + expr::Sort { + expr: flat_col(ORDER_COL), + asc: true, + nulls_first: true, + }, + expr::Sort { + expr: flat_col(&field_order_col), + asc: true, + nulls_first: true, + }, + ], + window_frame: WindowFrame::new(Some(true)), + null_treatment: Some(NullTreatment::IgnoreNulls), + }) + .alias(ORDER_COL); + final_selections.push(final_order_expr); + + Ok((subquery_union.select(final_selections)?, Default::default())) } } diff --git a/vegafusion-runtime/src/transform/formula.rs b/vegafusion-runtime/src/transform/formula.rs index e6a29e17b..0cbb0ecd9 100644 --- a/vegafusion-runtime/src/transform/formula.rs +++ b/vegafusion-runtime/src/transform/formula.rs @@ -2,32 +2,31 @@ use crate::expression::compiler::compile; use crate::expression::compiler::config::CompilationConfig; use crate::transform::TransformTrait; -use std::sync::Arc; use vegafusion_core::error::{Result, ResultWithContext}; use vegafusion_core::proto::gen::transforms::Formula; use crate::expression::compiler::utils::VfSimplifyInfo; use async_trait::async_trait; +use datafusion::prelude::DataFrame; use datafusion_optimizer::simplify_expressions::ExprSimplifier; use vegafusion_common::column::flat_col; use vegafusion_core::task_graph::task_value::TaskValue; -use vegafusion_dataframe::dataframe::DataFrame; #[async_trait] impl TransformTrait for Formula { async fn eval( &self, - dataframe: Arc, + dataframe: DataFrame, config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { + ) -> Result<(DataFrame, Vec)> { let formula_expr = compile( self.expr.as_ref().unwrap(), config, - Some(&dataframe.schema_df()?), + Some(dataframe.schema()), )?; // Simplify expression prior to evaluation - let simplifier = ExprSimplifier::new(VfSimplifyInfo::from(dataframe.schema_df()?)); + let simplifier = ExprSimplifier::new(VfSimplifyInfo::from(dataframe.schema().clone())); let formula_expr = simplifier.simplify(formula_expr)?; // Rename with alias @@ -51,7 +50,7 @@ impl TransformTrait for Formula { } // dataframe - let result = dataframe.select(selections).await.with_context(|| { + let result = dataframe.select(selections).with_context(|| { format!( "Formula transform failed with expression: {}", &self.expr.as_ref().unwrap() diff --git a/vegafusion-runtime/src/transform/identifier.rs b/vegafusion-runtime/src/transform/identifier.rs index 9ecc71216..04c48a09e 100644 --- a/vegafusion-runtime/src/transform/identifier.rs +++ b/vegafusion-runtime/src/transform/identifier.rs @@ -2,6 +2,7 @@ use crate::expression::compiler::config::CompilationConfig; use crate::transform::TransformTrait; use async_trait::async_trait; +use datafusion::prelude::DataFrame; use datafusion_expr::expr::WildcardOptions; use datafusion_expr::{expr, Expr, WindowFrame, WindowFunctionDefinition}; use datafusion_functions_window::row_number::RowNumber; @@ -12,15 +13,14 @@ use vegafusion_common::data::ORDER_COL; use vegafusion_common::error::Result; use vegafusion_core::proto::gen::transforms::Identifier; use vegafusion_core::task_graph::task_value::TaskValue; -use vegafusion_dataframe::dataframe::DataFrame; #[async_trait] impl TransformTrait for Identifier { async fn eval( &self, - dataframe: Arc, + dataframe: DataFrame, _config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { + ) -> Result<(DataFrame, Vec)> { // Add row number column with the desired name, sorted by the input order column let row_number_expr = Expr::WindowFunction(expr::WindowFunction { fun: WindowFunctionDefinition::WindowUDF(Arc::new(RowNumber::new().into())), @@ -36,15 +36,13 @@ impl TransformTrait for Identifier { }) .alias(&self.r#as); - let result = dataframe - .select(vec![ - Expr::Wildcard { - qualifier: None, - options: WildcardOptions::default(), - }, - row_number_expr, - ]) - .await?; + let result = dataframe.select(vec![ + Expr::Wildcard { + qualifier: None, + options: WildcardOptions::default(), + }, + row_number_expr, + ])?; Ok((result, Default::default())) } diff --git a/vegafusion-runtime/src/transform/impute.rs b/vegafusion-runtime/src/transform/impute.rs index 623b0f418..407abd3b3 100644 --- a/vegafusion-runtime/src/transform/impute.rs +++ b/vegafusion-runtime/src/transform/impute.rs @@ -1,25 +1,33 @@ use crate::expression::compiler::config::CompilationConfig; +use crate::data::util::DataFrameUtils; +use crate::expression::compiler::utils::ExprHelpers; use crate::transform::TransformTrait; use async_trait::async_trait; -use datafusion_common::ScalarValue; +use datafusion::prelude::DataFrame; +use datafusion_common::{JoinType, ScalarValue}; +use datafusion_expr::{expr, lit, Expr, SortExpr, WindowFrame, WindowFunctionDefinition}; +use datafusion_functions::expr_fn::coalesce; +use datafusion_functions_aggregate::expr_fn::min; +use datafusion_functions_window::row_number::RowNumber; use itertools::Itertools; +use sqlparser::ast::NullTreatment; use std::sync::Arc; +use vegafusion_common::column::{flat_col, relation_col}; use vegafusion_common::data::scalar::ScalarValueHelpers; use vegafusion_common::data::ORDER_COL; use vegafusion_common::error::{Result, ResultWithContext}; use vegafusion_common::escape::unescape_field; use vegafusion_core::proto::gen::transforms::Impute; use vegafusion_core::task_graph::task_value::TaskValue; -use vegafusion_dataframe::dataframe::DataFrame; #[async_trait] impl TransformTrait for Impute { async fn eval( &self, - dataframe: Arc, + dataframe: DataFrame, _config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { + ) -> Result<(DataFrame, Vec)> { // Create ScalarValue used to fill in null values let json_value: serde_json::Value = serde_json::from_str( &self @@ -41,7 +49,7 @@ impl TransformTrait for Impute { ScalarValue::from_json(&json_value)? }; - // Take unique groupby fields + // Take unique groupby fields (in case there are duplicates) let groupby = self .groupby .clone() @@ -54,11 +62,123 @@ impl TransformTrait for Impute { let key = unescape_field(&self.key); let groupby: Vec<_> = groupby.iter().map(|f| unescape_field(f)).collect(); - let dataframe = dataframe - .impute(&field, value, &key, groupby.as_slice(), Some(ORDER_COL)) - .await - .with_context(|| "Impute transform failed".to_string())?; + let schema = dataframe.schema(); + let (_, field_field) = schema + .inner() + .column_with_name(&field) + .with_context(|| format!("No field named {}", field))?; + let field_type = field_field.data_type(); - Ok((dataframe, Vec::new())) + if groupby.is_empty() { + // Value replacement for field with no group_by fields specified is equivalent to replacing + // null values of that column with the fill value + let select_columns = schema + .fields() + .iter() + .map(|f| { + let col_name = f.name(); + Ok(if col_name == &field { + coalesce(vec![ + flat_col(&field), + lit(value.clone()).try_cast_to(field_type, schema)?, + ]) + .alias(col_name) + } else { + flat_col(col_name) + }) + }) + .collect::>>()?; + + Ok((dataframe.select(select_columns)?, Vec::new())) + } else { + // First step is to build up a new DataFrame that contains the all possible combinations + + // Build some internal columns for intermediate ordering + let order_col = flat_col(ORDER_COL); + let order_key = format!("{ORDER_COL}_key"); + let order_key_col = flat_col(&order_key); + let order_group = format!("{ORDER_COL}_groups"); + let order_group_col = flat_col(&order_group); + + // Create DataFrame with unique key values, and an internal ordering column + let key_col = flat_col(&key); + let key_df = dataframe + .clone() + .filter(key_col.clone().is_not_null())? + .aggregate_mixed( + vec![key_col.clone()], + vec![min(order_col.clone()).alias(&order_key)], + )?; + + // Create DataFrame with unique combinations of group_by values, with an + // internal ordering col + let group_cols = groupby.iter().map(|c| flat_col(c)).collect::>(); + + let groups_df = dataframe + .clone() + .aggregate_mixed(group_cols, vec![min(order_col.clone()).alias(&order_group)])?; + + // Build join conditions + let mut on_exprs = groupby + .iter() + .map(|c| relation_col(c, "lhs").eq(relation_col(c, "rhs"))) + .collect::>(); + on_exprs.push(relation_col(&key, "lhs").eq(relation_col(&key, "rhs"))); + + let pre_ordered_df = key_df + .join_on(groups_df, JoinType::Inner, vec![])? + .alias("lhs")? + .join_on(dataframe.clone().alias("rhs")?, JoinType::Left, on_exprs)?; + + // Build final selection that fills in missing values and adds ordering column + let mut final_selections = Vec::new(); + for field_index in 0..schema.fields().len() { + let (_, f) = schema.qualified_field(field_index); + + if f.name().starts_with(ORDER_COL) { + // Skip all order cols + continue; + } else if f.name() == &field { + // Coalesce to fill in null values in field + final_selections.push( + coalesce(vec![ + flat_col(&field), + lit(value.clone()).try_cast_to(field_type, schema)?, + ]) + .alias(f.name()), + ); + } else { + // Keep other columns + if f.name() == &key || groupby.contains(f.name()) { + // Pull key and groupby columns from the "lhs" table (which won't have nulls + // introduced by the left join) + final_selections.push(relation_col(f.name(), "lhs")); + } else { + // Pull all other columns from the rhs table + final_selections.push(relation_col(f.name(), "rhs")); + } + } + } + + let final_order_expr = Expr::WindowFunction(expr::WindowFunction { + fun: WindowFunctionDefinition::WindowUDF(Arc::new(RowNumber::new().into())), + args: vec![], + partition_by: vec![], + order_by: vec![ + // Sort first by the original row order, pushing imputed rows to the end + SortExpr::new(order_col.clone(), true, false), + // Sort imputed rows by first row that resides group + // then by first row that matches a key + SortExpr::new(order_group_col, true, true), + SortExpr::new(order_key_col, true, true), + ], + window_frame: WindowFrame::new(Some(true)), + null_treatment: Some(NullTreatment::RespectNulls), + }) + .alias(ORDER_COL); + final_selections.push(final_order_expr); + + Ok((pre_ordered_df.select(final_selections)?, Default::default())) + } } } diff --git a/vegafusion-runtime/src/transform/joinaggregate.rs b/vegafusion-runtime/src/transform/joinaggregate.rs index 56ab648d8..2adc660b4 100644 --- a/vegafusion-runtime/src/transform/joinaggregate.rs +++ b/vegafusion-runtime/src/transform/joinaggregate.rs @@ -1,28 +1,29 @@ +use crate::data::util::DataFrameUtils; use crate::expression::compiler::config::CompilationConfig; use crate::transform::aggregate::make_aggr_expr_for_named_col; use crate::transform::TransformTrait; use async_trait::async_trait; -use std::sync::Arc; -use vegafusion_common::column::{flat_col, unescaped_col}; - +use datafusion::prelude::DataFrame; +use datafusion_common::JoinType; +use vegafusion_common::column::{relation_col, unescaped_col}; +use vegafusion_common::escape::escape_field; use vegafusion_core::error::Result; use vegafusion_core::proto::gen::transforms::{AggregateOp, JoinAggregate}; use vegafusion_core::task_graph::task_value::TaskValue; use vegafusion_core::transform::aggregate::op_name; -use vegafusion_dataframe::dataframe::DataFrame; #[async_trait] impl TransformTrait for JoinAggregate { async fn eval( &self, - dataframe: Arc, + dataframe: DataFrame, _config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { + ) -> Result<(DataFrame, Vec)> { let group_exprs: Vec<_> = self.groupby.iter().map(|c| unescaped_col(c)).collect(); - let schema = dataframe.schema_df()?; + let schema = dataframe.schema(); let mut agg_exprs = Vec::new(); - let mut new_col_exprs = Vec::new(); + let mut new_col_names = Vec::new(); for (i, (field, op)) in self.fields.iter().zip(&self.ops).enumerate() { let op = AggregateOp::try_from(*op).unwrap(); let alias = if let Some(alias) = self.aliases.get(i).filter(|a| !a.is_empty()) { @@ -34,22 +35,58 @@ impl TransformTrait for JoinAggregate { format!("{}_{}", op_name(op), field) }; - new_col_exprs.push(flat_col(&alias)); - let agg_expr = if matches!(op, AggregateOp::Count) { // In Vega, the provided column is always ignored if op is 'count'. - make_aggr_expr_for_named_col(None, &op, &schema)? + make_aggr_expr_for_named_col(None, &op, schema)? } else { - make_aggr_expr_for_named_col(Some(field.clone()), &op, &schema)? + make_aggr_expr_for_named_col(Some(field.clone()), &op, schema)? }; // Apply alias let agg_expr = agg_expr.alias(&alias); + // Collect new column aliases + new_col_names.push(alias); + agg_exprs.push(agg_expr); } + // Perform regular aggregation on clone of input DataFrame + let agged_df = dataframe + .clone() + .aggregate_mixed(group_exprs, agg_exprs)? + .alias("rhs")?; + + // Join with the input dataframe on the grouping columns + let on = self + .groupby + .iter() + .map(|g| { + relation_col(&escape_field(g), "lhs").eq(relation_col(&escape_field(g), "rhs")) + }) + .collect::>(); + + let mut final_selections = dataframe + .schema() + .fields() + .iter() + .filter_map(|f| { + if new_col_names.contains(f.name()) { + None + } else { + Some(relation_col(f.name(), "lhs")) + } + }) + .collect::>(); + for col in &new_col_names { + final_selections.push(relation_col(col, "rhs")); + } + + let result = dataframe + .clone() + .alias("lhs")? + .join_on(agged_df, JoinType::Left, on)? + .select(final_selections)?; - let result = dataframe.joinaggregate(group_exprs, agg_exprs).await?; Ok((result, Vec::new())) } } diff --git a/vegafusion-runtime/src/transform/mod.rs b/vegafusion-runtime/src/transform/mod.rs index 674e06aa6..393000545 100644 --- a/vegafusion-runtime/src/transform/mod.rs +++ b/vegafusion-runtime/src/transform/mod.rs @@ -20,21 +20,20 @@ pub mod window; use crate::expression::compiler::config::CompilationConfig; use async_trait::async_trait; -use std::sync::Arc; +use datafusion::prelude::DataFrame; use vegafusion_core::error::Result; use vegafusion_core::proto::gen::transforms::transform::TransformKind; use vegafusion_core::proto::gen::transforms::Transform; use vegafusion_core::task_graph::task_value::TaskValue; use vegafusion_core::transform::TransformDependencies; -use vegafusion_dataframe::dataframe::DataFrame; #[async_trait] pub trait TransformTrait: TransformDependencies { async fn eval( &self, - dataframe: Arc, + dataframe: DataFrame, config: &CompilationConfig, - ) -> Result<(Arc, Vec)>; + ) -> Result<(DataFrame, Vec)>; } pub fn to_transform_trait(tx: &TransformKind) -> &dyn TransformTrait { @@ -62,9 +61,9 @@ pub fn to_transform_trait(tx: &TransformKind) -> &dyn TransformTrait { impl TransformTrait for Transform { async fn eval( &self, - sql_df: Arc, + sql_df: DataFrame, config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { + ) -> Result<(DataFrame, Vec)> { to_transform_trait(self.transform_kind()) .eval(sql_df, config) .await diff --git a/vegafusion-runtime/src/transform/pipeline.rs b/vegafusion-runtime/src/transform/pipeline.rs index b81837cc9..33a17462b 100644 --- a/vegafusion-runtime/src/transform/pipeline.rs +++ b/vegafusion-runtime/src/transform/pipeline.rs @@ -4,9 +4,10 @@ use crate::transform::TransformTrait; use itertools::Itertools; use std::collections::HashMap; +use crate::data::util::DataFrameUtils; use async_trait::async_trait; +use datafusion::prelude::DataFrame; use datafusion_expr::expr; -use std::sync::Arc; use vegafusion_common::column::flat_col; use vegafusion_common::data::table::VegaFusionTable; use vegafusion_common::data::ORDER_COL; @@ -15,13 +16,12 @@ use vegafusion_core::proto::gen::tasks::{Variable, VariableNamespace}; use vegafusion_core::proto::gen::transforms::TransformPipeline; use vegafusion_core::task_graph::task_value::TaskValue; use vegafusion_core::transform::TransformDependencies; -use vegafusion_dataframe::dataframe::DataFrame; #[async_trait] pub trait TransformPipelineUtils { async fn eval_sql( &self, - dataframe: Arc, + dataframe: DataFrame, config: &CompilationConfig, ) -> Result<(VegaFusionTable, Vec)>; } @@ -30,14 +30,19 @@ pub trait TransformPipelineUtils { impl TransformPipelineUtils for TransformPipeline { async fn eval_sql( &self, - sql_df: Arc, + sql_df: DataFrame, config: &CompilationConfig, ) -> Result<(VegaFusionTable, Vec)> { let mut result_sql_df = sql_df; let mut result_outputs: HashMap = Default::default(); let mut config = config.clone(); - if result_sql_df.schema().column_with_name(ORDER_COL).is_none() { + if result_sql_df + .schema() + .inner() + .column_with_name(ORDER_COL) + .is_none() + { return Err(VegaFusionError::internal(format!( "DataFrame input to eval_sql does not have the expected {ORDER_COL} ordering column" ))); @@ -70,7 +75,12 @@ impl TransformPipelineUtils for TransformPipeline { result_sql_df = tx_result.0; - if result_sql_df.schema().column_with_name(ORDER_COL).is_none() { + if result_sql_df + .schema() + .inner() + .column_with_name(ORDER_COL) + .is_none() + { return Err(VegaFusionError::internal( format!("DataFrame output of transform does not have the expected {ORDER_COL} ordering column: {tx:?}") )); @@ -87,18 +97,13 @@ impl TransformPipelineUtils for TransformPipeline { } // Sort by ordering column at the end - result_sql_df = result_sql_df - .sort( - vec![expr::Sort { - expr: flat_col(ORDER_COL), - asc: true, - nulls_first: false, - }], - None, - ) - .await?; + result_sql_df = result_sql_df.sort(vec![expr::Sort { + expr: flat_col(ORDER_COL), + asc: true, + nulls_first: false, + }])?; - let table = result_sql_df.collect().await?.without_ordering()?; + let table = result_sql_df.collect_to_table().await?.without_ordering()?; // Sort result signal value by signal name let (_, signals_values): (Vec<_>, Vec<_>) = result_outputs diff --git a/vegafusion-runtime/src/transform/pivot.rs b/vegafusion-runtime/src/transform/pivot.rs index 9dd357c0e..1ae0ac408 100644 --- a/vegafusion-runtime/src/transform/pivot.rs +++ b/vegafusion-runtime/src/transform/pivot.rs @@ -1,10 +1,11 @@ +use crate::data::util::DataFrameUtils; use crate::expression::compiler::config::CompilationConfig; use crate::transform::aggregate::make_agg_expr_for_col_expr; use crate::transform::TransformTrait; use async_trait::async_trait; +use datafusion::prelude::DataFrame; use datafusion_expr::{lit, when}; use datafusion_functions_aggregate::expr_fn::min; -use std::sync::Arc; use vegafusion_common::arrow::array::StringArray; use vegafusion_common::arrow::datatypes::DataType; use vegafusion_common::column::{flat_col, unescaped_col}; @@ -15,7 +16,6 @@ use vegafusion_common::error::{Result, ResultWithContext, VegaFusionError}; use vegafusion_common::escape::unescape_field; use vegafusion_core::proto::gen::transforms::{AggregateOp, Pivot}; use vegafusion_core::task_graph::task_value::TaskValue; -use vegafusion_dataframe::dataframe::DataFrame; /// NULL_PLACEHOLDER_NAME is used for sorting to match Vega, where null always comes first for /// limit sorting @@ -28,15 +28,16 @@ const NULL_NAME: &str = "null"; impl TransformTrait for Pivot { async fn eval( &self, - dataframe: Arc, + dataframe: DataFrame, _config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { + ) -> Result<(DataFrame, Vec)> { // Make sure the pivot column is a string - let pivot_dtype = data_type(&unescaped_col(&self.field), &dataframe.schema_df()?)?; + let pivot_dtype = data_type(&unescaped_col(&self.field), dataframe.schema())?; let dataframe = if matches!(pivot_dtype, DataType::Boolean) { // Boolean column type. For consistency with vega, replace 0 with "false" and 1 with "true" let select_exprs: Vec<_> = dataframe .schema() + .inner() .fields .iter() .map(|field| { @@ -54,11 +55,12 @@ impl TransformTrait for Pivot { } }) .collect::>>()?; - dataframe.select(select_exprs).await? + dataframe.select(select_exprs)? } else if !is_string_datatype(&pivot_dtype) { // Column type is not string, so cast values to strings let select_exprs: Vec<_> = dataframe .schema() + .inner() .fields .iter() .map(|field| { @@ -70,7 +72,7 @@ impl TransformTrait for Pivot { .otherwise(cast_to( unescaped_col(&self.field), &DataType::Utf8, - &dataframe.schema_df()?, + dataframe.schema(), )?)? .alias(&self.field)) } else { @@ -78,11 +80,12 @@ impl TransformTrait for Pivot { } }) .collect::>>()?; - dataframe.select(select_exprs).await? + dataframe.select(select_exprs)? } else { // Column type is string, just replace NULL with "null" let select_exprs: Vec<_> = dataframe .schema() + .inner() .fields .iter() .map(|field| { @@ -99,32 +102,26 @@ impl TransformTrait for Pivot { } }) .collect::>>()?; - dataframe.select(select_exprs).await? + dataframe.select(select_exprs)? }; pivot_case(self, dataframe).await } } -async fn extract_sorted_pivot_values( - tx: &Pivot, - dataframe: Arc, -) -> Result> { - let agg_query = dataframe - .aggregate(vec![unescaped_col(&tx.field)], vec![]) - .await?; +async fn extract_sorted_pivot_values(tx: &Pivot, dataframe: DataFrame) -> Result> { + let agg_query = dataframe.aggregate_mixed(vec![unescaped_col(&tx.field)], vec![])?; let limit = match tx.limit { None | Some(0) => None, - Some(i) => Some(i), + Some(i) => Some(i as usize), }; let sorted_query = agg_query - .sort(vec![unescaped_col(&tx.field).sort(true, false)], limit) - .await?; + .sort(vec![unescaped_col(&tx.field).sort(true, false)])? + .limit(0, limit)?; - let pivot_result = sorted_query.collect().await?; - let pivot_batch = pivot_result.to_record_batch()?; + let pivot_batch = sorted_query.collect_flat().await?; let pivot_array = pivot_batch .column_by_name(&tx.field) .with_context(|| format!("No column named {}", tx.field))?; @@ -139,39 +136,30 @@ async fn extract_sorted_pivot_values( Ok(pivot_vec) } -async fn pivot_case( - tx: &Pivot, - dataframe: Arc, -) -> Result<(Arc, Vec)> { +async fn pivot_case(tx: &Pivot, dataframe: DataFrame) -> Result<(DataFrame, Vec)> { let pivot_vec = extract_sorted_pivot_values(tx, dataframe.clone()).await?; if pivot_vec.is_empty() { return Err(VegaFusionError::internal("Unexpected empty pivot dataset")); } - let schema = dataframe.schema_df()?; + let schema = dataframe.schema(); // Process aggregate operation let agg_op: AggregateOp = tx .op .map(|op_code| AggregateOp::try_from(op_code).unwrap()) .unwrap_or(AggregateOp::Sum); - let fill_zero = should_fill_zero(&agg_op); // Build vector of aggregates let mut agg_exprs: Vec<_> = Vec::new(); for pivot_val in pivot_vec.iter() { let predicate_expr = unescaped_col(&tx.field).eq(lit(pivot_val.as_str())); - let value_expr = to_numeric(unescaped_col(tx.value.as_str()), &schema)?; - let agg_col = when(predicate_expr, value_expr).otherwise(if fill_zero { - // Replace null with zero for certain aggregates - lit(0) - } else { - lit(ScalarValue::Null) - })?; + let value_expr = to_numeric(unescaped_col(tx.value.as_str()), schema)?; + let agg_col = when(predicate_expr, value_expr).otherwise(lit(ScalarValue::Null))?; - let agg_expr = make_agg_expr_for_col_expr(agg_col, &agg_op, &schema)?; + let agg_expr = make_agg_expr_for_col_expr(agg_col, &agg_op, schema)?; // Compute pivot column name, replacing null placeholder with "null" let col_name = if pivot_val == NULL_PLACEHOLDER_NAME { @@ -190,11 +178,6 @@ async fn pivot_case( // Build vector of groupby expressions let group_expr: Vec<_> = tx.groupby.iter().map(|c| unescaped_col(c)).collect(); - let pivoted = dataframe.aggregate(group_expr, agg_exprs).await?; + let pivoted = dataframe.aggregate_mixed(group_expr, agg_exprs)?; Ok((pivoted, Default::default())) } - -/// Test whether null values should be replaced by zero for the specified aggregation -fn should_fill_zero(op: &AggregateOp) -> bool { - matches!(op, AggregateOp::Sum) -} diff --git a/vegafusion-runtime/src/transform/project.rs b/vegafusion-runtime/src/transform/project.rs index a5bb5f2e5..a67a151d8 100644 --- a/vegafusion-runtime/src/transform/project.rs +++ b/vegafusion-runtime/src/transform/project.rs @@ -2,23 +2,22 @@ use crate::expression::compiler::config::CompilationConfig; use crate::transform::TransformTrait; use async_trait::async_trait; +use datafusion::prelude::DataFrame; use std::collections::HashSet; -use std::sync::Arc; use vegafusion_common::column::flat_col; use vegafusion_common::data::ORDER_COL; use vegafusion_common::escape::unescape_field; use vegafusion_core::error::Result; use vegafusion_core::proto::gen::transforms::Project; use vegafusion_core::task_graph::task_value::TaskValue; -use vegafusion_dataframe::dataframe::DataFrame; #[async_trait] impl TransformTrait for Project { async fn eval( &self, - dataframe: Arc, + dataframe: DataFrame, _config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { + ) -> Result<(DataFrame, Vec)> { // Collect all dataframe fields into a HashSet for fast membership test let all_fields: HashSet<_> = dataframe .schema() @@ -46,7 +45,7 @@ impl TransformTrait for Project { select_fields.insert(0, ORDER_COL.to_string()); let select_col_exprs: Vec<_> = select_fields.iter().map(|f| flat_col(f)).collect(); - let result = dataframe.select(select_col_exprs).await?; + let result = dataframe.select(select_col_exprs)?; Ok((result, Default::default())) } } diff --git a/vegafusion-runtime/src/transform/sequence.rs b/vegafusion-runtime/src/transform/sequence.rs index ee57c6e63..c7df51245 100644 --- a/vegafusion-runtime/src/transform/sequence.rs +++ b/vegafusion-runtime/src/transform/sequence.rs @@ -2,8 +2,10 @@ use crate::expression::compiler::compile; use crate::expression::compiler::config::CompilationConfig; use crate::transform::TransformTrait; +use crate::data::util::SessionContextUtils; use crate::expression::compiler::utils::ExprHelpers; use async_trait::async_trait; +use datafusion::prelude::{DataFrame, SessionContext}; use std::sync::Arc; use vegafusion_common::arrow::array::{ArrayRef, Float64Array}; use vegafusion_common::arrow::datatypes::DataType; @@ -14,15 +16,14 @@ use vegafusion_common::data::table::VegaFusionTable; use vegafusion_common::error::Result; use vegafusion_core::proto::gen::transforms::Sequence; use vegafusion_core::task_graph::task_value::TaskValue; -use vegafusion_dataframe::dataframe::DataFrame; #[async_trait] impl TransformTrait for Sequence { async fn eval( &self, - dataframe: Arc, + dataframe: DataFrame, config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { + ) -> Result<(DataFrame, Vec)> { let start_expr = compile(self.start.as_ref().unwrap(), config, None)?; let start_scalar = start_expr.eval_to_scalar()?; let start = start_scalar.to_f64()?; @@ -31,9 +32,6 @@ impl TransformTrait for Sequence { let stop_scalar = stop_expr.eval_to_scalar()?; let stop = stop_scalar.to_f64()?; - // Use input DataFrame's connection to create the new dataset - let conn = dataframe.connection(); - let step = if let Some(step_signal) = &self.step { let step_expr = compile(step_signal, config, None)?; let step_scalar = step_expr.eval_to_scalar()?; @@ -67,7 +65,11 @@ impl TransformTrait for Sequence { )])) as SchemaRef; let data_batch = RecordBatch::try_new(data_schema, vec![data_array])?; let data_table = VegaFusionTable::from(data_batch); - let result = conn.scan_arrow(data_table.with_ordering()?).await?; + + // Build session context from input DataFrame + let (state, _) = dataframe.into_parts(); + let ctx = SessionContext::from(state); + let result = ctx.vegafusion_table(data_table.with_ordering()?).await?; Ok((result, Default::default())) } diff --git a/vegafusion-runtime/src/transform/stack.rs b/vegafusion-runtime/src/transform/stack.rs index 0c1a97074..3500d4283 100644 --- a/vegafusion-runtime/src/transform/stack.rs +++ b/vegafusion-runtime/src/transform/stack.rs @@ -1,29 +1,47 @@ +use crate::data::util::DataFrameUtils; use crate::expression::compiler::config::CompilationConfig; use crate::transform::TransformTrait; use async_trait::async_trait; -use datafusion_expr::expr; -use std::sync::Arc; -use vegafusion_common::column::{flat_col, unescaped_col}; +use datafusion::prelude::DataFrame; +use datafusion_common::JoinType; +use datafusion_expr::expr::WildcardOptions; +use datafusion_expr::{ + expr, lit, qualified_wildcard, when, Expr, WindowFrame, WindowFunctionDefinition, +}; +use datafusion_functions::expr_fn::{abs, coalesce}; +use datafusion_functions_aggregate::expr_fn::max; +use datafusion_functions_aggregate::sum::sum_udaf; +use sqlparser::ast::NullTreatment; +use std::ops::{Add, Div, Sub}; +use vegafusion_common::column::{flat_col, relation_col, unescaped_col}; use vegafusion_common::data::ORDER_COL; -use vegafusion_common::error::Result; +use vegafusion_common::datatypes::to_numeric; +use vegafusion_common::error::{Result, VegaFusionError}; use vegafusion_common::escape::unescape_field; use vegafusion_core::proto::gen::transforms::{SortOrder, Stack, StackOffset}; use vegafusion_core::task_graph::task_value::TaskValue; -use vegafusion_dataframe::dataframe::{DataFrame, StackMode}; #[async_trait] impl TransformTrait for Stack { async fn eval( &self, - dataframe: Arc, + dataframe: DataFrame, _config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { + ) -> Result<(DataFrame, Vec)> { let start_field = self.alias_0.clone().expect("alias0 expected"); let stop_field = self.alias_1.clone().expect("alias1 expected"); let field = unescape_field(&self.field); let group_by: Vec<_> = self.groupby.iter().map(|f| unescape_field(f)).collect(); + // Save off input columns + let input_fields: Vec<_> = dataframe + .schema() + .fields() + .iter() + .map(|f| f.name().clone()) + .collect(); + // Build order by vector let mut order_by: Vec<_> = self .sort_fields @@ -44,22 +62,206 @@ impl TransformTrait for Stack { }); let offset = StackOffset::try_from(self.offset).expect("Failed to convert stack offset"); - let mode = match offset { - StackOffset::Zero => StackMode::Zero, - StackOffset::Normalize => StackMode::Normalize, - StackOffset::Center => StackMode::Center, - }; - - let result = dataframe - .stack( - &field, + + // Build partitioning column expressions + let partition_by: Vec<_> = group_by.iter().map(|group| flat_col(group)).collect(); + let numeric_field = coalesce(vec![ + to_numeric(flat_col(&field), dataframe.schema())?, + lit(0.0), + ]); + + if let StackOffset::Zero = offset { + // Build window function to compute stacked value + let window_expr = Expr::WindowFunction(expr::WindowFunction { + fun: WindowFunctionDefinition::AggregateUDF(sum_udaf()), + args: vec![numeric_field.clone()], + partition_by, order_by, - group_by.as_slice(), + window_frame: WindowFrame::new(Some(true)), + null_treatment: Some(NullTreatment::IgnoreNulls), + }); + + // Initialize selection with all columns, minus those that conflict with start/stop fields + let mut select_exprs = dataframe + .schema() + .fields() + .iter() + .filter_map(|f| { + if f.name() == &start_field || f.name() == &stop_field { + // Skip fields to be overwritten + None + } else { + Some(flat_col(f.name())) + } + }) + .collect::>(); + + // Add stop window expr + select_exprs.push(window_expr.alias(&stop_field)); + + // For offset zero, we need to evaluate positive and negative field values separately, + // then union the results. This is required to make sure stacks do not overlap. Negative + // values stack in the negative direction and positive values stack in the positive + // direction. + let pos_df = dataframe + .clone() + .filter(numeric_field.clone().gt_eq(lit(0)))? + .select(select_exprs.clone())?; + + let neg_df = dataframe + .clone() + .filter(numeric_field.clone().lt(lit(0)))? + .select(select_exprs)?; + + // Union + let unioned_df = pos_df.union(neg_df)?; + + // Add start window expr + let result_df = unioned_df.with_column( &start_field, - &stop_field, - mode, - ) - .await?; - Ok((result, Default::default())) + flat_col(&stop_field).sub(numeric_field.clone()), + )?; + + Ok((result_df, Default::default())) + } else { + // Center or Normalized stack modes + + // take absolute value of numeric field + let numeric_field = abs(numeric_field); + + // Create __stack column with numeric field + let stack_col_name = "__stack"; + let dataframe = dataframe.select(vec![ + Expr::Wildcard { + qualifier: None, + options: WildcardOptions::default(), + }, + numeric_field.alias(stack_col_name), + ])?; + + // Create aggregate for total of stack value + let total_agg = Expr::AggregateFunction(expr::AggregateFunction { + func: sum_udaf(), + args: vec![flat_col(stack_col_name)], + distinct: false, + filter: None, + order_by: None, + null_treatment: Some(NullTreatment::IgnoreNulls), + }) + .alias("__total"); + + let dataframe = if partition_by.is_empty() { + // Cross join total aggregation + dataframe.clone().aggregate(vec![], vec![total_agg])?.join( + dataframe, + JoinType::Inner, + &[], + &[], + None, + )? + } else { + // Join back total aggregation + let on_exprs = group_by + .iter() + .map(|p| relation_col(p, "lhs").eq(relation_col(p, "rhs"))) + .collect::>(); + + dataframe + .clone() + .aggregate(partition_by.clone(), vec![total_agg])? + .alias("lhs")? + .join_on(dataframe.alias("rhs")?, JoinType::Inner, on_exprs)? + .select(vec![ + qualified_wildcard("rhs"), + relation_col("__total", "lhs"), + ])? + }; + + // Build window function to compute cumulative sum of stack column + let cumulative_field = "_cumulative"; + let fun = WindowFunctionDefinition::AggregateUDF(sum_udaf()); + + let window_expr = Expr::WindowFunction(expr::WindowFunction { + fun, + args: vec![flat_col(stack_col_name)], + partition_by, + order_by, + window_frame: WindowFrame::new(Some(true)), + null_treatment: Some(NullTreatment::IgnoreNulls), + }) + .alias(cumulative_field); + + // Perform selection to add new field value + let dataframe = dataframe.select(vec![ + Expr::Wildcard { + qualifier: None, + options: WildcardOptions::default(), + }, + window_expr, + ])?; + + // Build final_selection + let mut final_selection: Vec<_> = input_fields + .iter() + .filter_map(|field| { + if field == &start_field || field == &stop_field { + None + } else { + Some(flat_col(field)) + } + }) + .collect(); + + // Now compute stop_field column by adding numeric field to start_field + let dataframe = match offset { + StackOffset::Center => { + let max_total = max(flat_col("__total")).alias("__max_total"); + + let dataframe = dataframe + .clone() + .aggregate(vec![], vec![max_total])? + .join_on(dataframe, JoinType::Inner, vec![])?; + + // Add final selections + let first = flat_col("__max_total") + .sub(flat_col("__total")) + .div(lit(2.0)); + let first_col = flat_col(cumulative_field).add(first); + let stop_col = first_col.clone().alias(stop_field); + let start_col = first_col.sub(flat_col(stack_col_name)).alias(start_field); + final_selection.push(start_col); + final_selection.push(stop_col); + + dataframe + } + StackOffset::Normalize => { + let total_zero = flat_col("__total").eq(lit(0.0)); + + let start_col = when(total_zero.clone(), lit(0.0)) + .otherwise( + flat_col(cumulative_field) + .sub(flat_col(stack_col_name)) + .div(flat_col("__total")), + )? + .alias(start_field); + + final_selection.push(start_col); + + let stop_col = when(total_zero, lit(0.0)) + .otherwise(flat_col(cumulative_field).div(flat_col("__total")))? + .alias(stop_field); + + final_selection.push(stop_col); + + dataframe + } + _ => return Err(VegaFusionError::internal("Unexpected stack mode")), + }; + + Ok(( + dataframe.select(final_selection.clone())?, + Default::default(), + )) + } } } diff --git a/vegafusion-runtime/src/transform/timeunit.rs b/vegafusion-runtime/src/transform/timeunit.rs index 2fa9a61a3..b2aa1f3a8 100644 --- a/vegafusion-runtime/src/transform/timeunit.rs +++ b/vegafusion-runtime/src/transform/timeunit.rs @@ -1,46 +1,58 @@ use crate::expression::compiler::config::CompilationConfig; use crate::transform::TransformTrait; use async_trait::async_trait; +use datafusion::prelude::DataFrame; use datafusion_common::DFSchema; -use datafusion_functions::expr_fn::floor; +use datafusion_functions::expr_fn::{date_part, date_trunc}; use std::collections::HashSet; -use std::ops::{Add, Div, Mul, Sub}; -use std::sync::Arc; +use std::ops::{Add, Mul, Rem, Sub}; use vegafusion_common::arrow::datatypes::{DataType, TimeUnit as ArrowTimeUnit}; use vegafusion_core::error::{Result, ResultWithContext, VegaFusionError}; use vegafusion_core::proto::gen::transforms::{TimeUnit, TimeUnitTimeZone, TimeUnitUnit}; use vegafusion_core::task_graph::task_value::TaskValue; -use datafusion_expr::expr::Cast; -use datafusion_expr::{expr, lit, Expr, ExprSchemable}; +use crate::datafusion::udfs::datetime::make_timestamptz::make_timestamptz; +use crate::datafusion::udfs::datetime::timeunit::TIMEUNIT_START_UDF; +use crate::expression::compiler::utils::ExprHelpers; +use crate::transform::utils::{from_epoch_millis, str_to_timestamp}; +use datafusion_expr::{interval_datetime_lit, interval_year_month_lit, lit, Expr, ExprSchemable}; use itertools::Itertools; use vegafusion_common::column::{flat_col, unescaped_col}; use vegafusion_common::datatypes::{cast_to, is_numeric_datatype}; -use vegafusion_dataframe::dataframe::DataFrame; -use vegafusion_datafusion_udfs::udfs::datetime::date_add_tz::DATE_ADD_TZ_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::date_part_tz::DATE_PART_TZ_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::date_trunc_tz::DATE_TRUNC_TZ_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::epoch_to_utc_timestamp::EPOCH_MS_TO_UTC_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::make_utc_timestamp::MAKE_UTC_TIMESTAMP; -use vegafusion_datafusion_udfs::udfs::datetime::str_to_utc_timestamp::STR_TO_UTC_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::timeunit::TIMEUNIT_START_UDF; - -// Implementation of timeunit start using the SQL DATE_TRUNC function + +/// Implementation of timeunit start using the SQL date_trunc function fn timeunit_date_trunc( field: &str, smallest_unit: TimeUnitUnit, schema: &DFSchema, default_input_tz: &String, - local_tz: &Option, -) -> Result<(Expr, (i32, String))> { - let (part_str, interval) = match smallest_unit { - TimeUnitUnit::Year => ("year".to_string(), (1, "YEAR".to_string())), - TimeUnitUnit::Quarter => ("quarter".to_string(), (3, "MONTH".to_string())), - TimeUnitUnit::Month => ("month".to_string(), (1, "MONTH".to_string())), - TimeUnitUnit::Date => ("day".to_string(), (1, "DAY".to_string())), - TimeUnitUnit::Hours => ("hour".to_string(), (1, "HOUR".to_string())), - TimeUnitUnit::Minutes => ("minute".to_string(), (1, "MINUTE".to_string())), - TimeUnitUnit::Seconds => ("second".to_string(), (1, "SECOND".to_string())), + tz: &str, +) -> Result<(Expr, Expr)> { + // Convert field to timestamp in target timezone + let field_col = to_timestamp_col(unescaped_col(field), schema, default_input_tz)?.try_cast_to( + &DataType::Timestamp(ArrowTimeUnit::Millisecond, Some(tz.into())), + schema, + )?; + + // Handle Sunday-based weeks as special case + if let TimeUnitUnit::Week = smallest_unit { + let day_interval = interval_datetime_lit("1 day"); + let trunc_expr = + date_trunc(lit("week"), field_col.add(day_interval.clone())).sub(day_interval); + let interval = interval_datetime_lit("7 day"); + return Ok((trunc_expr, interval)); + } + + // Handle uniform case + let (part_str, interval_expr) = match smallest_unit { + TimeUnitUnit::Year => ("year", interval_year_month_lit("1 year")), + TimeUnitUnit::Quarter => ("quarter", interval_year_month_lit("3 month")), + TimeUnitUnit::Month => ("month", interval_year_month_lit("1 month")), + TimeUnitUnit::Date => ("day", interval_datetime_lit("1 day")), + TimeUnitUnit::Hours => ("hour", interval_datetime_lit("1 hour")), + TimeUnitUnit::Minutes => ("minute", interval_datetime_lit("1 minute")), + TimeUnitUnit::Seconds => ("second", interval_datetime_lit("1 second")), + TimeUnitUnit::Milliseconds => ("millisecond", interval_datetime_lit("1 millisecond")), _ => { return Err(VegaFusionError::internal(format!( "Unsupported date trunc unit: {smallest_unit:?}" @@ -48,204 +60,138 @@ fn timeunit_date_trunc( } }; - // Convert field column to timestamp - let field_col = to_timestamp_col(field, schema, default_input_tz)?; - - // Compute input timestamp expression based on timezone - let tz_str = local_tz.clone().unwrap_or_else(|| "UTC".to_string()); - - let start_expr = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(DATE_TRUNC_TZ_UDF.clone()), - args: vec![lit(part_str), field_col, lit(tz_str)], - }); + // date_trunc after converting to the required timezone (will be the local_tz or UTC) + let trunc_expr = date_trunc(lit(part_str), field_col); - Ok((start_expr, interval)) + Ok((trunc_expr, interval_expr)) } -// Implementation of timeunit start using MAKE_UTC_TIMESTAMP and the DATE_PART_TZ function +/// Implementation of timeunit start using make_timestamptz and the date_part functions fn timeunit_date_part_tz( field: &str, units_set: &HashSet, schema: &DFSchema, default_input_tz: &String, - local_tz: &Option, -) -> Result<(Expr, (i32, String))> { - // Initialize default arguments to make_utc_timestamp - let mut make_timestamptz_args = vec![ - lit(2012), // 0 year - lit(0), // 1 month - lit(1), // 2 date - lit(0), // 3 hour - lit(0), // 4 minute - lit(0), // 5 second - lit(0), // 6 millisecond - lit(local_tz.clone().unwrap_or_else(|| "UTC".to_string())), - ]; + tz: &str, +) -> Result<(Expr, Expr)> { + let mut year_arg = lit(2012); + let mut month_arg = lit(1); + let mut date_arg = lit(1); + let mut hour_arg = lit(0); + let mut minute_arg = lit(0); + let mut second_arg = lit(0); + let mut millisecond_arg = lit(0); // Initialize interval string, this will be overwritten with the smallest specified unit - let mut interval = (1, "YEAR".to_string()); + let mut interval = interval_year_month_lit("1 year"); // Convert field column to timestamp - let field_col = to_timestamp_col(field, schema, default_input_tz)?; - - // Compute input timestamp expression based on timezone - let tz_str = local_tz.clone().unwrap_or_else(|| "UTC".to_string()); + let field_col = to_timestamp_col(unescaped_col(field), schema, default_input_tz)?.try_cast_to( + &DataType::Timestamp(ArrowTimeUnit::Millisecond, Some(tz.into())), + schema, + )?; // Year if units_set.contains(&TimeUnitUnit::Year) { - make_timestamptz_args[0] = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(DATE_PART_TZ_UDF.clone()), - args: vec![lit("year"), field_col.clone(), lit(&tz_str)], - }); - - interval = (1, "YEAR".to_string()); + year_arg = date_part(lit("year"), field_col.clone()); + interval = interval_year_month_lit("1 year"); } // Quarter if units_set.contains(&TimeUnitUnit::Quarter) { - let month = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(DATE_PART_TZ_UDF.clone()), - args: vec![lit("month"), field_col.clone(), lit(&tz_str)], - }) - .sub(lit(1.0)); - - make_timestamptz_args[1] = Expr::Cast(Cast { - expr: Box::new(floor(month.div(lit(3))).mul(lit(3))), - data_type: DataType::Int64, - }); - - interval = (3, "MONTH".to_string()); + // Compute month (1-based) from the extracted quarter (1-based) + let month_from_quarter = date_part(lit("quarter"), field_col.clone()) + .sub(lit(1)) + .mul(lit(3)) + .add(lit(1)); + + month_arg = month_from_quarter; + interval = interval_year_month_lit("3 month"); } // Month if units_set.contains(&TimeUnitUnit::Month) { - make_timestamptz_args[1] = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(DATE_PART_TZ_UDF.clone()), - args: vec![lit("month"), field_col.clone(), lit(&tz_str)], - }) - .sub(lit(1.0)); - - interval = (1, "MONTH".to_string()); + month_arg = date_part(lit("month"), field_col.clone()); + interval = interval_year_month_lit("1 month"); } // Date if units_set.contains(&TimeUnitUnit::Date) { - make_timestamptz_args[2] = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(DATE_PART_TZ_UDF.clone()), - args: vec![lit("day"), field_col.clone(), lit(&tz_str)], - }); - - interval = (1, "DAY".to_string()); + date_arg = date_part(lit("day"), field_col.clone()); + interval = interval_datetime_lit("1 day"); } // Hour if units_set.contains(&TimeUnitUnit::Hours) { - make_timestamptz_args[3] = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(DATE_PART_TZ_UDF.clone()), - args: vec![lit("hour"), field_col.clone(), lit(&tz_str)], - }); - - interval = (1, "HOUR".to_string()); + hour_arg = date_part(lit("hour"), field_col.clone()); + interval = interval_datetime_lit("1 hour"); } // Minute if units_set.contains(&TimeUnitUnit::Minutes) { - make_timestamptz_args[4] = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(DATE_PART_TZ_UDF.clone()), - args: vec![lit("minute"), field_col.clone(), lit(&tz_str)], - }); - - interval = (1, "MINUTE".to_string()); + minute_arg = date_part(lit("minute"), field_col.clone()); + interval = interval_datetime_lit("1 minute"); } // Second if units_set.contains(&TimeUnitUnit::Seconds) { - make_timestamptz_args[5] = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(DATE_PART_TZ_UDF.clone()), - args: vec![lit("second"), field_col, lit(&tz_str)], - }); + second_arg = date_part(lit("second"), field_col.clone()); + interval = interval_datetime_lit("1 second"); + } - interval = (1, "SECOND".to_string()); + // Millisecond + if units_set.contains(&TimeUnitUnit::Seconds) { + millisecond_arg = date_part(lit("millisecond"), field_col.clone()).rem(lit(1000)); + interval = interval_datetime_lit("1 millisecond"); } // Construct expression to make timestamp from components - let start_expr = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*MAKE_UTC_TIMESTAMP).clone()), - args: make_timestamptz_args, - }); + let start_expr = make_timestamptz( + year_arg, + month_arg, + date_arg, + hour_arg, + minute_arg, + second_arg, + millisecond_arg, + tz, + ); Ok((start_expr, interval)) } -fn to_timestamp_col(field: &str, schema: &DFSchema, default_input_tz: &String) -> Result { - let field_col = unescaped_col(field); - Ok(match field_col.get_type(schema)? { - DataType::Timestamp(_, _) => field_col, - DataType::Date64 | DataType::Date32 => cast_to( - field_col, - &DataType::Timestamp(ArrowTimeUnit::Millisecond, None), - schema, - )?, - DataType::Utf8 | DataType::LargeUtf8 | DataType::Utf8View => { - Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*STR_TO_UTC_TIMESTAMP_UDF).clone()), - args: vec![field_col, lit(default_input_tz)], - }) - } - dtype if is_numeric_datatype(&dtype) => Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*EPOCH_MS_TO_UTC_TIMESTAMP_UDF).clone()), - args: vec![cast_to(field_col, &DataType::Int64, schema)?], - }), - dtype => { - return Err(VegaFusionError::compilation(format!( - "Invalid data type for timeunit transform: {dtype:?}" - ))) - } - }) -} - -// timeunit transform for 'day' unit (day of the week) +/// timeunit transform for 'day' unit (day of the week) fn timeunit_weekday( field: &str, schema: &DFSchema, default_input_tz: &String, - local_tz: &Option, -) -> Result<(Expr, (i32, String))> { - let field_col = to_timestamp_col(field, schema, default_input_tz)?; - - // Compute input timestamp expression based on timezone - let tz_str = local_tz.clone().unwrap_or_else(|| "UTC".to_string()); + tz: &str, +) -> Result<(Expr, Expr)> { + let field_col = to_timestamp_col(unescaped_col(field), schema, default_input_tz)?.try_cast_to( + &DataType::Timestamp(ArrowTimeUnit::Millisecond, Some(tz.into())), + schema, + )?; // Use DATE_PART_TZ to extract the weekday - // where Sunday is 0 and Saturday is 6 - let weekday0 = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(DATE_PART_TZ_UDF.clone()), - args: vec![lit("dow"), field_col, lit(tz_str)], - }); + // where Sunday is 0, Saturday is 6 + let weekday0 = date_part(lit("dow"), field_col); - // Add one to line up with the signature of MAKE_UTC_TIMESTAMP + // Add one to line up with the signature of make_timestamptz // where Sunday is 1 and Saturday is 7 let weekday1 = weekday0.add(lit(1)); - // The year 2012 starts with a Sunday, so we can set the day of the month to match weekday1 - let make_timestamptz_args = vec![ - lit(2012), // 0 year - lit(0), // 1 month - weekday1, // 2 date - lit(0), // 3 hour - lit(0), // 4 minute - lit(0), // 5 second - lit(0), // 6 millisecond - lit(local_tz.clone().unwrap_or_else(|| "UTC".to_string())), - ]; - - // Construct expression to make timestamp from components - let start_expr = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*MAKE_UTC_TIMESTAMP).clone()), - args: make_timestamptz_args, - }); - - Ok((start_expr, (1, "DAY".to_string()))) + let start_expr = make_timestamptz( + lit(2012), + lit(1), + weekday1, + lit(0), + lit(0), + lit(0), + lit(0), + tz, + ); + + Ok((start_expr, interval_datetime_lit("1 day"))) } // Fallback implementation of timeunit that uses a custom DataFusion UDF @@ -254,8 +200,8 @@ fn timeunit_custom_udf( units_set: &HashSet, schema: &DFSchema, default_input_tz: &String, - local_tz: &Option, -) -> Result<(Expr, (i32, String))> { + tz: &str, +) -> Result<(Expr, Expr)> { let units_mask = [ units_set.contains(&TimeUnitUnit::Year), // 0 units_set.contains(&TimeUnitUnit::Quarter), // 1 @@ -272,16 +218,14 @@ fn timeunit_custom_udf( let timeunit_start_udf = &TIMEUNIT_START_UDF; - let local_tz = local_tz - .as_ref() - .map(|tz| tz.to_string()) - .unwrap_or_else(|| "UTC".to_string()); - - let field_col = to_timestamp_col(field, schema, default_input_tz)?; + let field_col = to_timestamp_col(unescaped_col(field), schema, default_input_tz)?.try_cast_to( + &DataType::Timestamp(ArrowTimeUnit::Millisecond, Some("UTC".into())), + schema, + )?; let timeunit_start_value = timeunit_start_udf.call(vec![ field_col, - lit(local_tz), + lit(tz), lit(units_mask[0]), lit(units_mask[1]), lit(units_mask[2]), @@ -296,26 +240,26 @@ fn timeunit_custom_udf( ]); // Initialize interval string, this will be overwritten with the smallest specified unit - let mut interval = (1, "YEAR".to_string()); + let mut interval = interval_year_month_lit("1 year"); // Year if units_set.contains(&TimeUnitUnit::Year) { - interval = (1, "YEAR".to_string()); + interval = interval_year_month_lit("1 year"); } // Quarter if units_set.contains(&TimeUnitUnit::Quarter) { - interval = (3, "MONTH".to_string()); + interval = interval_year_month_lit("3 month"); } // Month if units_set.contains(&TimeUnitUnit::Month) { - interval = (1, "MONTH".to_string()); + interval = interval_year_month_lit("1 month"); } // Week if units_set.contains(&TimeUnitUnit::Week) { - interval = (1, "WEEK".to_string()); + interval = interval_datetime_lit("7 day"); } // Day @@ -323,46 +267,84 @@ fn timeunit_custom_udf( || units_set.contains(&TimeUnitUnit::DayOfYear) || units_set.contains(&TimeUnitUnit::Day) { - interval = (1, "DAY".to_string()); + interval = interval_datetime_lit("1 day"); } // Hour if units_set.contains(&TimeUnitUnit::Hours) { - interval = (1, "HOUR".to_string()); + interval = interval_datetime_lit("1 hour"); } // Minute if units_set.contains(&TimeUnitUnit::Minutes) { - interval = (1, "MINUTE".to_string()); + interval = interval_datetime_lit("1 minute"); } // Second if units_set.contains(&TimeUnitUnit::Seconds) { - interval = (1, "SECOND".to_string()); + interval = interval_datetime_lit("1 second"); } Ok((timeunit_start_value, interval)) } +/// Convert a column to a timezone aware timestamp with Millisecond precision, in UTC +pub fn to_timestamp_col(expr: Expr, schema: &DFSchema, default_input_tz: &String) -> Result { + Ok(match expr.get_type(schema)? { + DataType::Timestamp(ArrowTimeUnit::Millisecond, Some(_)) => expr, + DataType::Timestamp(_, Some(tz)) => expr.try_cast_to( + &DataType::Timestamp(ArrowTimeUnit::Millisecond, Some(tz)), + schema, + )?, + DataType::Timestamp(_, None) => expr.try_cast_to( + &DataType::Timestamp( + ArrowTimeUnit::Millisecond, + Some(default_input_tz.as_str().into()), + ), + schema, + )?, + DataType::Date32 | DataType::Date64 => cast_to( + expr, + &DataType::Timestamp(ArrowTimeUnit::Millisecond, None), + schema, + )? + .try_cast_to( + &DataType::Timestamp( + ArrowTimeUnit::Millisecond, + Some(default_input_tz.as_str().into()), + ), + schema, + )?, + DataType::Utf8 | DataType::LargeUtf8 | DataType::Utf8View => { + str_to_timestamp(expr, default_input_tz, schema, None)? + } + dtype if is_numeric_datatype(&dtype) => from_epoch_millis(expr, schema)?, + dtype => { + return Err(VegaFusionError::compilation(format!( + "Invalid data type for timeunit transform: {dtype:?}" + ))) + } + }) +} + #[async_trait] impl TransformTrait for TimeUnit { async fn eval( &self, - dataframe: Arc, + dataframe: DataFrame, config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { + ) -> Result<(DataFrame, Vec)> { let tz_config = config .tz_config .with_context(|| "No local timezone info provided".to_string())?; - let local_tz = if self.timezone != Some(TimeUnitTimeZone::Utc as i32) { - Some(tz_config.local_tz) + let tz = if self.timezone != Some(TimeUnitTimeZone::Utc as i32) { + tz_config.local_tz.to_string() } else { - None + "UTC".to_string() }; - let local_tz = local_tz.map(|tz| tz.to_string()); - let schema = dataframe.schema_df()?; + let schema = dataframe.schema(); let default_input_tz = tz_config.default_input_tz.to_string(); // Compute Apply alias @@ -384,68 +366,73 @@ impl TransformTrait for TimeUnit { [TimeUnitUnit::Year] => timeunit_date_trunc( &self.field, TimeUnitUnit::Year, - &schema, + schema, &default_input_tz, - &local_tz, + &tz, )?, [TimeUnitUnit::Year, TimeUnitUnit::Quarter] => timeunit_date_trunc( &self.field, TimeUnitUnit::Quarter, - &schema, + schema, &default_input_tz, - &local_tz, + &tz, )?, [TimeUnitUnit::Year, TimeUnitUnit::Month] => timeunit_date_trunc( &self.field, TimeUnitUnit::Month, - &schema, + schema, &default_input_tz, - &local_tz, + &tz, + )?, + [TimeUnitUnit::Year, TimeUnitUnit::Week] => timeunit_date_trunc( + &self.field, + TimeUnitUnit::Week, + schema, + &default_input_tz, + &tz, )?, [TimeUnitUnit::Year, TimeUnitUnit::Month, TimeUnitUnit::Date] => timeunit_date_trunc( &self.field, TimeUnitUnit::Date, - &schema, + schema, &default_input_tz, - &local_tz, + &tz, )?, [TimeUnitUnit::Year, TimeUnitUnit::DayOfYear] => timeunit_date_trunc( &self.field, TimeUnitUnit::Date, - &schema, + schema, &default_input_tz, - &local_tz, + &tz, )?, [TimeUnitUnit::Year, TimeUnitUnit::Month, TimeUnitUnit::Date, TimeUnitUnit::Hours] => { timeunit_date_trunc( &self.field, TimeUnitUnit::Hours, - &schema, + schema, &default_input_tz, - &local_tz, + &tz, )? } [TimeUnitUnit::Year, TimeUnitUnit::Month, TimeUnitUnit::Date, TimeUnitUnit::Hours, TimeUnitUnit::Minutes] => { timeunit_date_trunc( &self.field, TimeUnitUnit::Minutes, - &schema, + schema, &default_input_tz, - &local_tz, + &tz, )? } [TimeUnitUnit::Year, TimeUnitUnit::Month, TimeUnitUnit::Date, TimeUnitUnit::Hours, TimeUnitUnit::Minutes, TimeUnitUnit::Seconds] => { timeunit_date_trunc( &self.field, TimeUnitUnit::Seconds, - &schema, + schema, &default_input_tz, - &local_tz, + &tz, )? } - [TimeUnitUnit::Day] => { - timeunit_weekday(&self.field, &schema, &default_input_tz, &local_tz)? - } + [TimeUnitUnit::Day] => timeunit_weekday(&self.field, schema, &default_input_tz, &tz)?, _ => { // Check if timeunit can be handled by make_utc_timestamp let units_set = units_vec.iter().cloned().collect::>(); @@ -461,22 +448,10 @@ impl TransformTrait for TimeUnit { .into_iter() .collect::>(); if units_set.is_subset(&date_part_units) { - timeunit_date_part_tz( - &self.field, - &units_set, - &schema, - &default_input_tz, - &local_tz, - )? + timeunit_date_part_tz(&self.field, &units_set, schema, &default_input_tz, &tz)? } else { // Fallback to custom UDF - timeunit_custom_udf( - &self.field, - &units_set, - &schema, - &default_input_tz, - &local_tz, - )? + timeunit_custom_udf(&self.field, &units_set, schema, &default_input_tz, &tz)? } } }; @@ -485,7 +460,7 @@ impl TransformTrait for TimeUnit { // Add timeunit start value to the dataframe let mut select_exprs: Vec<_> = dataframe - .schema_df()? + .schema() .fields() .iter() .filter_map(|field| { @@ -498,7 +473,7 @@ impl TransformTrait for TimeUnit { .collect(); select_exprs.push(timeunit_start_expr); - let dataframe = dataframe.select(select_exprs).await?; + let dataframe = dataframe.select(select_exprs)?; // Add timeunit end value to the dataframe let timeunit_end_alias = if let Some(alias_1) = &self.alias_1 { @@ -507,20 +482,12 @@ impl TransformTrait for TimeUnit { "unit1".to_string() }; - let tz_str = local_tz.unwrap_or_else(|| "UTC".to_string()); - let timeunit_end_expr = Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new((*DATE_ADD_TZ_UDF).clone()), - args: vec![ - lit(&interval.1), - lit(interval.0), - flat_col(&timeunit_start_alias), - lit(tz_str), - ], - }) - .alias(&timeunit_end_alias); + let timeunit_end_expr = flat_col(&timeunit_start_alias) + .add(interval) + .alias(&timeunit_end_alias); let mut select_exprs: Vec<_> = dataframe - .schema_df()? + .schema() .fields() .iter() .filter_map(|field| { @@ -532,7 +499,7 @@ impl TransformTrait for TimeUnit { }) .collect(); select_exprs.push(timeunit_end_expr); - let dataframe = dataframe.select(select_exprs).await?; + let dataframe = dataframe.select(select_exprs)?; Ok((dataframe, Vec::new())) } diff --git a/vegafusion-runtime/src/transform/utils.rs b/vegafusion-runtime/src/transform/utils.rs index 6d4c4799f..34ea3ccb6 100644 --- a/vegafusion-runtime/src/transform/utils.rs +++ b/vegafusion-runtime/src/transform/utils.rs @@ -1,4 +1,12 @@ +use crate::expression::compiler::builtin_functions::date_time::date_format::d3_to_chrono_format; +use crate::expression::compiler::utils::ExprHelpers; +use datafusion::arrow::datatypes::{DataType, TimeUnit}; +use datafusion_common::DFSchema; +use datafusion_expr::{lit, when, Expr, ExprSchemable}; +use datafusion_functions::expr_fn::{make_date, regexp_like, to_timestamp_millis}; use vegafusion_common::arrow::record_batch::RecordBatch; +use vegafusion_common::datatypes::is_numeric_datatype; +use vegafusion_common::error::{Result, VegaFusionError}; pub trait RecordBatchUtils { fn equals(&self, other: &RecordBatch) -> bool; @@ -25,3 +33,189 @@ impl RecordBatchUtils for RecordBatch { true } } + +pub fn make_timestamp_parse_formats() -> Vec { + vec![ + // ISO 8601 with and without time and 'T' separator + "%Y-%m-%d", + "%Y-%m-%dT%H:%M:%S", + "%Y-%m-%dT%H:%M:%S%.3f", + "%Y-%m-%dT%H:%M", + "%Y-%m-%d %H:%M:%S", + "%Y-%m-%d %H:%M:%S%.3f", + "%Y-%m-%d %H:%M", + // With UTC timezone offset + "%Y-%m-%dT%H:%M:%S%:z", + "%Y-%m-%dT%H:%M:%SZ", + "%Y-%m-%dT%H:%M:%S%.3f%:z", + "%Y-%m-%dT%H:%M:%S%.3fZ", + "%Y-%m-%dT%H:%M%:z", + "%Y-%m-%d %H:%M:%S%:z", + "%Y-%m-%d %H:%M:%SZ", + "%Y-%m-%d %H:%M:%S%.3f%:z", + "%Y-%m-%d %H:%M:%S%.3fZ", + "%Y-%m-%d %H:%M%:z", + // ISO 8601 with forward slashes + "%Y/%m/%d", + "%Y/%m/%d %H:%M:%S", + "%Y/%m/%d %H:%M", + // month/day/year + "%m/%d/%Y", + "%m/%d/%Y %H:%M:%S", + "%m/%d/%Y %H:%M", + // e.g. May 1 2003 + "%b %-d %Y", + "%b %-d %Y %H:%M:%S", + "%b %-d %Y %H:%M", + // ctime format (e.g. Sun Jul 8 00:34:60 2001) + "%a %b %-d %H:%M:%S %Y", + "%a %b %-d %H:%M %Y", + // e.g. 01 Jan 2012 00:00:00 + "%d %b %Y", + "%d %b %Y %H:%M:%S", + "%d %b %Y %H:%M", + // e.g. Sun, 01 Jan 2012 00:00:00 + "%a, %d %b %Y", + "%a, %d %b %Y %H:%M:%S", + "%a, %d %b %Y %H:%M", + // e.g. December 17, 1995 03:00:00 + "%B %d, %Y", + "%B %d, %Y %H:%M:%S", + "%B %d, %Y %H:%M", + ] + .into_iter() + .map(lit) + .collect() +} + +/// Build an expression that converts string to timestamps, following the browser's unfortunate +/// convention where ISO8601 dates (not timestamps) are always interpreted as UTC, +/// but all other formats are interpreted as the local timezone. +pub fn str_to_timestamp( + s: Expr, + default_input_tz: &str, + schema: &DFSchema, + fmt: Option<&str>, +) -> Result { + if let Some(fmt) = fmt { + // Parse with single explicit format, in the specified timezone + let chrono_fmt = d3_to_chrono_format(fmt); + + if chrono_fmt == "%Y" { + // Chrono won't parse this as years by itself, since it's not technically enough info + // to make a timestamp, so instead we'll make date on the first of the year + Ok(make_date( + s.try_cast_to(&DataType::Int64, schema)?, + lit(1), + lit(1), + )) + } else { + // Interpret as utc if the input has a timezone offset + let is_utc_condition = regexp_like(s.clone(), lit(r"[+-]\d{2}:\d{2}$"), None) + .or(regexp_like(s.clone(), lit(r"Z$"), None)); + + let naive_timestamp = to_timestamp_millis(vec![s, lit(chrono_fmt)]); + + // Interpret as UTC then convert to default_iput + let if_true = naive_timestamp + .clone() + .try_cast_to( + &DataType::Timestamp(TimeUnit::Millisecond, Some("UTC".into())), + schema, + )? + .try_cast_to( + &DataType::Timestamp(TimeUnit::Millisecond, Some(default_input_tz.into())), + schema, + )?; + + // Interpret as default input + let if_false = naive_timestamp.try_cast_to( + &DataType::Timestamp(TimeUnit::Millisecond, Some(default_input_tz.into())), + schema, + )?; + + let expr = when(is_utc_condition, if_true).otherwise(if_false)?; + Ok(expr) + } + } else { + // Auto formatting; + // Create condition for whether the parsed timestamp (which always starts as naive) should + // be interpreted as UTC, or as the default_input_tz. + // There are two cases where we always use UTC: + // 1. To follow the browser, timestamps of the form 2020-01-01 are always interpreted as UTC + // 2. Timestamps that have an offset suffix (e.g. '+05:00', '-09:00', or 'Z') are parsed by + // datafusion as UTC + let is_utc_condition = regexp_like(s.clone(), lit(r"^\d{4}-\d{2}-\d{2}$"), None) + .or(regexp_like(s.clone(), lit(r"[+-]\d{2}:\d{2}$"), None)) + .or(regexp_like(s.clone(), lit(r"Z$"), None)); + + // Note: it's important for the express to always return values in the same timezone, + // so we cast the UTC case back to the local timezone + let if_true = to_timestamp_millis(vec![s.clone()]) + .try_cast_to( + &DataType::Timestamp(TimeUnit::Millisecond, Some("UTC".into())), + schema, + )? + .try_cast_to( + &DataType::Timestamp(TimeUnit::Millisecond, Some(default_input_tz.into())), + schema, + )?; + + let if_false = to_timestamp_millis([vec![s], make_timestamp_parse_formats()].concat()) + .try_cast_to( + &DataType::Timestamp(TimeUnit::Millisecond, Some(default_input_tz.into())), + schema, + )?; + + let expr = when(is_utc_condition, if_true).otherwise(if_false)?; + Ok(expr) + } +} + +pub fn from_epoch_millis(expr: Expr, schema: &DFSchema) -> Result { + Ok(expr.try_cast_to(&DataType::Int64, schema)?.try_cast_to( + &DataType::Timestamp(TimeUnit::Millisecond, Some("UTC".into())), + schema, + )?) +} + +pub fn to_epoch_millis(expr: Expr, default_input_tz: &str, schema: &DFSchema) -> Result { + // Dispatch handling on data type + Ok(match expr.get_type(schema)? { + DataType::Timestamp(TimeUnit::Millisecond, None) | DataType::Date64 => { + expr.cast_to(&DataType::Int64, schema)? + } + DataType::Date32 | DataType::Timestamp(_, None) => expr + .try_cast_to(&DataType::Timestamp(TimeUnit::Millisecond, None), schema)? + .cast_to(&DataType::Int64, schema)?, + DataType::Timestamp(_, Some(_)) => { + // Convert to UTC, then drop timezone + expr.try_cast_to( + &DataType::Timestamp(TimeUnit::Millisecond, Some("UTC".into())), + schema, + )? + .cast_to(&DataType::Int64, schema)? + } + DataType::Utf8 | DataType::LargeUtf8 | DataType::Utf8View => { + str_to_timestamp(expr.clone(), default_input_tz, schema, None)? + .try_cast_to( + &DataType::Timestamp(TimeUnit::Millisecond, Some("UTC".into())), + schema, + )? + .cast_to(&DataType::Int64, schema)? + } + DataType::Int64 => { + // Keep int argument as-is + expr.clone() + } + dtype if is_numeric_datatype(&dtype) || matches!(dtype, DataType::Boolean) => { + // Cast other numeric types to Int64 + expr.clone().try_cast_to(&DataType::Int64, schema)? + } + dtype => { + return Err(VegaFusionError::internal(format!( + "Invalid argument type to time function: {dtype:?}" + ))) + } + }) +} diff --git a/vegafusion-runtime/src/transform/window.rs b/vegafusion-runtime/src/transform/window.rs index 15f462490..6df930809 100644 --- a/vegafusion-runtime/src/transform/window.rs +++ b/vegafusion-runtime/src/transform/window.rs @@ -2,10 +2,10 @@ use crate::expression::compiler::config::CompilationConfig; use crate::transform::TransformTrait; use async_trait::async_trait; +use datafusion::prelude::DataFrame; use datafusion_common::ScalarValue; use datafusion_expr::{expr, lit, Expr, WindowFrame, WindowFunctionDefinition}; use datafusion_functions_aggregate::variance::{var_pop_udaf, var_samp_udaf}; -use sqlparser::ast::NullTreatment; use std::sync::Arc; use vegafusion_core::error::Result; use vegafusion_core::proto::gen::transforms::{ @@ -13,27 +13,28 @@ use vegafusion_core::proto::gen::transforms::{ }; use vegafusion_core::task_graph::task_value::TaskValue; -use datafusion_expr::test::function_stub::count_udaf; use datafusion_expr::{BuiltInWindowFunction, WindowFrameBound, WindowFrameUnits}; use datafusion_functions_aggregate::average::avg_udaf; +use datafusion_functions_aggregate::count::count_udaf; use datafusion_functions_aggregate::min_max::{max_udaf, min_udaf}; use datafusion_functions_aggregate::stddev::{stddev_pop_udaf, stddev_udaf}; use datafusion_functions_aggregate::sum::sum_udaf; -use datafusion_functions_window::row_number::RowNumber; + +use datafusion_functions_window::{cume_dist::CumeDist, rank::Rank, row_number::RowNumber}; + use vegafusion_common::column::{flat_col, unescaped_col}; use vegafusion_common::data::ORDER_COL; use vegafusion_common::datatypes::to_numeric; use vegafusion_common::error::{ResultWithContext, VegaFusionError}; use vegafusion_common::escape::unescape_field; -use vegafusion_dataframe::dataframe::DataFrame; #[async_trait] impl TransformTrait for Window { async fn eval( &self, - dataframe: Arc, + dataframe: DataFrame, _config: &CompilationConfig, - ) -> Result<(Arc, Vec)> { + ) -> Result<(DataFrame, Vec)> { let mut order_by: Vec<_> = self .sort_fields .iter() @@ -46,7 +47,7 @@ impl TransformTrait for Window { .collect(); let mut selections: Vec<_> = dataframe - .schema_df()? + .schema() .fields() .iter() .map(|f| flat_col(f.name())) @@ -67,6 +68,7 @@ impl TransformTrait for Window { .filter(|c| { dataframe .schema() + .inner() .column_with_name(&unescape_field(c)) .is_some() }) @@ -97,7 +99,7 @@ impl TransformTrait for Window { }; let window_frame = WindowFrame::new_bounds(units, start_bound, end_bound); - let schema_df = dataframe.schema_df()?; + let schema_df = dataframe.schema(); let window_exprs = self .ops .iter() @@ -109,7 +111,7 @@ impl TransformTrait for Window { let op = AggregateOp::try_from(*op).unwrap(); let numeric_field = || -> Result { - to_numeric(unescaped_col(field), &schema_df).with_context(|| { + to_numeric(unescaped_col(field), schema_df).with_context(|| { format!("Failed to convert field {field} to numeric data type") }) }; @@ -173,28 +175,26 @@ impl TransformTrait for Window { Vec::new(), ), WindowOp::Rank => ( - WindowFunctionDefinition::BuiltInWindowFunction( - BuiltInWindowFunction::Rank, - ), + WindowFunctionDefinition::WindowUDF(Arc::new(Rank::basic().into())), Vec::new(), ), WindowOp::DenseRank => ( - WindowFunctionDefinition::BuiltInWindowFunction( - BuiltInWindowFunction::DenseRank, - ), + WindowFunctionDefinition::WindowUDF(Arc::new( + Rank::dense_rank().into(), + )), Vec::new(), ), WindowOp::PercentileRank => ( - WindowFunctionDefinition::BuiltInWindowFunction( - BuiltInWindowFunction::PercentRank, - ), - vec![], + WindowFunctionDefinition::WindowUDF(Arc::new( + Rank::percent_rank().into(), + )), + Vec::new(), ), WindowOp::CumeDist => ( - WindowFunctionDefinition::BuiltInWindowFunction( - BuiltInWindowFunction::CumeDist, - ), - vec![], + WindowFunctionDefinition::WindowUDF(Arc::new( + CumeDist::new().into(), + )), + Vec::new(), ), WindowOp::FirstValue => ( WindowFunctionDefinition::BuiltInWindowFunction( @@ -224,7 +224,7 @@ impl TransformTrait for Window { partition_by: partition_by.clone(), order_by: order_by.clone(), window_frame: window_frame.clone(), - null_treatment: Some(NullTreatment::IgnoreNulls), + null_treatment: None, }); if let Some(alias) = self.aliases.get(i) { @@ -238,7 +238,7 @@ impl TransformTrait for Window { // Add window expressions to original selections selections.extend(window_exprs); - let dataframe = dataframe.select(selections).await?; + let dataframe = dataframe.select(selections)?; Ok((dataframe, Vec::new())) } diff --git a/vegafusion-runtime/tests/specs/custom/bar_sort_x_axis_categorical.vg.json b/vegafusion-runtime/tests/specs/custom/bar_sort_x_axis_categorical.vg.json index 40f536245..4b2d6fdc2 100644 --- a/vegafusion-runtime/tests/specs/custom/bar_sort_x_axis_categorical.vg.json +++ b/vegafusion-runtime/tests/specs/custom/bar_sort_x_axis_categorical.vg.json @@ -6,7 +6,7 @@ "height": 200, "style": "cell", "data": [ - {"name": "source_0", "url": "data/stocks.csv", "format": {"type": "csv"}}, + {"name": "source_0", "url": "https://cdn.jsdelivr.net/npm/vega-datasets@v1.29.0/data/stocks.csv", "format": {"type": "csv"}}, { "name": "data_0", "source": "source_0", diff --git a/vegafusion-runtime/tests/specs/vega/heatmap.vg.json b/vegafusion-runtime/tests/specs/vega/heatmap.vg.json index 0d0e80d3a..b2f2776de 100644 --- a/vegafusion-runtime/tests/specs/vega/heatmap.vg.json +++ b/vegafusion-runtime/tests/specs/vega/heatmap.vg.json @@ -158,8 +158,8 @@ "enter": { "x": {"scale": "x", "field": "day"}, "y": {"scale": "y", "field": "hour"}, - "width": {"value": 5}, - "height": {"scale": "y", "band": 1}, + "width": {"value": 1}, + "height": {"scale": "y", "band": 0.9}, "tooltip": {"signal": "timeFormat(datum.date, '%b %d %I:00 %p') + ': ' + datum.temperature + '°'"} }, "update": { diff --git a/vegafusion-runtime/tests/specs/vegalite/circle_natural_disasters.vg.json b/vegafusion-runtime/tests/specs/vegalite/circle_natural_disasters.vg.json index 36a78505c..c052a1848 100644 --- a/vegafusion-runtime/tests/specs/vegalite/circle_natural_disasters.vg.json +++ b/vegafusion-runtime/tests/specs/vegalite/circle_natural_disasters.vg.json @@ -9,7 +9,7 @@ { "name": "source_0", "url": "data/disasters.csv", - "format": {"type": "csv", "parse": {"Year": "date"}}, + "format": {"type": "csv", "parse": {"Year": "date:'%Y'"}}, "transform": [ {"type": "filter", "expr": "datum.Entity !== 'All natural disasters'"}, { diff --git a/vegafusion-runtime/tests/test_chart_state.rs b/vegafusion-runtime/tests/test_chart_state.rs index 73a35628d..9df8fee1f 100644 --- a/vegafusion-runtime/tests/test_chart_state.rs +++ b/vegafusion-runtime/tests/test_chart_state.rs @@ -13,8 +13,8 @@ mod tests { use vegafusion_core::planning::watch::{ExportUpdateJSON, ExportUpdateNamespace}; use vegafusion_core::proto::gen::tasks::TzConfig; use vegafusion_core::spec::chart::ChartSpec; + use vegafusion_runtime::datafusion::context::make_datafusion_context; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; - use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; #[tokio::test] async fn test_chart_state() { @@ -28,7 +28,7 @@ mod tests { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); diff --git a/vegafusion-runtime/tests/test_destringify_selection_datasets.rs b/vegafusion-runtime/tests/test_destringify_selection_datasets.rs index b54a00044..1940c1328 100644 --- a/vegafusion-runtime/tests/test_destringify_selection_datasets.rs +++ b/vegafusion-runtime/tests/test_destringify_selection_datasets.rs @@ -12,8 +12,8 @@ mod tests { use vegafusion_core::runtime::VegaFusionRuntimeTrait; use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::spec::transform::TransformSpec; + use vegafusion_runtime::datafusion::context::make_datafusion_context; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; - use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; #[tokio::test] async fn test_destringify_selection_datasets() { @@ -27,7 +27,7 @@ mod tests { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); diff --git a/vegafusion-runtime/tests/test_expression_evaluation.rs b/vegafusion-runtime/tests/test_expression_evaluation.rs index 7dc599206..fce116a43 100644 --- a/vegafusion-runtime/tests/test_expression_evaluation.rs +++ b/vegafusion-runtime/tests/test_expression_evaluation.rs @@ -291,7 +291,9 @@ mod test_math_functions { case("log(2.718281828)"), case("pow(2, 3)"), case("isFinite(2)"), - case("isFinite(NaN)") + case("isFinite(NaN)"), + case("isFinite(+'Infinity')"), + case("isFinite(+'-Infinity')") )] fn test(expr: &str) { check_scalar_evaluation(expr, &config_a()) @@ -315,7 +317,7 @@ mod test_datetime { case("datetime('05/16/2020 09:30')"), case("datetime('May 16 2020 09:30')"), case("datetime('July 15, 2010')"), - case("datetime('2020 May 16 09:30')"), + case("datetime('16 May 2020 09:30')"), case("datetime('2020-01-01 00:00')"), case("datetime('2020-01-01')"), case("datetime('2020/01/01')"), @@ -357,7 +359,6 @@ mod test_time { case("time('2020/05/16 09:30')"), case("time('05/16/2020 09:30')"), case("time('May 16 2020 09:30')"), - case("time('2020 May 16 09:30')"), case("time('2020-01-01 00:00')"), case("time('2020-01-01')"), case("time('2020/01/01')"), @@ -399,10 +400,10 @@ mod test_time_and_utc_format { case("utcFormat(toDate('2020-05-16 09:30:00+05:00'))"), case("timeFormat(1589603400000, '%Y-%m-%d %H:%M:%S %p')"), case("utcFormat(1589603400000, '%Y-%m-%d %G %g %s')"), - case("timeFormat(datetime(87, 3, 10, 7, 35, 10, 87), '%a %A %b %B %d %e %g')"), - case("utcFormat(datetime(87, 3, 10, 7, 35, 10, 87), '%a %A %b %B %d %e %g')"), - case("timeFormat(datetime(87, 3, 10, 7, 35, 10, 87), '%Y-%m-%d %H:%M:%S.%L')"), - case("utcFormat(datetime(87, 3, 10, 7, 35, 10, 87), '%Y-%m-%d %H:%M:%S.%f')") + case("timeFormat(datetime(87, 3, 10, 7, 35, 10, 123), '%a %A %b %B %d %e %g')"), + case("utcFormat(datetime(87, 3, 10, 7, 35, 10, 123), '%a %A %b %B %d %e %g')"), + case("timeFormat(datetime(87, 3, 10, 7, 35, 10, 123), '%Y-%m-%d %H:%M:%S.%L')"), + case("utcFormat(datetime(87, 3, 10, 7, 35, 10, 123), '%Y-%m-%d %H:%M:%S.%f')") )] fn test(expr: &str) { check_scalar_evaluation(expr, &config_a()) @@ -551,7 +552,9 @@ mod test_indexof { case("indexof(['a4', 'a3', 'a7'], 'a4')"), case("indexof(['a4', 'a3', 'a7'], 'a3')"), case("indexof(['a4', 'a3', 'a7'], 'a7')"), - case("indexof(['a4', 'a3', 'a7'], 'a8')") + case("indexof(['a4', 'a3', 'a7'], 'a8')"), + case("indexof('hello, world', 'w')"), + case("indexof('hello, world', 'z')") )] fn test(expr: &str) { check_scalar_evaluation(expr, &config_a()) diff --git a/vegafusion-runtime/tests/test_image_comparison.rs b/vegafusion-runtime/tests/test_image_comparison.rs index b69a5863f..524d33bed 100644 --- a/vegafusion-runtime/tests/test_image_comparison.rs +++ b/vegafusion-runtime/tests/test_image_comparison.rs @@ -26,9 +26,9 @@ use vegafusion_core::proto::gen::tasks::{TaskGraph, TzConfig}; use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::task_graph::graph::ScopedVariable; use vegafusion_core::task_graph::task_value::TaskValue; +use vegafusion_runtime::datafusion::context::make_datafusion_context; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; use vegafusion_runtime::tokio_runtime::TOKIO_THREAD_STACK_SIZE; -use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; lazy_static! { static ref TOKIO_RUNTIME: Runtime = tokio::runtime::Builder::new_multi_thread() @@ -144,8 +144,7 @@ mod test_custom_specs { case("custom/gh_391", 0.001, true), case("custom/facet_grouped_bar_with_error_bars", 0.001, true), case("custom/facet_grouped_bar_with_error_bars_with_sort", 0.001, true), - // Re-enable after updating to Vega 5.26.2 - // case("custom/binned_ordinal", 0.001, true), + case("custom/binned_ordinal", 0.001, true), case("custom/timeOffset_stocks", 0.001, true), case("custom/quakes_initial_selection", 0.001, true), case("custom/aggregate_with_threshold", 0.001, true), @@ -157,7 +156,7 @@ mod test_custom_specs { case("custom/gh_456", 0.001, true), case("custom/facet_dots_sort_datum", 0.001, true), case("custom/gh_463", 0.001, true), - case("custom/offset_inside_x", 0.001, true), + case("custom/offset_inside_x", 0.001, true) )] fn test_image_comparison(spec_name: &str, tolerance: f64, extract_inline_values: bool) { println!("spec_name: {spec_name}"); @@ -250,13 +249,16 @@ mod test_vega_specs { case("vega/gradient", 0.001), case("vega/grouped-bar", 0.001), - case("vega/heatmap-image", 0.001), // // Looks like there might be a timezone issue // case("vega/heatmap-lines", 0.001), case("vega/heatmap-sinusoids", 0.001), - case("vega/heatmap", 0.001), + + // Something off with daylight savings + case("vega/heatmap", 0.01), + case("vega/heatmap-image", 0.01), + case("vega/horizon", 0.001), // // Error from vega-scenegraph: Image given has not completed loading @@ -959,7 +961,7 @@ mod test_image_comparison_timeunit { units: Vec, #[values( - TimeUnitTimeZoneSpec::Utc, + // TimeUnitTimeZoneSpec::Utc, TimeUnitTimeZoneSpec::Local, )] timezone: TimeUnitTimeZoneSpec, @@ -1175,7 +1177,7 @@ mod test_pre_transform_inline { use super::*; use crate::util::datasets::vega_json_dataset_async; use vegafusion_core::{data::dataset::VegaFusionDataset, runtime::VegaFusionRuntimeTrait}; - use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; + use vegafusion_runtime::datafusion::context::make_datafusion_context; #[tokio::test] async fn test() { @@ -1185,7 +1187,7 @@ mod test_pre_transform_inline { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); @@ -1341,7 +1343,7 @@ async fn check_pre_transform_spec_from_files(spec_name: &str, tolerance: f64) { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); @@ -1363,10 +1365,13 @@ async fn check_pre_transform_spec_from_files(spec_name: &str, tolerance: f64) { .await .unwrap(); - // println!( - // "pre-transformed: {}", + let png_name = spec_name.replace('/', "-"); + + // // Write to output + // fs::write( + // format!("{}/tests/output/{}_pretransform.vg.json", crate_dir(), png_name), // serde_json::to_string_pretty(&pre_transform_spec).unwrap() - // ); + // ).unwrap(); let full_image = vegajs_runtime .export_spec_single(&full_spec, ExportImageFormat::Png) @@ -1375,7 +1380,6 @@ async fn check_pre_transform_spec_from_files(spec_name: &str, tolerance: f64) { .export_spec_single(&pre_transform_spec, ExportImageFormat::Png) .unwrap(); - let png_name = spec_name.replace('/', "-"); full_image .save( &format!("{}/tests/output/{}_full.png", crate_dir(), png_name), @@ -1430,20 +1434,20 @@ async fn check_spec_sequence( let task_scope = spec_plan.server_spec.to_task_scope().unwrap(); // println!("task_scope: {:#?}", task_scope); - - println!( - "client_spec: {}", - serde_json::to_string_pretty(&spec_plan.client_spec).unwrap() - ); - println!( - "server_spec: {}", - serde_json::to_string_pretty(&spec_plan.server_spec).unwrap() - ); - - println!( - "comm_plan:\n---\n{}\n---", - serde_json::to_string_pretty(&WatchPlan::from(spec_plan.comm_plan.clone())).unwrap() - ); + // + // println!( + // "client_spec: {}", + // serde_json::to_string_pretty(&spec_plan.client_spec).unwrap() + // ); + // println!( + // "server_spec: {}", + // serde_json::to_string_pretty(&spec_plan.server_spec).unwrap() + // ); + // + // println!( + // "comm_plan:\n---\n{}\n---", + // serde_json::to_string_pretty(&WatchPlan::from(spec_plan.comm_plan.clone())).unwrap() + // ); // Build task graph let tasks = spec_plan @@ -1462,7 +1466,7 @@ async fn check_spec_sequence( // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); diff --git a/vegafusion-runtime/tests/test_planning.rs b/vegafusion-runtime/tests/test_planning.rs index 2e858b9c5..731f04894 100644 --- a/vegafusion-runtime/tests/test_planning.rs +++ b/vegafusion-runtime/tests/test_planning.rs @@ -10,7 +10,7 @@ use vegafusion_core::planning::split_domain_data::split_domain_data; use vegafusion_core::planning::stitch::stitch_specs; use vegafusion_core::planning::strip_encodings::strip_encodings; -use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; +use vegafusion_runtime::datafusion::context::make_datafusion_context; #[tokio::test(flavor = "multi_thread")] async fn test_extract_server_data() { @@ -63,7 +63,7 @@ async fn test_extract_server_data() { // println!("{:#?}", mapping); let graph_runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(20), Some(1024_i32.pow(3) as usize), ); diff --git a/vegafusion-runtime/tests/test_pre_transform_extract.rs b/vegafusion-runtime/tests/test_pre_transform_extract.rs index be01336e9..ffdd805e2 100644 --- a/vegafusion-runtime/tests/test_pre_transform_extract.rs +++ b/vegafusion-runtime/tests/test_pre_transform_extract.rs @@ -15,8 +15,8 @@ mod tests { use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::runtime::VegaFusionRuntimeTrait; + use vegafusion_runtime::datafusion::context::make_datafusion_context; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; - use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; #[tokio::test] async fn test_pre_transform_extract_scatter() { @@ -30,7 +30,7 @@ mod tests { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); diff --git a/vegafusion-runtime/tests/test_pre_transform_keep_variables.rs b/vegafusion-runtime/tests/test_pre_transform_keep_variables.rs index 3f7ae24ef..02d31dc8e 100644 --- a/vegafusion-runtime/tests/test_pre_transform_keep_variables.rs +++ b/vegafusion-runtime/tests/test_pre_transform_keep_variables.rs @@ -16,8 +16,8 @@ mod tests { use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::runtime::VegaFusionRuntimeTrait; + use vegafusion_runtime::datafusion::context::make_datafusion_context; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; - use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; #[tokio::test] async fn test_pre_transform_keep_variables() { @@ -31,7 +31,7 @@ mod tests { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); diff --git a/vegafusion-runtime/tests/test_pre_transform_values.rs b/vegafusion-runtime/tests/test_pre_transform_values.rs index 47332cd2d..3173042c5 100644 --- a/vegafusion-runtime/tests/test_pre_transform_values.rs +++ b/vegafusion-runtime/tests/test_pre_transform_values.rs @@ -31,8 +31,8 @@ mod tests { use vegafusion_core::runtime::VegaFusionRuntimeTrait; use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::spec::values::StringOrSignalSpec; + use vegafusion_runtime::datafusion::context::make_datafusion_context; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; - use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; #[tokio::test] async fn test_pre_transform_dataset() { @@ -43,7 +43,7 @@ mod tests { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); @@ -99,7 +99,7 @@ mod tests { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); @@ -155,7 +155,7 @@ mod tests { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); @@ -223,7 +223,7 @@ mod tests { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); @@ -286,7 +286,7 @@ mod tests { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); @@ -340,7 +340,7 @@ mod tests { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); @@ -380,12 +380,12 @@ mod tests { println!("{}", click_selected.pretty_format(None).unwrap()); let expected = "\ -+---------------------+---------------------+---------+---------+---------------+-------------+ -| yearmonth_date | yearmonth_date_end | weather | __count | __count_start | __count_end | -+---------------------+---------------------+---------+---------+---------------+-------------+ -| 2013-11-01T00:00:00 | 2013-12-01T00:00:00 | rain | 15 | 12.0 | 27.0 | -| 2014-01-01T00:00:00 | 2014-02-01T00:00:00 | sun | 16 | 0.0 | 16.0 | -+---------------------+---------------------+---------+---------+---------------+-------------+"; ++----------------------+----------------------+---------+---------+-------------+---------------+ +| yearmonth_date | yearmonth_date_end | weather | __count | __count_end | __count_start | ++----------------------+----------------------+---------+---------+-------------+---------------+ +| 2013-11-01T00:00:00Z | 2013-12-01T00:00:00Z | rain | 15 | 27.0 | 12.0 | +| 2014-01-01T00:00:00Z | 2014-02-01T00:00:00Z | sun | 16 | 16.0 | 0.0 | ++----------------------+----------------------+---------+---------+-------------+---------------+"; assert_eq!(click_selected.pretty_format(None).unwrap(), expected); // Check drag_selected @@ -393,20 +393,20 @@ mod tests { println!("{}", drag_selected.pretty_format(None).unwrap()); let expected = "\ -+---------------------+---------------------+---------+---------+---------------+-------------+ -| yearmonth_date | yearmonth_date_end | weather | __count | __count_start | __count_end | -+---------------------+---------------------+---------+---------+---------------+-------------+ -| 2013-11-01T00:00:00 | 2013-12-01T00:00:00 | sun | 12 | 0.0 | 12.0 | -| 2013-11-01T00:00:00 | 2013-12-01T00:00:00 | rain | 15 | 12.0 | 27.0 | -| 2013-11-01T00:00:00 | 2013-12-01T00:00:00 | fog | 2 | 27.0 | 29.0 | -| 2013-11-01T00:00:00 | 2013-12-01T00:00:00 | drizzle | 1 | 29.0 | 30.0 | -| 2013-12-01T00:00:00 | 2014-01-01T00:00:00 | sun | 17 | 0.0 | 17.0 | -| 2013-12-01T00:00:00 | 2014-01-01T00:00:00 | snow | 1 | 17.0 | 18.0 | -| 2013-12-01T00:00:00 | 2014-01-01T00:00:00 | rain | 13 | 18.0 | 31.0 | -| 2014-01-01T00:00:00 | 2014-02-01T00:00:00 | sun | 16 | 0.0 | 16.0 | -| 2014-01-01T00:00:00 | 2014-02-01T00:00:00 | rain | 13 | 16.0 | 29.0 | -| 2014-01-01T00:00:00 | 2014-02-01T00:00:00 | fog | 2 | 29.0 | 31.0 | -+---------------------+---------------------+---------+---------+---------------+-------------+"; ++----------------------+----------------------+---------+---------+-------------+---------------+ +| yearmonth_date | yearmonth_date_end | weather | __count | __count_end | __count_start | ++----------------------+----------------------+---------+---------+-------------+---------------+ +| 2013-11-01T00:00:00Z | 2013-12-01T00:00:00Z | sun | 12 | 12.0 | 0.0 | +| 2013-11-01T00:00:00Z | 2013-12-01T00:00:00Z | rain | 15 | 27.0 | 12.0 | +| 2013-11-01T00:00:00Z | 2013-12-01T00:00:00Z | fog | 2 | 29.0 | 27.0 | +| 2013-11-01T00:00:00Z | 2013-12-01T00:00:00Z | drizzle | 1 | 30.0 | 29.0 | +| 2013-12-01T00:00:00Z | 2014-01-01T00:00:00Z | sun | 17 | 17.0 | 0.0 | +| 2013-12-01T00:00:00Z | 2014-01-01T00:00:00Z | snow | 1 | 18.0 | 17.0 | +| 2013-12-01T00:00:00Z | 2014-01-01T00:00:00Z | rain | 13 | 31.0 | 18.0 | +| 2014-01-01T00:00:00Z | 2014-02-01T00:00:00Z | sun | 16 | 16.0 | 0.0 | +| 2014-01-01T00:00:00Z | 2014-02-01T00:00:00Z | rain | 13 | 29.0 | 16.0 | +| 2014-01-01T00:00:00Z | 2014-02-01T00:00:00Z | fog | 2 | 31.0 | 29.0 | ++----------------------+----------------------+---------+---------+-------------+---------------+"; assert_eq!(drag_selected.pretty_format(None).unwrap(), expected); } @@ -434,7 +434,7 @@ mod tests { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); diff --git a/vegafusion-runtime/tests/test_stringify_datetimes.rs b/vegafusion-runtime/tests/test_stringify_datetimes.rs index f1ed21e18..238cc794d 100644 --- a/vegafusion-runtime/tests/test_stringify_datetimes.rs +++ b/vegafusion-runtime/tests/test_stringify_datetimes.rs @@ -19,8 +19,8 @@ mod test_stringify_datetimes { use vegafusion_core::proto::gen::pretransform::PreTransformSpecOpts; use vegafusion_core::runtime::VegaFusionRuntimeTrait; use vegafusion_core::spec::chart::ChartSpec; + use vegafusion_runtime::datafusion::context::make_datafusion_context; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; - use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; #[rstest( local_tz, @@ -83,7 +83,7 @@ mod test_stringify_datetimes { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); @@ -140,7 +140,7 @@ mod test_stringify_datetimes { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); @@ -230,7 +230,7 @@ mod test_stringify_datetimes { let spec: ChartSpec = serde_json::from_str(&spec_str).unwrap(); // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); @@ -299,7 +299,7 @@ mod test_stringify_datetimes { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); @@ -348,7 +348,7 @@ mod test_stringify_datetimes { // Initialize task graph runtime let runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(16), Some(1024_i32.pow(3) as usize), ); diff --git a/vegafusion-runtime/tests/test_task_graph_runtime.rs b/vegafusion-runtime/tests/test_task_graph_runtime.rs index 861357349..c971a8c9a 100644 --- a/vegafusion-runtime/tests/test_task_graph_runtime.rs +++ b/vegafusion-runtime/tests/test_task_graph_runtime.rs @@ -12,8 +12,8 @@ use vegafusion_core::proto::gen::transforms::{ use vegafusion_core::spec::chart::ChartSpec; use vegafusion_core::task_graph::scope::TaskScope; use vegafusion_core::task_graph::task_value::TaskValue; +use vegafusion_runtime::datafusion::context::make_datafusion_context; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; -use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; #[tokio::test(flavor = "multi_thread")] async fn try_it() { @@ -82,7 +82,7 @@ async fn try_it() { let graph = Arc::new(TaskGraph::new(tasks, &task_scope).unwrap()); let graph_runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(20), Some(1024_i32.pow(3) as usize), ); @@ -144,7 +144,7 @@ async fn try_it_from_spec() { let graph = Arc::new(TaskGraph::new(tasks, &task_scope).unwrap()); let graph_runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(make_datafusion_context()), Some(20), Some(1024_i32.pow(3) as usize), ); diff --git a/vegafusion-runtime/tests/test_transform_bin.rs b/vegafusion-runtime/tests/test_transform_bin.rs index 21d9a22ff..96838bebd 100644 --- a/vegafusion-runtime/tests/test_transform_bin.rs +++ b/vegafusion-runtime/tests/test_transform_bin.rs @@ -8,6 +8,7 @@ use util::datasets::vega_json_dataset; use util::equality::TablesEqualConfig; use vegafusion_core::spec::transform::bin::{BinExtent, BinTransformSpec}; +use vegafusion_core::spec::transform::formula::FormulaTransformSpec; use vegafusion_core::spec::transform::TransformSpec; use vegafusion_core::spec::values::{Field, SignalExpressionSpec}; @@ -50,57 +51,51 @@ fn test_bin() { ); } -// Note: Query results in an error that looks like it might be a bug in DataFusion -// -// "No field named '.df.Beak Length (mm)'. Valid fields are 'df.Species', 'df.Island', -// 'df.Beak Length (mm)', 'df.Beak Depth (mm)', 'df.Flipper Length (mm)', 'df.Body Mass (g)', 'df.Sex', -// 'bin0', 'bin1'." -// -// #[test] -// fn test_bin_infs() { -// let dataset = vega_json_dataset("penguins"); -// -// let bin_spec = BinTransformSpec { -// field: Field::String("Body Mass (g)".to_string()), -// extent: BinExtent::Signal(SignalExpressionSpec { -// signal: "[2000.0 + 1000, 4000 + 1000]".to_string(), -// }), -// signal: Some("my_bins".to_string()), -// as_: None, -// anchor: None, -// maxbins: None, -// base: None, -// step: None, -// steps: None, -// span: None, -// minstep: None, -// divide: None, -// nice: None, -// extra: Default::default(), -// }; -// -// let formula_spec = FormulaTransformSpec { -// expr: "if(datum.bin0 <= -1/0, -1, if(datum.bin0 >= 1/0, 1, 0))".to_string(), -// // expr: "datum['Body Mass (g)']".to_string(), -// as_: "inf_sign".to_string(), -// extra: Default::default() -// }; -// -// let transform_specs = vec![ -// TransformSpec::Bin(bin_spec), -// TransformSpec::Formula(formula_spec), -// ]; -// -// let comp_config = Default::default(); -// let eq_config = TablesEqualConfig { -// row_order: true, -// ..Default::default() -// }; -// -// check_transform_evaluation( -// &dataset, -// transform_specs.as_slice(), -// &comp_config, -// &eq_config, -// ); -// } +#[test] +fn test_bin_infs() { + let dataset = vega_json_dataset("penguins"); + + let bin_spec = BinTransformSpec { + field: Field::String("Body Mass (g)".to_string()), + extent: BinExtent::Signal(SignalExpressionSpec { + signal: "[2000.0 + 1000, 4000 + 1000]".to_string(), + }), + signal: Some("my_bins".to_string()), + as_: None, + anchor: None, + maxbins: None, + base: None, + step: None, + steps: None, + span: None, + minstep: None, + divide: None, + nice: None, + extra: Default::default(), + }; + + let formula_spec = FormulaTransformSpec { + expr: "if(datum.bin0 <= -1/0, -1, if(datum.bin0 >= 1/0, 1, 0))".to_string(), + // expr: "datum['Body Mass (g)']".to_string(), + as_: "inf_sign".to_string(), + extra: Default::default(), + }; + + let transform_specs = vec![ + TransformSpec::Bin(Box::new(bin_spec)), + TransformSpec::Formula(formula_spec), + ]; + + let comp_config = Default::default(); + let eq_config = TablesEqualConfig { + row_order: true, + ..Default::default() + }; + + check_transform_evaluation( + &dataset, + transform_specs.as_slice(), + &comp_config, + &eq_config, + ); +} diff --git a/vegafusion-runtime/tests/test_transform_pivot.rs b/vegafusion-runtime/tests/test_transform_pivot.rs index dccf067a5..3cd0847c6 100644 --- a/vegafusion-runtime/tests/test_transform_pivot.rs +++ b/vegafusion-runtime/tests/test_transform_pivot.rs @@ -222,8 +222,8 @@ mod test_pivot_with_empty_string { +---+------+-------+-----+---+ | | blue | green | red | A | +---+------+-------+-----+---+ -| 3 | 0 | 2 | 1 | 1 | -| 0 | 5 | 0 | 4 | 2 | +| 3 | | 2 | 1 | 1 | +| | 5 | | 4 | 2 | | 8 | 9 | 6 | 7 | 3 | +---+------+-------+-----+---+" ); diff --git a/vegafusion-runtime/tests/test_transform_window.rs b/vegafusion-runtime/tests/test_transform_window.rs index a1986e53a..ecc7747be 100644 --- a/vegafusion-runtime/tests/test_transform_window.rs +++ b/vegafusion-runtime/tests/test_transform_window.rs @@ -13,25 +13,33 @@ use vegafusion_core::spec::transform::TransformSpec; // For some reason this test is especially slow on Windows on CI. // Skip for now. #[cfg(not(target_os = "windows"))] -mod test_window_single { +mod test_window_single_agg { use crate::*; use serde_json::json; + use vegafusion_core::spec::transform::window::{WindowOpSpec, WindowTransformOpSpec}; #[rstest] fn test( #[values( - AggregateOpSpec::Count, - AggregateOpSpec::Sum, - AggregateOpSpec::Mean, - AggregateOpSpec::Average, - AggregateOpSpec::Min, - AggregateOpSpec::Max, - AggregateOpSpec::Stdev, - AggregateOpSpec::Variance, - AggregateOpSpec::Stdevp, - AggregateOpSpec::Variancep + WindowTransformOpSpec::Aggregate(AggregateOpSpec::Count), + WindowTransformOpSpec::Aggregate(AggregateOpSpec::Sum), + WindowTransformOpSpec::Aggregate(AggregateOpSpec::Mean), + WindowTransformOpSpec::Aggregate(AggregateOpSpec::Average), + WindowTransformOpSpec::Aggregate(AggregateOpSpec::Min), + WindowTransformOpSpec::Aggregate(AggregateOpSpec::Max), + WindowTransformOpSpec::Aggregate(AggregateOpSpec::Stdev), + WindowTransformOpSpec::Aggregate(AggregateOpSpec::Variance), + WindowTransformOpSpec::Aggregate(AggregateOpSpec::Stdevp), + WindowTransformOpSpec::Aggregate(AggregateOpSpec::Variancep), + WindowTransformOpSpec::Window(WindowOpSpec::RowNumber), + WindowTransformOpSpec::Window(WindowOpSpec::Rank), + WindowTransformOpSpec::Window(WindowOpSpec::DenseRank), + WindowTransformOpSpec::Window(WindowOpSpec::PercentileRank), + WindowTransformOpSpec::Window(WindowOpSpec::CumeDist), + WindowTransformOpSpec::Window(WindowOpSpec::FirstValue), + WindowTransformOpSpec::Window(WindowOpSpec::LastValue) )] - op: AggregateOpSpec, + op: WindowTransformOpSpec, #[values( json!([null, 0]), @@ -42,16 +50,16 @@ mod test_window_single { #[values(true, false)] ignore_peers: bool, ) { - if frame == json!([null, 0]) - && matches!(op, AggregateOpSpec::Stdevp | AggregateOpSpec::Variancep) - { - // Vega and DataFusion differ on how to handle pop variance of single element. - // DataFusion returns 0 while Vega returns null - return; - } + // Vega and DataFusion differ on how to handle pop variance and percentile rank of + // single element DataFusion returns 0 while Vega returns null. + let null_matches_zero = matches!( + op, + WindowTransformOpSpec::Aggregate(AggregateOpSpec::Stdevp) + | WindowTransformOpSpec::Aggregate(AggregateOpSpec::Variancep) + | WindowTransformOpSpec::Window(WindowOpSpec::PercentileRank) + ); let dataset = vega_json_dataset("movies"); - let transform_specs: Vec = serde_json::from_value(json!( [ { @@ -61,21 +69,26 @@ mod test_window_single { { "type": "window", "params": [null], - "as": ["Cumulative Count"], + "as": ["Window Result"], "ops": [op], "fields": ["IMDB Rating"], + "groupby": ["MPAA Rating"], "sort": { - "field": ["IMDB Rating", "Title", "Rotten Tomatoes Rating"], + "field": ["Title", "Rotten Tomatoes Rating", "IMDB Rating"], "order": ["ascending", "ascending", "ascending"] }, "frame": frame, "ignorePeers": ignore_peers, }, + { + "type": "project", + "fields": ["MPAA Rating", "IMDB Rating", "Title", "Rotten Tomatoes Rating", "Window Result"] + }, { "type": "collect", "sort": { - "field": ["IMDB Rating", "Title", "Rotten Tomatoes Rating"], - "order": ["ascending", "ascending", "ascending"] + "field": ["MPAA Rating", "Title", "Rotten Tomatoes Rating", "IMDB Rating"], + "order": ["ascending", "ascending", "ascending", "ascending"] }, } ] @@ -85,6 +98,7 @@ mod test_window_single { let eq_config = TablesEqualConfig { row_order: true, + null_matches_zero, ..Default::default() }; diff --git a/vegafusion-runtime/tests/util/check.rs b/vegafusion-runtime/tests/util/check.rs index 84dab9388..3021d3fba 100644 --- a/vegafusion-runtime/tests/util/check.rs +++ b/vegafusion-runtime/tests/util/check.rs @@ -15,14 +15,14 @@ use vegafusion_common::error::Result; use vegafusion_core::expression::parser::parse; use vegafusion_core::proto::gen::transforms::TransformPipeline; use vegafusion_core::spec::transform::TransformSpec; -use vegafusion_dataframe::connection::Connection; +use vegafusion_runtime::data::util::SessionContextUtils; +use vegafusion_runtime::datafusion::context::make_datafusion_context; use vegafusion_runtime::expression::compiler::compile; use vegafusion_runtime::expression::compiler::config::CompilationConfig; use vegafusion_runtime::expression::compiler::utils::ExprHelpers; use vegafusion_runtime::task_graph::timezone::RuntimeTzConfig; use vegafusion_runtime::tokio_runtime::TOKIO_RUNTIME; use vegafusion_runtime::transform::pipeline::TransformPipelineUtils; -use vegafusion_sql::connection::datafusion_conn::{make_datafusion_context, DataFusionConnection}; pub fn check_expr_supported(expr_str: &str) { let expr = parse(expr_str).unwrap(); @@ -69,7 +69,7 @@ pub fn check_scalar_evaluation(expr_str: &str, config: &CompilationConfig) { println!("{result:?}"); let tol = 1e-6; - assert_scalars_almost_equals(&result, &expected, tol, "scalar", 0); + assert_scalars_almost_equals(&result, &expected, tol, "scalar", 0, false); } pub fn check_transform_evaluation( @@ -118,13 +118,14 @@ pub fn eval_vegafusion_transforms( transform_specs: &[TransformSpec], compilation_config: &CompilationConfig, ) -> (VegaFusionTable, Vec) { - let ctx = make_datafusion_context(); - let conn = Arc::new(DataFusionConnection::new(Arc::new(ctx))) as Arc; + let ctx = Arc::new(make_datafusion_context()); // add ordering column let data = data.clone().with_ordering().unwrap(); let pipeline = TransformPipeline::try_from(transform_specs).unwrap(); - let sql_df = (*TOKIO_RUNTIME).block_on(conn.scan_arrow(data)).unwrap(); + let sql_df = (*TOKIO_RUNTIME) + .block_on(ctx.vegafusion_table(data)) + .unwrap(); let (result_data, result_signals) = TOKIO_RUNTIME .block_on(pipeline.eval_sql(sql_df, compilation_config)) diff --git a/vegafusion-runtime/tests/util/equality.rs b/vegafusion-runtime/tests/util/equality.rs index 0aee09e7b..eceef1859 100644 --- a/vegafusion-runtime/tests/util/equality.rs +++ b/vegafusion-runtime/tests/util/equality.rs @@ -10,10 +10,10 @@ use vegafusion_common::data::scalar::DATETIME_PREFIX; use vegafusion_common::data::table::VegaFusionTable; use vegafusion_common::data::ORDER_COL; use vegafusion_common::datatypes::is_numeric_datatype; -use vegafusion_common::error::Result; -use vegafusion_dataframe::connection::Connection; +use vegafusion_common::error::{Result, VegaFusionError}; +use vegafusion_runtime::data::util::{DataFrameUtils, SessionContextUtils}; +use vegafusion_runtime::datafusion::context::make_datafusion_context; use vegafusion_runtime::tokio_runtime::TOKIO_RUNTIME; -use vegafusion_sql::connection::datafusion_conn::{make_datafusion_context, DataFusionConnection}; const DROP_COLS: &[&str] = &[ORDER_COL, "_impute"]; @@ -21,6 +21,7 @@ const DROP_COLS: &[&str] = &[ORDER_COL, "_impute"]; pub struct TablesEqualConfig { pub row_order: bool, pub tolerance: f64, + pub null_matches_zero: bool, } impl Default for TablesEqualConfig { @@ -28,6 +29,7 @@ impl Default for TablesEqualConfig { Self { row_order: true, tolerance: 1.0e-10, + null_matches_zero: false, } } } @@ -81,8 +83,7 @@ pub fn assert_tables_equal( rhs.num_rows() ); - let ctx = make_datafusion_context(); - let conn = Arc::new(DataFusionConnection::new(Arc::new(ctx))); + let ctx = Arc::new(make_datafusion_context()); // Flatten to single record batch let (lhs_rb, rhs_rb) = if config.row_order { @@ -109,16 +110,15 @@ pub fn assert_tables_equal( .collect(); let lhs_df = TOKIO_RUNTIME - .block_on(conn.scan_arrow(lhs.clone())) + .block_on(ctx.vegafusion_table(lhs.clone())) .unwrap(); let rhs_df = TOKIO_RUNTIME - .block_on(conn.scan_arrow(rhs.clone())) + .block_on(ctx.vegafusion_table(rhs.clone())) .unwrap(); let lhs_rb = TOKIO_RUNTIME.block_on(async { lhs_df - .sort(sort_exprs.clone(), None) - .await + .sort(sort_exprs.clone()) .unwrap() .collect_flat() .await @@ -127,8 +127,7 @@ pub fn assert_tables_equal( let rhs_rb = TOKIO_RUNTIME.block_on(async { rhs_df - .sort(sort_exprs.clone(), None) - .await + .sort(sort_exprs.clone()) .unwrap() .collect_flat() .await @@ -142,7 +141,14 @@ pub fn assert_tables_equal( let rhs_scalars = record_batch_to_scalars(&rhs_rb).unwrap(); for i in 0..lhs_scalars.len() { - assert_scalars_almost_equals(&lhs_scalars[i], &rhs_scalars[i], config.tolerance, "row", i); + assert_scalars_almost_equals( + &lhs_scalars[i], + &rhs_scalars[i], + config.tolerance, + "row", + i, + config.null_matches_zero, + ); } } @@ -155,8 +161,8 @@ fn record_batch_to_scalars(rb: &RecordBatch) -> Result> { Ok(result) } -fn numeric_to_f64(s: &ScalarValue) -> f64 { - match s { +fn numeric_to_f64(s: &ScalarValue) -> Result { + Ok(match s { ScalarValue::Float32(Some(v)) => *v as f64, ScalarValue::Float64(Some(v)) => *v, ScalarValue::Int8(Some(v)) => *v as f64, @@ -167,8 +173,8 @@ fn numeric_to_f64(s: &ScalarValue) -> f64 { ScalarValue::UInt16(Some(v)) => *v as f64, ScalarValue::UInt32(Some(v)) => *v as f64, ScalarValue::UInt64(Some(v)) => *v as f64, - _ => panic!("Non-numeric value: {s:?}"), - } + _ => return Err(VegaFusionError::internal("non-numeric value")), + }) } pub fn assert_scalars_almost_equals( @@ -177,6 +183,7 @@ pub fn assert_scalars_almost_equals( tol: f64, name: &str, index: usize, + null_matches_zero: bool, ) { match (lhs, rhs) { (ScalarValue::Struct(lhs_sa), ScalarValue::Struct(rhs_sa)) => { @@ -219,7 +226,7 @@ pub fn assert_scalars_almost_equals( for (key, lhs_val) in lhs_map.iter() { let rhs_val = &rhs_map[key]; - assert_scalars_almost_equals(lhs_val, rhs_val, tol, key, index); + assert_scalars_almost_equals(lhs_val, rhs_val, tol, key, index, null_matches_zero); } } (_, _) => { @@ -231,17 +238,26 @@ pub fn assert_scalars_almost_equals( // Equal } else if is_numeric_datatype(&lhs.data_type()) && is_numeric_datatype(&rhs.data_type()) { - if (lhs.is_null() || !numeric_to_f64(&lhs).is_finite()) - && (rhs.is_null() || !numeric_to_f64(&rhs).is_finite()) - { - // both null, nan, inf, or -inf (which are all considered null in JSON) + let lhs_finite = numeric_to_f64(&lhs).map(|v| v.is_finite()).unwrap_or(false); + let rhs_finite = numeric_to_f64(&rhs).map(|v| v.is_finite()).unwrap_or(false); + if !lhs_finite && !rhs_finite { + // both non-finite or null, consider equal + return; } else { - let lhs = numeric_to_f64(&lhs); - let rhs = numeric_to_f64(&rhs); - assert!( - (lhs - rhs).abs() <= tol, - "{lhs} and {rhs} are not equal to within tolerance {tol}, row {index}, coloumn {name}" - ) + match (numeric_to_f64(&lhs), numeric_to_f64(&rhs)) { + (Ok(lhs), Ok(rhs)) => { + assert!( + (lhs - rhs).abs() <= tol, + "{lhs} and {rhs} are not equal to within tolerance {tol}, row {index}, coloumn {name}" + ) + } + (Ok(0.0), Err(_)) | (Err(_), Ok(0.0)) if null_matches_zero => { + // OK + } + _ => { + panic!("{lhs:?} and {rhs:?} are not equal, row {index}, coloumn {name}") + } + } } } else { // This will fail @@ -278,6 +294,6 @@ fn timestamp_to_int(scalar: &ScalarValue) -> ScalarValue { pub fn assert_signals_almost_equal(lhs: Vec, rhs: Vec, tol: f64) { for (lhs_value, rhs_value) in lhs.iter().zip(&rhs) { - assert_scalars_almost_equals(lhs_value, rhs_value, tol, "signal", 0) + assert_scalars_almost_equals(lhs_value, rhs_value, tol, "signal", 0, false) } } diff --git a/vegafusion-runtime/tests/util/vegajs_runtime/package-lock.json b/vegafusion-runtime/tests/util/vegajs_runtime/package-lock.json index c80c99054..9d7b300e9 100644 --- a/vegafusion-runtime/tests/util/vegajs_runtime/package-lock.json +++ b/vegafusion-runtime/tests/util/vegajs_runtime/package-lock.json @@ -14,7 +14,7 @@ "lodash": "^4.17.21", "moment": "^2.29.1", "svgo": "^2.6.1", - "vega": "^5.20.2" + "vega": "^5.26.1" } }, "node_modules/@mapbox/node-pre-gyp": { @@ -45,9 +45,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" }, "node_modules/@types/geojson": { "version": "7946.0.4", @@ -295,9 +295,9 @@ } }, "node_modules/d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", "dependencies": { "d3-array": "2.5.0 - 3" }, @@ -375,6 +375,18 @@ "node": ">=12" } }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/d3-shape": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", @@ -444,11 +456,11 @@ } }, "node_modules/delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", "dependencies": { - "robust-predicates": "^3.0.0" + "robust-predicates": "^3.0.2" } }, "node_modules/delegates": { @@ -1090,37 +1102,37 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/vega": { - "version": "5.25.0", - "resolved": "https://registry.npmjs.org/vega/-/vega-5.25.0.tgz", - "integrity": "sha512-lr+uj0mhYlSN3JOKbMNp1RzZBenWp9DxJ7kR3lha58AFNCzzds7pmFa7yXPbtbaGhB7Buh/t6n+Bzk3Y0VnF5g==", + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/vega/-/vega-5.30.0.tgz", + "integrity": "sha512-ZGoC8LdfEUV0LlXIuz7hup9jxuQYhSaWek2M7r9dEHAPbPrzSQvKXZ0BbsJbrarM100TGRpTVN/l1AFxCwDkWw==", "dependencies": { - "vega-crossfilter": "~4.1.1", - "vega-dataflow": "~5.7.5", - "vega-encode": "~4.9.2", + "vega-crossfilter": "~4.1.2", + "vega-dataflow": "~5.7.6", + "vega-encode": "~4.10.1", "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-expression": "~5.1.1", + "vega-force": "~4.2.1", + "vega-format": "~1.1.2", + "vega-functions": "~5.15.0", + "vega-geo": "~4.4.2", + "vega-hierarchy": "~4.1.2", + "vega-label": "~1.3.0", + "vega-loader": "~4.5.2", + "vega-parser": "~6.4.0", + "vega-projection": "~1.6.1", + "vega-regression": "~1.3.0", + "vega-runtime": "~6.2.0", + "vega-scale": "~7.4.1", + "vega-scenegraph": "~4.13.0", "vega-statistics": "~1.9.0", - "vega-time": "~2.1.1", - "vega-transforms": "~4.10.2", - "vega-typings": "~0.24.0", + "vega-time": "~2.1.2", + "vega-transforms": "~4.12.0", + "vega-typings": "~1.3.1", "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" + "vega-view": "~5.13.0", + "vega-view-transforms": "~4.6.0", + "vega-voronoi": "~4.2.3", + "vega-wordcloud": "~4.1.5" } }, "node_modules/vega-canvas": { @@ -1129,35 +1141,35 @@ "integrity": "sha512-OkJ9CACVcN9R5Pi9uF6MZBF06pO6qFpDYHWSKBJsdHP5o724KrsgR6UvbnXFH82FdsiTOff/HqjuaG8C7FL+9Q==" }, "node_modules/vega-crossfilter": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/vega-crossfilter/-/vega-crossfilter-4.1.1.tgz", - "integrity": "sha512-yesvlMcwRwxrtAd9IYjuxWJJuAMI0sl7JvAFfYtuDkkGDtqfLXUcCzHIATqW6igVIE7tWwGxnbfvQLhLNgK44Q==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vega-crossfilter/-/vega-crossfilter-4.1.2.tgz", + "integrity": "sha512-J7KVEXkpfRJBfRvwLxn5vNCzQCNkrnzmDvkvwhuiwT4gPm5sk7MK5TuUP8GCl/iKYw+kWeVXEtrVHwWtug+bcQ==", "dependencies": { "d3-array": "^3.2.2", - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" + "vega-dataflow": "^5.7.6", + "vega-util": "^1.17.2" } }, "node_modules/vega-dataflow": { - "version": "5.7.5", - "resolved": "https://registry.npmjs.org/vega-dataflow/-/vega-dataflow-5.7.5.tgz", - "integrity": "sha512-EdsIl6gouH67+8B0f22Owr2tKDiMPNNR8lEvJDcxmFw02nXd8juimclpLvjPQriqn6ta+3Dn5txqfD117H04YA==", + "version": "5.7.6", + "resolved": "https://registry.npmjs.org/vega-dataflow/-/vega-dataflow-5.7.6.tgz", + "integrity": "sha512-9Md8+5iUC1MVKPKDyZ7pCEHk6I9am+DgaMzZqo/27O/KI4f23/WQXPyuI8jbNmc/mkm340P0TKREmzL5M7+2Dg==", "dependencies": { - "vega-format": "^1.1.1", - "vega-loader": "^4.5.1", - "vega-util": "^1.17.1" + "vega-format": "^1.1.2", + "vega-loader": "^4.5.2", + "vega-util": "^1.17.2" } }, "node_modules/vega-encode": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/vega-encode/-/vega-encode-4.9.2.tgz", - "integrity": "sha512-c3J0LYkgYeXQxwnYkEzL15cCFBYPRaYUon8O2SZ6O4PhH4dfFTXBzSyT8+gh8AhBd572l2yGDfxpEYA6pOqdjg==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/vega-encode/-/vega-encode-4.10.1.tgz", + "integrity": "sha512-d25nVKZDrg109rC65M8uxE+7iUrTxktaqgK4fU3XZBgpWlh1K4UbU5nDag7kiHVVN4tKqwgd+synEotra9TiVQ==", "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-dataflow": "^5.7.6", + "vega-scale": "^7.4.1", + "vega-util": "^1.17.2" } }, "node_modules/vega-event-selector": { @@ -1166,190 +1178,180 @@ "integrity": "sha512-K5zd7s5tjr1LiOOkjGpcVls8GsH/f2CWCrWcpKy74gTCp+llCdwz0Enqo013ZlGaRNjfgD/o1caJRt3GSaec4A==" }, "node_modules/vega-expression": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/vega-expression/-/vega-expression-5.1.0.tgz", - "integrity": "sha512-u8Rzja/cn2PEUkhQN3zUj3REwNewTA92ExrcASNKUJPCciMkHJEjESwFYuI6DWMCq4hQElQ92iosOAtwzsSTqA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/vega-expression/-/vega-expression-5.1.1.tgz", + "integrity": "sha512-zv9L1Hm0KHE9M7mldHyz8sXbGu3KmC0Cdk7qfHkcTNS75Jpsem6jkbu6ZAwx5cNUeW91AxUQOu77r4mygq2wUQ==", "dependencies": { "@types/estree": "^1.0.0", - "vega-util": "^1.17.1" + "vega-util": "^1.17.2" } }, "node_modules/vega-force": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vega-force/-/vega-force-4.2.0.tgz", - "integrity": "sha512-aE2TlP264HXM1r3fl58AvZdKUWBNOGkIvn4EWyqeJdgO2vz46zSU7x7TzPG4ZLuo44cDRU5Ng3I1eQk23Asz6A==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vega-force/-/vega-force-4.2.1.tgz", + "integrity": "sha512-2BcuuqFr77vcCyKfcpedNFeYMxi+XEFCrlgLWNx7YV0PI8pdP5y/yPkzyuE9Tb894+KkRAvfQHZRAshcnFNcMw==", "dependencies": { "d3-force": "^3.0.0", - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" + "vega-dataflow": "^5.7.6", + "vega-util": "^1.17.2" } }, "node_modules/vega-format": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vega-format/-/vega-format-1.1.1.tgz", - "integrity": "sha512-Rll7YgpYbsgaAa54AmtEWrxaJqgOh5fXlvM2wewO4trb9vwM53KBv4Q/uBWCLK3LLGeBXIF6gjDt2LFuJAUtkQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vega-format/-/vega-format-1.1.2.tgz", + "integrity": "sha512-0kUfAj0dg0U6GcEY0Kp6LiSTCZ8l8jl1qVdQyToMyKmtZg/q56qsiJQZy3WWRr1MtWkTIZL71xSJXgjwjeUaAw==", "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-time": "^2.1.2", + "vega-util": "^1.17.2" } }, "node_modules/vega-functions": { - "version": "5.13.2", - "resolved": "https://registry.npmjs.org/vega-functions/-/vega-functions-5.13.2.tgz", - "integrity": "sha512-YE1Xl3Qi28kw3vdXVYgKFMo20ttd3+SdKth1jUNtBDGGdrOpvPxxFhZkVqX+7FhJ5/1UkDoAYs/cZY0nRKiYgA==", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/vega-functions/-/vega-functions-5.15.0.tgz", + "integrity": "sha512-pCqmm5efd+3M65jrJGxEy3UGuRksmK6DnWijoSNocnxdCBxez+yqUUVX9o2pN8VxMe3648vZnR9/Vk5CXqRvIQ==", "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-dataflow": "^5.7.6", + "vega-expression": "^5.1.1", + "vega-scale": "^7.4.1", + "vega-scenegraph": "^4.13.0", + "vega-selections": "^5.4.2", + "vega-statistics": "^1.9.0", + "vega-time": "^2.1.2", + "vega-util": "^1.17.2" } }, "node_modules/vega-geo": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/vega-geo/-/vega-geo-4.4.1.tgz", - "integrity": "sha512-s4WeZAL5M3ZUV27/eqSD3v0FyJz3PlP31XNSLFy4AJXHxHUeXT3qLiDHoVQnW5Om+uBCPDtTT1ROx1smGIf2aA==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/vega-geo/-/vega-geo-4.4.2.tgz", + "integrity": "sha512-unuV/UxUHf6UJu6GYxMZonC3SZlMfFXYLOkgEsRSvmsMPt3+CVv8FmG88dXNRUJUrdROrJepgecqx0jOwMSnGA==", "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-dataflow": "^5.7.6", + "vega-projection": "^1.6.1", + "vega-statistics": "^1.9.0", + "vega-util": "^1.17.2" } }, "node_modules/vega-hierarchy": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/vega-hierarchy/-/vega-hierarchy-4.1.1.tgz", - "integrity": "sha512-h5mbrDtPKHBBQ9TYbvEb/bCqmGTlUX97+4CENkyH21tJs7naza319B15KRK0NWOHuhbGhFmF8T0696tg+2c8XQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vega-hierarchy/-/vega-hierarchy-4.1.2.tgz", + "integrity": "sha512-m+xDtT5092YPSnV0rdTLW+AWmoCb+A54JQ66MUJwiDBpKxvfKnTiQeuiWDU2YudjUoXZN9EBOcI6QHF8H2Lu2A==", "dependencies": { "d3-hierarchy": "^3.1.2", - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" + "vega-dataflow": "^5.7.6", + "vega-util": "^1.17.2" } }, "node_modules/vega-label": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/vega-label/-/vega-label-1.2.1.tgz", - "integrity": "sha512-n/ackJ5lc0Xs9PInCaGumYn2awomPjJ87EMVT47xNgk2bHmJoZV1Ve/1PUM6Eh/KauY211wPMrNp/9Im+7Ripg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/vega-label/-/vega-label-1.3.0.tgz", + "integrity": "sha512-EfSFSCWAwVPsklM5g0gUEuohALgryuGC/SKMmsOH7dYT/bywmLBZhLVbrE+IHJAUauoGrMhYw1mqnXL/0giJBg==", "dependencies": { - "vega-canvas": "^1.2.6", - "vega-dataflow": "^5.7.3", - "vega-scenegraph": "^4.9.2", - "vega-util": "^1.15.2" + "vega-canvas": "^1.2.7", + "vega-dataflow": "^5.7.6", + "vega-scenegraph": "^4.13.0", + "vega-util": "^1.17.2" } }, "node_modules/vega-loader": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/vega-loader/-/vega-loader-4.5.1.tgz", - "integrity": "sha512-qy5x32SaT0YkEujQM2yKqvLGV9XWQ2aEDSugBFTdYzu/1u4bxdUSRDREOlrJ9Km3RWIOgFiCkobPmFxo47SKuA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vega-loader/-/vega-loader-4.5.2.tgz", + "integrity": "sha512-ktIdGz3DRIS3XfTP9lJ6oMT5cKwC86nQkjUbXZbOtwXQFVNE2xVWBuH13GP6FKUZxg5hJCMtb5v/e/fwTvhKsQ==", "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-format": "^1.1.2", + "vega-util": "^1.17.2" } }, "node_modules/vega-parser": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/vega-parser/-/vega-parser-6.2.0.tgz", - "integrity": "sha512-as+QnX8Qxe9q51L1C2sVBd+YYYctP848+zEvkBT2jlI2g30aZ6Uv7sKsq7QTL6DUbhXQKR0XQtzlanckSFdaOQ==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/vega-parser/-/vega-parser-6.4.0.tgz", + "integrity": "sha512-/hFIJs0yITxfvLIfhhcpUrcbKvu4UZYoMGmly5PSsbgo60oAsVQW8ZbX2Ji3iNFqZJh1ifoX/P0j+9wep1OISw==", "dependencies": { - "vega-dataflow": "^5.7.5", + "vega-dataflow": "^5.7.6", "vega-event-selector": "^3.0.1", - "vega-functions": "^5.13.1", - "vega-scale": "^7.3.0", - "vega-util": "^1.17.1" + "vega-functions": "^5.15.0", + "vega-scale": "^7.4.1", + "vega-util": "^1.17.2" } }, "node_modules/vega-projection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vega-projection/-/vega-projection-1.6.0.tgz", - "integrity": "sha512-LGUaO/kpOEYuTlul+x+lBzyuL9qmMwP1yShdUWYLW+zXoeyGbs5OZW+NbPPwLYqJr5lpXDr/vGztFuA/6g2xvQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vega-projection/-/vega-projection-1.6.1.tgz", + "integrity": "sha512-sqfnAAHumU7MWU1tQN3b6HNgKGF3legek0uLHhjLKcDJQxEc7kwcD18txFz2ffQks6d5j+AUhBiq4GARWf0DEQ==", "dependencies": { "d3-geo": "^3.1.0", "d3-geo-projection": "^4.0.0", - "vega-scale": "^7.3.0" + "vega-scale": "^7.4.1" } }, "node_modules/vega-regression": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vega-regression/-/vega-regression-1.2.0.tgz", - "integrity": "sha512-6TZoPlhV/280VbxACjRKqlE0Nv48z5g4CSNf1FmGGTWS1rQtElPTranSoVW4d7ET5eVQ6f9QLxNAiALptvEq+g==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/vega-regression/-/vega-regression-1.3.0.tgz", + "integrity": "sha512-gxOQfmV7Ft/MYKpXDEo09WZyBuKOBqxqDRWay9KtfGq/E0Y4vbTPsWLv2cB1ToPJdKE6XSN6Re9tCIw5M/yMUg==", "dependencies": { "d3-array": "^3.2.2", - "vega-dataflow": "^5.7.3", + "vega-dataflow": "^5.7.6", "vega-statistics": "^1.9.0", - "vega-util": "^1.15.2" + "vega-util": "^1.17.2" } }, "node_modules/vega-runtime": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/vega-runtime/-/vega-runtime-6.1.4.tgz", - "integrity": "sha512-0dDYXyFLQcxPQ2OQU0WuBVYLRZnm+/CwVu6i6N4idS7R9VXIX5581EkCh3pZ20pQ/+oaA7oJ0pR9rJgJ6rukRQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/vega-runtime/-/vega-runtime-6.2.0.tgz", + "integrity": "sha512-30UXbujWjKNd5aeP+oeHuwFmzuyVYlBj4aDy9+AjfWLECu8wJt4K01vwegcaGPdCWcPLVIv4Oa9Lob4mcXn5KQ==", "dependencies": { - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" + "vega-dataflow": "^5.7.6", + "vega-util": "^1.17.2" } }, "node_modules/vega-scale": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/vega-scale/-/vega-scale-7.3.0.tgz", - "integrity": "sha512-pMOAI2h+e1z7lsqKG+gMfR6NKN2sTcyjZbdJwntooW0uFHwjLGjMSY7kSd3nSEquF0HQ8qF7zR6gs1eRwlGimw==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/vega-scale/-/vega-scale-7.4.1.tgz", + "integrity": "sha512-dArA28DbV/M92O2QvswnzCmQ4bq9WwLKUoyhqFYWCltmDwkmvX7yhqiFLFMWPItIm7mi4Qyoygby6r4DKd1X2A==", "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" + "d3-scale-chromatic": "^3.1.0", + "vega-time": "^2.1.2", + "vega-util": "^1.17.2" } }, "node_modules/vega-scenegraph": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/vega-scenegraph/-/vega-scenegraph-4.10.2.tgz", - "integrity": "sha512-R8m6voDZO5+etwNMcXf45afVM3XAtokMqxuDyddRl9l1YqSJfS+3u8hpolJ50c2q6ZN20BQiJwKT1o0bB7vKkA==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/vega-scenegraph/-/vega-scenegraph-4.13.0.tgz", + "integrity": "sha512-nfl45XtuqB5CxyIZJ+bbJ+dofzosPCRlmF+eUQo+0J23NkNXsTzur+1krJDSdhcw0SOYs4sbYRoMz1cpuOM4+Q==", "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-loader": "^4.5.2", + "vega-scale": "^7.4.1", + "vega-util": "^1.17.2" } }, "node_modules/vega-selections": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/vega-selections/-/vega-selections-5.4.1.tgz", - "integrity": "sha512-EtYc4DvA+wXqBg9tq+kDomSoVUPCmQfS7hUxy2qskXEed79YTimt3Hcl1e1fW226I4AVDBEqTTKebmKMzbSgAA==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/vega-selections/-/vega-selections-5.4.2.tgz", + "integrity": "sha512-99FUhYmg0jOJr2/K4TcEURmJRkuibrCDc8KBUX7qcQEITzrZ5R6a4QE+sarCvbb3hi8aA9GV2oyST6MQeA9mgQ==", "dependencies": { - "d3-array": "3.2.2", + "d3-array": "3.2.4", "vega-expression": "^5.0.1", "vega-util": "^1.17.1" } }, - "node_modules/vega-selections/node_modules/d3-array": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.2.tgz", - "integrity": "sha512-yEEyEAbDrF8C6Ob2myOBLjwBLck1Z89jMGFee0oPsn95GqjerpaOA4ch+vc2l0FNFFwMD5N7OCSEN5eAlsUbgQ==", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/vega-statistics": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/vega-statistics/-/vega-statistics-1.9.0.tgz", @@ -1359,36 +1361,36 @@ } }, "node_modules/vega-time": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vega-time/-/vega-time-2.1.1.tgz", - "integrity": "sha512-z1qbgyX0Af2kQSGFbApwBbX2meenGvsoX8Nga8uyWN8VIbiySo/xqizz1KrP6NbB6R+x5egKmkjdnyNThPeEWA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vega-time/-/vega-time-2.1.2.tgz", + "integrity": "sha512-6rXc6JdDt8MnCRy6UzUCsa6EeFycPDmvioMddLfKw38OYCV8pRQC5nw44gyddOwXgUTJLiCtn/sp53P0iA542A==", "dependencies": { "d3-array": "^3.2.2", "d3-time": "^3.1.0", - "vega-util": "^1.17.1" + "vega-util": "^1.17.2" } }, "node_modules/vega-transforms": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/vega-transforms/-/vega-transforms-4.10.2.tgz", - "integrity": "sha512-sJELfEuYQ238PRG+GOqQch8D69RYnJevYSGLsRGQD2LxNz3j+GlUX6Pid+gUEH5HJy22Q5L0vsTl2ZNhIr4teQ==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/vega-transforms/-/vega-transforms-4.12.0.tgz", + "integrity": "sha512-bh/2Qbj85O70mjfLRgPKAsABArgSUP0k+GjmaY54zukIRxoGxKju+85nigeX/aR/INpEqNWif+5lL+NvmyWA5w==", "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-dataflow": "^5.7.6", + "vega-statistics": "^1.9.0", + "vega-time": "^2.1.2", + "vega-util": "^1.17.2" } }, "node_modules/vega-typings": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/vega-typings/-/vega-typings-0.24.2.tgz", - "integrity": "sha512-fW02GElYoqweCCaPqH6iH44UZnzXiX9kbm1qyecjU3k5s0vtufLI7Yuz/a/uL37mEAqTMQplBBAlk0T9e2e1Dw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/vega-typings/-/vega-typings-1.3.1.tgz", + "integrity": "sha512-j9Sdgmvowz09jkMgTFGVfiv7ycuRP/TQkdHRPXIYwt3RDgPQn7inyFcJ8C8ABFt4MiMWdjOwbneF6KWW8TRXIw==", "dependencies": { "@types/geojson": "7946.0.4", "vega-event-selector": "^3.0.1", - "vega-expression": "^5.0.1", - "vega-util": "^1.17.1" + "vega-expression": "^5.1.1", + "vega-util": "^1.17.2" } }, "node_modules/vega-util": { @@ -1397,50 +1399,50 @@ "integrity": "sha512-omNmGiZBdjm/jnHjZlywyYqafscDdHaELHx1q96n5UOz/FlO9JO99P4B3jZg391EFG8dqhWjQilSf2JH6F1mIw==" }, "node_modules/vega-view": { - "version": "5.11.1", - "resolved": "https://registry.npmjs.org/vega-view/-/vega-view-5.11.1.tgz", - "integrity": "sha512-RoWxuoEMI7xVQJhPqNeLEHCezudsf3QkVMhH5tCovBqwBADQGqq9iWyax3ZzdyX1+P3eBgm7cnLvpqtN2hU8kA==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/vega-view/-/vega-view-5.13.0.tgz", + "integrity": "sha512-ZPAAQ3iYz6YrQjJoDT+0bcxJkXt9PKF5v4OO7Omw8PFhkIv++jFXeKlQTW1bBtyQ92dkdGGHv5lYY67Djqjf3A==", "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-dataflow": "^5.7.6", + "vega-format": "^1.1.2", + "vega-functions": "^5.15.0", + "vega-runtime": "^6.2.0", + "vega-scenegraph": "^4.13.0", + "vega-util": "^1.17.2" } }, "node_modules/vega-view-transforms": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/vega-view-transforms/-/vega-view-transforms-4.5.9.tgz", - "integrity": "sha512-NxEq4ZD4QwWGRrl2yDLnBRXM9FgCI+vvYb3ZC2+nVDtkUxOlEIKZsMMw31op5GZpfClWLbjCT3mVvzO2xaTF+g==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/vega-view-transforms/-/vega-view-transforms-4.6.0.tgz", + "integrity": "sha512-z3z66aJTA3ZRo4oBY4iBXnn+A4KqBGZT/UrlKDbm+7Ec+Ip+hK2tF8Kmhp/WNcMsDZoUWFqLJgR2VgOgvJk9RA==", "dependencies": { - "vega-dataflow": "^5.7.5", - "vega-scenegraph": "^4.10.2", - "vega-util": "^1.17.1" + "vega-dataflow": "^5.7.6", + "vega-scenegraph": "^4.13.0", + "vega-util": "^1.17.2" } }, "node_modules/vega-voronoi": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vega-voronoi/-/vega-voronoi-4.2.1.tgz", - "integrity": "sha512-zzi+fxU/SBad4irdLLsG3yhZgXWZezraGYVQfZFWe8kl7W/EHUk+Eqk/eetn4bDeJ6ltQskX+UXH3OP5Vh0Q0Q==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/vega-voronoi/-/vega-voronoi-4.2.3.tgz", + "integrity": "sha512-aYYYM+3UGqwsOx+TkVtF1IZfguy0H7AN79dR8H0nONRIc+vhk/lbnlkgwY2nSzEu0EZ4b5wZxeGoDBEVmdDEcg==", "dependencies": { "d3-delaunay": "^6.0.2", - "vega-dataflow": "^5.7.5", - "vega-util": "^1.17.1" + "vega-dataflow": "^5.7.6", + "vega-util": "^1.17.2" } }, "node_modules/vega-wordcloud": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/vega-wordcloud/-/vega-wordcloud-4.1.4.tgz", - "integrity": "sha512-oeZLlnjiusLAU5vhk0IIdT5QEiJE0x6cYoGNq1th+EbwgQp153t4r026fcib9oq15glHFOzf81a8hHXHSJm1Jw==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/vega-wordcloud/-/vega-wordcloud-4.1.5.tgz", + "integrity": "sha512-p+qXU3cb9VeWzJ/HEdax0TX2mqDJcSbrCIfo2d/EalOXGkvfSLKobsmMQ8DxPbtVp0uhnpvfCGDyMJw+AzcI2A==", "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-dataflow": "^5.7.6", + "vega-scale": "^7.4.1", + "vega-statistics": "^1.9.0", + "vega-util": "^1.17.2" } }, "node_modules/webidl-conversions": { diff --git a/vegafusion-runtime/tests/util/vegajs_runtime/package.json b/vegafusion-runtime/tests/util/vegajs_runtime/package.json index e41c1576f..eaba3ae0e 100644 --- a/vegafusion-runtime/tests/util/vegajs_runtime/package.json +++ b/vegafusion-runtime/tests/util/vegajs_runtime/package.json @@ -14,6 +14,6 @@ "lodash": "^4.17.21", "moment": "^2.29.1", "svgo": "^2.6.1", - "vega": "^5.20.2" + "vega": "^5.26.1" } } diff --git a/vegafusion-server/Cargo.toml b/vegafusion-server/Cargo.toml index 586364f13..89b548a42 100644 --- a/vegafusion-server/Cargo.toml +++ b/vegafusion-server/Cargo.toml @@ -46,15 +46,13 @@ version = "1.6.9" path = "../vegafusion-runtime" version = "1.6.9" -[dependencies.vegafusion-sql] -path = "../vegafusion-sql" -version = "1.6.9" -features = ["datafusion-conn"] - [dependencies.tokio] workspace = true features = ["rt-multi-thread", "macros"] +[dependencies.datafusion] +workspace = true + [dependencies.tonic-web] version = "0.10.2" diff --git a/vegafusion-server/src/main.rs b/vegafusion-server/src/main.rs index f49e7eb7e..7a567d8d8 100644 --- a/vegafusion-server/src/main.rs +++ b/vegafusion-server/src/main.rs @@ -20,13 +20,13 @@ use vegafusion_core::task_graph::graph::ScopedVariable; use vegafusion_runtime::task_graph::runtime::VegaFusionRuntime; use clap::Parser; +use datafusion::prelude::SessionContext; use regex::Regex; use vegafusion_core::proto::gen::pretransform::{ PreTransformExtractDataset, PreTransformExtractRequest, PreTransformExtractResponse, PreTransformSpecOpts, PreTransformSpecRequest, PreTransformSpecResponse, PreTransformValuesOpts, PreTransformValuesRequest, PreTransformValuesResponse, }; -use vegafusion_sql::connection::datafusion_conn::DataFusionConnection; #[derive(Clone)] pub struct VegaFusionRuntimeGrpc { @@ -326,7 +326,7 @@ async fn main() -> Result<(), VegaFusionError> { }; let tg_runtime = VegaFusionRuntime::new( - Arc::new(DataFusionConnection::default()), + Arc::new(SessionContext::new()), Some(args.capacity), memory_limit, ); diff --git a/vegafusion-sql/Cargo.toml b/vegafusion-sql/Cargo.toml deleted file mode 100644 index a23b3af85..000000000 --- a/vegafusion-sql/Cargo.toml +++ /dev/null @@ -1,143 +0,0 @@ -[package] -name = "vegafusion-sql" -license = "BSD-3-Clause" -version = "1.6.9" -edition = "2021" -description = "VegaFusion SQL dialect generation and connection implementations" - -[features] -datafusion-conn = [ - "datafusion", - "tempfile", - "reqwest", - "reqwest-retry", - "reqwest-middleware", - "vegafusion-datafusion-udfs", - "object_store", - "url", - "vegafusion-common/object_store", - "vegafusion-common/prettyprint", -] - -[dependencies] -deterministic-hash = "1.0.1" -log = "0.4.17" -uuid = "1.4.1" - -[dev-dependencies] -rstest = "0.18.2" -rstest_reuse = "0.6.0" -toml = "0.7.2" - -[dev-dependencies.lazy_static] -workspace = true - -[dependencies.async-trait] -workspace = true - -[dependencies.chrono] -workspace = true - -[dependencies.sqlparser] -workspace = true - -[dependencies.vegafusion-common] -path = "../vegafusion-common" -version = "1.6.9" -features = ["sqlparser"] - -[dependencies.vegafusion-dataframe] -path = "../vegafusion-dataframe" -version = "1.6.9" - -[dependencies.vegafusion-datafusion-udfs] -path = "../vegafusion-datafusion-udfs" -version = "1.6.9" -optional = true - -[dependencies.arrow] -workspace = true -features = ["ipc"] - -[dependencies.datafusion-common] -workspace = true - -[dependencies.datafusion-expr] -workspace = true - -[dependencies.datafusion-functions] -workspace = true - -[dependencies.datafusion-functions-aggregate] -workspace = true - -[dependencies.datafusion-functions-window] -workspace = true - -[dependencies.datafusion] -workspace = true -optional = true - -[dependencies.tempfile] -version = "3.3.0" -optional = true - -[dependencies.reqwest] -workspace = true -default-features = false -features = ["rustls-tls"] -optional = true - -[dependencies.reqwest-retry] -version = "0.3.0" -optional = true - -[dependencies.reqwest-middleware] -version = "0.2.0" -optional = true - -[dependencies.regex] -version = "^1.5.5" -optional = true - -[dependencies.object_store] -workspace = true -optional = true -features = ["aws"] - -[dependencies.url] -version = "2.3.1" -optional = true - -[dependencies.pyo3] -workspace = true -optional = true - -[dependencies.pyo3-arrow] -workspace = true -optional = true - -[dev-dependencies.async-std] -version = "1.12.0" -features = ["attributes"] - -[dev-dependencies.serde_json] -workspace = true -features = ["preserve_order"] - -[dev-dependencies.vegafusion-datafusion-udfs] -path = "../vegafusion-datafusion-udfs" -version = "1.6.9" - -[dev-dependencies.vegafusion-common] -path = "../vegafusion-common" -version = "1.6.9" -features = ["sqlparser", "json", "prettyprint"] - -[dev-dependencies.tokio] -workspace = true -features = ["macros", "rt-multi-thread"] - -[dev-dependencies.serde] -version = "1.0.137" -features = ["derive"] diff --git a/vegafusion-sql/README.md b/vegafusion-sql/README.md deleted file mode 100644 index 8d1841b4b..000000000 --- a/vegafusion-sql/README.md +++ /dev/null @@ -1,2 +0,0 @@ -## vegafusion-sql -This crate provides the `SqlConnection` and `SqlDataFrame` structs with implement the `Connection` and `DataFrame` traits from the `vegafusion-dataframe` crate using SQL. The functionality for generating SQL string across dialects is always available in the crate. Optional support for evaluating the queries is enabled by feature flags with a `-conn` suffix. diff --git a/vegafusion-sql/src/compile/data_type.rs b/vegafusion-sql/src/compile/data_type.rs deleted file mode 100644 index d1b40c53e..000000000 --- a/vegafusion-sql/src/compile/data_type.rs +++ /dev/null @@ -1,20 +0,0 @@ -use crate::dialect::Dialect; -use arrow::datatypes::DataType; -use sqlparser::ast::DataType as SqlDataType; -use vegafusion_common::error::{Result, VegaFusionError}; - -pub trait ToSqlDataType { - fn to_sql(&self, dialect: &Dialect) -> Result; -} - -impl ToSqlDataType for DataType { - fn to_sql(&self, dialect: &Dialect) -> Result { - if let Some(sql_datatype) = dialect.cast_datatypes.get(self) { - Ok(sql_datatype.clone()) - } else { - Err(VegaFusionError::sql_not_supported(format!( - "Data type {self} not supported by dialect" - ))) - } - } -} diff --git a/vegafusion-sql/src/compile/expr.rs b/vegafusion-sql/src/compile/expr.rs deleted file mode 100644 index 4eb38becf..000000000 --- a/vegafusion-sql/src/compile/expr.rs +++ /dev/null @@ -1,726 +0,0 @@ -use crate::compile::data_type::ToSqlDataType; -use crate::compile::scalar::ToSqlScalar; -use arrow::datatypes::DataType; -use datafusion_common::{DFSchema, ScalarValue}; -use sqlparser::ast::{ - BinaryOperator as SqlBinaryOperator, CastKind, DuplicateTreatment, Expr as SqlExpr, - Function as SqlFunction, FunctionArg as SqlFunctionArg, FunctionArgumentList, - FunctionArguments, Ident, ObjectName as SqlObjectName, UnaryOperator as SqlUnaryOperator, - WindowFrame as SqlWindowFrame, WindowFrameBound as SqlWindowBound, - WindowFrameUnits as SqlWindowFrameUnits, WindowSpec as SqlWindowSpec, WindowType, -}; - -use datafusion_expr::expr::{BinaryExpr, Case, Cast, Sort}; -use datafusion_expr::{ - expr, lit, Between, BuiltInWindowFunction, Expr, ExprSchemable, Operator, WindowFrameBound, - WindowFrameUnits, WindowFunctionDefinition, -}; - -use crate::compile::function_arg::ToSqlFunctionArg; -use crate::compile::order::ToSqlOrderByExpr; -use crate::dialect::{Dialect, TryCastMode, UnorderedRowNumberMode}; -use vegafusion_common::data::scalar::ScalarValueHelpers; -use vegafusion_common::error::{Result, VegaFusionError}; - -pub trait ToSqlExpr { - fn to_sql(&self, dialect: &Dialect, schema: &DFSchema) -> Result; -} - -impl ToSqlExpr for Expr { - fn to_sql(&self, dialect: &Dialect, schema: &DFSchema) -> Result { - match self { - Expr::Alias(_) => { - // Alias expressions need to be handled at a higher level - Err(VegaFusionError::internal(format!( - "Alias cannot be converted to SQL: {self:?}" - ))) - } - Expr::Column(col) => { - let id = match &col.relation { - Some(relation) => SqlExpr::CompoundIdentifier(vec![ - Ident::with_quote(dialect.quote_style, relation.to_string()), - Ident::with_quote(dialect.quote_style, &col.name), - ]), - None => SqlExpr::Identifier(Ident::with_quote(dialect.quote_style, &col.name)), - }; - Ok(id) - } - Expr::ScalarVariable(_, _) => Err(VegaFusionError::internal( - "ScalarVariable cannot be converted to SQL", - )), - Expr::Literal(value) => Ok(value.to_sql(dialect)?), - Expr::BinaryExpr(BinaryExpr { left, op, right }) => { - if dialect.binary_ops.contains(op) { - let sql_op = match op { - Operator::Eq => SqlBinaryOperator::Eq, - Operator::NotEq => SqlBinaryOperator::NotEq, - Operator::Lt => SqlBinaryOperator::Lt, - Operator::LtEq => SqlBinaryOperator::LtEq, - Operator::Gt => SqlBinaryOperator::Gt, - Operator::GtEq => SqlBinaryOperator::GtEq, - Operator::Plus => SqlBinaryOperator::Plus, - Operator::Minus => SqlBinaryOperator::Minus, - Operator::Multiply => SqlBinaryOperator::Multiply, - Operator::Divide => SqlBinaryOperator::Divide, - Operator::Modulo => SqlBinaryOperator::Modulo, - Operator::And => SqlBinaryOperator::And, - Operator::Or => SqlBinaryOperator::Or, - Operator::IsDistinctFrom => { - return Err(VegaFusionError::internal( - "IsDistinctFrom cannot be converted to SQL".to_string(), - )) - } - Operator::IsNotDistinctFrom => { - return Err(VegaFusionError::internal( - "IsNotDistinctFrom cannot be converted to SQL".to_string(), - )) - } - Operator::RegexMatch => SqlBinaryOperator::PGRegexMatch, - Operator::RegexIMatch => SqlBinaryOperator::PGRegexIMatch, - Operator::RegexNotMatch => SqlBinaryOperator::PGRegexNotMatch, - Operator::RegexNotIMatch => SqlBinaryOperator::PGRegexNotIMatch, - Operator::BitwiseAnd => SqlBinaryOperator::BitwiseAnd, - Operator::BitwiseOr => SqlBinaryOperator::BitwiseOr, - Operator::BitwiseXor => SqlBinaryOperator::BitwiseXor, - Operator::StringConcat => SqlBinaryOperator::StringConcat, - Operator::BitwiseShiftRight => SqlBinaryOperator::PGBitwiseShiftRight, - Operator::BitwiseShiftLeft => SqlBinaryOperator::PGBitwiseShiftLeft, - Operator::AtArrow => { - return Err(VegaFusionError::internal( - "AtArrow cannot be converted to SQL".to_string(), - )) - } - Operator::ArrowAt => { - return Err(VegaFusionError::internal( - "ArrowAt cannot be converted to SQL".to_string(), - )) - } - Operator::LikeMatch => { - return Err(VegaFusionError::internal( - "LikeMatch cannot be converted to SQL".to_string(), - )) - } - Operator::ILikeMatch => { - return Err(VegaFusionError::internal( - "ILikeMatch cannot be converted to SQL".to_string(), - )) - } - Operator::NotLikeMatch => { - return Err(VegaFusionError::internal( - "NotLikeMatch cannot be converted to SQL".to_string(), - )) - } - Operator::NotILikeMatch => { - return Err(VegaFusionError::internal( - "NotILikeMatch cannot be converted to SQL".to_string(), - )) - } - }; - Ok(SqlExpr::Nested(Box::new(SqlExpr::BinaryOp { - left: Box::new(left.to_sql(dialect, schema)?), - op: sql_op, - right: Box::new(right.to_sql(dialect, schema)?), - }))) - } else if let Some(transformer) = dialect.binary_op_transforms.get(op) { - transformer.transform( - op, - left.to_sql(dialect, schema)?, - right.to_sql(dialect, schema)?, - dialect, - ) - } else { - return Err(VegaFusionError::sql_not_supported(format!( - "Dialect does not support the '{op:?}' operator" - ))); - } - } - Expr::Not(expr) => Ok(SqlExpr::Nested(Box::new(SqlExpr::UnaryOp { - op: SqlUnaryOperator::Not, - expr: Box::new(expr.to_sql(dialect, schema)?), - }))), - Expr::IsNotNull(expr) => { - Ok(SqlExpr::IsNotNull(Box::new(expr.to_sql(dialect, schema)?))) - } - Expr::IsNull(expr) => Ok(SqlExpr::IsNull(Box::new(expr.to_sql(dialect, schema)?))), - Expr::Negative(expr) => Ok(SqlExpr::Nested(Box::new(SqlExpr::UnaryOp { - op: SqlUnaryOperator::Minus, - expr: Box::new(expr.to_sql(dialect, schema)?), - }))), - Expr::Between(Between { - expr, - negated, - low, - high, - }) => Ok(SqlExpr::Between { - expr: Box::new(expr.to_sql(dialect, schema)?), - negated: *negated, - low: Box::new(low.to_sql(dialect, schema)?), - high: Box::new(high.to_sql(dialect, schema)?), - }), - Expr::Case(Case { - expr, - when_then_expr, - else_expr, - }) => { - let (conditions, results): (Vec>, Vec>) = - when_then_expr.iter().cloned().unzip(); - - let conditions = conditions - .iter() - .map(|expr| expr.to_sql(dialect, schema)) - .collect::>>()?; - let results = results - .iter() - .map(|expr| expr.to_sql(dialect, schema)) - .collect::>>()?; - - let else_result = if let Some(else_expr) = &else_expr { - Some(Box::new(else_expr.to_sql(dialect, schema)?)) - } else { - None - }; - - Ok(SqlExpr::Case { - operand: if let Some(expr) = &expr { - Some(Box::new(expr.to_sql(dialect, schema)?)) - } else { - None - }, - conditions, - results, - else_result, - }) - } - Expr::Cast(Cast { expr, data_type }) => { - // Build cast expression - let from_dtype = expr.get_type(schema)?; - let cast_expr = if let Some(transformer) = dialect - .cast_transformers - .get(&(from_dtype, data_type.clone())) - { - transformer.transform(expr.as_ref(), dialect, schema)? - } else { - let sql_data_type = data_type.to_sql(dialect)?; - SqlExpr::Cast { - expr: Box::new(expr.to_sql(dialect, schema)?), - data_type: sql_data_type, - format: None, - kind: CastKind::Cast, - } - }; - - // Handle manual null propagation - Ok(if dialect.cast_propagates_null { - cast_expr - } else { - // Need to manually propagate nulls through cast - let condition = Expr::IsNotNull(expr.clone()).to_sql(dialect, schema)?; - let result = cast_expr; - let else_result = lit(ScalarValue::Null).to_sql(dialect, schema)?; - SqlExpr::Case { - operand: None, - conditions: vec![condition], - results: vec![result], - else_result: Some(Box::new(else_result)), - } - }) - } - Expr::TryCast(expr::TryCast { expr, data_type }) => { - let from_dtype = expr.get_type(schema)?; - let sql_data_type = data_type.to_sql(dialect)?; - let cast_expr = if let Some(transformer) = dialect - .cast_transformers - .get(&(from_dtype.clone(), data_type.clone())) - { - // Cast transformer overrides TryCast as well as Cast - transformer.transform(expr.as_ref(), dialect, schema)? - } else { - match &dialect.try_cast_mode { - TryCastMode::Supported => SqlExpr::Cast { - expr: Box::new(expr.to_sql(dialect, schema)?), - data_type: sql_data_type, - format: None, - kind: CastKind::TryCast, - }, - TryCastMode::JustUseCast => SqlExpr::Cast { - expr: Box::new(expr.to_sql(dialect, schema)?), - data_type: sql_data_type, - format: None, - kind: CastKind::Cast, - }, - TryCastMode::SafeCast => SqlExpr::Cast { - expr: Box::new(expr.to_sql(dialect, schema)?), - data_type: sql_data_type, - format: None, - kind: CastKind::SafeCast, - }, - TryCastMode::SupportedOnStringsOtherwiseJustCast => { - if let DataType::Utf8 | DataType::LargeUtf8 = from_dtype { - // TRY_CAST is supported - SqlExpr::Cast { - expr: Box::new(expr.to_sql(dialect, schema)?), - data_type: sql_data_type, - format: None, - kind: CastKind::TryCast, - } - } else { - // Fall back to regular CAST - SqlExpr::Cast { - expr: Box::new(expr.to_sql(dialect, schema)?), - data_type: sql_data_type, - format: None, - kind: CastKind::Cast, - } - } - } - } - }; - - // Handle manual null propagation - Ok(if dialect.cast_propagates_null { - cast_expr - } else { - // Need to manually propagate nulls through cast - let condition = Expr::IsNotNull(expr.clone()).to_sql(dialect, schema)?; - let result = cast_expr; - let else_result = lit(ScalarValue::Null).to_sql(dialect, schema)?; - SqlExpr::Case { - operand: None, - conditions: vec![condition], - results: vec![result], - else_result: Some(Box::new(else_result)), - } - }) - } - Expr::ScalarFunction(fun) => { - let fun_name = match fun.name().to_ascii_lowercase().as_str() { - "power" => "pow".to_string(), - fun_name => fun_name.to_string(), - }; - translate_scalar_function(&fun_name, &fun.args, dialect, schema) - } - Expr::AggregateFunction(expr::AggregateFunction { - func, - args, - distinct, - .. - }) => translate_aggregate_function( - &func.name().to_ascii_lowercase(), - args.as_slice(), - *distinct, - dialect, - schema, - ), - Expr::WindowFunction(expr::WindowFunction { - fun, - args, - partition_by, - order_by, - window_frame, - null_treatment: _, - }) => { - // Extract function name - let (fun_name, supports_frame) = match fun { - WindowFunctionDefinition::AggregateUDF(agg) => { - (agg.name().to_ascii_lowercase(), true) - } - WindowFunctionDefinition::BuiltInWindowFunction(win_fn) => { - let is_navigation_function = matches!( - win_fn, - BuiltInWindowFunction::FirstValue - | BuiltInWindowFunction::LastValue - | BuiltInWindowFunction::NthValue - ); - let supports_frame = if is_navigation_function { - // Window frames sometimes supported by navigation functions like - // first_value. - dialect.supports_frames_in_navigation_window_functions - } else { - // Window frames sometimes supported by numbering functions like - // row_number, rank, etc. - dialect.supports_frames_in_numbering_window_functions - }; - - (win_fn.to_string().to_ascii_lowercase(), supports_frame) - } - WindowFunctionDefinition::WindowUDF(udf) => { - (udf.name().to_ascii_lowercase(), true) - } - }; - - // Handle unordered row_number - let order_by = if fun_name == "row_number" && order_by.is_empty() { - match &dialect.unordered_row_number_mode { - UnorderedRowNumberMode::AlternateScalarFunction(alt_fun) => { - return Ok(SqlExpr::Function(SqlFunction { - name: SqlObjectName(vec![Ident::new(alt_fun)]), - args: FunctionArguments::List(FunctionArgumentList { - args: vec![], - duplicate_treatment: None, - clauses: vec![], - }), - filter: None, - null_treatment: None, - over: None, - within_group: vec![], - parameters: FunctionArguments::None, - })); - } - UnorderedRowNumberMode::OrderByConstant => { - vec![Sort { - expr: lit(1), - asc: false, - nulls_first: false, - }] - } - _ => order_by.clone(), - } - } else { - order_by.clone() - }; - - if dialect.aggregate_functions.contains(&fun_name) - || dialect.window_functions.contains(&fun_name) - { - // Process args - let args = translate_function_args(args.as_slice(), dialect, schema)?; - - let partition_by = partition_by - .iter() - .map(|arg| arg.to_sql(dialect, schema)) - .collect::>>()?; - - let order_by = order_by - .iter() - .map(|arg| arg.to_sql_order(dialect, schema)) - .collect::>>()?; - - let sql_window_frame = if supports_frame { - let end_bound = - compile_window_frame_bound(&window_frame.end_bound, dialect, schema)?; - let start_bound = - compile_window_frame_bound(&window_frame.start_bound, dialect, schema)?; - - if !dialect.supports_bounded_window_frames - && (!matches!(start_bound, SqlWindowBound::Preceding(None)) - || !matches!(end_bound, SqlWindowBound::CurrentRow)) - { - // Found bounded window frame, which is not supported by dialect - return Err(VegaFusionError::sql_not_supported( - "Dialect does not support bounded window frames", - )); - } - - let units = match window_frame.units { - WindowFrameUnits::Rows => SqlWindowFrameUnits::Rows, - WindowFrameUnits::Range => SqlWindowFrameUnits::Range, - WindowFrameUnits::Groups => { - if dialect.supports_window_frame_groups { - SqlWindowFrameUnits::Groups - } else { - return Err(VegaFusionError::sql_not_supported( - "Dialect does not support window frame GROUPS", - )); - } - } - }; - Some(SqlWindowFrame { - units, - start_bound, - end_bound: Some(end_bound), - }) - } else { - None - }; - - // Process over - let over = WindowType::WindowSpec(SqlWindowSpec { - partition_by, - order_by, - window_frame: sql_window_frame, - window_name: None, - }); - - let sql_fun = SqlFunction { - name: SqlObjectName(vec![Ident { - value: fun_name, - quote_style: None, - }]), - args: FunctionArguments::List(FunctionArgumentList { - args, - duplicate_treatment: None, - clauses: vec![], - }), - filter: None, - null_treatment: None, - over: Some(over), - within_group: vec![], - parameters: FunctionArguments::None, - }; - - Ok(SqlExpr::Function(sql_fun)) - } else { - // Unsupported - Err(VegaFusionError::sql_not_supported(format!( - "Dialect does not support the '{fun_name}' window function" - ))) - } - } - Expr::IsTrue(_) => Err(VegaFusionError::internal( - "IsTrue cannot be converted to SQL", - )), - Expr::IsFalse(_) => Err(VegaFusionError::internal( - "IsFalse cannot be converted to SQL", - )), - Expr::IsUnknown(_) => Err(VegaFusionError::internal( - "IsUnknown cannot be converted to SQL", - )), - Expr::IsNotTrue(_) => Err(VegaFusionError::internal( - "IsNotTrue cannot be converted to SQL", - )), - Expr::IsNotFalse(_) => Err(VegaFusionError::internal( - "IsNotFalse cannot be converted to SQL", - )), - Expr::IsNotUnknown(_) => Err(VegaFusionError::internal( - "IsNotUnknown cannot be converted to SQL", - )), - Expr::InList(expr::InList { - expr, - list, - negated, - }) => { - let sql_expr = expr.to_sql(dialect, schema)?; - let sql_list = list - .iter() - .map(|expr| expr.to_sql(dialect, schema)) - .collect::>>()?; - - Ok(SqlExpr::InList { - expr: Box::new(sql_expr), - list: sql_list, - negated: *negated, - }) - } - Expr::Wildcard { .. } => Err(VegaFusionError::internal( - "Wildcard cannot be converted to SQL", - )), - Expr::Exists { .. } => Err(VegaFusionError::internal( - "Exists cannot be converted to SQL", - )), - Expr::InSubquery { .. } => Err(VegaFusionError::internal( - "InSubquery cannot be converted to SQL", - )), - Expr::ScalarSubquery(_) => Err(VegaFusionError::internal( - "ScalarSubquery cannot be converted to SQL", - )), - Expr::GroupingSet(_) => Err(VegaFusionError::internal( - "GroupingSet cannot be converted to SQL", - )), - Expr::Like { .. } => Err(VegaFusionError::internal("Like cannot be converted to SQL")), - Expr::SimilarTo { .. } => Err(VegaFusionError::internal( - "SimilarTo cannot be converted to SQL", - )), - Expr::Placeholder { .. } => Err(VegaFusionError::internal( - "Placeholder cannot be converted to SQL", - )), - Expr::OuterReferenceColumn(_, _) => Err(VegaFusionError::internal( - "OuterReferenceColumn cannot be converted to SQL", - )), - Expr::Unnest(_) => Err(VegaFusionError::internal( - "Unnest cannot be converted to SQL", - )), - } - } -} - -fn translate_scalar_function( - fun_name: &str, - args: &[Expr], - dialect: &Dialect, - schema: &DFSchema, -) -> Result { - if dialect.scalar_functions.contains(fun_name) { - // Function is directly supported by dialect - let ident = Ident { - value: fun_name.to_string(), - quote_style: None, - }; - let args = translate_function_args(args, dialect, schema)?; - - Ok(SqlExpr::Function(SqlFunction { - name: SqlObjectName(vec![ident]), - args: FunctionArguments::List(FunctionArgumentList { - args, - duplicate_treatment: None, - clauses: vec![], - }), - filter: None, - null_treatment: None, - over: None, - within_group: vec![], - parameters: FunctionArguments::None, - })) - } else if let Some(transformer) = dialect.scalar_transformers.get(fun_name) { - // Supported through AST transformation - transformer.transform(args, dialect, schema) - } else { - // Unsupported - return Err(VegaFusionError::sql_not_supported(format!( - "Dialect does not support the '{fun_name}' scalar function" - ))); - } -} - -fn translate_aggregate_function( - fun_name: &str, - args: &[Expr], - distinct: bool, - dialect: &Dialect, - schema: &DFSchema, -) -> Result { - if dialect.aggregate_functions.contains(fun_name) { - let ident = Ident { - value: fun_name.to_ascii_lowercase(), - quote_style: None, - }; - let args = translate_function_args(args, dialect, schema)?; - let fn_expr = SqlExpr::Function(SqlFunction { - name: SqlObjectName(vec![ident]), - args: FunctionArguments::List(FunctionArgumentList { - args, - duplicate_treatment: if distinct { - Some(DuplicateTreatment::Distinct) - } else { - None - }, - clauses: vec![], - }), - filter: None, - null_treatment: None, - over: None, - within_group: vec![], - parameters: FunctionArguments::None, - }); - Ok(fn_expr) - } else if let Some(transformer) = dialect.aggregate_transformers.get(fun_name) { - // Supported through AST transformation - transformer.transform(args, dialect, schema) - } else { - // Unsupported - return Err(VegaFusionError::sql_not_supported(format!( - "Dialect does not support the '{fun_name}' aggregate function" - ))); - } -} - -fn translate_function_args( - args: &[Expr], - dialect: &Dialect, - schema: &DFSchema, -) -> Result> { - args.iter() - .map(|expr| { - Ok(SqlFunctionArg::Unnamed( - expr.to_sql_function_arg(dialect, schema)?, - )) - }) - .collect::>>() -} - -fn compile_window_frame_bound( - bound: &WindowFrameBound, - dialect: &Dialect, - schema: &DFSchema, -) -> Result { - Ok(match bound { - WindowFrameBound::Preceding(v) => match v.to_f64() { - Ok(v) => SqlWindowBound::Preceding(Some(Box::new( - lit(v.max(0.0) as u64).to_sql(dialect, schema)?, - ))), - Err(_) => SqlWindowBound::Preceding(None), - }, - WindowFrameBound::CurrentRow => SqlWindowBound::CurrentRow, - WindowFrameBound::Following(v) => match v.to_f64() { - Ok(v) => SqlWindowBound::Following(Some(Box::new( - lit(v.max(0.0) as u64).to_sql(dialect, schema)?, - ))), - Err(_) => SqlWindowBound::Following(None), - }, - }) -} - -#[cfg(test)] -mod tests { - use super::ToSqlExpr; - use crate::dialect::Dialect; - use arrow::datatypes::DataType; - use datafusion_common::DFSchema; - use datafusion_expr::expr::Cast; - use datafusion_expr::{lit, Between, Expr}; - use datafusion_functions::expr_fn::sin; - use datafusion_functions::string::expr_fn::upper; - use vegafusion_common::column::flat_col; - - fn schema() -> DFSchema { - DFSchema::empty() - } - - #[test] - pub fn test1() { - let df_expr = Expr::Negative(Box::new(flat_col("A"))) + lit(12); - let sql_expr = df_expr.to_sql(&Dialect::datafusion(), &schema()).unwrap(); - println!("{sql_expr:?}"); - let sql_str = sql_expr.to_string(); - assert_eq!(sql_str, r#"((-"A") + 12)"#.to_string()); - } - - #[test] - pub fn test2() { - let df_expr = sin(lit(1.2)) + flat_col("B"); - - let dialect: Dialect = Dialect::datafusion(); - let sql_expr = df_expr.to_sql(&dialect, &schema()).unwrap(); - println!("{sql_expr:?}"); - let sql_str = sql_expr.to_string(); - assert_eq!(sql_str, r#"(sin(1.2) + "B")"#.to_string()); - } - - #[test] - pub fn test3() { - let df_expr = upper(lit("foo")); - let dialect: Dialect = Dialect::datafusion(); - let sql_expr = df_expr.to_sql(&dialect, &schema()).unwrap(); - println!("{sql_expr:?}"); - let sql_str = sql_expr.to_string(); - assert_eq!(sql_str, "upper('foo')".to_string()); - } - - #[test] - pub fn test4() { - let df_expr = Expr::Cast(Cast { - expr: Box::new(lit(2.8)), - data_type: DataType::Int64, - }) + lit(4); - - let sql_expr = df_expr.to_sql(&Dialect::datafusion(), &schema()).unwrap(); - println!("{sql_expr:?}"); - let sql_str = sql_expr.to_string(); - assert_eq!(sql_str, "(CAST(2.8 AS BIGINT) + 4)".to_string()); - } - - #[test] - pub fn test5() { - let df_expr = Expr::Between(Between { - expr: Box::new(flat_col("A")), - negated: false, - low: Box::new(lit(0)), - high: Box::new(lit(10)), - }) - .or(flat_col("B")); - - let sql_expr = df_expr.to_sql(&Dialect::datafusion(), &schema()).unwrap(); - println!("{sql_expr:?}"); - let sql_str = sql_expr.to_string(); - assert_eq!(sql_str, r#"("A" BETWEEN 0 AND 10 OR "B")"#.to_string()); - } -} diff --git a/vegafusion-sql/src/compile/function_arg.rs b/vegafusion-sql/src/compile/function_arg.rs deleted file mode 100644 index 60c33d39d..000000000 --- a/vegafusion-sql/src/compile/function_arg.rs +++ /dev/null @@ -1,43 +0,0 @@ -use crate::compile::expr::ToSqlExpr; -use crate::dialect::Dialect; -use datafusion_common::DFSchema; -use datafusion_expr::Expr; -use sqlparser::ast::{FunctionArgExpr as SqlFunctionArgExpr, Ident, ObjectName}; -use vegafusion_common::error::Result; - -pub trait ToSqlFunctionArg { - fn to_sql_function_arg( - &self, - dialect: &Dialect, - schema: &DFSchema, - ) -> Result; -} - -impl ToSqlFunctionArg for Expr { - fn to_sql_function_arg( - &self, - dialect: &Dialect, - schema: &DFSchema, - ) -> Result { - Ok(match self { - Expr::Wildcard { - qualifier: None, - options: _, - } => SqlFunctionArgExpr::Wildcard, - Expr::Wildcard { - qualifier: Some(qualifier), - options: _, - } => SqlFunctionArgExpr::QualifiedWildcard(ObjectName( - qualifier - .to_vec() - .into_iter() - .map(|value| Ident { - value, - quote_style: None, - }) - .collect(), - )), - expr => SqlFunctionArgExpr::Expr(expr.to_sql(dialect, schema)?), - }) - } -} diff --git a/vegafusion-sql/src/compile/mod.rs b/vegafusion-sql/src/compile/mod.rs deleted file mode 100644 index 12bf0de97..000000000 --- a/vegafusion-sql/src/compile/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -pub mod data_type; -pub mod expr; -pub mod function_arg; -pub mod order; -pub mod scalar; -pub mod select; diff --git a/vegafusion-sql/src/compile/order.rs b/vegafusion-sql/src/compile/order.rs deleted file mode 100644 index fa808859f..000000000 --- a/vegafusion-sql/src/compile/order.rs +++ /dev/null @@ -1,68 +0,0 @@ -use crate::compile::expr::ToSqlExpr; -use crate::dialect::Dialect; -use datafusion_common::DFSchema; -use datafusion_expr::SortExpr; -use sqlparser::ast::OrderByExpr as SqlOrderByExpr; -use vegafusion_common::error::{Result, ResultWithContext, VegaFusionError}; - -pub trait ToSqlOrderByExpr { - fn to_sql_order(&self, dialect: &Dialect, schema: &DFSchema) -> Result; -} - -impl ToSqlOrderByExpr for SortExpr { - fn to_sql_order(&self, dialect: &Dialect, schema: &DFSchema) -> Result { - let nulls_first = if dialect.supports_null_ordering { - // Be explicit about null ordering - Some(self.nulls_first) - } else { - // If null ordering is not supported, then don't specify it as long the as default - // behavior matches what's specified. - if (self.asc && self.nulls_first) || (!self.asc && !self.nulls_first) { - None - } else { - return Err(VegaFusionError::sql_not_supported( - "Dialect does not support NULL ordering", - )); - } - }; - - Ok(SqlOrderByExpr { - expr: self.expr.to_sql(dialect, schema).with_context(|| { - format!( - "Expression cannot be used as order by expression: {expr:?}", - expr = self.expr - ) - })?, - asc: Some(self.asc), - nulls_first, - with_fill: None, - }) - } -} - -#[cfg(test)] -mod tests { - use crate::compile::order::ToSqlOrderByExpr; - use datafusion_common::DFSchema; - use datafusion_expr::expr; - use vegafusion_common::column::flat_col; - - fn schema() -> DFSchema { - DFSchema::empty() - } - - #[test] - pub fn test_sort_by_col() { - let sort_expr = expr::Sort { - expr: flat_col("a"), - asc: false, - nulls_first: false, - }; - - let sort_sql = sort_expr - .to_sql_order(&Default::default(), &schema()) - .unwrap(); - let sql_str = sort_sql.to_string(); - assert_eq!(sql_str, r#""a" DESC NULLS LAST"#.to_string()); - } -} diff --git a/vegafusion-sql/src/compile/scalar.rs b/vegafusion-sql/src/compile/scalar.rs deleted file mode 100644 index 92887fc7e..000000000 --- a/vegafusion-sql/src/compile/scalar.rs +++ /dev/null @@ -1,384 +0,0 @@ -use crate::compile::data_type::ToSqlDataType; -use crate::compile::expr::ToSqlExpr; -use crate::dialect::Dialect; -use arrow::datatypes::{DataType, TimeUnit}; -use datafusion_common::scalar::ScalarValue; -use datafusion_common::DFSchema; -use datafusion_expr::{ - expr, lit, ColumnarValue, Expr, ScalarUDF, ScalarUDFImpl, Signature, Volatility, -}; -use sqlparser::ast::{ - CastKind, Expr as SqlExpr, Function as SqlFunction, FunctionArg as SqlFunctionArg, - FunctionArgExpr, FunctionArgumentList, FunctionArguments, Ident, ObjectName as SqlObjectName, - Value as SqlValue, -}; -use std::any::Any; -use std::ops::Add; -use std::sync::Arc; - -use vegafusion_common::data::scalar::ArrayRefHelpers; -use vegafusion_common::error::{Result, VegaFusionError}; - -pub trait ToSqlScalar { - fn to_sql(&self, dialect: &Dialect) -> Result; -} - -impl ToSqlScalar for ScalarValue { - fn to_sql(&self, dialect: &Dialect) -> Result { - match self { - ScalarValue::Null => Ok(SqlExpr::Value(SqlValue::Null)), - ScalarValue::Boolean(v) => Ok(SqlExpr::Value( - v.map(SqlValue::Boolean).unwrap_or(SqlValue::Null), - )), - ScalarValue::Float16(v) => v - .map(|v| { - let repr = if !v.is_finite() { - // Wrap inf, -inf, and nan in explicit cast - return if dialect.supports_non_finite_floats { - let cast_dtype = if let Some(dtype) = - dialect.cast_datatypes.get(&DataType::Float16) - { - dtype.clone() - } else { - return Err(VegaFusionError::sql_not_supported( - "Dialect does not support a Float16 data type", - )); - }; - Ok(SqlExpr::Cast { - expr: Box::new(SqlExpr::Value(SqlValue::Number( - format!("'{v}'"), - false, - ))), - data_type: cast_dtype, - format: None, - kind: CastKind::Cast, - }) - } else { - Ok(SqlExpr::Value(SqlValue::Null)) - }; - } else if v.to_f32().fract() == 0.0 { - format!("{v:.1}") - } else { - v.to_string() - }; - Ok(SqlExpr::Value(SqlValue::Number(repr, false))) - }) - .unwrap_or(Ok(SqlExpr::Value(SqlValue::Null))), - ScalarValue::Float32(v) => v - .map(|v| { - let repr = if !v.is_finite() { - // Wrap inf, -inf, and nan in explicit cast - return if dialect.supports_non_finite_floats { - let cast_dtype = if let Some(dtype) = - dialect.cast_datatypes.get(&DataType::Float32) - { - dtype.clone() - } else { - return Err(VegaFusionError::sql_not_supported( - "Dialect does not support a Float32 data type", - )); - }; - Ok(SqlExpr::Cast { - expr: Box::new(SqlExpr::Value(SqlValue::Number( - format!("'{v}'"), - false, - ))), - data_type: cast_dtype, - format: None, - kind: CastKind::Cast, - }) - } else { - Ok(SqlExpr::Value(SqlValue::Null)) - }; - } else if v.fract() == 0.0 { - format!("{v:.1}") - } else { - v.to_string() - }; - Ok(SqlExpr::Value(SqlValue::Number(repr, false))) - }) - .unwrap_or(Ok(SqlExpr::Value(SqlValue::Null))), - ScalarValue::Float64(v) => v - .map(|v| { - let repr = if !v.is_finite() { - return if dialect.supports_non_finite_floats { - // Wrap inf, -inf, and nan in explicit cast - let cast_dtype = if let Some(dtype) = - dialect.cast_datatypes.get(&DataType::Float64) - { - dtype.clone() - } else { - return Err(VegaFusionError::sql_not_supported( - "Dialect does not support a Float64 data type", - )); - }; - Ok(SqlExpr::Cast { - expr: Box::new(SqlExpr::Value(SqlValue::Number( - format!("'{v}'"), - false, - ))), - data_type: cast_dtype, - format: None, - kind: CastKind::Cast, - }) - } else { - Ok(SqlExpr::Value(SqlValue::Null)) - }; - } else if v.fract() == 0.0 { - format!("{v:.1}") - } else { - v.to_string() - }; - Ok(SqlExpr::Value(SqlValue::Number(repr, false))) - }) - .unwrap_or(Ok(SqlExpr::Value(SqlValue::Null))), - ScalarValue::Int8(v) => Ok(SqlExpr::Value( - v.map(|v| SqlValue::Number(v.to_string(), false)) - .unwrap_or(SqlValue::Null), - )), - ScalarValue::Int16(v) => Ok(SqlExpr::Value( - v.map(|v| SqlValue::Number(v.to_string(), false)) - .unwrap_or(SqlValue::Null), - )), - ScalarValue::Int32(v) => Ok(SqlExpr::Value( - v.map(|v| SqlValue::Number(v.to_string(), false)) - .unwrap_or(SqlValue::Null), - )), - ScalarValue::Int64(v) => Ok(SqlExpr::Value( - v.map(|v| SqlValue::Number(v.to_string(), false)) - .unwrap_or(SqlValue::Null), - )), - ScalarValue::UInt8(v) => Ok(SqlExpr::Value( - v.map(|v| SqlValue::Number(v.to_string(), false)) - .unwrap_or(SqlValue::Null), - )), - ScalarValue::UInt16(v) => Ok(SqlExpr::Value( - v.map(|v| SqlValue::Number(v.to_string(), false)) - .unwrap_or(SqlValue::Null), - )), - ScalarValue::UInt32(v) => Ok(SqlExpr::Value( - v.map(|v| SqlValue::Number(v.to_string(), false)) - .unwrap_or(SqlValue::Null), - )), - ScalarValue::UInt64(v) => Ok(SqlExpr::Value( - v.map(|v| SqlValue::Number(v.to_string(), false)) - .unwrap_or(SqlValue::Null), - )), - ScalarValue::Utf8(v) => Ok(SqlExpr::Value( - v.as_ref() - .map(|v| SqlValue::SingleQuotedString(v.clone())) - .unwrap_or(SqlValue::Null), - )), - ScalarValue::LargeUtf8(v) => Ok(SqlExpr::Value( - v.as_ref() - .map(|v| SqlValue::SingleQuotedString(v.clone())) - .unwrap_or(SqlValue::Null), - )), - ScalarValue::Binary(_) => Err(VegaFusionError::internal( - "Binary cannot be converted to SQL", - )), - ScalarValue::LargeBinary(_) => Err(VegaFusionError::internal( - "LargeBinary cannot be converted to SQL", - )), - ScalarValue::FixedSizeBinary(_, _) => Err(VegaFusionError::internal( - "FixedSizeBinary cannot be converted to SQL", - )), - ScalarValue::List(array) => { - let function_ident = Ident { - value: "make_list".to_string(), - quote_style: None, - }; - let args = array - .value(0) - .to_scalar_vec()? - .into_iter() - .map(|v| { - let sql_expr = v.to_sql(dialect)?; - Ok(SqlFunctionArg::Unnamed(FunctionArgExpr::Expr(sql_expr))) - }) - .collect::>>()?; - - Ok(SqlExpr::Function(SqlFunction { - name: SqlObjectName(vec![function_ident]), - args: FunctionArguments::List(FunctionArgumentList { - args, - duplicate_treatment: None, - clauses: vec![], - }), - filter: None, - null_treatment: None, - over: None, - within_group: vec![], - parameters: FunctionArguments::None, - })) - } - ScalarValue::Date32(v) => date32_to_date(v, dialect), - ScalarValue::Date64(_) => Err(VegaFusionError::internal( - "Date64 cannot be converted to SQL", - )), - ScalarValue::TimestampSecond(v, _) => { - if let Some(v) = v { - Ok(ms_to_timestamp(v * 1000, dialect)?) - } else { - Ok(SqlExpr::Value(SqlValue::Null)) - } - } - ScalarValue::TimestampMillisecond(v, _) => { - if let Some(v) = v { - Ok(ms_to_timestamp(*v, dialect)?) - } else { - Ok(SqlExpr::Value(SqlValue::Null)) - } - } - ScalarValue::TimestampMicrosecond(v, _) => { - if let Some(v) = v { - Ok(ms_to_timestamp(v / 1000, dialect)?) - } else { - Ok(SqlExpr::Value(SqlValue::Null)) - } - } - ScalarValue::TimestampNanosecond(v, _) => { - if let Some(v) = v { - Ok(ms_to_timestamp(v / 1000000, dialect)?) - } else { - Ok(SqlExpr::Value(SqlValue::Null)) - } - } - ScalarValue::IntervalYearMonth(_) => Err(VegaFusionError::internal( - "IntervalYearMonth cannot be converted to SQL", - )), - ScalarValue::IntervalDayTime(_) => Err(VegaFusionError::internal( - "IntervalDayTime cannot be converted to SQL", - )), - ScalarValue::IntervalMonthDayNano(_) => Err(VegaFusionError::internal( - "IntervalMonthDayNano cannot be converted to SQL", - )), - ScalarValue::Struct(_) => Err(VegaFusionError::internal( - "Struct cannot be converted to SQL", - )), - ScalarValue::Dictionary(_, _) => Err(VegaFusionError::internal( - "Dictionary cannot be converted to SQL", - )), - ScalarValue::Decimal128(_, _, _) => Err(VegaFusionError::internal( - "Decimal128 cannot be converted to SQL", - )), - ScalarValue::Decimal256(_, _, _) => Err(VegaFusionError::internal( - "Decimal256 cannot be converted to SQL", - )), - ScalarValue::Time32Second(_) => Err(VegaFusionError::internal( - "Time32Second cannot be converted to SQL", - )), - ScalarValue::Time32Millisecond(_) => Err(VegaFusionError::internal( - "Time32Millisecond cannot be converted to SQL", - )), - ScalarValue::Time64Microsecond(_) => Err(VegaFusionError::internal( - "Time64Microsecond cannot be converted to SQL", - )), - ScalarValue::Time64Nanosecond(_) => Err(VegaFusionError::internal( - "Time64Nanosecond cannot be converted to SQL", - )), - ScalarValue::DurationSecond(_) => Err(VegaFusionError::internal( - "DurationSecond cannot be converted to SQL", - )), - ScalarValue::DurationMillisecond(_) => Err(VegaFusionError::internal( - "DurationMillisecond cannot be converted to SQL", - )), - ScalarValue::DurationMicrosecond(_) => Err(VegaFusionError::internal( - "DurationMicrosecond cannot be converted to SQL", - )), - ScalarValue::DurationNanosecond(_) => Err(VegaFusionError::internal( - "DurationNanosecond cannot be converted to SQL", - )), - ScalarValue::FixedSizeList(_) => Err(VegaFusionError::internal( - "FixedSizeList cannot be converted to SQL", - )), - ScalarValue::LargeList(_) => Err(VegaFusionError::internal( - "LargeList cannot be converted to SQL", - )), - ScalarValue::Union(_, _, _) => Err(VegaFusionError::internal( - "Union cannot be converted to SQL", - )), - ScalarValue::Utf8View(_) => Err(VegaFusionError::internal( - "Utf8View cannot be converted to SQL", - )), - ScalarValue::BinaryView(_) => Err(VegaFusionError::internal( - "BinaryView cannot be converted to SQL", - )), - ScalarValue::Map(_) => Err(VegaFusionError::internal( - "BinaryView cannot be converted to SQL", - )), - } - } -} - -fn ms_to_timestamp(v: i64, dialect: &Dialect) -> Result { - // Hack to recursively transform the epoch_ms_to_utc_timestamp - Expr::ScalarFunction(expr::ScalarFunction { - func: Arc::new(ScalarUDF::from(EpochMsToUtcTimestampUDF::new())), - args: vec![lit(v)], - }) - .to_sql(dialect, &DFSchema::empty()) -} - -// Hack to recursively transform the epoch_ms_to_utc_timestamp -#[derive(Debug, Clone)] -pub struct EpochMsToUtcTimestampUDF { - signature: Signature, -} - -impl Default for EpochMsToUtcTimestampUDF { - fn default() -> Self { - Self::new() - } -} - -impl EpochMsToUtcTimestampUDF { - pub fn new() -> Self { - let signature: Signature = Signature::exact(vec![DataType::Int64], Volatility::Immutable); - Self { signature } - } -} - -impl ScalarUDFImpl for EpochMsToUtcTimestampUDF { - fn as_any(&self) -> &dyn Any { - self - } - - fn name(&self) -> &str { - "epoch_ms_to_utc_timestamp" - } - - fn signature(&self) -> &Signature { - &self.signature - } - - fn return_type(&self, _arg_types: &[DataType]) -> datafusion_common::Result { - Ok(DataType::Timestamp(TimeUnit::Millisecond, None)) - } - - fn invoke(&self, _args: &[ColumnarValue]) -> datafusion_common::Result { - panic!("Placeholder UDF implementation should not be called") - } -} - -fn date32_to_date(days: &Option, dialect: &Dialect) -> Result { - let epoch = chrono::NaiveDate::from_ymd_opt(1970, 1, 1).unwrap(); - match days { - None => Ok(SqlExpr::Cast { - expr: Box::new(ScalarValue::Utf8(None).to_sql(dialect)?), - data_type: DataType::Date32.to_sql(dialect)?, - format: None, - kind: CastKind::Cast, - }), - Some(days) => { - let date = epoch.add(chrono::Duration::days(*days as i64)); - let date_str = date.format("%F").to_string(); - Ok(SqlExpr::Cast { - expr: Box::new(ScalarValue::from(date_str.as_str()).to_sql(dialect)?), - data_type: DataType::Date32.to_sql(dialect)?, - format: None, - kind: CastKind::Cast, - }) - } - } -} diff --git a/vegafusion-sql/src/compile/select.rs b/vegafusion-sql/src/compile/select.rs deleted file mode 100644 index 1a640a9ed..000000000 --- a/vegafusion-sql/src/compile/select.rs +++ /dev/null @@ -1,89 +0,0 @@ -use crate::compile::expr::ToSqlExpr; -use crate::dialect::Dialect; -use datafusion_common::DFSchema; -use datafusion_expr::{expr, Expr}; -use sqlparser::ast::{Ident, ObjectName, SelectItem as SqlSelectItem}; -use vegafusion_common::error::Result; - -pub trait ToSqlSelectItem { - fn to_sql_select(&self, dialect: &Dialect, schema: &DFSchema) -> Result; -} - -impl ToSqlSelectItem for Expr { - fn to_sql_select(&self, dialect: &Dialect, schema: &DFSchema) -> Result { - Ok(match self { - Expr::Alias(expr::Alias { - expr, name: alias, .. - }) => SqlSelectItem::ExprWithAlias { - expr: expr.to_sql(dialect, schema)?, - alias: Ident { - value: alias.clone(), - quote_style: Some(dialect.quote_style), - }, - }, - Expr::Wildcard { - qualifier: None, - options: _, - } => SqlSelectItem::Wildcard(Default::default()), - Expr::Wildcard { - qualifier: Some(qualifier), - options: _, - } => SqlSelectItem::QualifiedWildcard( - ObjectName(vec![Ident { - value: qualifier.to_string(), - quote_style: Some(dialect.quote_style), - }]), - Default::default(), - ), - expr => SqlSelectItem::UnnamedExpr(expr.to_sql(dialect, schema)?), - }) - } -} - -#[cfg(test)] -mod tests { - use crate::compile::select::ToSqlSelectItem; - use crate::dialect::Dialect; - use datafusion_common::DFSchema; - use datafusion_expr::expr::WildcardOptions; - use datafusion_expr::{lit, Expr}; - use std::ops::Add; - use vegafusion_common::column::flat_col; - - fn schema() -> DFSchema { - DFSchema::empty() - } - - #[test] - pub fn test_select_wildcard() { - let expr = Expr::Wildcard { - qualifier: None, - options: WildcardOptions::default(), - }; - let sql_expr = expr - .to_sql_select(&Dialect::datafusion(), &schema()) - .unwrap(); - let sql_str = sql_expr.to_string(); - assert_eq!(sql_str, "*"); - } - - #[test] - pub fn test_select_unnamed_expr() { - let expr = flat_col("a").add(lit(23)); - let sql_expr = expr - .to_sql_select(&Dialect::datafusion(), &schema()) - .unwrap(); - let sql_str = sql_expr.to_string(); - assert_eq!(sql_str, "(\"a\" + 23)"); - } - - #[test] - pub fn test_select_aliased_expr() { - let expr = flat_col("a").add(lit(23)).alias("foo"); - let sql_expr = expr - .to_sql_select(&Dialect::datafusion(), &schema()) - .unwrap(); - let sql_str = sql_expr.to_string(); - assert_eq!(sql_str, "(\"a\" + 23) AS \"foo\""); - } -} diff --git a/vegafusion-sql/src/connection/datafusion_conn.rs b/vegafusion-sql/src/connection/datafusion_conn.rs deleted file mode 100644 index 97c05b2dc..000000000 --- a/vegafusion-sql/src/connection/datafusion_conn.rs +++ /dev/null @@ -1,504 +0,0 @@ -use crate::connection::SqlConnection; -use crate::dataframe::SqlDataFrame; -use crate::dialect::Dialect; -use arrow::datatypes::{DataType, Field, Schema, SchemaRef}; -use arrow::ipc::reader::{FileReader, StreamReader}; -use arrow::record_batch::RecordBatch; -use datafusion::config::TableOptions; -use datafusion::datasource::listing::ListingTableUrl; -use datafusion::datasource::MemTable; -use datafusion::execution::options::{ArrowReadOptions, ReadOptions}; -use datafusion::execution::runtime_env::RuntimeEnv; -use datafusion::execution::session_state::SessionStateBuilder; -use datafusion::prelude::{ - CsvReadOptions as DfCsvReadOptions, ParquetReadOptions, SessionConfig, SessionContext, -}; -use datafusion_expr::ScalarUDF; -use log::Level; -use object_store::aws::AmazonS3Builder; -use reqwest_middleware::{ClientBuilder, ClientWithMiddleware}; -use reqwest_retry::policies::ExponentialBackoff; -use reqwest_retry::RetryTransientMiddleware; -use std::collections::HashMap; -use std::fs::File; -use std::io::Write; -use std::path::Path; -use std::sync::Arc; -use url::Url; -use vegafusion_common::column::flat_col; -use vegafusion_common::data::table::VegaFusionTable; -use vegafusion_common::datatypes::cast_to; -use vegafusion_common::error::{Result, ResultWithContext, ToExternalError, VegaFusionError}; -use vegafusion_dataframe::connection::Connection; -use vegafusion_dataframe::csv::CsvReadOptions; -use vegafusion_dataframe::dataframe::DataFrame; -use vegafusion_datafusion_udfs::udafs::{Q1_UDF, Q3_UDF}; -use vegafusion_datafusion_udfs::udfs::array::indexof::IndexOfUDF; -use vegafusion_datafusion_udfs::udfs::datetime::date_part_tz::DATE_PART_TZ_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::date_to_utc_timestamp::DATE_TO_UTC_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::epoch_to_utc_timestamp::EPOCH_MS_TO_UTC_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::format_timestamp::FORMAT_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::from_utc_timestamp::FROM_UTC_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::make_utc_timestamp::MAKE_UTC_TIMESTAMP; -use vegafusion_datafusion_udfs::udfs::datetime::str_to_utc_timestamp::STR_TO_UTC_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::timeunit::TIMEUNIT_START_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::to_utc_timestamp::TO_UTC_TIMESTAMP_UDF; -use vegafusion_datafusion_udfs::udfs::datetime::utc_timestamp_to_epoch::UTC_TIMESTAMP_TO_EPOCH_MS; -use vegafusion_datafusion_udfs::udfs::datetime::utc_timestamp_to_str::UTC_TIMESTAMP_TO_STR_UDF; -use vegafusion_datafusion_udfs::udfs::math::isfinite::IsFiniteUDF; - -#[derive(Clone)] -pub struct DataFusionConnection { - dialect: Arc, - ctx: Arc, -} - -impl DataFusionConnection { - pub fn new(ctx: Arc) -> Self { - Self { - dialect: Arc::new(make_datafusion_dialect()), - ctx, - } - } - - fn create_s3_datafusion_session_context( - url: &str, - bucket_path: &str, - ) -> Result { - let s3 = AmazonS3Builder::from_env().with_url(url).build().with_context(|| - "Failed to initialize s3 connection from environment variables.\n\ - See https://docs.rs/object_store/latest/object_store/aws/struct.AmazonS3Builder.html#method.from_env".to_string() - )?; - let Some((bucket, _)) = bucket_path.split_once('/') else { - return Err(VegaFusionError::specification(format!( - "Invalid s3 URL: {url}" - ))); - }; - let base_url = Url::parse(&format!("s3://{bucket}/")).expect("Should be valid URL"); - let ctx = make_datafusion_context(); - ctx.runtime_env() - .register_object_store(&base_url, Arc::new(s3)); - Ok(ctx) - } - - fn get_parquet_opts(url: &str) -> ParquetReadOptions { - let mut opts = ParquetReadOptions::default(); - let path = Path::new(url); - if let Some(ext) = path.extension().and_then(|ext| ext.to_str()) { - opts.file_extension = ext; - } else { - opts.file_extension = ""; - } - opts - } -} - -impl Default for DataFusionConnection { - fn default() -> Self { - DataFusionConnection::new(Arc::new(make_datafusion_context())) - } -} - -pub fn make_datafusion_dialect() -> Dialect { - Dialect::datafusion() -} - -#[async_trait::async_trait] -impl Connection for DataFusionConnection { - fn id(&self) -> String { - "datafusion".to_string() - } - - async fn tables(&self) -> Result> { - let catalog_names = self.ctx.catalog_names(); - let first_catalog_name = catalog_names.first().unwrap(); - let catalog = self.ctx.catalog(first_catalog_name).unwrap(); - - let schema_provider_names = catalog.schema_names(); - let first_schema_provider_name = schema_provider_names.first().unwrap(); - let schema_provider = catalog.schema(first_schema_provider_name).unwrap(); - - let mut tables: HashMap = HashMap::new(); - for table_name in schema_provider.table_names() { - let schema = schema_provider - .table(&table_name) - .await? - .with_context(|| format!("Failed to get table {table_name}"))? - .schema(); - tables.insert(table_name, schema.as_ref().clone()); - } - Ok(tables) - } - - async fn scan_table(&self, name: &str) -> Result> { - Ok(Arc::new( - SqlDataFrame::try_new(Arc::new(self.clone()), name, Default::default()).await?, - )) - } - - async fn scan_arrow(&self, table: VegaFusionTable) -> Result> { - // Get batch schema - let batch_schema = if table.batches.is_empty() { - None - } else { - Some(table.batches.first().unwrap().schema()) - }; - - // Create memtable - let mem_table = MemTable::try_new( - batch_schema.clone().unwrap_or_else(|| table.schema.clone()), - vec![table.batches.clone()], - ) - .with_context(|| { - format!( - "memtable failure with schema {:#?} and batch schema {:#?}", - table.schema, batch_schema - ) - })?; - - // Create a fresh context because we don't want to override tables in self.ctx - let ctx = make_datafusion_context(); - - // Register memtable with context - ctx.register_table("tbl", Arc::new(mem_table))?; - let sql_conn = DataFusionConnection::new(Arc::new(ctx)); - Ok(Arc::new( - SqlDataFrame::try_new(Arc::new(sql_conn), "tbl", Default::default()).await?, - )) - } - - async fn scan_csv(&self, url: &str, opts: CsvReadOptions) -> Result> { - // Build DataFusion's CsvReadOptions - let mut df_csv_opts = DfCsvReadOptions { - has_header: opts.has_header, - delimiter: opts.delimiter, - file_extension: opts.file_extension.as_str(), - ..DfCsvReadOptions::default() - }; - df_csv_opts.schema = opts.schema.as_ref(); - - if url.starts_with("http://") || url.starts_with("https://") { - // Perform get request to collect file contents as text - let body = make_request_client() - .get(url) - .send() - .await - .external(&format!("Failed to get URL data from {url}"))? - .text() - .await - .external("Failed to convert URL data to text")?; - - // Write contents to temp csv file - let tempdir = tempfile::TempDir::new().unwrap(); - let filename = format!("file.{}", df_csv_opts.file_extension); - let filepath = tempdir.path().join(filename).to_str().unwrap().to_string(); - - { - let mut file = File::create(filepath.clone()).unwrap(); - writeln!(file, "{body}").unwrap(); - } - - // Build final csv schema that combines the requested and inferred schemas - let final_schema = build_csv_schema(&df_csv_opts, &filepath, &self.ctx).await?; - df_csv_opts = df_csv_opts.schema(&final_schema); - - // Load through VegaFusionTable so that temp file can be deleted - let df = self.ctx.read_csv(&filepath, df_csv_opts).await?; - - let schema: SchemaRef = Arc::new(df.schema().into()) as SchemaRef; - let batches = df.collect().await?; - let table = VegaFusionTable::try_new(schema, batches)?; - - let table = table.with_ordering()?; - self.scan_arrow(table).await - } else if let Some(bucket_path) = url.strip_prefix("s3://") { - let s3 = AmazonS3Builder::from_env().with_url(url).build().with_context(|| - "Failed to initialize s3 connection from environment variables.\n\ - See https://docs.rs/object_store/latest/object_store/aws/struct.AmazonS3Builder.html#method.from_env".to_string() - )?; - let Some((bucket, _)) = bucket_path.split_once('/') else { - return Err(VegaFusionError::specification(format!( - "Invalid s3 URL: {url}" - ))); - }; - let base_url = Url::parse(&format!("s3://{bucket}/")).expect("Should be valid URL"); - let ctx = make_datafusion_context(); - ctx.runtime_env() - .register_object_store(&base_url, Arc::new(s3)); - - let final_schema = build_csv_schema(&df_csv_opts, url, &ctx).await?; - df_csv_opts = df_csv_opts.schema(&final_schema); - - ctx.register_csv("csv_tbl", url, df_csv_opts).await?; - let sql_conn = DataFusionConnection::new(Arc::new(ctx)); - Ok(Arc::new( - SqlDataFrame::try_new(Arc::new(sql_conn), "csv_tbl", Default::default()).await?, - )) - } else { - // Build final csv schema that combines the requested and inferred schemas - let final_schema = build_csv_schema(&df_csv_opts, url, &self.ctx).await?; - df_csv_opts = df_csv_opts.schema(&final_schema); - - let df = self.ctx.read_csv(url, df_csv_opts).await?; - let schema: SchemaRef = Arc::new(df.schema().into()) as SchemaRef; - let batches = df.collect().await?; - let table = VegaFusionTable::try_new(schema, batches)?; - let table = table.with_ordering()?; - self.scan_arrow(table).await - } - } - - async fn scan_arrow_file(&self, url: &str) -> Result> { - if url.starts_with("http://") || url.starts_with("https://") { - // Perform get request to collect file contents as text - let buffer = make_request_client() - .get(url) - .send() - .await - .external(&format!("Failed to get URL data from {url}"))? - .bytes() - .await - .external("Failed to convert URL data to text")?; - - let reader = std::io::Cursor::new(buffer); - - // Try parsing file as both File and IPC formats - let (schema, batches) = - if let Ok(arrow_reader) = FileReader::try_new(reader.clone(), None) { - let schema = arrow_reader.schema(); - let mut batches: Vec = Vec::new(); - for v in arrow_reader { - batches.push(v.with_context(|| "Failed to read arrow batch".to_string())?); - } - (schema, batches) - } else if let Ok(arrow_reader) = StreamReader::try_new(reader.clone(), None) { - let schema = arrow_reader.schema(); - let mut batches: Vec = Vec::new(); - for v in arrow_reader { - batches.push(v.with_context(|| "Failed to read arrow batch".to_string())?); - } - (schema, batches) - } else { - return Err(VegaFusionError::parse(format!( - "Failed to read arrow file at {url}" - ))); - }; - - let table = VegaFusionTable::try_new(schema, batches)?.with_ordering()?; - self.scan_arrow(table).await - } else if let Some(bucket_path) = url.strip_prefix("s3://") { - let ctx = Self::create_s3_datafusion_session_context(url, bucket_path)?; - - let mut opts = ArrowReadOptions::default(); - let path = Path::new(url); - if let Some(ext) = path.extension().and_then(|ext| ext.to_str()) { - opts.file_extension = ext; - } else { - opts.file_extension = ""; - } - - ctx.register_arrow("arrow_tbl", url, opts).await?; - let sql_conn = DataFusionConnection::new(Arc::new(ctx)); - Ok(Arc::new( - SqlDataFrame::try_new(Arc::new(sql_conn), "arrow_tbl", Default::default()).await?, - )) - } else { - // Assume local file - let path = Path::new(url); - let ctx = make_datafusion_context(); - let mut opts = ArrowReadOptions::default(); - if let Some(ext) = path.extension().and_then(|ext| ext.to_str()) { - opts.file_extension = ext; - } else { - opts.file_extension = ""; - } - - ctx.register_arrow("arrow_tbl", url, opts).await?; - let sql_conn = DataFusionConnection::new(Arc::new(ctx)); - Ok(Arc::new( - SqlDataFrame::try_new(Arc::new(sql_conn), "arrow_tbl", Default::default()).await?, - )) - } - } - - async fn scan_parquet(&self, url: &str) -> Result> { - if url.starts_with("http://") || url.starts_with("https://") { - Err(VegaFusionError::internal( - "The DataFusion connection does not yet support loading parquet files over http or https.\n\ - Loading parquet files from the local filesystem and from s3 is supported." - )) - } else if let Some(bucket_path) = url.strip_prefix("s3://") { - let ctx = Self::create_s3_datafusion_session_context(url, bucket_path)?; - - let opts = Self::get_parquet_opts(url); - - ctx.register_parquet("parquet_tbl", url, opts).await?; - let sql_conn = DataFusionConnection::new(Arc::new(ctx)); - Ok(Arc::new( - SqlDataFrame::try_new(Arc::new(sql_conn), "parquet_tbl", Default::default()) - .await?, - )) - } else { - // Assume local file - let ctx = make_datafusion_context(); - let opts = Self::get_parquet_opts(url); - - ctx.register_parquet("parquet_tbl", url, opts).await?; - let sql_conn = DataFusionConnection::new(Arc::new(ctx)); - Ok(Arc::new( - SqlDataFrame::try_new(Arc::new(sql_conn), "parquet_tbl", Default::default()) - .await?, - )) - } - } -} - -#[async_trait::async_trait] -impl SqlConnection for DataFusionConnection { - async fn fetch_query(&self, query: &str, schema: &Schema) -> Result { - info!("{}", query); - let df = self.ctx.sql(query).await?; - - let result_fields: Vec<_> = df - .schema() - .fields() - .iter() - .map(|f| f.as_ref().clone().with_nullable(true)) - .collect(); - let expected_fields: Vec<_> = schema - .fields - .iter() - .map(|f| f.as_ref().clone().with_nullable(true)) - .collect(); - let df = if result_fields == expected_fields { - df - } else { - // Coerce dataframe columns to match expected schema - let selections = expected_fields - .iter() - .map(|f| { - Ok(cast_to(flat_col(f.name()), f.data_type(), df.schema())?.alias(f.name())) - }) - .collect::>>()?; - df.select(selections)? - }; - - let df_schema = Arc::new(df.schema().into()) as SchemaRef; - let batches = df.collect().await?; - let schema = if batches.is_empty() { - df_schema - } else { - // Use actual batch schema in case there's a discrepancy - batches[0].schema() - }; - let res = VegaFusionTable::try_new(schema, batches)?; - - if log_enabled!(Level::Debug) { - debug!("\n{}", res.pretty_format(Some(5)).unwrap()); - debug!("{:?}", res.schema); - } - - Ok(res) - } - - fn dialect(&self) -> &Dialect { - &self.dialect - } - - fn to_connection(&self) -> Arc { - Arc::new(self.clone()) - } -} - -/// Build final schema by combining the input and inferred schemas -async fn build_csv_schema( - csv_opts: &DfCsvReadOptions<'_>, - uri: impl Into, - ctx: &SessionContext, -) -> Result { - let table_path = ListingTableUrl::parse(uri.into().as_str())?; - let listing_options = - csv_opts.to_listing_options(&ctx.copied_config(), TableOptions::default()); - - let inferred_schema = listing_options - .infer_schema(&ctx.state(), &table_path) - .await?; - - // Get HashMap of provided columns formats - let field_types: HashMap<_, _> = if let Some(schema) = csv_opts.schema { - schema - .fields - .iter() - .map(|f| (f.name().clone(), f.data_type().clone())) - .collect() - } else { - // No input schema provided, use inferred schema - return Ok(inferred_schema.as_ref().clone()); - }; - - // Override inferred schema based on parse options - let new_fields: Vec<_> = inferred_schema - .fields() - .iter() - .map(|field| { - // Use provided field type, but fall back to string for unprovided columns - let dtype = field_types - .get(field.name()) - .cloned() - .unwrap_or(DataType::Utf8); - Field::new(field.name(), dtype, true) - }) - .collect(); - Ok(Schema::new(new_fields)) -} - -pub fn make_request_client() -> ClientWithMiddleware { - // Retry up to 3 times with increasing intervals between attempts. - let retry_policy = ExponentialBackoff::builder().build_with_max_retries(3); - ClientBuilder::new(reqwest::Client::new()) - .with(RetryTransientMiddleware::new_with_policy(retry_policy)) - .build() -} - -pub fn make_datafusion_context() -> SessionContext { - let mut config = SessionConfig::new(); - let options = config.options_mut(); - options.optimizer.skip_failed_rules = true; - let runtime = Arc::new(RuntimeEnv::default()); - let session_state = SessionStateBuilder::new() - .with_config(config) - .with_runtime_env(runtime) - .with_default_features() - .build(); - - let ctx = SessionContext::new_with_state(session_state); - - // isFinite - ctx.register_udf(ScalarUDF::from(IsFiniteUDF::new())); - - // datetime - ctx.register_udf((*DATE_PART_TZ_UDF).clone()); - ctx.register_udf((*UTC_TIMESTAMP_TO_STR_UDF).clone()); - ctx.register_udf((*TO_UTC_TIMESTAMP_UDF).clone()); - ctx.register_udf((*FROM_UTC_TIMESTAMP_UDF).clone()); - ctx.register_udf((*DATE_TO_UTC_TIMESTAMP_UDF).clone()); - ctx.register_udf((*EPOCH_MS_TO_UTC_TIMESTAMP_UDF).clone()); - ctx.register_udf((*STR_TO_UTC_TIMESTAMP_UDF).clone()); - ctx.register_udf((*MAKE_UTC_TIMESTAMP).clone()); - ctx.register_udf((*UTC_TIMESTAMP_TO_EPOCH_MS).clone()); - - // timeunit - ctx.register_udf((*TIMEUNIT_START_UDF).clone()); - - // timeformat - ctx.register_udf((*FORMAT_TIMESTAMP_UDF).clone()); - - // list - ctx.register_udf(ScalarUDF::from(IndexOfUDF::new())); - - // q1/q3 aggregate functions - ctx.register_udaf((*Q1_UDF).clone()); - ctx.register_udaf((*Q3_UDF).clone()); - - ctx -} diff --git a/vegafusion-sql/src/connection/mod.rs b/vegafusion-sql/src/connection/mod.rs deleted file mode 100644 index 79913960b..000000000 --- a/vegafusion-sql/src/connection/mod.rs +++ /dev/null @@ -1,60 +0,0 @@ -use crate::dialect::Dialect; -use arrow::datatypes::Schema; -use async_trait::async_trait; -use std::collections::HashMap; -use std::sync::Arc; -use vegafusion_common::data::table::VegaFusionTable; -use vegafusion_common::error::{Result, VegaFusionError}; - -// Use Connection publicly for the convenience of SQL connection implementors -pub use vegafusion_dataframe::connection::Connection; - -#[cfg(feature = "datafusion-conn")] -pub mod datafusion_conn; -#[async_trait] -pub trait SqlConnection: Connection { - async fn fetch_query(&self, query: &str, schema: &Schema) -> Result; - - fn dialect(&self) -> &Dialect; - - fn to_connection(&self) -> Arc; -} - -#[derive(Clone, Debug)] -pub struct DummySqlConnection { - pub dialect: Dialect, -} - -impl DummySqlConnection { - pub fn new(dialect: Dialect) -> Self { - Self { dialect } - } -} - -#[async_trait] -impl Connection for DummySqlConnection { - fn id(&self) -> String { - "dummy".to_string() - } - - async fn tables(&self) -> Result> { - Ok(Default::default()) - } -} - -#[async_trait] -impl SqlConnection for DummySqlConnection { - async fn fetch_query(&self, _query: &str, _schema: &Schema) -> Result { - Err(VegaFusionError::sql_not_supported( - "fetch_query not supported by DummySqlConnection", - )) - } - - fn dialect(&self) -> &Dialect { - &self.dialect - } - - fn to_connection(&self) -> Arc { - Arc::new(self.clone()) - } -} diff --git a/vegafusion-sql/src/dataframe/mod.rs b/vegafusion-sql/src/dataframe/mod.rs deleted file mode 100644 index e6b987b15..000000000 --- a/vegafusion-sql/src/dataframe/mod.rs +++ /dev/null @@ -1,1575 +0,0 @@ -use crate::compile::expr::ToSqlExpr; -use crate::compile::order::ToSqlOrderByExpr; -use crate::compile::select::ToSqlSelectItem; -use crate::connection::SqlConnection; -use crate::dialect::{Dialect, ValuesMode}; -use arrow::datatypes::{DataType, Field, FieldRef, Fields, Schema, SchemaRef}; -use arrow::record_batch::RecordBatch; -use async_trait::async_trait; -use datafusion_common::{Column, DFSchema, ScalarValue, TableReference}; -use datafusion_expr::{ - expr, is_null, lit, when, Expr, ExprSchemable, SortExpr, WindowFrame, WindowFunctionDefinition, -}; -use datafusion_functions::expr_fn::{abs, coalesce}; -use datafusion_functions_window::row_number::RowNumber; - -use datafusion_expr::expr::WildcardOptions; -use datafusion_functions_aggregate::min_max::{max, min}; -use datafusion_functions_aggregate::sum::sum_udaf; -use sqlparser::ast::{ - Cte, Expr as SqlExpr, GroupByExpr, Ident, NullTreatment, OrderBy, Query, Select, SelectItem, - SetExpr, Statement, TableAlias, TableFactor, TableWithJoins, Values, WildcardAdditionalOptions, - With, -}; -use sqlparser::parser::Parser; -use std::any::Any; -use std::collections::hash_map::DefaultHasher; -use std::collections::HashSet; -use std::hash::{Hash, Hasher}; -use std::ops::{Add, Div, Sub}; -use std::sync::Arc; -use vegafusion_common::column::flat_col; -use vegafusion_common::data::table::VegaFusionTable; -use vegafusion_common::datatypes::to_numeric; -use vegafusion_common::error::{Result, ResultWithContext, VegaFusionError}; -use vegafusion_dataframe::connection::Connection; -use vegafusion_dataframe::dataframe::StackMode; - -// Use DataFrame publicly for the convenience of SQL connection implementors -pub use vegafusion_dataframe::{csv::CsvReadOptions, dataframe::DataFrame}; - -/// Helper to call an inner query method (e.g. _sort) and fall back to the next -/// fallback connection if the required SQL is not supported -macro_rules! fallback_operation { - ($self:ident, $method:ident, $_method:ident, $($arg:expr),*) => { - match $self.$_method($($arg.clone()),*).await { - Err(VegaFusionError::SqlNotSupported(_, _)) if !$self.fallback_conns.is_empty() => { - // Required SQL not supported by current connection, try next fallback connection - let mut fallback_conns = $self.fallback_conns.clone(); - let conn = fallback_conns.remove(0); - let table = $self.collect().await?; - let df = conn.scan_arrow(table).await?; - let df = df.as_any().downcast_ref::().unwrap(); - let df = df.with_fallback_conns(fallback_conns); - df.$method($($arg),*).await - } - result => result - } - } -} - -#[derive(Clone)] -pub struct SqlDataFrame { - pub(crate) prefix: String, - pub(crate) schema: SchemaRef, - pub(crate) ctes: Vec, - pub(crate) conn: Arc, - pub(crate) fallback_conns: Vec>, -} - -#[async_trait] -impl DataFrame for SqlDataFrame { - fn as_any(&self) -> &dyn Any { - self as &dyn Any - } - - fn schema(&self) -> Schema { - self.schema.as_ref().clone() - } - - fn connection(&self) -> Arc { - self.conn.to_connection() - } - - fn fingerprint(&self) -> u64 { - let mut hasher = deterministic_hash::DeterministicHasher::new(DefaultHasher::new()); - - // Add connection id in hash - self.conn.id().hash(&mut hasher); - - // Add query to hash - let query_str = self.as_query().to_string(); - query_str.hash(&mut hasher); - - hasher.finish() - } - - async fn collect(&self) -> Result { - let query_string = self.as_query().to_string(); - self.conn - .fetch_query(&query_string, &self.schema) - .await - .and_then(pre_process_column_types) - } - - async fn sort(&self, exprs: Vec, limit: Option) -> Result> { - fallback_operation!(self, sort, _sort, exprs, limit) - } - - async fn select(&self, exprs: Vec) -> Result> { - fallback_operation!(self, select, _select, exprs) - } - - async fn aggregate( - &self, - group_exprs: Vec, - aggr_exprs: Vec, - ) -> Result> { - fallback_operation!(self, aggregate, _aggregate, group_exprs, aggr_exprs) - } - - async fn joinaggregate( - &self, - group_expr: Vec, - aggr_expr: Vec, - ) -> Result> { - fallback_operation!(self, joinaggregate, _joinaggregate, group_expr, aggr_expr) - } - - async fn filter(&self, predicate: Expr) -> Result> { - fallback_operation!(self, filter, _filter, predicate) - } - - async fn limit(&self, limit: i32) -> Result> { - fallback_operation!(self, limit, _limit, limit) - } - - async fn fold( - &self, - fields: &[String], - value_col: &str, - key_col: &str, - order_field: Option<&str>, - ) -> Result> { - fallback_operation!(self, fold, _fold, fields, value_col, key_col, order_field) - } - - async fn stack( - &self, - field: &str, - orderby: Vec, - groupby: &[String], - start_field: &str, - stop_field: &str, - mode: StackMode, - ) -> Result> { - fallback_operation!( - self, - stack, - _stack, - field, - orderby, - groupby, - start_field, - stop_field, - mode - ) - } - - async fn impute( - &self, - field: &str, - value: ScalarValue, - key: &str, - groupby: &[String], - order_field: Option<&str>, - ) -> Result> { - fallback_operation!( - self, - impute, - _impute, - field, - value, - key, - groupby, - order_field - ) - } -} - -impl SqlDataFrame { - pub async fn try_new( - conn: Arc, - table: &str, - fallback_conns: Vec>, - ) -> Result { - let tables = conn.tables().await?; - let schema = tables - .get(table) - .cloned() - .with_context(|| format!("Connection has no table named {table}"))?; - - let columns: Vec<_> = schema - .fields() - .iter() - .map(|f| { - flat_col(f.name()) - .to_sql(conn.dialect(), &DFSchema::empty()) - .unwrap() - .to_string() - }) - .collect(); - let select_items = columns.join(", "); - - // Replace special characters with underscores - let mut clean_table = table.to_string(); - for c in &['"', '\'', '.', '-'] { - clean_table = clean_table.replace(*c, "_"); - } - - let quote_style = conn.dialect().quote_style; - let table_ident = if !table.starts_with(quote_style) { - // Quote table - Ident::with_quote(conn.dialect().quote_style, table).to_string() - } else { - // If table name starts with the quote character, assume already quoted - table.to_string() - }; - - let query = parse_sql_query( - &format!("select {select_items} from {table_ident}"), - conn.dialect(), - )?; - - Ok(Self { - prefix: format!("{clean_table}_"), - ctes: vec![query], - schema: Arc::new(schema), - conn, - fallback_conns, - }) - } - - fn with_fallback_conns( - &self, - fallback_conns: Vec>, - ) -> Arc { - let mut df = self.clone(); - df.fallback_conns = fallback_conns; - Arc::new(df) - } - - pub fn from_values( - values: &VegaFusionTable, - conn: Arc, - fallback_conns: Vec>, - ) -> Result> { - let dialect = conn.dialect(); - let batch = values.to_record_batch()?; - let schema = batch.schema(); - let schema_df = DFSchema::try_from(schema.as_ref().clone())?; - - let query = match &dialect.values_mode { - ValuesMode::SelectUnion => { - // Build query like - // SELECT 1 as a, 2 as b UNION ALL SELECT 3 as a, 4 as b; - let mut expr_selects: Vec