From 5be0842573486f2d27177081c36070d1e2feaeeb Mon Sep 17 00:00:00 2001 From: Matt Jaquiery Date: Fri, 24 Feb 2023 09:23:15 +0000 Subject: [PATCH 1/7] Backend/django (#45) Major update. ## Key features: - Moved backend over from Flask to Django - Streamlines database interaction - Provides a more reliable framework for code - Converted frontend to TypeScript - More robust code - Separated Harvester code from backend code - Harvesters now rely on API endpoints rather than direct database writes - Updated documentation throughout ## Missing features (todo): #39 - Frontend tests - Cleaning out old frontend files #40 - Entity creation logic should be handled by Django Serializers rather than Views - Harvester ENV stuff no longer handled - Mostly matters for being able to specify a base path; could be done in config/Harvester view - Updated Entity Relationship Diagram #38 - Python API client code - Should be automatically generated via swagger codegen API/docker container, perhaps on demand? #41 - Migration from old database #42 - API token management (including long-term tokens for scripts) - User management (reset password, update email?) #43 - Profiling important things - Data upload - Data download --- .env | 39 - .github/workflows/unit-test.yml | 38 +- .gitignore | 10 +- README.md | 114 +- backend/Dockerfile | 25 +- backend/Dockerfile-test | 20 + backend/README.md | 1 - backend/app.py | 5 - .../util => backend_django}/__init__.py | 0 backend/backend_django/config/__init__.py | 1 + backend/backend_django/config/asgi.py | 16 + backend/backend_django/config/settings.py | 173 + backend/backend_django/config/urls.py | 53 + backend/backend_django/config/wsgi.py | 16 + .../galvanalyser}/__init__.py | 0 backend/backend_django/galvanalyser/admin.py | 3 + backend/backend_django/galvanalyser/apps.py | 6 + backend/backend_django/galvanalyser/auth.py | 23 + .../galvanalyser/fixtures/DataColumnType.json | 121 + .../galvanalyser/fixtures/DataUnit.json | 112 + .../galvanalyser/management/__init__.py | 0 .../management/commands/__init__.py | 0 .../management/commands/create_superuser.py | 34 + .../management/commands/init_db.py | 23 + .../galvanalyser/migrations/0001_initial.py | 205 + .../galvanalyser/migrations/__init__.py | 0 backend/backend_django/galvanalyser/models.py | 228 + .../backend_django/galvanalyser/pagination.py | 17 + backend/backend_django/galvanalyser/schema.py | 22 + .../galvanalyser/serializers.py | 382 + .../galvanalyser/tests/__init__.py | 0 .../galvanalyser/tests/factories.py | 133 + .../galvanalyser/tests/test_view_cells.py | 57 + .../galvanalyser/tests/test_view_datasets.py | 37 + .../galvanalyser/tests/test_view_equipment.py | 34 + .../galvanalyser/tests/test_view_files.py | 49 + .../galvanalyser/tests/test_view_harvester.py | 231 + .../galvanalyser/tests/test_view_path.py | 90 + .../galvanalyser/utils.py} | 0 backend/backend_django/galvanalyser/views.py | 815 + backend/backend_django/manage.py | 22 + backend/db.sqlite3 | Bin 0 -> 131072 bytes backend/galvanalyser/__init__.py | 206 - backend/galvanalyser/database/__init__.py | 249 - .../database/cell_data/__init__.py | 3 - .../galvanalyser/database/cell_data/cell.py | 39 - .../database/cell_data/cell_row.py | 213 - .../database/cell_data/manufacturer_row.py | 109 - .../database/experiment/__init__.py | 21 - .../database/experiment/access_row.py | 63 - .../database/experiment/column.py | 41 - .../database/experiment/column_row.py | 92 - .../database/experiment/column_type.py | 29 - .../database/experiment/dataset.py | 106 - .../database/experiment/dataset_row.py | 377 - .../database/experiment/equipment.py | 21 - .../database/experiment/equipment_row.py | 136 - .../database/experiment/institution_row.py | 90 - .../database/experiment/metadata_row.py | 138 - .../database/experiment/range_label.py | 28 - .../database/experiment/range_label_row.py | 137 - .../database/experiment/timeseries_data.py | 28 - .../experiment/timeseries_data_column.py | 155 - .../experiment/timeseries_data_row.py | 194 - .../galvanalyser/database/experiment/unit.py | 104 - .../database/harvester/__init__.py | 9 - .../database/harvester/harvester.py | 41 - .../database/harvester/harvester_row.py | 146 - .../database/harvester/monitored_path.py | 40 - .../database/harvester/monitored_path_row.py | 181 - .../database/harvester/observed_file.py | 25 - .../database/harvester/observed_file_row.py | 242 - backend/galvanalyser/database/row.py | 15 - backend/galvanalyser/database/setup.pgsql | 557 - .../database/user_data/__init__.py | 2 - .../database/user_data/user_and_group.py | 74 - .../database/user_data/user_row.py | 177 - backend/galvanalyser/harvester/__init__.py | 1 - backend/galvanalyser/harvester/harvester.py | 395 - backend/galvanalyser/routes.py | 705 - backend/index.html | 1 - backend/manage.py | 215 - backend/requirements-test.txt | 2 + backend/requirements.txt | 8 + backend/server.sh | 40 +- backend/setup.py | 38 - backend/test/test_biologic.py | 25 - backend/test/test_case.py | 69 - backend/test/test_cell_row.py | 22 - backend/test/test_dataset_row.py | 111 - backend/test/test_harvester.py | 108 - backend/test/test_input_file.py | 96 - backend/test/test_ivium.py | 28 - backend/test/test_maccor.py | 39 - backend/test/test_user_group.py | 46 - backend/worker.sh | 11 - docker-compose.dev.yml | 88 +- docker-compose.harvester.yml | 14 + docker-compose.test.yml | 45 + docker-compose.yml | 49 +- docs/AdministrationGuide.md | 55 - docs/DevelopmentGuide.md | 171 +- docs/FirstTimeQuickSetup.md | 144 +- docs/GalvanalyserStructure.PNG | Bin 57001 -> 434227 bytes docs/GalvanalyserStructure.pptx | Bin 52360 -> 0 bytes docs/ProjectStructure.md | 19 - docs/UserGuide.md | 222 + frontend/.env | 3 + frontend/index.html | 43 + frontend/package-lock.json | 46801 ---------------- frontend/package.json | 40 +- frontend/src/APIConnection.ts | 252 + frontend/src/ActionButtons.tsx | 87 + frontend/src/ActivateUsers.tsx | 46 + frontend/src/Api.js | 134 +- frontend/src/App.css | 2 +- frontend/src/App.jsx | 22 + frontend/src/App.test.js | 2 + frontend/src/AsyncTable.tsx | 317 + frontend/src/CellList.tsx | 119 + frontend/src/Cells.js | 271 - frontend/src/Cells.tsx | 210 + frontend/src/{App.js => Core.tsx} | 174 +- frontend/src/DatasetChart.js | 182 - frontend/src/DatasetChart.tsx | 245 + frontend/src/DatasetDetail.js | 24 +- frontend/src/Datasets.js | 208 - frontend/src/Datasets.tsx | 330 + frontend/src/Equipment.js | 200 - frontend/src/Equipment.tsx | 95 + frontend/src/Files.js | 90 - frontend/src/Files.tsx | 87 + frontend/src/FormComponents.js | 18 +- frontend/src/GetDatasetMatlab.js | 22 +- frontend/src/GetDatasetPython.js | 74 +- frontend/src/HarvesterDetail.js | 283 - frontend/src/HarvesterDetail.tsx | 123 + frontend/src/Harvesters.js | 265 - frontend/src/Harvesters.tsx | 119 + frontend/src/Login.js | 118 - frontend/src/Login.tsx | 229 + frontend/src/PaginatedTable.tsx | 112 + frontend/src/UseStyles.ts | 59 + frontend/src/UserRoleSet.tsx | 202 + frontend/src/auth/index.js | 5 +- frontend/src/index.css | 5 + frontend/src/index.d.ts | 6 + frontend/src/{index.js => index.jsx} | 13 +- frontend/src/react-app-env.d.ts | 1 + frontend/tsconfig.json | 27 + frontend/yarn.lock | 2768 +- harvester/Dockerfile | 18 + harvester/harvester/__init__.py | 0 harvester/harvester/api.py | 78 + harvester/harvester/harvest.py | 243 + harvester/harvester/parse/__init__.py | 0 .../harvester/parse}/biologic_input_file.py | 49 +- .../harvester/parse/exceptions.py | 16 - .../harvester/parse}/input_file.py | 36 +- .../harvester/parse}/ivium_input_file.py | 25 +- .../harvester/parse}/maccor_input_file.py | 101 +- harvester/harvester/run.py | 96 + harvester/harvester/settings.py | 65 + harvester/requirements.txt | 8 + harvester/start.py | 193 + harvester/test/__init__.py | 0 harvester/test/test_harvester.py | 248 + restructure.png | Bin 0 -> 250128 bytes 168 files changed, 9770 insertions(+), 55849 deletions(-) create mode 100644 backend/Dockerfile-test delete mode 100644 backend/README.md delete mode 100644 backend/app.py rename backend/{galvanalyser/database/util => backend_django}/__init__.py (100%) create mode 100644 backend/backend_django/config/__init__.py create mode 100644 backend/backend_django/config/asgi.py create mode 100644 backend/backend_django/config/settings.py create mode 100644 backend/backend_django/config/urls.py create mode 100644 backend/backend_django/config/wsgi.py rename backend/{test => backend_django/galvanalyser}/__init__.py (100%) create mode 100644 backend/backend_django/galvanalyser/admin.py create mode 100644 backend/backend_django/galvanalyser/apps.py create mode 100644 backend/backend_django/galvanalyser/auth.py create mode 100644 backend/backend_django/galvanalyser/fixtures/DataColumnType.json create mode 100644 backend/backend_django/galvanalyser/fixtures/DataUnit.json create mode 100644 backend/backend_django/galvanalyser/management/__init__.py create mode 100644 backend/backend_django/galvanalyser/management/commands/__init__.py create mode 100644 backend/backend_django/galvanalyser/management/commands/create_superuser.py create mode 100644 backend/backend_django/galvanalyser/management/commands/init_db.py create mode 100644 backend/backend_django/galvanalyser/migrations/0001_initial.py create mode 100644 backend/backend_django/galvanalyser/migrations/__init__.py create mode 100644 backend/backend_django/galvanalyser/models.py create mode 100644 backend/backend_django/galvanalyser/pagination.py create mode 100644 backend/backend_django/galvanalyser/schema.py create mode 100644 backend/backend_django/galvanalyser/serializers.py create mode 100644 backend/backend_django/galvanalyser/tests/__init__.py create mode 100644 backend/backend_django/galvanalyser/tests/factories.py create mode 100644 backend/backend_django/galvanalyser/tests/test_view_cells.py create mode 100644 backend/backend_django/galvanalyser/tests/test_view_datasets.py create mode 100644 backend/backend_django/galvanalyser/tests/test_view_equipment.py create mode 100644 backend/backend_django/galvanalyser/tests/test_view_files.py create mode 100644 backend/backend_django/galvanalyser/tests/test_view_harvester.py create mode 100644 backend/backend_django/galvanalyser/tests/test_view_path.py rename backend/{galvanalyser/database/util/iter_file.py => backend_django/galvanalyser/utils.py} (100%) create mode 100644 backend/backend_django/galvanalyser/views.py create mode 100644 backend/backend_django/manage.py create mode 100644 backend/db.sqlite3 delete mode 100644 backend/galvanalyser/__init__.py delete mode 100644 backend/galvanalyser/database/__init__.py delete mode 100644 backend/galvanalyser/database/cell_data/__init__.py delete mode 100644 backend/galvanalyser/database/cell_data/cell.py delete mode 100644 backend/galvanalyser/database/cell_data/cell_row.py delete mode 100644 backend/galvanalyser/database/cell_data/manufacturer_row.py delete mode 100644 backend/galvanalyser/database/experiment/__init__.py delete mode 100644 backend/galvanalyser/database/experiment/access_row.py delete mode 100644 backend/galvanalyser/database/experiment/column.py delete mode 100644 backend/galvanalyser/database/experiment/column_row.py delete mode 100644 backend/galvanalyser/database/experiment/column_type.py delete mode 100644 backend/galvanalyser/database/experiment/dataset.py delete mode 100644 backend/galvanalyser/database/experiment/dataset_row.py delete mode 100644 backend/galvanalyser/database/experiment/equipment.py delete mode 100644 backend/galvanalyser/database/experiment/equipment_row.py delete mode 100644 backend/galvanalyser/database/experiment/institution_row.py delete mode 100644 backend/galvanalyser/database/experiment/metadata_row.py delete mode 100644 backend/galvanalyser/database/experiment/range_label.py delete mode 100644 backend/galvanalyser/database/experiment/range_label_row.py delete mode 100644 backend/galvanalyser/database/experiment/timeseries_data.py delete mode 100644 backend/galvanalyser/database/experiment/timeseries_data_column.py delete mode 100644 backend/galvanalyser/database/experiment/timeseries_data_row.py delete mode 100644 backend/galvanalyser/database/experiment/unit.py delete mode 100644 backend/galvanalyser/database/harvester/__init__.py delete mode 100644 backend/galvanalyser/database/harvester/harvester.py delete mode 100644 backend/galvanalyser/database/harvester/harvester_row.py delete mode 100644 backend/galvanalyser/database/harvester/monitored_path.py delete mode 100644 backend/galvanalyser/database/harvester/monitored_path_row.py delete mode 100644 backend/galvanalyser/database/harvester/observed_file.py delete mode 100644 backend/galvanalyser/database/harvester/observed_file_row.py delete mode 100644 backend/galvanalyser/database/row.py delete mode 100644 backend/galvanalyser/database/setup.pgsql delete mode 100644 backend/galvanalyser/database/user_data/__init__.py delete mode 100644 backend/galvanalyser/database/user_data/user_and_group.py delete mode 100644 backend/galvanalyser/database/user_data/user_row.py delete mode 100644 backend/galvanalyser/harvester/__init__.py delete mode 100644 backend/galvanalyser/harvester/harvester.py delete mode 100644 backend/galvanalyser/routes.py delete mode 100644 backend/index.html delete mode 100644 backend/manage.py create mode 100644 backend/requirements-test.txt create mode 100644 backend/requirements.txt delete mode 100644 backend/setup.py delete mode 100644 backend/test/test_biologic.py delete mode 100644 backend/test/test_case.py delete mode 100644 backend/test/test_cell_row.py delete mode 100644 backend/test/test_dataset_row.py delete mode 100644 backend/test/test_harvester.py delete mode 100644 backend/test/test_input_file.py delete mode 100644 backend/test/test_ivium.py delete mode 100644 backend/test/test_maccor.py delete mode 100644 backend/test/test_user_group.py delete mode 100755 backend/worker.sh create mode 100644 docker-compose.harvester.yml create mode 100644 docker-compose.test.yml delete mode 100644 docs/AdministrationGuide.md delete mode 100644 docs/GalvanalyserStructure.pptx delete mode 100644 docs/ProjectStructure.md create mode 100644 docs/UserGuide.md create mode 100644 frontend/.env create mode 100644 frontend/index.html delete mode 100644 frontend/package-lock.json create mode 100644 frontend/src/APIConnection.ts create mode 100644 frontend/src/ActionButtons.tsx create mode 100644 frontend/src/ActivateUsers.tsx create mode 100644 frontend/src/App.jsx create mode 100644 frontend/src/AsyncTable.tsx create mode 100644 frontend/src/CellList.tsx delete mode 100644 frontend/src/Cells.js create mode 100644 frontend/src/Cells.tsx rename frontend/src/{App.js => Core.tsx} (63%) delete mode 100644 frontend/src/DatasetChart.js create mode 100644 frontend/src/DatasetChart.tsx delete mode 100644 frontend/src/Datasets.js create mode 100644 frontend/src/Datasets.tsx delete mode 100644 frontend/src/Equipment.js create mode 100644 frontend/src/Equipment.tsx delete mode 100644 frontend/src/Files.js create mode 100644 frontend/src/Files.tsx delete mode 100644 frontend/src/HarvesterDetail.js create mode 100644 frontend/src/HarvesterDetail.tsx delete mode 100644 frontend/src/Harvesters.js create mode 100644 frontend/src/Harvesters.tsx delete mode 100644 frontend/src/Login.js create mode 100644 frontend/src/Login.tsx create mode 100644 frontend/src/PaginatedTable.tsx create mode 100644 frontend/src/UseStyles.ts create mode 100644 frontend/src/UserRoleSet.tsx create mode 100644 frontend/src/index.d.ts rename frontend/src/{index.js => index.jsx} (72%) create mode 100644 frontend/src/react-app-env.d.ts create mode 100644 frontend/tsconfig.json create mode 100644 harvester/Dockerfile create mode 100644 harvester/harvester/__init__.py create mode 100644 harvester/harvester/api.py create mode 100644 harvester/harvester/harvest.py create mode 100644 harvester/harvester/parse/__init__.py rename {backend/galvanalyser/harvester => harvester/harvester/parse}/biologic_input_file.py (70%) rename backend/galvanalyser/database/util/battery_exceptions.py => harvester/harvester/parse/exceptions.py (68%) rename {backend/galvanalyser/database/experiment => harvester/harvester/parse}/input_file.py (83%) rename {backend/galvanalyser/harvester => harvester/harvester/parse}/ivium_input_file.py (94%) rename {backend/galvanalyser/harvester => harvester/harvester/parse}/maccor_input_file.py (91%) create mode 100644 harvester/harvester/run.py create mode 100644 harvester/harvester/settings.py create mode 100644 harvester/requirements.txt create mode 100644 harvester/start.py create mode 100644 harvester/test/__init__.py create mode 100644 harvester/test/test_harvester.py create mode 100644 restructure.png diff --git a/.env b/.env index bc17149a..6596fe8d 100644 --- a/.env +++ b/.env @@ -1,10 +1,3 @@ -# change FLASK_ENV to "production" once galvanalyser is installed and running correctly -FLASK_ENV=development -FLASK_DEBUG=True - -# this password is used for both the galvanalyser and redash databases -POSTGRES_PASSWORD=galvanalyser - # this is the directory that the galvanalyser postgres database will be located GALVANALYSER_DATA_PATH=./.run/data/galvanalyser @@ -12,37 +5,5 @@ GALVANALYSER_DATA_PATH=./.run/data/galvanalyser # running the harvester test suite GALVANALYSER_HARVESTER_TEST_PATH=./.run/test_datafiles -# this is the base directory for the harvesters run by the server (note harvesters can -# also be setup independently from the server if required, see documentation for -# details). New directories added for scanning will be relative to this base directory -GALVANALYSER_HARVESTER_BASE_PATH=./.run/datafiles - -# username and password for default harvester account -HARVESTER_USERNAME=harv -HARVESTER_PASSWORD=harv - -# secret used to encrypt JWT for galvanalyser web app and api -GALVANALYSER_SECRET_KEY=secret_key - -# a non empty value ensures that the python output is sent straight to terminal (e.g. your container log) without being first buffered and that you can see the output of your application (e.g. django logs) in real time -PYTHONUNBUFFERED=1 - -# setup for rabbitmq server, which will be setup with a username = -# RABBITMQ_DEFAULT_USER with a password of RABBITMQ_DEFAULT_PASS -# Make sure that the default user and password match the -# RABBITMQ_URL paramter, which is in the format: -# pyamqp://RABBITMQ_DEFAULT_USER:RABBITMQ_DEFAULT_PASS@rabbitmq:5672 -RABBITMQ_DEFAULT_USER=test-user -RABBITMQ_DEFAULT_PASS=test-user -RABBITMQ_URL=pyamqp://test-user:test-user@rabbitmq:5672 - -# where to put logs for the celery task manager -CELERY_LOG_DIR=./.run/data/celery - -# location for the redis database files -REDIS_DATA_PATH=./.run/data/redis -REDIS_PASSWORD=redis -REDIS_URL=redis://:redis@redis:6379 - # Required to get react running: NODE_OPTIONS=--openssl-legacy-provider \ No newline at end of file diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 4fec7e07..6686465b 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -6,9 +6,16 @@ on: pull_request: branches: - '**' + workflow_dispatch: + inputs: + debug_enabled: + type: boolean + description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' + required: false + default: false jobs: - test: + test-harvester: runs-on: ubuntu-latest env: GALVANALYSER_HARVESTER_TEST_PATH: /home/mrobins/git/tmp/test_datafiles @@ -31,7 +38,32 @@ jobs: sudo smbget -R $LIIONSDEN_SMB_PATH/test-suite-small -U "$LIIONSDEN_SMB_USERNAME%$LIIONSDEN_SMB_PASSWORD" - name: Build the stack - run: docker-compose up --detach --build + run: docker-compose -f docker-compose.test.yml build harvester + + # Enable tmate debugging of manually-triggered workflows if the input option was provided + - name: Setup tmate session + uses: mxschmitt/action-tmate@v3 + if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }} + + - name: Run tests + run: docker-compose -f docker-compose.test.yml up harvester + + test-backend: + runs-on: ubuntu-latest + env: + POSTGRES_PASSWORD: "galvanalyser" + DJANGO_SECRET_KEY: "long-and-insecure-key-12345" + DJANGO_TEST: "TRUE" + steps: + - uses: actions/checkout@v2 + + - name: Build the stack + run: touch .env.secret && docker-compose -f docker-compose.test.yml up -d --build app_test + + # Enable tmate debugging of manually-triggered workflows if the input option was provided + - name: Setup tmate session + uses: mxschmitt/action-tmate@v3 + if: ${{ github.event_name == 'workflow_dispatch' && inputs.debug_enabled }} - name: Run tests - run: docker-compose run --rm app python manage.py test + run: docker-compose -f docker-compose.test.yml run --rm app_test python manage.py test diff --git a/.gitignore b/.gitignore index dba05bd4..4b54d615 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ *.pyc .vscode .venv -config .removed galvanalyser/protobuf galvanalyser/webapp/assets/protobuf @@ -19,3 +18,12 @@ env .test-data/ frontend/src/demo_matlab_code.m + +**/.env.secret +backend/backend_django/django_celery_beat.schedulersDatabaseScheduler + +.harvester/ + +*.pptx + +docker-compose.override.yml \ No newline at end of file diff --git a/README.md b/README.md index c36f56f0..34f51ac4 100644 --- a/README.md +++ b/README.md @@ -1,76 +1,66 @@ - + [![Unit Tests (Docker)](https://github.com/Battery-Intelligence-Lab/galvanalyser/actions/workflows/unit-test.yml/badge.svg)](https://github.com/Battery-Intelligence-Lab/galvanalyser/actions/workflows/unit-test.yml) Galvanalyser is a system for automatically storing data generated by battery cycling -machines in a database, using a set of "harvesters", whose job it is to monitor the -datafiles produced by the battery testers and upload it in a standard format to the -server database. The server database is a relational database that stores each dataset -along with information about column types, units, and other relevant metadata (e.g. cell -information, owner, purpose of the experiment) +machines in a database in a standard format. +The project contains several distinct components: + +- A REST API + - A Python client for the REST API + - A web frontend for the REST API +- [Harvesters](docs/UserGuide.md#harvesters) that monitor and process experimental data + +A laboratory running a [Galvanalyser server](docs/UserGuide.md#galvanalyser-server) instance and a battery +cycling machines can use Galvanalyser to make it easy to access, analyse, and +share their experimental data. +To do this, they: +1. Set the cycling machines up to output their raw test result files to a shared drive. +2. Set up a [harvester](docs/UserGuide.md#harvesters) on a computer with access to that shared drive. + - (This only needs to be done once) +3. Log into their lab [Web frontend](docs/UserGuide.md#web-frontend) and configure the + [harvester](docs/UserGuide.md#harvesters) to crawl the appropriate directories on the shared drive. +4. Log into the [Web frontend](docs/UserGuide.md#web-frontend) to edit metadata and view data, + or use the [Python client](docs/UserGuide.md#python-client) to download formatted data for analysis. + +The harvesters are able to parse the following file types: + +- MACCOR files in .txt, .xsl/.xslx, or raw format +- Ivium files in .idf format +- Biologic files in .mpr format + +The server database is a relational database that stores each dataset along with information +about column types, units, and other relevant metadata (e.g. cell information, owner, purpose +of the experiment). +The [REST API](docs/UserGuide.md#rest-api) provides its own definition via a downloadable OpenAPI schema file +(`schema/`), and provides interactive documentation via SwaggerUI (`schema/swagger-ui/`) and +Redoc (`schema/redoc/`). -There are two user interfaces to the system: -- a web app front-end that can be used to view the stored datasets, manage the - harvesters, and input metadata for each dataset -- a REST API which can be used to download dataset metadata and the data itself. This - API conforms to the [battery-api](https://github.com/martinjrobins/battery-api) - OpenAPI specification, so tools based on this specification (e.g. the Python client) - can use the API. - A diagram of the logical structure of the system is shown below. The arrows indicate the direction of data flow. - +Data flows from battery cycling machines to Galvanalyser Harvesters, then to the Galvanalyser server and REST API. Metadata can be updated and data read using the web client, and data can be downloaded by the Python client. ## Project documentation -The `documentation` directory contains more detailed documentation on a number of topics. It contains the following items: -* [FirstTimeQuickSetup.md](./docs/FirstTimeQuickSetup.md) - A quick start guide to +The `docs` directory contains more detailed documentation on a number of topics. +It contains the following items: +- [FirstTimeQuickSetup.md](docs/FirstTimeQuickSetup.md) - A quick start guide to setting up your first complete Galvanalyser system -* [AdministrationGuide.md](./docs/AdministrationGuide.md) - A guide to performing - administration tasks such as creating users and setting up harvesters -* [DevelopmentGuide.md](./docs/DevelopmentGuide.md) - A guide for developers on + - Installing Galvanalyser server + - Setting up a Harvester + - Checking your setup +- [UserGuide.md](docs/UserGuide.md) - A detailed guide for Galvanalyser users + - [Galvanalyser server](docs/UserGuide.md#galvanalyser-server) + - [REST API](docs/UserGuide.md#rest-api) + - [User accounts](docs/UserGuide.md#user-accounts) + - [Web interface](docs/UserGuide.md#web-interface) + - [Python client](docs/UserGuide.md#python client) + - [Harvesters](docs/UserGuide.md#harvesters) +- [DevelopmentGuide.md](docs/DevelopmentGuide.md) - A guide for developers on Galvanalyser -* [ProjectStructure.md](./docs/ProjectStructure.md) - An overview of the project folder - structure to guide developers to the locations of the various parts of the project - -## Technology used - -This section provides a brief overview of the technology used to implement the different parts of the project. - -### Docker - -Dockerfiles are provided to run all components of this project in containers. A docker-compose file exists to simplify starting the complete server side system including the database, the web app and the Nginx server. All components of the project can be run natively, however using Docker simplifies this greatly. - -A Docker container is also used for building the web app and its dependencies to simplify cross platform deployment and ensure a consistent and reliable build process. - -### Backend server - -The server is a [Flask](flask.palletsprojects.com) web application, which uses -[SQLAlchemy](https://www.sqlalchemy.org/) and [psycopg2](https://www.psycopg.org/) to -interface with the Postgres database. - -### Harvesters - -The harvesters are python modules in the backend server which monitor directories for -tester datafiles, parse them according to the their format and write the data and any -metadata into the Postgres database. The running of the harvesters, either periodically -or manually by a user, is done using a [Celery](https://docs.celeryproject.org/) -distributed task queue. - -### Frontend web application - -The frontend is written using Javascript, the [React](https://reactjs.org/) framework -and using [Material-UI](https://material-ui.com/) components. - - - - -### Database - -The project uses PostgreSQL for its database. Other databases are currently not -supported. An entity relationship diagram is shown below. - - - + - [Creating a testing instance](docs/DevelopmentGuide.md#running) + - [Running tests](docs/DevelopmentGuide.md#testing) + - [Technology used](docs/DevelopmentGuide.md#technology-used) + - [Contributor guide](docs/DevelopmentGuide.md#contributor-guide) diff --git a/backend/Dockerfile b/backend/Dockerfile index 273beffc..632b5a36 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,13 +1,18 @@ -FROM python +FROM python:3.10.4-slim@sha256:a2e8240faa44748fe18c5b37f83e14101a38dd3f4a1425d18e9e0e913f89b562 -RUN mkdir -p /usr/app -WORKDIR /usr/app - -RUN apt-get update && apt-get install -y postgresql-client +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 -COPY . . -RUN pip install -e . +# Install postgresql-client for healthchecking +RUN apt-get update && \ + apt-get install -y \ + postgresql-client \ + build-essential libssl-dev libffi-dev python3-dev python-dev && \ + apt-get autoremove && \ + apt-get autoclean -ENV FLASK_APP=app.py - -EXPOSE 8050 +RUN mkdir -p /usr/app +WORKDIR /usr/app +COPY requirements.txt /requirements.txt +RUN pip install -r /requirements.txt +COPY . /usr/app diff --git a/backend/Dockerfile-test b/backend/Dockerfile-test new file mode 100644 index 00000000..0ecade9f --- /dev/null +++ b/backend/Dockerfile-test @@ -0,0 +1,20 @@ +FROM python:3.10.4-slim@sha256:a2e8240faa44748fe18c5b37f83e14101a38dd3f4a1425d18e9e0e913f89b562 + +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 + +# Install postgresql-client for healthchecking +RUN apt-get update && \ + apt-get install -y \ + postgresql-client \ + build-essential libssl-dev libffi-dev python3-dev python-dev && \ + apt-get autoremove && \ + apt-get autoclean + +RUN mkdir -p /usr/app +WORKDIR /usr/app +COPY requirements.txt /requirements.txt +RUN pip install -r /requirements.txt +COPY requirements-test.txt /requirements-test.txt +RUN pip install -r /requirements-test.txt +COPY . /usr/app diff --git a/backend/README.md b/backend/README.md deleted file mode 100644 index 03aafdbb..00000000 --- a/backend/README.md +++ /dev/null @@ -1 +0,0 @@ -# Galvanalyser backend diff --git a/backend/app.py b/backend/app.py deleted file mode 100644 index ce0a5448..00000000 --- a/backend/app.py +++ /dev/null @@ -1,5 +0,0 @@ -from galvanalyser import app, celery - -if __name__ == "__main__": - print("Launching server") - app.run(host='0.0.0.0', debug=True) diff --git a/backend/galvanalyser/database/util/__init__.py b/backend/backend_django/__init__.py similarity index 100% rename from backend/galvanalyser/database/util/__init__.py rename to backend/backend_django/__init__.py diff --git a/backend/backend_django/config/__init__.py b/backend/backend_django/config/__init__.py new file mode 100644 index 00000000..3998ab91 --- /dev/null +++ b/backend/backend_django/config/__init__.py @@ -0,0 +1 @@ +import galvanalyser.schema diff --git a/backend/backend_django/config/asgi.py b/backend/backend_django/config/asgi.py new file mode 100644 index 00000000..a51dcc25 --- /dev/null +++ b/backend/backend_django/config/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for backend_django project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this path, see +https://docs.djangoproject.com/en/4.1/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') + +application = get_asgi_application() diff --git a/backend/backend_django/config/settings.py b/backend/backend_django/config/settings.py new file mode 100644 index 00000000..4f6fbf99 --- /dev/null +++ b/backend/backend_django/config/settings.py @@ -0,0 +1,173 @@ +""" +Django settings for backend_django project. + +Generated by 'django-admin startproject' using Django 4.1.3. + +For more information on this path, see +https://docs.djangoproject.com/en/4.1/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/4.1/ref/settings/ +""" + +import corsheaders.defaults +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +import os + +API_VERSION = "2.0.0" + +BASE_DIR = Path(__file__).resolve().parent.parent + +SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY') + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/ + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = ['app', 'localhost'] + +CORS_ALLOW_HEADERS = list(corsheaders.defaults.default_headers) + [ + "X-CSRF-TOKEN" +] +CORS_ALLOWED_ORIGINS = ["http://localhost:3000"] +CORS_ALLOW_CREDENTIALS = True +CSRF_TRUSTED_ORIGINS = CORS_ALLOWED_ORIGINS + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + "corsheaders", + 'rest_framework', + 'django_filters', + 'knox', + 'galvanalyser.apps.GalvanalyserConfig', + 'drf_spectacular' +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + "corsheaders.middleware.CorsMiddleware", + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'config.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'config.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/4.1/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql_psycopg2', + 'NAME': 'postgres', + 'HOST': 'postgres', + 'PORT': 5433, + 'USER': 'postgres', + 'PASSWORD': os.environ.get('POSTGRES_PASSWORD'), + 'TEST': {'NAME': f"test_galvanalyser"} + } +} + + +# Password validation +# https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/4.1/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.1/howto/static-files/ + +STATIC_URL = 'static/' + +# Default primary key field type +# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +SESSION_EXPIRE_AT_BROWSER_CLOSE = False + +REST_FRAMEWORK = { + # 'DEFAULT_PAGINATION_CLASS': 'galvanalyser.pagination.Unpaginatable', + # 'PAGE_SIZE': 10, + 'DEFAULT_AUTHENTICATION_CLASSES': [ + 'knox.auth.TokenAuthentication', + 'rest_framework.authentication.SessionAuthentication', + ], + 'DEFAULT_PERMISSION_CLASSES': [], + 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'], + 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema', +} +REST_KNOX = { + 'SECURE_HASH_ALGORITHM': 'cryptography.hazmat.primitives.hashes.SHA512', + 'USER_SERIALIZER': 'galvanalyser.serializers.UserSerializer', + 'AUTO_REFRESH': True, + 'AUTH_HEADER_PREFIX': 'Bearer' +} +SPECTACULAR_SETTINGS = { + 'TITLE': 'Battery Data API', + 'DESCRIPTION': 'A standard API for accessing battery experiment datasets and metadata', + 'VERSION': API_VERSION, + 'CONTACT': {'email': 'martin.robinson@cs.ox.ac.uk'}, + 'LICENSE': {'name': 'Apache 2.0', 'url': 'https://www.apache.org/licenses/LICENSE-2.0.html'}, + 'SERVE_INCLUDE_SCHEMA': False, + 'PREPROCESSING_HOOKS': [] +} diff --git a/backend/backend_django/config/urls.py b/backend/backend_django/config/urls.py new file mode 100644 index 00000000..8ab38337 --- /dev/null +++ b/backend/backend_django/config/urls.py @@ -0,0 +1,53 @@ +"""backend_django URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/4.1/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import include, path +from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView +from rest_framework import routers +from galvanalyser import views + +router = routers.DefaultRouter() + +router.register(r'harvesters', views.HarvesterViewSet) +router.register(r'harvest_errors', views.HarvestErrorViewSet) +router.register(r'monitored_paths', views.MonitoredPathViewSet) +router.register(r'files', views.ObservedFileViewSet) +router.register(r'datasets', views.DatasetViewSet) +router.register(r'columns', views.DataColumnViewSet) +router.register(r'column_types', views.DataColumnTypeViewSet) +router.register(r'units', views.DataUnitViewSet) +router.register(r'equipment', views.EquipmentViewSet) +router.register(r'cell_families', views.CellFamilyViewSet) +router.register(r'cells', views.CellViewSet) +router.register(r'inactive_users', views.InactiveViewSet, basename='inactive_user') +router.register(r'users', views.UserViewSet, basename='user') +router.register(r'groups', views.GroupViewSet) + +# Wire up our API using automatic URL routing. +# Additionally, we include login URLs for the browsable API. +urlpatterns = [ + path('', include(router.urls)), + # path('data/{pk}/', views.TimeseriesDataViewSet.as_view({'get': 'detail'}), name='timeseriesdata-detail'), + path('admin/', admin.site.urls), + path('api-auth/', include('rest_framework.urls', namespace='rest_framework')), + path(r'login/', views.LoginView.as_view(), name='knox_login'), + path(r'logout/', views.LogoutView.as_view(), name='knox_logout'), + path(r'logoutall/', views.LogoutAllView.as_view(), name='knox_logoutall'), + path('schema/', SpectacularAPIView.as_view(), name='schema'), + path('schema/swagger-ui/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'), + path('schema/redoc/', SpectacularRedocView.as_view(url_name='schema'), name='redoc'), +] +pass diff --git a/backend/backend_django/config/wsgi.py b/backend/backend_django/config/wsgi.py new file mode 100644 index 00000000..6e305ae3 --- /dev/null +++ b/backend/backend_django/config/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for backend_django project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this path, see +https://docs.djangoproject.com/en/4.1/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') + +application = get_wsgi_application() diff --git a/backend/test/__init__.py b/backend/backend_django/galvanalyser/__init__.py similarity index 100% rename from backend/test/__init__.py rename to backend/backend_django/galvanalyser/__init__.py diff --git a/backend/backend_django/galvanalyser/admin.py b/backend/backend_django/galvanalyser/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/backend/backend_django/galvanalyser/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/backend/backend_django/galvanalyser/apps.py b/backend/backend_django/galvanalyser/apps.py new file mode 100644 index 00000000..bbf26faf --- /dev/null +++ b/backend/backend_django/galvanalyser/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class GalvanalyserConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'galvanalyser' diff --git a/backend/backend_django/galvanalyser/auth.py b/backend/backend_django/galvanalyser/auth.py new file mode 100644 index 00000000..3751eb8e --- /dev/null +++ b/backend/backend_django/galvanalyser/auth.py @@ -0,0 +1,23 @@ +from rest_framework import permissions +from .models import Harvester + + +class HarvesterAccess(permissions.BasePermission): + """ + Object-level permission to only allow Harvester to edit its own attributes. + """ + message = "Invalid AUTHORIZATION header. Required 'Harvester [api_key]'." + + endpoints = ['config', 'report'] + + def has_permission(self, request, view): + if view.action in self.endpoints: + try: + harvester = Harvester.objects.get(id=view.kwargs['pk']) + key = request.META.get('HTTP_AUTHORIZATION', '') + key = key[len('Harvester '):] + return key == harvester.api_key + except (Harvester.DoesNotExist, AttributeError, TypeError, ValueError): + return False + + return True diff --git a/backend/backend_django/galvanalyser/fixtures/DataColumnType.json b/backend/backend_django/galvanalyser/fixtures/DataColumnType.json new file mode 100644 index 00000000..5eaf9cf7 --- /dev/null +++ b/backend/backend_django/galvanalyser/fixtures/DataColumnType.json @@ -0,0 +1,121 @@ +[ + { + "pk": 1, + "model": "galvanalyser.DataColumnType", + "fields": { + "name": "Unknown", + "description": "unknown column type", + "is_default": true + } + }, + { + "pk": 2, + "model": "galvanalyser.DataColumnType", + "fields": { + "name": "Sample Number", + "description": "The sample or record number. Is increased by one each time a test machine records a reading. Usually counts from 1 at the start of a test", + "unit": 1, + "is_default": true + } + }, + { + "pk": 3, + "model": "galvanalyser.DataColumnType", + "fields": { + "name": "Time", + "description": "The time in seconds since the test run began.", + "unit": 2, + "is_default": true + } + }, + { + "pk": 4, + "model": "galvanalyser.DataColumnType", + "fields": { + "name": "Volts", + "description": "The voltage of the cell.", + "unit": 3, + "is_default": true + } + }, + { + "pk": 5, + "model": "galvanalyser.DataColumnType", + "fields": { + "name": "Amps", + "description": "The current current.", + "unit": 4, + "is_default": true + } + }, + { + "pk": 6, + "model": "galvanalyser.DataColumnType", + "fields": { + "name": "Energy Capacity", + "description": "The Energy Capacity.", + "unit": 5, + "is_default": true + } + }, + { + "pk": 7, + "model": "galvanalyser.DataColumnType", + "fields": { + "name": "Charge Capacity", + "description": "The Charge Capacity.", + "unit": 6, + "is_default": true + } + }, + { + "pk": 8, + "model": "galvanalyser.DataColumnType", + "fields": { + "name": "Temperature", + "description": "The temperature.", + "unit": 7, + "is_default": true + } + }, + { + "pk": 9, + "model": "galvanalyser.DataColumnType", + "fields": { + "name": "Step Time", + "description": "The time in seconds since the current step began.", + "unit": 8, + "is_default": true + } + }, + { + "pk": 10, + "model": "galvanalyser.DataColumnType", + "fields": { + "name": "Impedence Magnitude", + "description": "The magnitude of the impedence (EIS).", + "unit": 9, + "is_default": true + } + }, + { + "pk": 11, + "model": "galvanalyser.DataColumnType", + "fields": { + "name": "Impedence Phase", + "description": "The phase of the impedence (EIS).", + "unit": 10, + "is_default": true + } + }, + { + "pk": 12, + "model": "galvanalyser.DataColumnType", + "fields": { + "name": "Frequency", + "description": "The frequency of the input EIS voltage signal.", + "unit": 11, + "is_default": true + } + } +] \ No newline at end of file diff --git a/backend/backend_django/galvanalyser/fixtures/DataUnit.json b/backend/backend_django/galvanalyser/fixtures/DataUnit.json new file mode 100644 index 00000000..4cae6939 --- /dev/null +++ b/backend/backend_django/galvanalyser/fixtures/DataUnit.json @@ -0,0 +1,112 @@ +[ + { + "pk": 1, + "model": "galvanalyser.DataUnit", + "fields": { + "name": "Unitless", + "symbol": "", + "description": "A value with no units", + "is_default": true + } + }, + { + "pk": 2, + "model": "galvanalyser.DataUnit", + "fields": { + "name": "Time", + "symbol": "s", + "description": "Time in seconds", + "is_default": true + } + }, + { + "pk": 3, + "model": "galvanalyser.DataUnit", + "fields": { + "name": "Volts", + "symbol": "V", + "description": "Voltage", + "is_default": true + } + }, + { + "pk": 4, + "model": "galvanalyser.DataUnit", + "fields": { + "name": "Amps", + "symbol": "A", + "description": "Current", + "is_default": true + } + }, + { + "pk": 5, + "model": "galvanalyser.DataUnit", + "fields": { + "name": "Energy", + "symbol": "Wh", + "description": "Energy in Watt-Hours", + "is_default": true + } + }, + { + "pk": 6, + "model": "galvanalyser.DataUnit", + "fields": { + "name": "Charge", + "symbol": "Ah", + "description": "Charge in Amp-Hours", + "is_default": true + } + }, + { + "pk": 7, + "model": "galvanalyser.DataUnit", + "fields": { + "name": "Temperature", + "symbol": "°c", + "description": "Temperature in Centigrade", + "is_default": true + } + }, + { + "pk": 8, + "model": "galvanalyser.DataUnit", + "fields": { + "name": "Power", + "symbol": "W", + "description": "Power in Watts", + "is_default": true + } + }, + { + "pk": 9, + "model": "galvanalyser.DataUnit", + "fields": { + "name": "Ohm", + "symbol": "Ω", + "description": "Resistance or impediance in Ohms", + "is_default": true + } + }, + { + "pk": 10, + "model": "galvanalyser.DataUnit", + "fields": { + "name": "Degrees", + "symbol": "°", + "description": "Angle in degrees", + "is_default": true + } + }, + { + "pk": 11, + "model": "galvanalyser.DataUnit", + "fields": { + "name": "Frequency", + "symbol": "Hz", + "description": "Frequency in Hz", + "is_default": true + } + } +] \ No newline at end of file diff --git a/backend/backend_django/galvanalyser/management/__init__.py b/backend/backend_django/galvanalyser/management/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/backend_django/galvanalyser/management/commands/__init__.py b/backend/backend_django/galvanalyser/management/commands/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/backend_django/galvanalyser/management/commands/create_superuser.py b/backend/backend_django/galvanalyser/management/commands/create_superuser.py new file mode 100644 index 00000000..7b8dd318 --- /dev/null +++ b/backend/backend_django/galvanalyser/management/commands/create_superuser.py @@ -0,0 +1,34 @@ +from django.core.management.base import BaseCommand +from django.contrib.auth.models import User +from django.db import connection +import os + + +class Command(BaseCommand): + help = """ + Create superuser with login details from envvars + DJANGO_SUPERUSER_USERNAME (default=admin), + DJANGO_SUPERUSER_PASSWORD (required) + """ + + def handle(self, *args, **options): + password = os.getenv('DJANGO_SUPERUSER_PASSWORD', "") + if not len(password): + self.stdout.write(self.style.WARNING( + 'No DJANGO_SUPERUSER_PASSWORD specified, skipping superuser creation.' + )) + return + username = os.getenv('DJANGO_SUPERUSER_USERNAME', 'admin') + if User.objects.filter(username=username).exists(): + self.stdout.write(self.style.WARNING( + f'User {username} already exists: skipping user creation.' + )) + return + User.objects.create_user( + username=username, + password=password, + is_superuser=True, + is_staff=True, + is_active=True + ) + self.stdout.write(self.style.SUCCESS(f'Created superuser {username}.')) diff --git a/backend/backend_django/galvanalyser/management/commands/init_db.py b/backend/backend_django/galvanalyser/management/commands/init_db.py new file mode 100644 index 00000000..d1394a73 --- /dev/null +++ b/backend/backend_django/galvanalyser/management/commands/init_db.py @@ -0,0 +1,23 @@ +from django.core.management.base import BaseCommand +from django.db import connection + + +class Command(BaseCommand): + help = "Create timeseries_data table in database." + + def handle(self, *args, **options): + self.stdout.write("Creating timeseries_data table... ") + with connection.cursor() as curs: + curs.execute(""" + CREATE TABLE IF NOT EXISTS timeseries_data ( + sample bigint NOT NULL, + column_id bigint NOT NULL, + value double precision NOT NULL, + PRIMARY KEY (sample, column_id), + FOREIGN KEY (column_id) + REFERENCES "galvanalyser_datacolumn" (id) MATCH SIMPLE + ON UPDATE CASCADE + ON DELETE RESTRICT + ) WITH (OIDS = FALSE) + """) + self.stdout.write(self.style.SUCCESS('Complete.')) diff --git a/backend/backend_django/galvanalyser/migrations/0001_initial.py b/backend/backend_django/galvanalyser/migrations/0001_initial.py new file mode 100644 index 00000000..8160bf31 --- /dev/null +++ b/backend/backend_django/galvanalyser/migrations/0001_initial.py @@ -0,0 +1,205 @@ +# Generated by Django 4.1.4 on 2023-02-20 15:47 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('auth', '0012_alter_user_first_name_max_length'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='TimeseriesData', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('sample', models.PositiveBigIntegerField()), + ('column_id', models.PositiveIntegerField()), + ('value', models.FloatField()), + ], + options={ + 'db_table': 'timeseries_data', + 'managed': False, + }, + ), + migrations.CreateModel( + name='Cell', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('display_name', models.TextField(null=True, unique=True)), + ('uid', models.TextField(unique=True)), + ], + ), + migrations.CreateModel( + name='CellFamily', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField(unique=True)), + ('form_factor', models.TextField()), + ('link_to_datasheet', models.TextField()), + ('anode_chemistry', models.TextField()), + ('cathode_chemistry', models.TextField()), + ('nominal_capacity', models.FloatField()), + ('nominal_cell_weight', models.FloatField()), + ('manufacturer', models.TextField()), + ], + ), + migrations.CreateModel( + name='Dataset', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField(null=True)), + ('date', models.DateTimeField()), + ('type', models.TextField(null=True)), + ('purpose', models.TextField()), + ('json_data', models.JSONField(null=True)), + ('cell', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='datasets', to='galvanalyser.cell')), + ], + ), + migrations.CreateModel( + name='DataUnit', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField()), + ('symbol', models.TextField()), + ('description', models.TextField()), + ('is_default', models.BooleanField(default=False)), + ], + ), + migrations.CreateModel( + name='Harvester', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField(unique=True)), + ('api_key', models.TextField(null=True)), + ('last_check_in', models.DateTimeField(null=True)), + ('sleep_time', models.IntegerField(default=10)), + ('admin_group', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='editable_harvesters', to='auth.group')), + ('user_group', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='readable_harvesters', to='auth.group')), + ], + ), + migrations.CreateModel( + name='MonitoredPath', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('path', models.TextField()), + ('stable_time', models.PositiveSmallIntegerField(default=60)), + ('admin_group', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='editable_paths', to='auth.group')), + ('harvester', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='monitored_paths', to='galvanalyser.harvester')), + ('user_group', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='readable_paths', to='auth.group')), + ], + options={ + 'unique_together': {('harvester', 'path')}, + }, + ), + migrations.CreateModel( + name='VouchFor', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('new_user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='vouched_for', to=settings.AUTH_USER_MODEL)), + ('vouching_user', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='vouched_by', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='TimeseriesRangeLabel', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('label', models.TextField()), + ('range_start', models.PositiveBigIntegerField()), + ('range_end', models.PositiveBigIntegerField()), + ('info', models.TextField()), + ('dataset', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='range_labels', to='galvanalyser.dataset')), + ], + ), + migrations.CreateModel( + name='ObservedFile', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('relative_path', models.TextField()), + ('last_observed_size', models.PositiveBigIntegerField(default=0)), + ('last_observed_time', models.DateTimeField(null=True)), + ('state', models.TextField(choices=[('RETRY IMPORT', 'Retry Import'), ('IMPORT FAILED', 'Import Failed'), ('UNSTABLE', 'Unstable'), ('GROWING', 'Growing'), ('STABLE', 'Stable'), ('IMPORTING', 'Importing'), ('IMPORTED', 'Imported')], default='UNSTABLE')), + ('monitored_path', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='files', to='galvanalyser.monitoredpath')), + ], + options={ + 'unique_together': {('monitored_path', 'relative_path')}, + }, + ), + migrations.CreateModel( + name='HarvestError', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('error', models.TextField()), + ('timestamp', models.DateTimeField(auto_now=True, null=True)), + ('file', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='errors', to='galvanalyser.observedfile')), + ('harvester', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='paths', to='galvanalyser.harvester')), + ('path', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='galvanalyser.monitoredpath')), + ], + ), + migrations.CreateModel( + name='Equipment', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField(unique=True)), + ('type', models.TextField()), + ('datasets', models.ManyToManyField(related_name='equipment', to='galvanalyser.dataset')), + ], + ), + migrations.AddField( + model_name='dataset', + name='file', + field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='datasets', to='galvanalyser.observedfile'), + ), + migrations.CreateModel( + name='DataColumnType', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField()), + ('description', models.TextField()), + ('is_default', models.BooleanField(default=False)), + ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='galvanalyser.dataunit')), + ], + options={ + 'unique_together': {('unit', 'name')}, + }, + ), + migrations.CreateModel( + name='DataColumn', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.TextField()), + ('dataset', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='columns', to='galvanalyser.dataset')), + ('type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='galvanalyser.datacolumntype')), + ], + options={ + 'unique_together': {('dataset', 'name')}, + }, + ), + migrations.AddField( + model_name='cell', + name='family', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='cells', to='galvanalyser.cellfamily'), + ), + migrations.AlterUniqueTogether( + name='dataset', + unique_together={('file', 'date')}, + ), + migrations.CreateModel( + name='DataColumnStringKeys', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('key', models.PositiveBigIntegerField()), + ('string', models.TextField()), + ('column', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='string_keys', to='galvanalyser.datacolumn')), + ], + options={ + 'unique_together': {('column', 'key', 'string')}, + }, + ), + ] diff --git a/backend/backend_django/galvanalyser/migrations/__init__.py b/backend/backend_django/galvanalyser/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/backend_django/galvanalyser/models.py b/backend/backend_django/galvanalyser/models.py new file mode 100644 index 00000000..ccdc0bd1 --- /dev/null +++ b/backend/backend_django/galvanalyser/models.py @@ -0,0 +1,228 @@ +from django.db.models import F +from django.utils import timezone +from django.db import models +from django.contrib.auth.models import User, Group + +import random + + +class FileState(models.TextChoices): + RETRY_IMPORT = "RETRY IMPORT" + IMPORT_FAILED = "IMPORT FAILED" + UNSTABLE = "UNSTABLE" + GROWING = "GROWING" + STABLE = "STABLE" + IMPORTING = "IMPORTING" + IMPORTED = "IMPORTED" + + +class Harvester(models.Model): + name = models.TextField(unique=True) + api_key = models.TextField(null=True) + last_check_in = models.DateTimeField(null=True) + sleep_time = models.IntegerField(default=10) # default to short time so updates happen quickly + admin_group = models.ForeignKey( + to=Group, + on_delete=models.CASCADE, + null=True, + related_name='editable_harvesters' + ) + user_group = models.ForeignKey( + to=Group, + on_delete=models.CASCADE, + null=True, + related_name='readable_harvesters' + ) + + def __str__(self): + return f"{self.name} [Harvester {self.id}]" + + def save(self, *args, **kwargs): + if self.id is None: + # Create groups for Harvester + text = 'abcdefghijklmnopqrstuvwxyz' + \ + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + \ + '0123456789' + \ + '!£$%^&*-=+' + self.api_key = f"galv_hrv_{''.join(random.choices(text, k=60))}" + super(Harvester, self).save(*args, **kwargs) + + +class MonitoredPath(models.Model): + harvester = models.ForeignKey(to=Harvester, related_name='monitored_paths', on_delete=models.SET_NULL, null=True) + path = models.TextField() + stable_time = models.PositiveSmallIntegerField(default=60) # seconds files must remain stable to be processed + admin_group = models.ForeignKey( + to=Group, + on_delete=models.CASCADE, + null=True, + related_name='editable_paths' + ) + user_group = models.ForeignKey( + to=Group, + on_delete=models.CASCADE, + null=True, + related_name='readable_paths' + ) + + def __str__(self): + return self.path + + class Meta: + unique_together = [['harvester', 'path']] + + +class ObservedFile(models.Model): + monitored_path = models.ForeignKey(to=MonitoredPath, related_name='files', on_delete=models.CASCADE) + relative_path = models.TextField() + last_observed_size = models.PositiveBigIntegerField(null=False, default=0) + last_observed_time = models.DateTimeField(null=True) + state = models.TextField(choices=FileState.choices, default=FileState.UNSTABLE, null=False) + + def __str__(self): + return self.relative_path + + class Meta: + unique_together = [['monitored_path', 'relative_path']] + + +class HarvestError(models.Model): + harvester = models.ForeignKey(to=Harvester, related_name='paths', on_delete=models.CASCADE) + path = models.ForeignKey(to=MonitoredPath, on_delete=models.DO_NOTHING) + file = models.ForeignKey(to=ObservedFile, related_name='errors', on_delete=models.SET_NULL, null=True) + error = models.TextField() + timestamp = models.DateTimeField(auto_now=True, null=True) + + def __str__(self): + if self.path: + if self.file: + return f"{self.error} [Harvester_{self.harvester_id}/{self.path}/{self.file}]" + return f"{self.error} [Harvester_{self.harvester_id}/{self.path}]" + return f"{self.error} [Harvester_{self.harvester_id}]" + + +class CellFamily(models.Model): + name = models.TextField(null=False, unique=True) + form_factor = models.TextField() + link_to_datasheet = models.TextField() + anode_chemistry = models.TextField() + cathode_chemistry = models.TextField() + nominal_capacity = models.FloatField() + nominal_cell_weight = models.FloatField() + manufacturer = models.TextField() + + def __str__(self): + return f"{self.name} [CellFamily {self.id}]" + + +class Cell(models.Model): + display_name = models.TextField(null=True, unique=True) + uid = models.TextField(null=False, unique=True) + family = models.ForeignKey(to=CellFamily, related_name='cells', on_delete=models.SET_NULL, null=True) + + def __str__(self): + if self.display_name: + return f"{self.uid} ({self.display_name})" + return self.uid + + +class Dataset(models.Model): + cell = models.ForeignKey(to=Cell, related_name='datasets', on_delete=models.SET_NULL, null=True) + file = models.ForeignKey(to=ObservedFile, on_delete=models.DO_NOTHING, related_name='datasets') + name = models.TextField(null=True) + date = models.DateTimeField(null=False) + type = models.TextField(null=True) + purpose = models.TextField() + json_data = models.JSONField(null=True) + + def __str__(self): + return f"{self.name} [Dataset {self.id}]" + + class Meta: + unique_together = [['file', 'date']] + + +class Equipment(models.Model): + name = models.TextField(null=False, unique=True) + type = models.TextField() + datasets = models.ManyToManyField(to=Dataset, related_name='equipment') + + def __str__(self): + return f"{self.name} [Equipment {self.id}]" + + +class DataUnit(models.Model): + name = models.TextField(null=False) + symbol = models.TextField(null=False) + description = models.TextField() + is_default = models.BooleanField(default=False) + + def __str__(self): + if self.symbol: + return f"{self.symbol} | {self.name} - {self.description}" + return f"{self.name} - {self.description}" + + +class DataColumnType(models.Model): + unit = models.ForeignKey(to=DataUnit, on_delete=models.SET_NULL, null=True) + name = models.TextField(null=False) + description = models.TextField() + is_default = models.BooleanField(default=False) + + class Meta: + unique_together = [['unit', 'name']] + + +class DataColumn(models.Model): + dataset = models.ForeignKey(to=Dataset, related_name='columns', on_delete=models.CASCADE) + type = models.ForeignKey(to=DataColumnType, on_delete=models.CASCADE) + name = models.TextField(null=False) + + def __str__(self): + return f"{self.name} ({self.type.unit.symbol})" + + class Meta: + unique_together = [['dataset', 'name']] + + +class DataColumnStringKeys(models.Model): + """ + String values are not allowed in TimeseriesData, + so instead we store integer keys whose string values + can be looked up in this table. + """ + column = models.ForeignKey(to=DataColumn, related_name='string_keys', on_delete=models.CASCADE) + key = models.PositiveBigIntegerField(null=False) + string = models.TextField(null=False) + + class Meta: + unique_together = [['column', 'key', 'string']] + + +class TimeseriesData(models.Model): + sample = models.PositiveBigIntegerField(null=False) + column_id = models.PositiveIntegerField(null=False) + value = models.FloatField(null=False) + + class Meta: + managed = False + db_table = "timeseries_data" + + def __str__(self): + return f"{self.column_id}[{self.sample}]: {self.value}" + + def __repr__(self): + return str(self) + + +class TimeseriesRangeLabel(models.Model): + dataset = models.ForeignKey(to=Dataset, related_name='range_labels', null=False, on_delete=models.CASCADE) + label = models.TextField(null=False) + range_start = models.PositiveBigIntegerField(null=False) + range_end = models.PositiveBigIntegerField(null=False) + info = models.TextField() + + +class VouchFor(models.Model): + new_user = models.ForeignKey(to=User, related_name='vouched_for', null=False, on_delete=models.DO_NOTHING) + vouching_user = models.ForeignKey(to=User, related_name='vouched_by', null=False, on_delete=models.DO_NOTHING) diff --git a/backend/backend_django/galvanalyser/pagination.py b/backend/backend_django/galvanalyser/pagination.py new file mode 100644 index 00000000..aa10cafc --- /dev/null +++ b/backend/backend_django/galvanalyser/pagination.py @@ -0,0 +1,17 @@ +from rest_framework.pagination import PageNumberPagination, BasePagination + + +class Unpaginatable(BasePagination): + def paginate_queryset(self, queryset, request, view=None): + # s: str = request.query_params.get('all', "") + # falsy = ['false', 'f', '0', 'no', 'n'] + # if s.lower() in falsy or request.query_params.get('page', None): + # page_num = PageNumberPagination + # return page_num.paginate_queryset( + # PageNumberPagination(), + # queryset=queryset, + # request=request, + # view=view + # ) + + return None diff --git a/backend/backend_django/galvanalyser/schema.py b/backend/backend_django/galvanalyser/schema.py new file mode 100644 index 00000000..fd647550 --- /dev/null +++ b/backend/backend_django/galvanalyser/schema.py @@ -0,0 +1,22 @@ +from drf_spectacular.extensions import OpenApiAuthenticationExtension +from knox.settings import knox_settings + +class KnoxTokenScheme(OpenApiAuthenticationExtension): + target_class = 'knox.auth.TokenAuthentication' + name = 'knoxTokenAuth' + match_subclasses = True + priority = 1 + + def get_security_definition(self, auto_schema): + if knox_settings.AUTH_HEADER_PREFIX == 'Bearer': + return { + 'type': 'http', + 'scheme': 'bearer', + } + else: + return { + 'type': 'apiKey', + 'in': 'header', + 'name': 'Authorization', + 'description': 'Token-based authentication with required prefix "%s"' % knox_settings.AUTH_HEADER_PREFIX + } diff --git a/backend/backend_django/galvanalyser/serializers.py b/backend/backend_django/galvanalyser/serializers.py new file mode 100644 index 00000000..4429f3d8 --- /dev/null +++ b/backend/backend_django/galvanalyser/serializers.py @@ -0,0 +1,382 @@ +from django.urls import reverse + +from .models import Harvester, \ + HarvestError, \ + MonitoredPath, \ + ObservedFile, \ + Cell, \ + CellFamily, \ + Dataset, \ + Equipment, \ + DataUnit, \ + DataColumnType, \ + DataColumn, \ + TimeseriesData, \ + TimeseriesRangeLabel, \ + DataColumnStringKeys +from django.db import connection +from django.contrib.auth.models import User, Group +from django.conf.global_settings import DATA_UPLOAD_MAX_MEMORY_SIZE +from rest_framework import serializers + + +class HarvesterSerializer(serializers.HyperlinkedModelSerializer): + user_sets = serializers.SerializerMethodField() + + def get_user_sets(self, instance) -> list: + return [ + UserSetSerializer( + instance.admin_group, + context={ + 'request': self.context.get('request'), + 'name': 'Admins', + 'description': ( + 'Administrators can change harvester properties, ' + 'as well as any of the harvester\'s paths or datasets.' + ), + 'is_admin': True + } + ).data, + UserSetSerializer( + instance.user_group, + context={ + 'request': self.context.get('request'), + 'name': 'Users', + 'description': ( + 'Users can view harvester properties. ' + 'They can also add monitored paths.' + ) + } + ).data, + ] + + class Meta: + model = Harvester + fields = ['url', 'id', 'name', 'sleep_time', 'last_check_in', 'user_sets'] + read_only_fields = ['url', 'id', 'last_check_in', 'user_sets'] + + +class HarvesterConfigSerializer(serializers.HyperlinkedModelSerializer): + standard_units = serializers.SerializerMethodField() + standard_columns = serializers.SerializerMethodField() + max_upload_bytes = serializers.SerializerMethodField() + + def get_standard_units(self, instance): + return DataUnitSerializer( + DataUnit.objects.filter(is_default=True), + many=True, + context={'request': self.context['request']} + ).data + + def get_standard_columns(self, instance): + return DataColumnTypeSerializer( + DataColumnType.objects.filter(is_default=True), + many=True, + context={'request': self.context['request']} + ).data + + def get_max_upload_bytes(self, instance): + return DATA_UPLOAD_MAX_MEMORY_SIZE + + class Meta: + model = Harvester + fields = [ + 'url', 'id', 'api_key', 'name', 'sleep_time', 'monitored_paths', + 'standard_units', 'standard_columns', 'max_upload_bytes' + ] + read_only_fields = fields + depth = 1 + + +class MonitoredPathSerializer(serializers.HyperlinkedModelSerializer): + user_sets = serializers.SerializerMethodField() + + def get_user_sets(self, instance) -> list: + return [ + UserSetSerializer( + instance.harvester.admin_group, + context={ + 'request': self.context.get('request'), + 'name': 'Harvester admins', + 'description': ( + 'Harvester administrators can alter any of the harvester\'s paths or datasets.' + ), + 'is_admin': True + } + ).data, + UserSetSerializer( + instance.admin_group, + context={ + 'request': self.context.get('request'), + 'name': 'Admins', + 'description': ( + 'Administrators can change paths and their datasets.' + ), + 'is_admin': True + } + ).data, + UserSetSerializer( + instance.user_group, + context={ + 'request': self.context.get('request'), + 'name': 'Users', + 'description': ( + 'Users can monitored paths and their datasets.' + ) + } + ).data, + ] + + class Meta: + model = MonitoredPath + fields = ['url', 'id', 'path', 'stable_time', 'harvester', 'user_sets'] + read_only_fields = ['url', 'id', 'harvester', 'user_sets'] + + +class ObservedFileSerializer(serializers.HyperlinkedModelSerializer): + upload_info = serializers.SerializerMethodField() + + def get_upload_info(self, instance) -> dict: + if not self.context.get('with_upload_info'): + return None + try: + columns = DataColumn.objects.filter(dataset__file=instance) + column_data = [] + for c in columns: + keys = DataColumnStringKeys.objects.filter(column=c).order_by('key') + column_data.append({ + 'name': c.name, + 'id': c.id, + 'keymap': [{'key': k.key, 'value': k.string} for k in keys] + }) + with connection.cursor() as cur: + cur.execute(f"SELECT sample FROM timeseries_data WHERE column_id={columns.first().id} ORDER BY sample DESC LIMIT 1") + last_record = cur.fetchone()[0] + return { + 'columns': column_data, + 'last_record_number': last_record + } + except BaseException as e: + return {'columns': [], 'last_record_number': None, 'error': str(e)} + + class Meta: + model = ObservedFile + fields = [ + 'url', 'id', + 'monitored_path', 'relative_path', + 'state', 'last_observed_time', 'last_observed_size', 'errors', + 'datasets', 'upload_info' + ] + read_only_fields = [ + 'url', 'id', 'monitored_path', 'relative_path', + 'last_observed_time', 'last_observed_size', 'datasets', + 'errors' + ] + + +class HarvestErrorSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = HarvestError + fields = ['url', 'id', 'harvester', 'path', 'file', 'error', 'timestamp'] + + +class CellFamilySerializer(serializers.HyperlinkedModelSerializer): + + class Meta: + model = CellFamily + fields = [ + 'url', 'id', 'name', + 'form_factor', 'link_to_datasheet', + 'anode_chemistry', 'cathode_chemistry', + 'nominal_capacity', 'nominal_cell_weight', 'manufacturer', + 'cells' + ] + read_only_fields = ['id', 'url', 'cells'] + + +class CellSerializer(serializers.HyperlinkedModelSerializer): + + class Meta: + model = Cell + fields = ['url', 'id', 'uid', 'display_name', 'family', 'datasets'] + read_only_fields = ['id', 'url', 'datasets'] + extra_kwargs = {'display_name': {'allow_blank': True, 'allow_null': True}} + + def validate_display_name(self, value): + if isinstance(value, str): + return value + return "" + + def validate_family(self, value): + if not isinstance(value, CellFamily): + raise serializers.ValidationError("family property must be a CellFamily instance") + return value + + def create(self, validated_data): + uid = validated_data.pop('uid') + display_name = validated_data.pop('display_name') + family = validated_data.pop('family') + if display_name == '': + display_name = f"{family.name}_{family.cells.count()}" + return Cell.objects.create(uid=uid, family=family, display_name=display_name) + + +class EquipmentSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Equipment + fields = ['url', 'id', 'name', 'type', 'datasets'] + read_only_fields = ['url', 'id', 'datasets'] + + +class DatasetSerializer(serializers.HyperlinkedModelSerializer): + user_sets = serializers.SerializerMethodField() + + def get_user_sets(self, instance) -> list: + return MonitoredPathSerializer( + instance.file.monitored_path, context={'request': self.context.get('request')} + ).data.get('user_sets') + + class Meta: + model = Dataset + fields = ['url', 'id', 'name', 'date', 'type', 'purpose', 'cell', 'equipment', 'file', 'user_sets', 'columns'] + read_only_fields = ['date', 'file', 'id', 'url', 'user_sets', 'columns'] + + +class DataUnitSerializer(serializers.ModelSerializer): + class Meta: + model = DataUnit + fields = ['name', 'symbol', 'description'] + + +class TimeseriesRangeLabelSerializer(serializers.HyperlinkedModelSerializer): + data = serializers.SerializerMethodField() + + class Meta: + model = TimeseriesRangeLabel + fields = '__all__' + + +class TimeseriesDataSerializer(serializers.Serializer): + def to_representation(self, instance): + with connection.cursor() as cur: + cur.execute(f"SELECT sample, value FROM timeseries_data WHERE column_id={instance.id} ORDER BY sample") + data = cur.fetchall() + keys = DataColumnStringKeys.objects.filter(column_id=instance.id) + if keys.exists(): + key_map = {k.key: k.string for k in keys} + obs = {x[0]: key_map[x[1]] for x in data} + else: + obs = {x[0]: x[1] for x in data} + return { + 'id': instance.id, + 'url': self.context['request'].build_absolute_uri(reverse('datacolumn-data', args=(instance.id,))), + 'observations': obs + } + + +class TimeseriesDataListSerializer(serializers.Serializer): + def to_representation(self, instance): + with connection.cursor() as cur: + cur.execute(f"SELECT value FROM timeseries_data WHERE column_id={instance.id} ORDER BY sample") + data = cur.fetchall() + keys = DataColumnStringKeys.objects.filter(column_id=instance.id) + if keys.exists(): + key_map = {k.key: k.string for k in keys} + obs = [key_map[x[0]] for x in data] + else: + obs = [x[0] for x in data] + return { + 'id': instance.id, + 'url': self.context['request'].build_absolute_uri(reverse('datacolumn-data-list', args=(instance.id,))), + 'observations': obs + } + + +class DataColumnTypeSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = DataColumnType + fields = ['url', 'id', 'name', 'description', 'is_default', 'unit'] + + +class DataColumnSerializer(serializers.Serializer): + """ + A column contains metadata and data. Data are an ordered list of values. + """ + def to_representation(self, instance): + uri = self.context['request'].build_absolute_uri + return { + 'id': instance.id, + 'url': uri(reverse('datacolumn-detail', args=(instance.id,))), + 'name': instance.name, + 'dataset': uri(reverse('dataset-detail', args=(instance.dataset.id,))), + 'is_numeric': not DataColumnStringKeys.objects.filter(column_id=instance.id).exists(), + 'type_name': instance.type.name, + 'description': instance.type.description, + 'unit': DataUnitSerializer(instance.type.unit).data, + 'data': uri(reverse('datacolumn-data', args=(instance.id,))), + 'data_list': uri(reverse('datacolumn-data-list', args=(instance.id,))) + } + + +class GroupSerializer(serializers.HyperlinkedModelSerializer): + users = serializers.SerializerMethodField() + + def get_users(self, instance) -> list: + return UserSerializer(instance.user_set.all(), many=True, context={'request': self.context['request']}).data + + class Meta: + model = Group + fields = [ + 'url', 'name', 'users', + 'readable_paths', 'editable_paths', 'readable_harvesters', 'editable_harvesters' + ] + + +class UserSetSerializer(serializers.HyperlinkedModelSerializer): + description = serializers.SerializerMethodField() + users = serializers.SerializerMethodField() + name = serializers.SerializerMethodField() + is_admin = serializers.SerializerMethodField() + + def get_description(self, instance): + return self.context.get('description') + + def get_users(self, instance) -> list: + return UserSerializer(instance.user_set.all(), many=True, context={'request': self.context['request']}).data + + def get_name(self, instance): + return self.context.get('name', instance.name) + + def get_is_admin(self, instance): + """ + Admin groups can control their own members, as well as members in groups + lower down the list of UserSets[] + """ + return self.context.get('is_admin', False) + + class Meta: + model = Group + fields = ['url', 'id', 'name', 'description', 'is_admin', 'users'] + + +class UserSerializer(serializers.HyperlinkedModelSerializer): + url = serializers.SerializerMethodField() + + def get_url(self, instance) -> str: + uri = self.context['request'].build_absolute_uri + if instance.is_active: + return uri(reverse('user-detail', args=(instance.id,))) + return uri(reverse('inactive_user-detail', args=(instance.id,))) + + class Meta: + model = User + fields = [ + 'url', + 'id', + 'username', + 'first_name', + 'last_name', + 'is_active', + 'is_staff', + 'is_superuser', + ] diff --git a/backend/backend_django/galvanalyser/tests/__init__.py b/backend/backend_django/galvanalyser/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/backend_django/galvanalyser/tests/factories.py b/backend/backend_django/galvanalyser/tests/factories.py new file mode 100644 index 00000000..d2ed5933 --- /dev/null +++ b/backend/backend_django/galvanalyser/tests/factories.py @@ -0,0 +1,133 @@ +import os + +import factory +import faker +import django.conf.global_settings +from django.utils import timezone +from galvanalyser.models import Harvester, \ + HarvestError, \ + MonitoredPath, \ + ObservedFile, \ + Cell, \ + CellFamily, \ + Dataset, \ + Equipment, \ + DataUnit, \ + DataColumnType, \ + DataColumnStringKeys, \ + DataColumn, \ + TimeseriesData, \ + TimeseriesRangeLabel, \ + FileState +from django.contrib.auth.models import User, Group + +fake = faker.Faker(django.conf.global_settings.LANGUAGE_CODE) + + +class UserFactory(factory.django.DjangoModelFactory): + class Meta: + model = User + django_get_or_create = ('username',) + + username = factory.Faker('user_name') + + +class GroupFactory(factory.django.DjangoModelFactory): + class Meta: + model = Group + django_get_or_create = ('name',) + exclude = ('n',) + + n = factory.Faker('random_int', min=1, max=100000) + name = factory.LazyAttribute(lambda x: f"group_{x.n}") + + +class HarvesterFactory(factory.django.DjangoModelFactory): + class Meta: + model = Harvester + django_get_or_create = ('name',) + exclude = ('first_name',) + + first_name = fake.unique.first_name() + name = factory.LazyAttribute(lambda x: f"Harvester {x.first_name}") + + @factory.post_generation + def groups(obj, *args, **kwargs): + user_group = GroupFactory.create(name=f"harvester_{obj.id}_user_group") + admin_group = GroupFactory.create(name=f"harvester_{obj.id}_admin_group") + obj.user_group = user_group + obj.admin_group = admin_group + obj.save() + + +class MonitoredPathFactory(factory.django.DjangoModelFactory): + class Meta: + model = MonitoredPath + django_get_or_create = ('path', 'harvester',) + exclude = ('p',) + + p = factory.Faker( + 'file_path', + absolute=False, + depth=factory.Faker('random_int', min=1, max=10) + ) + + path = factory.LazyAttribute(lambda x: os.path.dirname(x.p)) + harvester = factory.SubFactory(HarvesterFactory) + + @factory.post_generation + def groups(obj, *args, **kwargs): + user_group = GroupFactory.create(name=f"path_{obj.id}_user_group") + admin_group = GroupFactory.create(name=f"path_{obj.id}_admin_group") + obj.user_group = user_group + obj.admin_group = admin_group + obj.save() + + +class ObservedFileFactory(factory.django.DjangoModelFactory): + class Meta: + model = ObservedFile + django_get_or_create = ('monitored_path', 'relative_path',) + + relative_path = factory.Faker('file_name') + monitored_path = factory.SubFactory(MonitoredPathFactory) + + +class DatasetFactory(factory.django.DjangoModelFactory): + class Meta: + model = Dataset + django_get_or_create = ('file', 'date',) + + file = factory.SubFactory(ObservedFileFactory) + date = timezone.make_aware(timezone.datetime.now()) + + +class CellFamilyFactory(factory.django.DjangoModelFactory): + class Meta: + model = CellFamily + + name = factory.Faker('catch_phrase') + form_factor = factory.Faker('bs') + link_to_datasheet = factory.Faker('uri') + anode_chemistry = factory.Faker('bs') + cathode_chemistry = factory.Faker('bs') + manufacturer = factory.Faker('company') + nominal_capacity = factory.Faker('pyfloat', min_value=1.0, max_value=1000000.0) + nominal_cell_weight = factory.Faker('pyfloat', min_value=1.0, max_value=1000000.0) + + +class CellFactory(factory.django.DjangoModelFactory): + class Meta: + model = Cell + + uid = factory.Faker('bothify', text='?????-##??#-#?#??-?####-?#???') + display_name = factory.Faker('catch_phrase') + family = factory.SubFactory(CellFamilyFactory) + + +class EquipmentFactory(factory.django.DjangoModelFactory): + class Meta: + model = Equipment + + name = factory.Faker('catch_phrase') + type = factory.Faker('bs') diff --git a/backend/backend_django/galvanalyser/tests/test_view_cells.py b/backend/backend_django/galvanalyser/tests/test_view_cells.py new file mode 100644 index 00000000..a68b2d9b --- /dev/null +++ b/backend/backend_django/galvanalyser/tests/test_view_cells.py @@ -0,0 +1,57 @@ +import unittest +from django.urls import reverse +from rest_framework import status +from rest_framework.test import APITestCase +import logging + +from .factories import CellFamilyFactory, CellFactory +from galvanalyser.models import CellFamily, Cell + +logger = logging.getLogger(__file__) +logger.setLevel(logging.INFO) + + +class CellFamilyTests(APITestCase): + def test_create(self): + body = { + 'name': 'Test CF', 'form_factor': 'test', 'link_to_datasheet': 'http', + 'anode_chemistry': 'yes','cathode_chemistry': 'yes', + 'nominal_capacity': 5.5, 'nominal_cell_weight': 1.2, 'manufacturer': 'na' + } + url = reverse('cellfamily-list') + print("Test create Cell Family") + response = self.client.post(url, body) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + family_url = response.json().get('url') + self.assertIsInstance(family_url, str) + print("OK") + print("Test create Cell") + response = self.client.post( + reverse('cell-list'), + {'uid': 'some-unique-id-1234', 'display_name': 'test cell', 'family': family_url} + ) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + print("OK") + + def test_update(self): + cell_family = CellFamilyFactory.create(name='Test family') + url = reverse('cellfamily-detail', args=(cell_family.id,)) + print("Test update Cell Family") + response = self.client.patch(url, {'name': 'cell family'}) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(CellFamily.objects.get(id=cell_family.id).name, 'cell family') + print("OK") + print("Test update Cell") + cell = CellFactory.create(family=cell_family) + url = reverse('cell-detail', args=(cell.id,)) + response = self.client.patch(url, {'display_name': 'c123'}) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(Cell.objects.get(id=cell.id).display_name, 'c123') + response = self.client.patch(url, {'uid': 'c123'}) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(Cell.objects.get(id=cell.id).uid, 'c123') + print("OK") + + +if __name__ == '__main__': + unittest.main() diff --git a/backend/backend_django/galvanalyser/tests/test_view_datasets.py b/backend/backend_django/galvanalyser/tests/test_view_datasets.py new file mode 100644 index 00000000..197b7588 --- /dev/null +++ b/backend/backend_django/galvanalyser/tests/test_view_datasets.py @@ -0,0 +1,37 @@ +import unittest +from django.urls import reverse +from rest_framework import status +from rest_framework.test import APITestCase +import logging + +from .factories import UserFactory, \ + HarvesterFactory, \ + DatasetFactory + +logger = logging.getLogger(__file__) +logger.setLevel(logging.INFO) + + +class DatasetTests(APITestCase): + def setUp(self): + self.harvester = HarvesterFactory.create(name='Test Dataset') + self.dataset = DatasetFactory.create(file__monitored_path__harvester=self.harvester) + self.user = UserFactory.create(username='test_user') + self.admin_user = UserFactory.create(username='test_user_admin') + self.user.groups.add(self.harvester.user_group) + self.admin_user.groups.add(self.harvester.admin_group) + self.url = reverse('dataset-detail', args=(self.dataset.id,)) + + def test_view(self): + self.client.force_login(self.user) + print("Test rejection of dataset view") + self.assertNotEqual(self.client.get(self.url).status_code, status.HTTP_200_OK) + print("OK") + self.client.force_login(self.admin_user) + print("Test dataset view") + self.assertEqual(self.client.get(self.url).status_code, status.HTTP_200_OK) + print("OK") + + +if __name__ == '__main__': + unittest.main() diff --git a/backend/backend_django/galvanalyser/tests/test_view_equipment.py b/backend/backend_django/galvanalyser/tests/test_view_equipment.py new file mode 100644 index 00000000..7af6917c --- /dev/null +++ b/backend/backend_django/galvanalyser/tests/test_view_equipment.py @@ -0,0 +1,34 @@ +import unittest +from django.urls import reverse +from rest_framework import status +from rest_framework.test import APITestCase +import logging + +from .factories import EquipmentFactory +from galvanalyser.models import Equipment + +logger = logging.getLogger(__file__) +logger.setLevel(logging.INFO) + + +class EquipmentTests(APITestCase): + def test_create(self): + body = {'name': 'Test EQ', 'type': 'test'} + url = reverse('equipment-list') + print("Test create Equipment") + response = self.client.post(url, body) + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + print("OK") + + def test_update(self): + equipment = EquipmentFactory.create(name='Test kit') + url = reverse('equipment-detail', args=(equipment.id,)) + print("Test update Equipment") + response = self.client.patch(url, {'name': 'New kit'}) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(Equipment.objects.get(id=equipment.id).name, 'New kit') + print("OK") + + +if __name__ == '__main__': + unittest.main() diff --git a/backend/backend_django/galvanalyser/tests/test_view_files.py b/backend/backend_django/galvanalyser/tests/test_view_files.py new file mode 100644 index 00000000..6c374adf --- /dev/null +++ b/backend/backend_django/galvanalyser/tests/test_view_files.py @@ -0,0 +1,49 @@ +import unittest +from django.urls import reverse +from rest_framework import status +from rest_framework.test import APITestCase +import logging + +from .factories import UserFactory, \ + HarvesterFactory, \ + MonitoredPathFactory, \ + ObservedFileFactory +from galvanalyser.models import ObservedFile, \ + FileState + +logger = logging.getLogger(__file__) +logger.setLevel(logging.INFO) + + +class ObservedFileTests(APITestCase): + def setUp(self): + self.harvester = HarvesterFactory.create(name='Test Files') + self.path = MonitoredPathFactory.create(harvester=self.harvester) + self.files = ObservedFileFactory.create_batch(size=5, monitored_path=self.path) + self.user = UserFactory.create(username='test_user') + self.admin_user = UserFactory.create(username='test_user_admin') + self.user.groups.add(self.harvester.user_group) + self.admin_user.groups.add(self.harvester.admin_group) + self.url = reverse('observedfile-detail', args=(self.files[0].id,)) + + def test_view(self): + self.client.force_login(self.user) + print("Test rejection of view path") + self.assertNotEqual(self.client.get(self.url).status_code, status.HTTP_200_OK) + print("OK") + self.client.force_login(self.admin_user) + print("Test view path") + self.assertEqual(self.client.get(self.url).status_code, status.HTTP_200_OK) + print("OK") + + def test_reimport(self): + self.client.force_login(self.admin_user) + print("Test view path") + url = reverse('observedfile-reimport', args=(self.files[0].id,)) + self.assertEqual(self.client.get(url).status_code, status.HTTP_200_OK) + self.assertEqual(ObservedFile.objects.get(id=self.files[0].id).state, FileState.RETRY_IMPORT) + print("OK") + + +if __name__ == '__main__': + unittest.main() diff --git a/backend/backend_django/galvanalyser/tests/test_view_harvester.py b/backend/backend_django/galvanalyser/tests/test_view_harvester.py new file mode 100644 index 00000000..f18d70e2 --- /dev/null +++ b/backend/backend_django/galvanalyser/tests/test_view_harvester.py @@ -0,0 +1,231 @@ +import unittest +from django.urls import reverse +from rest_framework import status +from rest_framework.test import APITestCase +import logging + +from .factories import UserFactory, \ + HarvesterFactory, \ + MonitoredPathFactory +from galvanalyser.models import Harvester, \ + HarvestError, \ + MonitoredPath, \ + ObservedFile, \ + Dataset, \ + FileState + +logger = logging.getLogger(__file__) +logger.setLevel(logging.INFO) + + +class HarvesterTests(APITestCase): + def test_create(self): + url = reverse('harvester-list') + user_id = 1 + harv = { + 'name': 'harv', + 'user': user_id + } + print("Test rejection of Create Harvester with no name, user_id") + for request in [ + self.client.post(url, {}), # name missing + self.client.post(url, harv) # no user with id + ]: + self.assertEqual(request.status_code, status.HTTP_400_BAD_REQUEST) + print("OK") + print("Test successful Harvester creation") + UserFactory.create(id=user_id) + request = self.client.post(url, harv) + self.assertEqual(request.status_code, status.HTTP_200_OK) + self.assertEqual(Harvester.objects.first().name, harv['name']) + self.assertIn('api_key', request.json()) + print("OK") + print("Test rejection of duplicate name") + # name duplication error: + self.assertEqual(self.client.post(url, harv).status_code, status.HTTP_400_BAD_REQUEST) + print("OK") + + def test_config(self): + harvester = HarvesterFactory.create(name='Test Config') + other = HarvesterFactory.create(name='Test Config Other') + paths = MonitoredPathFactory.create_batch(size=3, harvester=harvester) + MonitoredPathFactory.create_batch(size=3, harvester_id=other.id) + url = reverse('harvester-config', args=(harvester.id,)) + headers = {'HTTP_AUTHORIZATION': f"Harvester {harvester.api_key}"} + print("Test config rejection") + self.assertEqual(self.client.get(url).status_code, status.HTTP_401_UNAUTHORIZED) + print("OK") + print("Test access config") + response = self.client.get(url, **headers) + self.assertEqual(response.status_code, status.HTTP_200_OK) + json = response.json() + self.assertIn('api_key', json) + paths = [p.path for p in paths] + for p in json['monitored_paths']: + self.assertTrue(p['path'] in paths, "Unknown path reported in config") + paths.remove(p['path']) + self.assertEqual(len(paths), 0, "Not all monitored_paths reported in config") + print("OK") + print("Test config rejection with other harvester key") + headers = {'HTTP_AUTHORIZATION': f"Harvester {other.api_key}"} + self.assertEqual(self.client.get(url, **headers).status_code, status.HTTP_401_UNAUTHORIZED) + print("OK") + + def test_update(self): + harvester = HarvesterFactory.create(name='Test Update') + user = UserFactory.create() + self.client.force_login(user) + other = HarvesterFactory.create(name='Test Update Other') + url = reverse('harvester-detail', args=(harvester.id,)) + print("Test access rejection") + self.assertEqual(self.client.get(url, {}).status_code, status.HTTP_404_NOT_FOUND) + print("OK") + print("Test edit access rejection") + self.assertEqual(self.client.patch(url, {}).status_code, status.HTTP_400_BAD_REQUEST) + print("OK") + user.groups.add(harvester.admin_group) + print("Test name duplication error") + response = self.client.patch(url, {'name': other.name}) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + print("OK") + print("Test sleep time 0 rejection") + response = self.client.patch(url, {'sleep_time': 0}) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + print("OK") + print("Test successful update") + t = harvester.sleep_time + 10 + n = harvester.name + " the Second" + response = self.client.patch(url, {'name': n, 'sleep_time': t}) + harvester_updated = Harvester.objects.get(id=harvester.id) + self.assertEqual(response.status_code, status.HTTP_200_OK, "HTTP response error") + self.assertEqual(harvester_updated.name, n, "name not updated") + self.assertEqual(harvester_updated.sleep_time, t, "sleep_time not updated") + print("OK") + + def test_report(self): + harvester = HarvesterFactory.create(name='Test Report') + paths = MonitoredPathFactory.create_batch(size=2, harvester=harvester) + url = reverse('harvester-report', args=(harvester.id,)) + headers = {'HTTP_AUTHORIZATION': f"Harvester {harvester.api_key}", 'format': 'json'} + print("Test status missing") + self.assertEqual(self.client.post(url, {}, **headers).status_code, status.HTTP_400_BAD_REQUEST) + print("OK") + print("Test path missing") + self.assertEqual(self.client.post(url, {'status': 'error'}, **headers).status_code, status.HTTP_400_BAD_REQUEST) + print("OK") + print("Test path invalid") + p = '123foo/123bar' + self.assertEqual( + self.client.post(url, {'status': 'error', 'path': p}, **headers).status_code, + status.HTTP_400_BAD_REQUEST + ) + print("OK") + print("Test path okay") + path = paths[0].path + self.assertEqual( + self.client.post(url, {'status': 'error', 'path': path}, **headers).status_code, + status.HTTP_200_OK + ) + HarvestError.objects.get(harvester__id=harvester.id, path__id=paths[0].id) + print("OK") + print("Test error with new file") + response = self.client.post( + url, + {'status': 'error', 'error': 'test', 'path': path, 'file': 'new/file.ext'}, + **headers + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + f = ObservedFile.objects.get(relative_path='new/file.ext', monitored_path__id=paths[0].id) + HarvestError.objects.get(harvester__id=harvester.id, path__id=paths[0].id, file__id=f.id) + print("OK") + print("Test error with existing file") + response = self.client.post( + url, + {'status': 'error', 'error': 'test', 'path': path, 'file': f.relative_path}, + **headers + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual( + HarvestError.objects.filter(harvester__id=harvester.id, path__id=paths[0].id).count(), + 3 + ) + print("OK") + print("Test unrecognised status") + self.assertEqual( + self.client.post(url, {'status': 'unknown', 'path': path}, **headers).status_code, + status.HTTP_400_BAD_REQUEST + ) + print("OK") + print("Test task file_size") + body = { + 'status': 'success', + 'path': path, + 'file': 'a/new/file.ext', + 'content': {'task': 'file_size', 'size': 1024} + } + response = self.client.post(url, body, **headers) + self.assertEqual(response.status_code, status.HTTP_200_OK) + f = ObservedFile.objects.get( + monitored_path__id=paths[0].id, + relative_path='a/new/file.ext' + ) + self.assertEqual(f.state, FileState.GROWING) + print("OK") + print("Test task import begin") + body['content'] = { + 'task': 'import', + 'status': 'begin', + 'test_date': 1024.0, + 'core_metadata': { + 'Machine Type': 'Test machine', + 'Dataset Name': 'Test dataset', + 'num_rows': 1024, + 'last_sample_no': 0 + }, + 'extra_metadata': {} + } + response = self.client.post(url, body, **headers) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.json()['state'], FileState.IMPORTING) + d = Dataset.objects.get(file__id=f.id) + self.assertEqual(d.type, 'Test machine') + print("OK") + # # Below skipped because PyCharm won't run fixtures startup script + # print("Test task import in_progress") + # body['content'] = { + # 'task': 'import', + # 'status': 'in_progress', + # 'test_date': 1024.0, + # 'data': [ + # {'column_name': 'x', 'unit_id': 5, 'values': {'1': 1, '2': 2, '3': 3, '4': 4, '5': 5}}, + # {'column_name': 'y', 'unit_symbol': 'psx', 'values': {'1': 1, '2': 2, '3': 3, '4': 4, '5': 5}}, + # {'column_name': 'z', 'column_id': 1, 'values': {'1': 1, '2': 2, '3': 3, '4': 4, '5': 5}}, + # { + # 'column_name': 's', + # 'unit_symbol': 'str', + # 'values': {'1': 1, '2': 2, '3': 1, '4': 1, '5': 2}, + # 'value_map': {'abc': 1, 'def': 2} + # }, + # ] + # } + # response = self.client.post(url, body, **headers) + # self.assertEqual(response.status_code, status.HTTP_200_OK) + # cols = DataColumn.objects.filter(dataset__id=d.id) + # self.assertEqual(cols.count(), 4) + # for c in cols: + # self.assertEqual(TimeseriesData.objects.filter(column_id=c.id).count(), 5) + # print("OK") + print("Test task import complete") + body['content'] = { + 'task': 'import', + 'status': 'complete', + 'test_date': 1024.0 + } + response = self.client.post(url, body, **headers) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.json()['state'], FileState.IMPORTED) + print("OK") + + +if __name__ == '__main__': + unittest.main() diff --git a/backend/backend_django/galvanalyser/tests/test_view_path.py b/backend/backend_django/galvanalyser/tests/test_view_path.py new file mode 100644 index 00000000..f7f65a97 --- /dev/null +++ b/backend/backend_django/galvanalyser/tests/test_view_path.py @@ -0,0 +1,90 @@ +import unittest +from django.urls import reverse +from rest_framework import status +from rest_framework.test import APITestCase +import logging + +from .factories import UserFactory, \ + HarvesterFactory, \ + MonitoredPathFactory +from galvanalyser.models import Harvester, \ + MonitoredPath + +logger = logging.getLogger(__file__) +logger.setLevel(logging.INFO) + + +class MonitoredPathTests(APITestCase): + def setUp(self): + self.path = 'path/to/data' + self.harvester = HarvesterFactory.create(name='Test Paths') + self.non_user = UserFactory.create(username='test_paths') + self.user = UserFactory.create(username='test_paths_user') + self.user.groups.add(self.harvester.user_group) + self.admin_user = UserFactory.create(username='test_paths_admin') + self.admin_user.groups.add(self.harvester.admin_group) + + def test_create(self): + self.client.force_login(self.non_user) + url = reverse('monitoredpath-list') + print("Test rejection of Create Path - no path") + self.assertEqual( + self.client.post(url, {'harvester': 1}).status_code, + status.HTTP_400_BAD_REQUEST + ) + print("OK") + print("Test rejection of Create Path - no harvester") + i = 1 if self.harvester.id != 1 else 2 + self.assertEqual( + self.client.post(url, {'path': self.path, 'harvester': i}).status_code, + status.HTTP_400_BAD_REQUEST + ) + print("OK") + print("Test rejection of Create Path - no authorisation") + body = {'path': self.path, 'harvester': self.harvester.id, 'stable_time': 60} + self.assertEqual( + self.client.post(url, body).status_code, + status.HTTP_400_BAD_REQUEST + ) + print("OK") + print("Test successful Path creation") + self.client.force_login(self.user) + self.assertEqual( + self.client.post(url, body).status_code, + status.HTTP_200_OK + ) + print("OK") + print("Test rejection of duplicate name") + self.assertEqual( + self.client.post(url, body).status_code, + status.HTTP_400_BAD_REQUEST + ) + print("OK") + + def test_update(self): + path = MonitoredPathFactory.create(path=self.path, harvester=self.harvester) + url = reverse('monitoredpath-detail', args=(path.id,)) + print("Test update rejected - authorisation") + self.client.force_login(self.user) + body = {'path': path.path, 'stable_time': 100} + self.assertEqual( + self.client.patch(url, body).status_code, + status.HTTP_400_BAD_REQUEST + ) + print("OK") + print("Test update okay") + self.client.force_login(self.admin_user) + body = {'path': path.path, 'stable_time': 1} + self.assertEqual( + self.client.patch(url, body).status_code, + status.HTTP_200_OK + ) + self.assertEqual( + MonitoredPath.objects.get(path=path.path, harvester__id=self.harvester.id).stable_time, + 1 + ) + print("OK") + + +if __name__ == '__main__': + unittest.main() diff --git a/backend/galvanalyser/database/util/iter_file.py b/backend/backend_django/galvanalyser/utils.py similarity index 100% rename from backend/galvanalyser/database/util/iter_file.py rename to backend/backend_django/galvanalyser/utils.py diff --git a/backend/backend_django/galvanalyser/views.py b/backend/backend_django/galvanalyser/views.py new file mode 100644 index 00000000..699ac2da --- /dev/null +++ b/backend/backend_django/galvanalyser/views.py @@ -0,0 +1,815 @@ +import knox.auth +from django.db.models import Q +from .serializers import HarvesterSerializer, \ + HarvesterConfigSerializer, \ + MonitoredPathSerializer, \ + ObservedFileSerializer, \ + CellSerializer, \ + CellFamilySerializer, \ + DatasetSerializer, \ + EquipmentSerializer, \ + DataUnitSerializer, \ + DataColumnSerializer, \ + DataColumnTypeSerializer, \ + TimeseriesDataSerializer, \ + TimeseriesDataListSerializer, \ + TimeseriesRangeLabelSerializer, \ + UserSerializer, \ + GroupSerializer, \ + HarvestErrorSerializer +from .models import Harvester, \ + HarvestError, \ + MonitoredPath, \ + ObservedFile, \ + Cell, \ + CellFamily, \ + Dataset, \ + Equipment, \ + DataUnit, \ + DataColumnType, \ + DataColumnStringKeys, \ + DataColumn, \ + TimeseriesData, \ + TimeseriesRangeLabel, \ + FileState, VouchFor +from .auth import HarvesterAccess +from django.contrib.auth.models import User, Group +from django.shortcuts import get_object_or_404 +from django.utils import timezone +from django.core import validators +from rest_framework import viewsets, serializers, permissions +from rest_framework.decorators import action +from rest_framework.response import Response +from knox.views import LoginView as KnoxLoginView +from knox.views import LogoutView as KnoxLogoutView +from knox.views import LogoutAllView as KnoxLogoutAllView +from rest_framework.authentication import BasicAuthentication +from drf_spectacular.utils import extend_schema, extend_schema_view, inline_serializer, OpenApiResponse +from .utils import IteratorFile +import json +import time +import logging + +logger = logging.getLogger(__name__) +logger.addHandler(logging.StreamHandler()) + + +def checkpoint(msg: str, t: float, log_fun=logger.warning) -> float: + t2 = time.time() + log_fun(f"{msg} (in {round(t2 - t, 2)}s)") + return t2 + + +def error_response(error: str, status: int = 400) -> Response: + return Response({'error': error}, status=status) + + +def deserialize_datetime(serialized_value: str | float) -> timezone.datetime: + if isinstance(serialized_value, str): + return timezone.make_aware(timezone.datetime.fromisoformat(serialized_value)) + if isinstance(serialized_value, float): + return timezone.make_aware(timezone.datetime.fromtimestamp(serialized_value)) + raise TypeError + + +@extend_schema( + description="Log in to retrieve a Knox Token for use elsewhere in the API.", + responses={ + 200: inline_serializer( + name='KnoxUser', + fields={ + 'expiry': serializers.DateTimeField(), + 'token': serializers.CharField(), + 'user': UserSerializer + } + ), + 401: OpenApiResponse(description='Invalid username/password'), + }, + request=None +) +class LoginView(KnoxLoginView): + permission_classes = [permissions.AllowAny] + authentication_classes = [BasicAuthentication] + + def post(self, request, fmt=None): + if isinstance(request.user, User): + return super(LoginView, self).post(request=request, format=fmt) + return Response({'detail': "Anonymous login not allowed"}, status=401) + + +@extend_schema( + description="Log out current Knox Token.", + responses={204: None, 401: OpenApiResponse(description='Unauthorized')}, + request=None +) +class LogoutView(KnoxLogoutView): + authentication_classes = [knox.auth.TokenAuthentication] + + +@extend_schema( + description="Log out all Knox Tokens.", + responses={204: None, 401: OpenApiResponse(description='Unauthorized')}, + request=None +) +class LogoutAllView(KnoxLogoutAllView): + authentication_classes = [knox.auth.TokenAuthentication] + + +class HarvesterViewSet(viewsets.ModelViewSet): + """ + Harvesters monitor a set of MonitoredPaths and send reports about ObservedFiles + within those paths. + A Harvester has Users and Admins, managed by Django's inbuilt User and Group models. + + When Harvesters communicate with the API they do so using special Harvester API Keys. + These provide access to the report and configuration endpoints. + + Harvesters are created by a separate software package available within Galvanalyser. + """ + permission_classes = [HarvesterAccess] + serializer_class = HarvesterSerializer + filterset_fields = ['name'] + search_fields = ['@name'] + queryset = Harvester.objects.none().order_by('-last_check_in', '-id') + + def get_queryset(self): + user_groups = self.request.user.groups.all() + # Allow access to Harvesters where we have a Path + path_harvesters = [p.harvester.id for p in MonitoredPath.objects.filter( + Q(user_group__in=user_groups) | Q(admin_group__in=user_groups) + )] + my_harvesters = Harvester.objects.filter( + Q(user_group__in=user_groups) | + Q(admin_group__in=user_groups) | + Q(id__in=path_harvesters) + ) + return my_harvesters.order_by('-last_check_in', '-id') + + def create(self, request, *args, **kwargs): + """ + Create a Harvester and the user Groups required to control it. + """ + # TODO: move to serializer? + # Validate input + if not request.data.get('name'): + return error_response('No name specified for Harvester.') + if not request.data.get('user'): + return error_response('No administrator id specified for Harvester.') + if len(Harvester.objects.filter(name=request.data['name'])): + return error_response('Harvester with that name already exists') + if len(User.objects.filter(id=int(request.data['user']))) != 1: + return error_response('No user exists with id {request.data["user"]}') + + # Create Harvester + harvester = Harvester.objects.create(name=request.data['name']) + # Create user/admin groups + harvester.user_group = Group.objects.create(name=f"harvester_{harvester.id}_users") + harvester.admin_group = Group.objects.create(name=f"harvester_{harvester.id}_admins") + harvester.save() + # Add user as admin + user = User.objects.get(id=int(request.data['user'])) + user.groups.add(harvester.admin_group) + user.save() + + return Response(HarvesterConfigSerializer(harvester, context={'request': request}).data) + + def update(self, request, *args, **kwargs): + """Update Harvester properties.""" + try: + harvester = Harvester.objects.get(id=kwargs.get('pk')) + except Harvester.DoesNotExist: + return error_response(f'Harvester with id {request.data["id"]} not found.') + if not request.user.groups.contains(harvester.admin_group): + return error_response(f'Access denied.') + + name = request.data.get('name') + if name != harvester.name: + if Harvester.objects.filter(name=name).exists(): + return error_response(f'Another Harvester already has the name {name}') + harvester.name = name + sleep_time = request.data.get('sleep_time', None) + if sleep_time is not None: + try: + sleep_time = int(sleep_time) + assert sleep_time > 0 + except (TypeError, ValueError, AssertionError): + return error_response('sleep_time must be an integer greater than 0') + if sleep_time != harvester.sleep_time: + harvester.sleep_time = sleep_time + + harvester.save() + return Response(self.get_serializer(harvester).data) + + # TODO: handle harvester envvars? + + @action(detail=True, methods=['GET']) + def config(self, request, pk: int = None): + """ + Return a full configuration file including MonitoredPaths under paths. + + Only available to Harvesters. + """ + harvester = get_object_or_404(Harvester, id=pk) + return Response(HarvesterConfigSerializer(harvester, context={'request': request}).data) + + @action(detail=True, methods=['POST']) + def report(self, request, pk: int = None): + """ + Process a Harvester's report on its activity. + This will spawn various other database updates depending on payload content. + + Only Harvesters are authorised to issue reports. + """ + harvester = get_object_or_404(Harvester, id=pk) + harvester.last_check_in = timezone.now() + harvester.save() + if request.data.get('status') is None: + return error_response('Badly formatted request') + try: + path = MonitoredPath.objects.get(path=request.data['path'], harvester=harvester) + except MonitoredPath.DoesNotExist: + return error_response('Unrecognized path') + except KeyError: + return error_response('Harvester report must specify a path') + if request.data['status'] == 'error': + error = request.data.get('error') + if not isinstance(error, str): + try: + error = json.dumps(error) + except json.JSONDecodeError: + error = str(error) + file_rel_path = request.data.get('file') + if file_rel_path: + HarvestError.objects.create( + harvester=harvester, + path=path, + file=ObservedFile.objects.get_or_create( + monitored_path=path, + relative_path=file_rel_path, + defaults={'state': FileState.IMPORT_FAILED} + )[0], + error=str(error) + ) + else: + HarvestError.objects.create( + harvester=harvester, + path=path, + error=str(error) + ) + return Response({}) + elif request.data['status'] == 'success': + # Figure out what we succeeded in doing! + content = request.data.get('content') + if content is None: + return error_response('content field required when status=success') + if content['task'] == 'file_size': + # Harvester is reporting the size of a file + # Update our database record and return a file status + file, _ = ObservedFile.objects.get_or_create(monitored_path=path, relative_path=request.data['file']) + + if content.get('size') is None: + return error_response('file_size task requires content to include size field') + + size = content['size'] + if size < file.last_observed_size: + file.state = FileState.UNSTABLE + elif size > file.last_observed_size: + file.state = FileState.GROWING + + if size != file.last_observed_size: + file.last_observed_size = size + file.last_observed_time = timezone.now() + else: + # Recent changes + if file.last_observed_time + timezone.timedelta(seconds=path.stable_time) > timezone.now(): + file.state = FileState.UNSTABLE + # Stable file -- already imported? + elif file.state not in [FileState.IMPORTED, FileState.IMPORT_FAILED]: + file.state = FileState.STABLE + + file.save() + return Response(ObservedFileSerializer(file, context={'request': self.request}).data) + elif content['task'] == 'import': + try: + file = ObservedFile.objects.get(monitored_path=path, relative_path=request.data['file']) + except ObservedFile.DoesNotExist: + return error_response("ObservedFile does not exist") + if content['status'] in ['begin', 'in_progress', 'complete']: + try: + if content['status'] == 'begin': + file.state = FileState.IMPORTING + date = deserialize_datetime(content['test_date']) + # process metadata under 'begin' + core_metadata = content['core_metadata'] + extra_metadata = content['extra_metadata'] + defaults = {} + if 'Machine Type' in core_metadata: + defaults['type'] = core_metadata['Machine Type'] + if 'Dataset Name' in core_metadata: + defaults['name'] = core_metadata['Dataset Name'] + defaults['json_data'] = {} + if 'num_rows' in core_metadata: + defaults['json_data']['num_rows'] = core_metadata['num_rows'] + if 'first_sample_no' in core_metadata: + defaults['json_data']['first_sample_no'] = core_metadata['first_sample_no'] + if 'last_sample_no' in core_metadata: + defaults['json_data']['last_sample_no'] = core_metadata['last_sample_no'] + defaults['json_data'] = {**defaults['json_data'], **extra_metadata} + + dataset, _ = Dataset.objects.get_or_create( + defaults=defaults, + file=file, + date=date + ) + elif content['status'] == 'complete': + if file.state == FileState.IMPORTING: + file.state = FileState.IMPORTED + else: + time_start = time.time() + date = deserialize_datetime(content['test_date']) + dataset = Dataset.objects.get(file=file, date=date) + for column_data in content['data']: + time_col_start = time.time() + logger.warning(f"Column {column_data.get('column_name', column_data.get('column_id'))}") + try: + column_type = DataColumnType.objects.get(id=column_data['column_id']) + column, _ = DataColumn.objects.get_or_create( + name=column_type.name, + type=column_type, + dataset=dataset + ) + except KeyError: + if 'unit_id' in column_data: + unit = DataUnit.objects.get(id=column_data['unit_id']) + else: + unit, _ = DataUnit.objects.get_or_create(symbol=column_data['unit_symbol']) + try: + column_type = DataColumnType.objects.get(unit=unit) + except DataColumnType.DoesNotExist: + column_type = DataColumnType.objects.create( + name=column_data['column_name'], + unit=unit + ) + column, _ = DataColumn.objects.get_or_create( + name=column_data['column_name'], + type=column_type, + dataset=dataset + ) + # Create a value map for string data + if 'value_map' in column_data: + time_value_rm = time.time() + DataColumnStringKeys.objects.filter(column=column).delete() + time_value_add = checkpoint('deleted existing value map', time_value_rm) + DataColumnStringKeys.objects.bulk_create( + [DataColumnStringKeys(string=k, key=v, column=column) + for k, v in column_data['value_map'].items()] + ) + checkpoint('created value map', time_value_add) + + time_ts_prep = time.time() + from django.db import connection + + rows = [] + for s, v in column_data['values'].items(): + rows.append(f"{int(s)}\t{column.id}\t{int(v)}") + + iter_file = IteratorFile(rows.__iter__()) + time_ts_add = checkpoint('prepared ts objects', time_ts_prep) + with connection.cursor() as cursor: + cursor.copy_expert( + 'COPY timeseries_data FROM STDIN', + iter_file + ) + checkpoint('created timeseries data', time_ts_add) + checkpoint('column complete', time_col_start) + + checkpoint('complete', time_start) + except BaseException as e: + file.state = FileState.IMPORT_FAILED + HarvestError.objects.create(harvester=harvester, path=path, file=file, error=str(e)) + file.save() + return error_response(f"Error importing data: {e.args}") + if content['status'] == 'failed': + file.state = FileState.IMPORT_FAILED + + file.save() + + return Response(ObservedFileSerializer(file, context={ + 'request': self.request, + 'with_upload_info': content['status'] == 'begin' + }).data) + else: + return error_response('Unrecognised task') + else: + return error_response('Unrecognised status') + + +class MonitoredPathViewSet(viewsets.ModelViewSet): + """ + A MonitoredPath refers to a directory accessible by a Harvester in which + data files will reside. Those files will be scanned periodically by the Harvester, + becoming ObservedFiles once they are reported to Galvanalyser by the Harvester. + + MonitoredPaths can be created or updated by a Harvester's admins and users, as + well as any users who have been given explicit permissions to edit the MonitoredPath. + """ + serializer_class = MonitoredPathSerializer + filterset_fields = ['path', 'harvester__id', 'harvester__name'] + search_fields = ['@path'] + queryset = MonitoredPath.objects.none().order_by('-id') + + # Access restrictions + def get_queryset(self): + return MonitoredPath.objects.filter( + Q(user_group__in=self.request.user.groups.all()) | + Q(admin_group__in=self.request.user.groups.all()) | + Q(harvester__admin_group__in=self.request.user.groups.all()) + ).order_by('-id') + + def create(self, request, *args, **kwargs): + """ + Create a MonitoredPath for a Harvester and the user Groups required to control it. + """ + + # Validate input + path = str(request.data.get('path')).lower().lstrip().rstrip() + if not path: + return error_response('No path specified.') + try: + harvester = Harvester.objects.get(id=request.data['harvester']) + except (Harvester.DoesNotExist, AttributeError): + return error_response('Harvester not found.') + if len(MonitoredPath.objects.filter(path=path, harvester=harvester)): + return error_response('Path already exists on Harvester.') + # Check user is authorised to create paths on Harvester + if not request.user.groups.filter(id=harvester.user_group_id).exists() and \ + not request.user.groups.filter(id=harvester.admin_group_id).exists(): + return error_response(f'Permission denied to {request.user.username} for {harvester.name}') + + # Create Path + try: + stable_time = int(request.data['stable_time']) + monitored_path = MonitoredPath.objects.create(path=path, harvester=harvester, stable_time=stable_time) + except (TypeError, ValueError): + monitored_path = MonitoredPath.objects.create(path=path, harvester=harvester) + # Create user/admin groups + monitored_path.user_group = Group.objects.create(name=f"path_{harvester.id}_{monitored_path.id}_users") + monitored_path.admin_group = Group.objects.create(name=f"path_{harvester.id}_{monitored_path.id}_admins") + monitored_path.save() + # Add user as admin + request.user.groups.add(monitored_path.admin_group) + + return Response(self.get_serializer(monitored_path).data) + + def update(self, request, *args, **kwargs): + try: + path = MonitoredPath.objects.get(id=kwargs.get('pk')) + except MonitoredPath.DoesNotExist: + return error_response(f'Path with id {request.data["id"]} not found.') + if not request.user.groups.filter(id=path.admin_group_id).exists(): + if not request.user.groups.filter(id=path.harvester.admin_group_id).exists(): + return error_response(f'Access denied.') + + path_str = request.data.get('path') + if path_str != path.path: + if MonitoredPath.objects.filter(path=path_str, harvester=path.harvester).exists(): + return error_response(f'Path {path_str} already exists on {path.harvester.name}') + path.path = path_str + stable_time = request.data.get('stable_time', None) + if stable_time is not None: + try: + stable_time = int(stable_time) + assert stable_time > 0 + except (TypeError, ValueError, AssertionError): + return error_response('stable_time must be an integer greater than 0') + if stable_time != path.stable_time: + path.stable_time = stable_time + + path.save() + return Response(self.get_serializer(path).data) + + +class ObservedFileViewSet(viewsets.ModelViewSet): + """ + ObservedFiles are files that exist (or have existed) in a MonitoredPath and have + been reported to Galvanalyser by the Harvester. + + An ObservedFile instance will have file metadata (size, modification time), and a + status representing its import state. It may be linked to HarvestErrors + encountered while importing the file, and/or to Datasets representing the content + of imported files. + """ + serializer_class = ObservedFileSerializer + filterset_fields = ['monitored_path__id', 'relative_path', 'state'] + search_fields = ['@monitored_path__path', '@relative_path', 'state'] + queryset = ObservedFile.objects.none().order_by('-last_observed_time', '-id') + + # Access restrictions + def get_queryset(self): + return ObservedFile.objects.filter( + Q(monitored_path__user_group__in=self.request.user.groups.all()) | + Q(monitored_path__admin_group__in=self.request.user.groups.all()) | + Q(monitored_path__harvester__admin_group__in=self.request.user.groups.all()) + ).order_by('-last_observed_time', '-id') + + @action(detail=True, methods=['GET']) + def reimport(self, request, pk: int = None): + try: + file = self.get_queryset().get(id=pk) + except ObservedFile.DoesNotExist: + return error_response('Requested file not found') + file.state = FileState.RETRY_IMPORT + file.save() + return Response(self.get_serializer(file, context={'request': request}).data) + + +class DatasetViewSet(viewsets.ModelViewSet): + """ + A Dataset contains structured data from an ObservedFile. + + Datasets are decomposed within Galvanalyser into columns and datapoints, + providing an ability flexibly handle any kind of tabular data. + """ + serializer_class = DatasetSerializer + filterset_fields = ['name', 'type', 'cell__family__name'] + search_fields = ['@name', 'type'] + queryset = Dataset.objects.none().order_by('-date', '-id') + + # Access restrictions + def get_queryset(self): + return Dataset.objects.filter( + Q(file__monitored_path__user_group__in=self.request.user.groups.all()) | + Q(file__monitored_path__admin_group__in=self.request.user.groups.all()) | + Q(file__monitored_path__harvester__admin_group__in=self.request.user.groups.all()) + ).order_by('-date', '-id') + + +class HarvestErrorViewSet(viewsets.ReadOnlyModelViewSet): + """ + HarvestErrors are problems encountered by Harvesters during the crawling of + MonitoredPaths or the importing or inspection of ObservedFiles. + """ + serializer_class = HarvestErrorSerializer + filterset_fields = ['file', 'path', 'harvester'] + search_fields = ['@error'] + queryset = HarvestError.objects.none().order_by('-timestamp') + + # Access restrictions + def get_queryset(self): + return HarvestError.objects.filter( + Q(path__user_group__in=self.request.user.groups.all()) | + Q(path__admin_group__in=self.request.user.groups.all()) | + Q(harvester__admin_group__in=self.request.user.groups.all()) + ).order_by('-timestamp') + + +class CellFamilyViewSet(viewsets.ModelViewSet): + """ + CellFamilies describe types of Cell. + """ + serializer_class = CellFamilySerializer + filterset_fields = [ + 'name', 'form_factor', 'anode_chemistry', 'cathode_chemistry', 'nominal_capacity', + 'nominal_cell_weight', 'manufacturer' + ] + search_fields = ['@name', '@manufacturer', 'form_factor'] + queryset = CellFamily.objects.all().order_by('-id') + + +class CellViewSet(viewsets.ModelViewSet): + """ + Cells are specific cells which have generated data stored in Datasets/ObservedFiles. + """ + serializer_class = CellSerializer + filterset_fields = ['display_name', 'uid', 'family__id'] + search_fields = ['@display_name'] + queryset = Cell.objects.all().order_by('-id') + + +class EquipmentViewSet(viewsets.ModelViewSet): + """ + Equipment can be attached to Datasets and used to view Datasets which + have used similar equipment. + """ + serializer_class = EquipmentSerializer + queryset = Equipment.objects.all() + + +class DataUnitViewSet(viewsets.ReadOnlyModelViewSet): + """ + DataUnits are units used to characterise data in a DataColumn. + """ + serializer_class = DataUnitSerializer + filterset_fields = ['name', 'symbol', 'is_default'] + search_fields = ['@name', '@symbol', '@description'] + queryset = DataUnit.objects.all().order_by('id') + + +class DataColumnTypeViewSet(viewsets.ReadOnlyModelViewSet): + """ + DataColumnTypes support reuse of DataColumns over multiple DataSets + by abstracting their information. + """ + serializer_class = DataColumnTypeSerializer + filterset_fields = ['name', 'unit__symbol', 'unit__name', 'is_default'] + search_fields = ['@name', '@description'] + queryset = DataColumnType.objects.all().order_by('id') + + +class DataColumnViewSet(viewsets.ReadOnlyModelViewSet): + """ + DataColumns describe which columns are in a Dataset's data. + """ + serializer_class = DataColumnSerializer + filterset_fields = ['dataset__name', 'type__unit__symbol'] + search_fields = ['@dataset__name'] + queryset = DataColumn.objects.all() + + def get_queryset(self): + datasets_ids = [d.id for d in Dataset.objects.filter( + Q(file__monitored_path__user_group__in=self.request.user.groups.all()) | + Q(file__monitored_path__admin_group__in=self.request.user.groups.all()) | + Q(file__monitored_path__harvester__admin_group__in=self.request.user.groups.all()) + ).only('id')] + return DataColumn.objects.filter(dataset_id__in=datasets_ids) + + @action(methods=['GET'], detail=True) + def data(self, request, pk: int = None): + """ + Fetch the data for this column in an 'observations' dictionary of record_id: observed_value pairs. + """ + column = get_object_or_404(DataColumn, id=pk) + return Response(TimeseriesDataSerializer(column, context={'request': self.request}).data) + + @action(methods=['GET'], detail=True) + def data_list(self, request, pk: int = None): + """ + Fetch the data for this column in an 'observations' dictionary of record_id: observed_value pairs. + """ + column = get_object_or_404(DataColumn, id=pk) + return Response(TimeseriesDataListSerializer(column, context={'request': self.request}).data) + + +class TimeseriesRangeLabelViewSet(viewsets.ModelViewSet): + """ + TimeseriesRangeLabels mark contiguous observations using start and endpoints. + """ + serializer_class = TimeseriesRangeLabelSerializer + queryset = TimeseriesRangeLabel.objects.all() + + +class InactiveViewSet(viewsets.ModelViewSet): + """ + Users are Django User instances custom-serialized for convenience. + + New users can be created at will, but they will be marked as is_active=False + until vouched for by an existing active user. + """ + serializer_class = UserSerializer + queryset = User.objects.filter(is_active=False) + + def create(self, request, *args, **kwargs): + # TODO: Move to serializer so only wanted fields appear in Django web form? + try: + username = request.data['username'] + email = validators.validate_email(request.data['email']) + password = request.data['password'] + except (KeyError, validators.ValidationError): + return error_response(f"Username, email, and password fields required.") + if User.objects.filter(username=username).exists(): + return error_response(f"User {username} already exists.") + try: + new_user = User.objects.create_user(username=username, email=email, password=password, is_active=False) + except: + return error_response(error='Error creating user') + return Response(UserSerializer(new_user, context={'request': request}).data) + + @action(methods=['GET'], detail=True) + def vouch_for(self, request, pk: int = None): + try: + new_user = User.objects.get(id=pk) + except User.DoesNotExist: + return error_response(f"User not found") + VouchFor.objects.create(new_user=new_user, vouching_user=request.user) + new_user.is_active = True + new_user.save() + return Response(UserSerializer(new_user, context={'request': request}).data) + + +class UserViewSet(viewsets.ReadOnlyModelViewSet): + """ + Users are Django User instances custom-serialized for convenience. + """ + serializer_class = UserSerializer + queryset = User.objects.filter(is_active=True) + + +class GroupViewSet(viewsets.ReadOnlyModelViewSet): + """ + Groups are Django Group instances custom-serialized for convenience. + """ + serializer_class = GroupSerializer + queryset = Group.objects.none().order_by('-id') + + def get_queryset(self): + return self.request.user.groups.all().order_by('-id') + + @action(detail=True, methods=['POST']) + def remove(self, request, pk: int = None): + # A user can be removed from a group if: + # 1. The user removing them is an admin on that group or a senior group, AND + # 2. The harvester's admin group will not be left without any members + + # Determine what kind of group we're in + try: + group = Group.objects.get(id=pk) + except Group.DoesNotExist: + return error_response(f"Group {pk} not found") + + def drop_user(target_group: Group, request): + try: + user = User.objects.get(id=request.data.get('user')) + except User.DoesNotExist: + return error_response(f"Could not find user {request.data.get('user')}") + if not target_group.user_set.contains(user): + return error_response(f"That user is not in that group") + target_group.user_set.remove(user) + return Response(GroupSerializer(target_group, context={'request': request}).data) + + if group.editable_harvesters.first() is not None: + if not group.user_set.contains(self.request.user): + return error_response(f"You are not authorised to edit this group") + if len(group.user_set.all()) <= 1: + return error_response(f"Removing that user would leave the group empty") + return drop_user(group, self.request) + + if group.readable_harvesters.first() is not None: + harvester = group.readable_harvesters.first() + if not group.user_set.contains(self.request.user) \ + and not harvester.admin_group.user_set.contains(self.request.user): + return error_response(f"You are not authorised to edit this group") + return drop_user(group, self.request) + + if group.editable_paths.first() is not None: + path = group.editable_paths.first() + if not group.user_set.contains(self.request.user) \ + and not path.harvester.admin_group.user_set.contains(self.request.user): + return error_response(f"You are not authorised to edit this group") + return drop_user(group, self.request) + + if group.readable_paths.first() is not None: + path = group.readable_paths.first() + if not group.user_set.contains(self.request.user) \ + and not path.admin_group.user_set.contains(self.request.user) \ + and not path.harvester.admin_group.user_set.contains(self.request.user): + return error_response(f"You are not authorised to edit this group") + return drop_user(group, self.request) + + return error_response(f"Not a valid group for editing") + + @action(detail=True, methods=['POST']) + def add(self, request, pk: int = None): + # Determine what kind of group we're in + try: + group = Group.objects.get(id=pk) + except Group.DoesNotExist: + return error_response(f"Group {pk} not found") + + def add_user(target_group: Group, request): + try: + user = User.objects.get(id=request.data.get('user')) + except User.DoesNotExist: + return error_response(f"Could not find user {request.data.get('user')}") + if target_group.user_set.contains(user): + return error_response(f"That user is already in that group") + target_group.user_set.add(user) + return Response(GroupSerializer(target_group, context={'request': request}).data) + + if group.editable_harvesters.first() is not None: + if not group.user_set.contains(self.request.user): + return error_response(f"You are not authorised to edit this group") + return add_user(group, self.request) + + if group.readable_harvesters.first() is not None: + harvester = group.readable_harvesters.first() + if not group.user_set.contains(self.request.user) \ + and not harvester.admin_group.user_set.contains(self.request.user): + return error_response(f"You are not authorised to edit this group") + return add_user(group, self.request) + + if group.editable_paths.first() is not None: + path = group.editable_paths.first() + if not group.user_set.contains(self.request.user) \ + and not path.harvester.admin_group.user_set.contains(self.request.user): + return error_response(f"You are not authorised to edit this group") + return add_user(group, self.request) + + if group.readable_paths.first() is not None: + path = group.readable_paths.first() + if not group.user_set.contains(self.request.user) \ + and not path.admin_group.user_set.contains(self.request.user) \ + and not path.harvester.admin_group.user_set.contains(self.request.user): + return error_response(f"You are not authorised to edit this group") + return add_user(group, self.request) + + return error_response(f"Not a valid group for editing") diff --git a/backend/backend_django/manage.py b/backend/backend_django/manage.py new file mode 100644 index 00000000..8e7ac79b --- /dev/null +++ b/backend/backend_django/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/backend/db.sqlite3 b/backend/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..46b5aa945b96a89b990271da4f668de37b670c1f GIT binary patch literal 131072 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 O009sH0T37}0{;&=mG%Gt literal 0 HcmV?d00001 diff --git a/backend/galvanalyser/__init__.py b/backend/galvanalyser/__init__.py deleted file mode 100644 index 32871bab..00000000 --- a/backend/galvanalyser/__init__.py +++ /dev/null @@ -1,206 +0,0 @@ -# SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2020, The Chancellor, Masters and Scholars of the University -# of Oxford, and the 'Galvanalyser' Developers. All rights reserved. - -import os -import flask -from celery import Celery -import psycopg2 -from urllib.parse import urlparse -from flask_jwt_extended import JWTManager -from datetime import timedelta - -import flask -from flask_jwt_extended import JWTManager -import flask_cors - -from sqlalchemy import create_engine -from sqlalchemy.orm import sessionmaker - -from flask.json import JSONEncoder - -from intervals import IntInterval -from infinity import is_infinite - -import os - - -def get_db_connection(host, port, name, user, password): - return psycopg2.connect( - host=host, - port=port, - database=name, - user=user, - password=password, - ) - - -def create_config(): - redash = urlparse(os.getenv('REDASH_DATABASE_URL')) - - config = { - "GALVANISER_DATABASE": { - "NAME": "galvanalyser", - "PORT": 5433, - "HOST": "postgres", - "USER": "postgres", - "PASSWORD": os.getenv('POSTGRES_PASSWORD'), - }, - - "REDASH_DATABASE": { - "NAME": redash.path[1:], - "PORT": redash.port, - "HOST": redash.hostname, - "USER": redash.username, - "PASSWORD": redash.password, - "URL": os.getenv('REDASH_DATABASE_URL'), - }, - "DEFAULT_HARVESTER": { - "NAME": os.getenv("GALVANALYSER_HARVESTER_NAME"), - "PASSWORD": os.getenv("GALVANALYSER_HARVESTER_PWD"), - "MACHINE_ID": "server", - "BASE_PATH": "/usr/data", - "INSTITUTION": os.getenv("GALVANALYSER_HARVESTER_INSTITUTION"), - }, - "DEFAULT_USER": { - "NAME": os.getenv("GALVANALYSER_USER_NAME"), - "PASSWORD": os.getenv("GALVANALYSER_USER_PWD"), - }, - "SECRET_KEY": os.getenv("GALVANALYSER_SECRET_KEY"), - } - - config['SQLALCHEMY_DATABASE_URI'] = \ - 'postgresql://{}:{}@{}:{}/{}'.format( - config['GALVANISER_DATABASE']['USER'], - config['GALVANISER_DATABASE']['PASSWORD'], - config['GALVANISER_DATABASE']['HOST'], - config['GALVANISER_DATABASE']['PORT'], - config['GALVANISER_DATABASE']['NAME'], - ) - config['SQLALCHEMY_BINDS'] = { - 'harvester': 'postgresql://{}:{}@{}:{}/{}'.format( - config['DEFAULT_HARVESTER']['NAME'], - config['DEFAULT_HARVESTER']['PASSWORD'], - config['GALVANISER_DATABASE']['HOST'], - config['GALVANISER_DATABASE']['PORT'], - config['GALVANISER_DATABASE']['NAME'], - ), - } - - config['SQLALCHEMY_ECHO'] = True - config['SQLCHEMY_TRACK_MODIFICATIONS'] = False - - def get_db_connection_for_superuser(): - return get_db_connection( - config['GALVANISER_DATABASE']['HOST'], - config['GALVANISER_DATABASE']['PORT'], - config['GALVANISER_DATABASE']['NAME'], - config['GALVANISER_DATABASE']['USER'], - config['GALVANISER_DATABASE']['PASSWORD'] - ) - - def get_db_connection_for_user(username, password): - return get_db_connection( - config['GALVANISER_DATABASE']['HOST'], - config['GALVANISER_DATABASE']['PORT'], - config['GALVANISER_DATABASE']['NAME'], - username, - password - ) - - config["GET_DATABASE_CONN_FOR_SUPERUSER"] = get_db_connection_for_superuser - config["GET_DATABASE_CONN_FOR_USER"] = get_db_connection_for_user - - # flask-jwt-extended - config["JWT_TOKEN_LOCATION"] = ["headers", "cookies", "json", "query_string"] - - # change to true in production - config["JWT_COOKIE_SECURE"] = False - - config["JWT_SECRET_KEY"] = config['SECRET_KEY'] - config["JWT_ACCESS_COOKIE_NAME"] = 'access_token_cookie' - config["JWT_REFRESH_COOKIE_NAME"] = 'refresh_token_cookie' - config["JWT_COOKIE_DOMAIN"] = None - config["JWT_COOKIE_SAMESITE"] = None - config["JWT_ACCESS_TOKEN_EXPIRES"] = timedelta(hours=1) - config["JWT_ACCESS_COOKIE_PATH"] = '/' - config["JWT_REFRESH_COOKIE_PATH"] = '/' - config["JWT_SESSION_COOKIE"] = True - config["JWT_COOKIE_CSRF_PROTECT"] = True - - config["JWT_CSRF_IN_COOKIES"] = True - - # celery config - config['CELERY_BROKER_URL'] = os.getenv('RABBITMQ_URL') - config['CELERY_RESULT_BACKEND'] = os.getenv('REDIS_URL') - - return config - - -def make_celery(app): - celery = Celery( - app.import_name, - backend=app.config['CELERY_RESULT_BACKEND'], - broker=app.config['CELERY_BROKER_URL'] - ) - celery.conf.update(app.config) - - class ContextTask(celery.Task): - def __call__(self, *args, **kwargs): - with app.app_context(): - return self.run(*args, **kwargs) - - celery.Task = ContextTask - return celery - -def init_database(config): - engine = create_engine(config['SQLALCHEMY_DATABASE_URI']) - harvester_engine = \ - create_engine(config['SQLALCHEMY_BINDS']['harvester']) - return sessionmaker(engine), sessionmaker(harvester_engine) - -class CustomJSONEncoder(JSONEncoder): - def default(self, obj): - if isinstance(obj, IntInterval): - lower = obj.lower - upper = obj.upper - if is_infinite(lower): - lower = -1 - if is_infinite(upper): - upper = -1 - return [lower, upper] - return JSONEncoder.default(self, obj) - - -app = flask.Flask(__name__) - -app.json_encoder = CustomJSONEncoder - -app.config.from_mapping( - create_config(), -) - -Session, HarvesterSession = init_database(app.config) - - -JWTManager(app) - -celery = make_celery(app) - -# ensure the instance folder exists -try: - os.makedirs(app.instance_path) -except OSError: - pass - - -with app.app_context(): - # Import parts of our core Flask app - from galvanalyser import routes - -# match redash secret_key -app.secret_key = os.getenv('REDASH_COOKIE_SECRET') - -# Initializes CORS so that the api can talk to the react app -cors = flask_cors.CORS() -cors.init_app(app) diff --git a/backend/galvanalyser/database/__init__.py b/backend/galvanalyser/database/__init__.py deleted file mode 100644 index 3ca35272..00000000 --- a/backend/galvanalyser/database/__init__.py +++ /dev/null @@ -1,249 +0,0 @@ -import psycopg2 -from psycopg2 import sql -import string -import os -from .row import Row - -from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy import create_engine -Base = declarative_base() - -from .harvester import ( - HarvesterRow, - MonitoredPathRow, -) - - -def create_harvester_user(config, harvester, password, test=False): - conn = _create_superuser_connection(config) - - if test: - role = 'test_harvester' - else: - role = 'harvester' - - # create harvester user - _create_user(conn, harvester, password, role) - - conn.close() - - -def create_machine_id(config, machine_id, harvester_name): - conn = _create_superuser_connection(config) - - # if machine_id does not already exist then create it - harvester = HarvesterRow.select_from_machine_id(machine_id, conn) - if harvester is None: - HarvesterRow(machine_id, harvester_name).insert(conn) - - conn.commit() - conn.close() - - -def add_machine_path(config, machine_id, path, users): - conn = _create_superuser_connection(config) - - harvester = HarvesterRow.select_from_machine_id(machine_id, conn) - if harvester is None: - raise RuntimeError( - 'machine_id "{}" does not exist'.format(machine_id) - ) - - MonitoredPathRow( - harvester.id, - users, - path - ).insert(conn) - - conn.commit() - conn.close() - -def edit_machine_path(config, machine_id): - conn = _create_superuser_connection(config) - - harvester = HarvesterRow.select_from_machine_id(machine_id, conn) - if harvester is None: - raise RuntimeError( - 'machine_id "{}" does not exist'.format(machine_id) - ) - - paths = MonitoredPathRow.select_from_harvester_id(harvester.id, conn) - print('Monitored paths for machine "{}" are:'.format(machine_id)) - for i, path in enumerate(paths): - print(' {}. {}'.format(i, path.path.replace('/usr/data/', ''))) - while True: - index = input('Type the path number you wish to edit: ') - try: - index = int(index) - break - except ValueError: - print( - 'Error: {} could not be converted to an integer'.format(index) - ) - - monitored_for = paths[index].monitored_for - paths[index].delete(conn) - conn.commit() - - while True: - path = input( - 'Type the new path (an empty path removes this monitored path): ' - ) - if os.path.isabs(path): - print( - 'Please enter a relative path ' - 'to GALVANALYSER_HARVESTER_BASE_PATH' - ) - elif path == '': - return - else: - path = '/usr/data/' + path - break - - MonitoredPathRow( - harvester.id, - monitored_for, - path - ).insert(conn) - - conn.commit() - conn.close() - - -def create_database(config, test=False): - print('Creating database....') - _create(config) - print('Applying initial migrations....') - _setup(config, test) - print('Finished creating database.') - - -def _create_user(conn, username, password, role='normal_user'): - with conn.cursor() as cur: - # drop user if they exist - user_ident = sql.Identifier(username) - cur.execute( - sql.SQL("DROP USER IF EXISTS {user}").format(user=user_ident) - ) - # create user - user_type = sql.Identifier(role) - cur.execute(sql.SQL( - """ - CREATE USER {user} WITH - LOGIN - NOSUPERUSER - INHERIT - NOCREATEDB - NOCREATEROLE - NOREPLICATION - PASSWORD %(passwd)s; - GRANT {type} TO {user}; - """ - ).format(user=user_ident, type=user_type), - {'passwd': password}) - conn.commit() - - -def _database_exists(cur, name): - cur.execute("SELECT datname FROM pg_database;") - return (name,) in cur.fetchall() - - -def _create_superuser_connection(config): - return psycopg2.connect( - host=config["GALVANISER_DATABASE"]["HOST"], - port=config["GALVANISER_DATABASE"]["PORT"], - database=config["GALVANISER_DATABASE"]["NAME"], - user=config["GALVANISER_DATABASE"]["USER"], - password=config["GALVANISER_DATABASE"]["PASSWORD"], - ) - - -def _create(config): - conn = psycopg2.connect( - host=config["GALVANISER_DATABASE"]["HOST"], - port=config["GALVANISER_DATABASE"]["PORT"], - database="postgres", - user=config["GALVANISER_DATABASE"]["USER"], - password=config["GALVANISER_DATABASE"]["PASSWORD"], - ) - - conn.autocommit = True - db_name = config["GALVANISER_DATABASE"]["NAME"] - with conn.cursor() as cur: - if _database_exists(cur, db_name): - print( - 'in create():"{}" database already exists, dropping'.format(db_name) - ) - cur.execute( - sql.SQL( - "DROP DATABASE {db_name};" - ).format(db_name=sql.Identifier(db_name))) - - cur.execute(sql.SQL(""" - CREATE DATABASE {db_name} - WITH - OWNER = postgres - ENCODING = 'UTF8' - LC_COLLATE = 'en_US.utf8' - LC_CTYPE = 'en_US.utf8' - TABLESPACE = pg_default - CONNECTION LIMIT = -1; - """).format(db_name=sql.Identifier(db_name))) - - conn.close() - - -def _setup(config, test=False): - conn = _create_superuser_connection(config) - if test: - harvester_role = 'test_harvester' - else: - harvester_role = 'harvester' - print('using roles', harvester_role) - - with conn.cursor() as cur: - # create roles if they dont exist - cur.execute("SELECT rolname FROM pg_roles;") - roles = cur.fetchall() - for role in [harvester_role]: - if (role,) not in roles: - cur.execute(sql.SQL(""" - CREATE ROLE {role} WITH - NOLOGIN - NOSUPERUSER - INHERIT - NOCREATEDB - NOCREATEROLE - NOREPLICATION; - """).format(role=sql.Identifier(role))) - conn.commit() - - # set timezone - cur.execute( - sql.SQL( - "ALTER DATABASE {db_name} SET timezone TO 'UTC';" - ).format( - db_name=sql.Identifier( - config["GALVANISER_DATABASE"]["NAME"] - ) - ) - ) - - cur.execute("SELECT pg_reload_conf();") - - # create initial database - filename = os.path.join( - os.path.dirname(__file__), - "setup.pgsql" - ) - cur.execute( - string.Template( - open(filename, "r").read() - ).substitute( - harvester_role=harvester_role, - ) - ) - - conn.commit() - conn.close() diff --git a/backend/galvanalyser/database/cell_data/__init__.py b/backend/galvanalyser/database/cell_data/__init__.py deleted file mode 100644 index 3a8bde2e..00000000 --- a/backend/galvanalyser/database/cell_data/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .cell_row import CellRow -from .cell import Cell -from .manufacturer_row import ManufacturerRow diff --git a/backend/galvanalyser/database/cell_data/cell.py b/backend/galvanalyser/database/cell_data/cell.py deleted file mode 100644 index f0ebb6fc..00000000 --- a/backend/galvanalyser/database/cell_data/cell.py +++ /dev/null @@ -1,39 +0,0 @@ -from galvanalyser.database import Base -# from galvanalyser.database.experiment import Dataset -from sqlalchemy import ( - Column, ForeignKey, Integer, String, - DateTime, JSON, Table -) -from sqlalchemy.orm import relationship -from dataclasses import dataclass -from typing import List - - -@dataclass -class Cell(Base): - __tablename__ = 'cell' - __table_args__ = {'schema': 'cell_data'} - - id: int - # datasets: List[Dataset] - name: str - manufacturer: str - form_factor: str - link_to_datasheet: str - anode_chemistry: str - cathode_chemistry: str - nominal_capacity: str - nominal_cell_weight: str - - id = Column(Integer, primary_key=True) - datasets = relationship( - 'Dataset', backref='cell' - ) - name = Column(String) - manufacturer = Column(String) - form_factor = Column(String) - link_to_datasheet = Column(String) - anode_chemistry = Column(String) - cathode_chemistry = Column(String) - nominal_capacity = Column(String) - nominal_cell_weight = Column(String) diff --git a/backend/galvanalyser/database/cell_data/cell_row.py b/backend/galvanalyser/database/cell_data/cell_row.py deleted file mode 100644 index 3a04149f..00000000 --- a/backend/galvanalyser/database/cell_data/cell_row.py +++ /dev/null @@ -1,213 +0,0 @@ -import psycopg2 -from galvanalyser.database import Row - - -class CellRow(Row): - def __init__( - self, - name, - id=None, - manufacturer=None, - form_factor=None, - link_to_datasheet=None, - anode_chemistry=None, - cathode_chemistry=None, - nominal_capacity=None, - nominal_cell_weight=None, - ): - self.id = id - self.name = name - self.manufacturer = manufacturer - self.form_factor = form_factor - self.link_to_datasheet = link_to_datasheet - self.anode_chemistry = anode_chemistry - self.cathode_chemistry = cathode_chemistry - self.nominal_capacity = nominal_capacity - self.nominal_cell_weight = nominal_cell_weight - - def to_dict(self): - obj = { - 'id': self.id, - 'name': self.name, - 'manufacturer': self.manufacturer, - 'form_factor': self.form_factor, - 'link_to_datasheet': self.link_to_datasheet, - 'anode_chemistry': self.anode_chemistry, - 'cathode_chemistry': self.cathode_chemistry, - 'nominal_capacity': self.nominal_capacity, - 'nominal_cell_weight': self.nominal_cell_weight, - } - return obj - - def __eq__(self, other): - if isinstance(other, CellRow): - return ( - self.id == other.id and - self.name == other.name and - self.manufacturer == other.manufacturer and - self.form_factor == other.form_factor and - self.link_to_datasheet == other.link_to_datasheet and - self.anode_chemistry == other.anode_chemistry and - self.cathode_chemistry == other.cathode_chemistry and - self.nominal_capacity == other.nominal_capacity and - self.nominal_cell_weight == other.nominal_cell_weight - ) - - return False - - def __repr__(self): - return ('CellRow({}, {}, {}, {}, {}, {}, {}, {})' - .format( - self.id, - self.name, - self.manufacturer, - self.form_factor, - self.link_to_datasheet, - self.anode_chemistry, - self.cathode_chemistry, - self.nominal_capacity, - self.nominal_cell_weight, - )) - - def insert(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "INSERT INTO cell_data.cell (" - "name, manufacturer, form_factor, " - "link_to_datasheet, anode_chemistry, " - "cathode_chemistry, nominal_capacity, " - "nominal_cell_weight) " - "VALUES (%s, %s, %s, %s, %s, %s, %s, %s) " - "RETURNING id" - ), - [ - self.name, - self.manufacturer, - self.form_factor, - self.link_to_datasheet, - self.anode_chemistry, - self.cathode_chemistry, - self.nominal_capacity, - self.nominal_cell_weight, - ], - ) - result = cursor.fetchone() - self.id = result[0] - - def update(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "UPDATE cell_data.cell SET " - "name = (%s), " - "manufacturer = (%s), form_factor = (%s), " - "link_to_datasheet = (%s), anode_chemistry = (%s), " - "cathode_chemistry = (%s), nominal_capacity = (%s), " - "nominal_cell_weight = (%s) " - "WHERE id=(%s)" - ), - [ - self.name, - self.manufacturer, self.form_factor, - self.link_to_datasheet, self.anode_chemistry, - self.cathode_chemistry, self.nominal_capacity, - self.nominal_cell_weight, self.id - ], - ) - - def delete(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "DELETE FROM cell_data.cell " - "WHERE id=(%s)" - ), - [self.id], - ) - - @staticmethod - def all(conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT id, name, manufacturer, form_factor, " - "link_to_datasheet, anode_chemistry, " - "cathode_chemistry, nominal_capacity, " - "nominal_cell_weight FROM " - "cell_data.cell" - ), - ) - records = cursor.fetchall() - return [ - CellRow( - id=result[0], - name=result[1], - manufacturer=result[2], - form_factor=result[3], - link_to_datasheet=result[4], - anode_chemistry=result[5], - cathode_chemistry=result[6], - nominal_capacity=result[7], - nominal_cell_weight=result[8], - ) - for result in records - ] - - @staticmethod - def select_from_id(id_, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT name, manufacturer, form_factor, " - "link_to_datasheet, anode_chemistry, " - "cathode_chemistry, nominal_capacity, " - "nominal_cell_weight FROM " - "cell_data.cell " - "WHERE id=(%s)" - ), - [id_], - ) - result = cursor.fetchone() - if result is None: - return None - return CellRow( - id=id_, - name=result[0], - manufacturer=result[1], - form_factor=result[2], - link_to_datasheet=result[3], - anode_chemistry=result[4], - cathode_chemistry=result[5], - nominal_capacity=result[6], - nominal_cell_weight=result[7], - ) - - @staticmethod - def select_from_name(name, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT id, manufacturer, form_factor, " - "link_to_datasheet, anode_chemistry, " - "cathode_chemistry, nominal_capacity, " - "nominal_cell_weight FROM " - "cell_data.cell " - "WHERE name=(%s)" - ), - [name], - ) - result = cursor.fetchone() - if result is None: - return None - return CellRow( - id=result[0], - name=name, - manufacturer=result[1], - form_factor=result[2], - link_to_datasheet=result[3], - anode_chemistry=result[4], - cathode_chemistry=result[5], - nominal_capacity=result[6], - nominal_cell_weight=result[7], - ) diff --git a/backend/galvanalyser/database/cell_data/manufacturer_row.py b/backend/galvanalyser/database/cell_data/manufacturer_row.py deleted file mode 100644 index 1318b4bc..00000000 --- a/backend/galvanalyser/database/cell_data/manufacturer_row.py +++ /dev/null @@ -1,109 +0,0 @@ -import psycopg2 -from galvanalyser.database import Row - -class ManufacturerRow(Row): - def __init__( - self, - name, - id=None, - ): - self.id = id - self.name = name - - - def to_dict(self): - obj = { - 'id': self.id, - 'name': self.name, - } - return obj - - def __eq__(self, other): - if isinstance(other, ManufacturerRow): - return ( - self.id == other.id and - self.name == other.name - ) - - return False - - def __repr__(self): - return ('ManufacturerRow({}, {})' - .format( - self.id, - self.name, - )) - - def insert(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "INSERT INTO cell_data.manufacturer (name) " - "VALUES (%s)" - "RETURNING id" - ), - [ - self.name, - ], - ) - self.id = cursor.fetchone()[0] - - def update(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "UPDATE cell_data.manufacturer SET " - "name = (%s) " - "WHERE id=(%s)" - ), - [ - self.name, self.id - ], - ) - - def delete(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "DELETE FROM cell_data.manufacturer " - "WHERE id=(%s)" - ), - [self.id], - ) - - @staticmethod - def all(conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT id, name FROM " - "cell_data.manufacturer" - ), - ) - records = cursor.fetchall() - return [ - ManufacturerRow( - id=result[0], - name=result[1], - ) - for result in records - ] - - @staticmethod - def select_from_id(_id, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT name FROM " - "cell_data.manufacturer " - "WHERE id=(%s)" - ), - [_id], - ) - result = cursor.fetchone() - if result is None: - return None - return ManufacturerRow( - id=_id, - name=result[0], - ) diff --git a/backend/galvanalyser/database/experiment/__init__.py b/backend/galvanalyser/database/experiment/__init__.py deleted file mode 100644 index a16677fe..00000000 --- a/backend/galvanalyser/database/experiment/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -from .access_row import AccessRow -from .equipment_row import EquipmentRow -from .column_row import ColumnRow -from .unit import Unit -from .column_type import ColumnType -from .column import Column -from .range_label_row import RangeLabelRow -from .range_label import RangeLabel -from .dataset_row import DatasetRow -from .equipment import Equipment -from .timeseries_data import TimeseriesData -from .dataset import Dataset -from .input_file import InputFile -from .metadata_row import MetadataRow -from .timeseries_data_row import TimeseriesDataRow -from .timeseries_data_column import ( - select_timeseries_column, - select_experiment_columns, - select_timeseries_data_column_in_range, - select_timeseries_data_record_nos_in_range -) diff --git a/backend/galvanalyser/database/experiment/access_row.py b/backend/galvanalyser/database/experiment/access_row.py deleted file mode 100644 index e17fa183..00000000 --- a/backend/galvanalyser/database/experiment/access_row.py +++ /dev/null @@ -1,63 +0,0 @@ -import psycopg2 - - -class AccessRow: - def __init__(self, dataset_id, user_id): - self.dataset_id = dataset_id - self.user_id = user_id - - def insert(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "INSERT INTO experiment.access (dataset_id, user_id) " - "VALUES (%s, %s) ON CONFLICT DO NOTHING" - ), - [self.dataset_id, self.user_id], - ) - - @staticmethod - def exists(dataset_id, user_id, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT COUNT(1) " - "FROM experiment.access " - "WHERE dataset_id=(%s) AND user_id=(%s)" - ), - [dataset_id, user_id], - ) - result = cursor.fetchone() - return bool(result) - - @staticmethod - def select_from_dataset_id(dataset_id, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT user_id FROM experiment.access " - "WHERE dataset_id=(%s)" - ), - [dataset_id], - ) - records = cursor.fetchall() - return [ - AccessRow(dataset_id=dataset_id, user_id=result[0]) - for result in records - ] - - @staticmethod - def select_from_user_id(user_id, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT dataset_id FROM experiment.access " - "WHERE user_id=(%s)" - ), - [user_id], - ) - records = cursor.fetchall() - return [ - AccessRow(dataset_id=result[0], user_id=user_id) - for result in records - ] diff --git a/backend/galvanalyser/database/experiment/column.py b/backend/galvanalyser/database/experiment/column.py deleted file mode 100644 index b8a1ff1e..00000000 --- a/backend/galvanalyser/database/experiment/column.py +++ /dev/null @@ -1,41 +0,0 @@ -from galvanalyser.database import Base -from galvanalyser.database.experiment import ColumnType -from sqlalchemy import ( - Column as SqlColumn, ForeignKey, Integer, String, - DateTime, JSON, -) -from sqlalchemy.orm import relationship -from dataclasses import dataclass - - -@dataclass -class Column(Base): - __tablename__ = 'column' - __table_args__ = {'schema': 'experiment'} - - id: int - name: str - unit: str - type_id: int - type: ColumnType = None - - id = SqlColumn(Integer, primary_key=True) - type_id = SqlColumn( - Integer, ForeignKey('experiment.column_type.id') - ) - dataset_id = SqlColumn( - Integer, ForeignKey('experiment.dataset.id') - ) - name = SqlColumn(String) - type = relationship( - 'ColumnType', - backref='columns', - ) - - @property - def unit(self): - if self.type_id != -1: - return self.type.unit.symbol - - - diff --git a/backend/galvanalyser/database/experiment/column_row.py b/backend/galvanalyser/database/experiment/column_row.py deleted file mode 100644 index 39cbf2eb..00000000 --- a/backend/galvanalyser/database/experiment/column_row.py +++ /dev/null @@ -1,92 +0,0 @@ -import psycopg2 -from galvanalyser.database import Row - - -class ColumnRow(Row): - def __init__(self, type_id, name, dataset_id, id_=None): - self.id = id_ - self.type_id = type_id - self.dataset_id = dataset_id - self.name = name - - def to_dict(self): - obj = { - 'id': self.id, - 'name': self.name, - 'type_id': self.type_id, - 'dataset_id': self.dataset_id, - } - return obj - - def insert(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - 'INSERT INTO experiment."column" (type_id, name, dataset_id) ' - "VALUES (%s, %s, %s) RETURNING id" - ), - [self.type_id, self.name, self.dataset_id], - ) - self.id = cursor.fetchone()[0] - - @staticmethod - def select_from_id(id_, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - 'SELECT type_id, dataset_id, name FROM experiment."column" ' - "WHERE id=(%s)" - ), - [id_], - ) - result = cursor.fetchone() - if result is None: - return None - return ColumnRow( - id_=id_, - type_id=result[0], - dataset_id=result[1], - name=result[2] - ) - - @staticmethod - def select_from_dataset_with_name(dataset_id, name, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - 'SELECT id, type_id FROM experiment."column" ' - "WHERE dataset_id=(%s) AND name=(%s)" - ), - [dataset_id, name], - ) - result = cursor.fetchone() - if result is None: - return None - return ColumnRow( - id_=result[0], - type_id=result[1], - dataset_id=dataset_id, - name=name, - ) - - - @staticmethod - def select_from_type_id(type_id, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - 'SELECT id, name, dataset_id FROM experiment."column" ' - "WHERE type_id=(%s)" - ), - [type_id], - ) - records = cursor.fetchall() - return [ - ColumnRow( - id_=result[0], - type_id=type_id, - name=result[1], - dataset_id=result[2], - ) - for result in records - ] diff --git a/backend/galvanalyser/database/experiment/column_type.py b/backend/galvanalyser/database/experiment/column_type.py deleted file mode 100644 index a913ea65..00000000 --- a/backend/galvanalyser/database/experiment/column_type.py +++ /dev/null @@ -1,29 +0,0 @@ -from galvanalyser.database import Base -from galvanalyser.database.experiment import Unit -from sqlalchemy import ( - Column, ForeignKey, Integer, String, - DateTime, JSON, -) -from sqlalchemy.orm import relationship -from dataclasses import dataclass - - -@dataclass -class ColumnType(Base): - __tablename__ = 'column_type' - __table_args__ = {'schema': 'experiment'} - - id: int - name: str - description: str - unit: Unit = None - - id = Column(Integer, primary_key=True) - name = Column(String) - description = Column(String) - unit_id = Column(Integer, ForeignKey('experiment.unit.id')) - unit = relationship( - 'Unit', - backref='column_types', - ) - diff --git a/backend/galvanalyser/database/experiment/dataset.py b/backend/galvanalyser/database/experiment/dataset.py deleted file mode 100644 index 35e279cf..00000000 --- a/backend/galvanalyser/database/experiment/dataset.py +++ /dev/null @@ -1,106 +0,0 @@ -from galvanalyser.database import Base -from galvanalyser.database.cell_data import Cell -from galvanalyser.database.user_data import User -from galvanalyser.database.experiment import ( - Equipment, RangeLabel, TimeseriesData, Column as GColumn -) -from sqlalchemy import ( - Column, ForeignKey, Integer, String, - DateTime, Table -) -from sqlalchemy.orm import object_session -from sqlalchemy.ext.associationproxy import association_proxy -from sqlalchemy_utils import JSONType -from sqlalchemy.orm import relationship -import datetime -from typing import List -from dataclasses import dataclass -# from marshmallow import Schema, fields, ValidationError, pre_load - - -def dataset_equipment(): - return Table( - 'dataset_equipment', Base.metadata, - Column( - 'dataset_id', Integer, - ForeignKey('experiment.dataset.id'), - primary_key=True, - ), - Column( - 'equipment_id', Integer, - ForeignKey('experiment.equipment.id'), - primary_key=True, - ), - schema='experiment' - ) - - -@dataclass -class Dataset(Base): - __tablename__ = 'dataset' - __table_args__ = {'schema': 'experiment'} - - id: int - name: str - date: datetime.datetime - type: str - cell: Cell = None - owner: User = None - purpose: str - json_data: object - equipment: List[Equipment] - ranges: List[RangeLabel] - columns: List[Column] - - id = Column(Integer, primary_key=True) - name = Column(String) - date = Column(DateTime) - type = Column(String) - cell_id = Column(Integer, ForeignKey('cell_data.cell.id')) - owner_id = Column(Integer, ForeignKey('user_data.user.id')) - purpose = Column(String) - json_data = Column(JSONType) - equipment = relationship( - 'Equipment', - secondary=dataset_equipment, - backref='datasets', - ) - ranges = relationship( - 'RangeLabel', - backref='dataset', - ) - columns = relationship( - 'Column', - backref='dataset', - ) - - #columns = association_proxy("timeseries_data", "column") - - # @property - # def columns(self): - # return ( - # object_session(self).query(GColumn). - # join(TimeseriesData, - # GColumn.id == TimeseriesData.column_id). - # filter(TimeseriesData.dataset_id == self.id).distinct().all() - # ) - -# class DatasetSchema(Schema): -# id = fields.Int(dump_only=True) -# name = fields.Str() -# date = fields.DateTime() -# type = fields.Str() -# cell = fields.Nested(CellSchema()) -# cell_id = fields.Int(load_only=True) -# owner = fields.Nested(UserSchema()) -# owner_id = fields.Int(load_only=True) -# purpose = fields.Str() -# json_data = fields.Dict() -# equipment_ids = fields.Int(many=True, load_only=True) -# equipment = fields.Nested( -# EquipmentSchema(), many=True, dump_only=True -# ) -# ranges = fields.Nested(RangeSchema(), many=True, dump_only=True) -# columns = fields.Nested( -# ColumnSchema(), many=True, dump_only=True -# ) diff --git a/backend/galvanalyser/database/experiment/dataset_row.py b/backend/galvanalyser/database/experiment/dataset_row.py deleted file mode 100644 index e4215df8..00000000 --- a/backend/galvanalyser/database/experiment/dataset_row.py +++ /dev/null @@ -1,377 +0,0 @@ -import psycopg2 -from galvanalyser.database import Row -from galvanalyser.database.experiment import ( - EquipmentRow, - ColumnRow, - RangeLabelRow, -) -from galvanalyser.database.cell_data import ( - CellRow, -) -from galvanalyser.database.user_data import ( - UserRow -) - -from datetime import date, datetime -import json - - -def json_serial(obj): - """JSON serializer for objects not serializable by default json code - Modified from https://stackoverflow.com/a/22238613 - """ - - if isinstance(obj, (datetime, date)): - return obj.isoformat() - return str(obj) - - -class DatasetRow(Row): - def __init__( - self, - name, - date, - dataset_type, - id_=None, - cell_id=None, - owner_id=None, - purpose=None, - equipment=None, - json_data=None - ): - self.id = id_ - self.name = name - self.date = date - self.dataset_type = dataset_type - self.cell_id = cell_id - self.owner_id = owner_id - self.purpose = purpose - if equipment is None: - self.equipment = [] - else: - self.equipment = equipment - self.json_data = json_data - - def __eq__(self, other): - return self.id == other.id - - def to_dict(self, conn): - json_str = json.dumps(self.json_data, default=json_serial) - cell = CellRow.select_from_id(self.cell_id, conn) - equipment = [ - EquipmentRow.select_from_id(id_, conn) for id_ in self.equipment - ] - ranges = RangeLabelRow.select_from_dataset_id(self.id, conn) - owner = UserRow.select_from_id(self.owner_id, conn) - obj = { - 'id': self.id, - 'name': self.name, - 'date': self.date.isoformat(), - 'dataset_type': self.dataset_type, - 'cell': CellRow.to_dict(cell), - 'owner': UserRow.to_dict(owner), - 'purpose': self.purpose, - 'ranges': [RangeLabelRow.to_dict(r) for r in ranges], - 'equipment': [EquipmentRow.to_dict(e) for e in equipment], - 'json_data': json_str, - } - return obj - - def __repr__(self): - return 'DatasetRow({}, {}, {}, {})'.format( - self.id, self.name, self.date, - self.dataset_type - ) - - def update(self, conn, update_equipment=True): - with conn.cursor() as cursor: - cursor.execute( - ( - "UPDATE experiment.dataset SET " - "name = (%s), " - "cell_id = (%s), owner_id = (%s), " - "purpose = (%s) " - "WHERE id=(%s)" - ), - [ - self.name, - self.cell_id, self.owner_id, - self.purpose, - self.id - ], - ) - if update_equipment: - cursor.execute( - ( - "DELETE FROM experiment.dataset_equipment " - "WHERE dataset_id=(%s)" - ), - [self.id], - ) - self._insert_equipment(cursor) - - @staticmethod - def _get_equipment(id_, cursor): - cursor.execute( - ( - "SELECT equipment_id FROM " - "experiment.dataset_equipment" - "WHERE dataset_id=(%s)" - ), - [id_], - ) - records = cursor.fetchall() - return [result[0] for result in records] - - def _insert_equipment(self, cursor): - if len(self.equipment) > 0: - equipment_rows = b','.join( - cursor.mogrify( - "(%s,%s)", [self.id, x] - ) - for x in self.equipment - ) - cursor.execute( - ( - b"INSERT INTO experiment.dataset_equipment" - b"(dataset_id, equipment_id) VALUES " + equipment_rows - ), - [equipment_rows], - ) - - def insert(self, conn): - # make sure we dont have any null unicode values in the json - json_str = json.dumps(self.json_data, default=json_serial) - json_str = json_str.replace(r'\u0000', '') - - with conn.cursor() as cursor: - cursor.execute( - ( - "INSERT INTO experiment.dataset " - "(name, date, type, " - "cell_id, owner_id, purpose, " - "json_data) " - "VALUES (%s, %s, %s, %s, %s, %s, %s) " - "RETURNING id" - ), - [ - self.name, - self.date, - self.dataset_type, - self.cell_id, - self.owner_id, - self.purpose, - json_str, - ], - ) - - self.id = cursor.fetchone()[0] - - self._insert_equipment(cursor) - - def delete(self, conn): - if self.id is None: - return None - - with conn.cursor() as cursor: - cursor.execute( - ( - "DELETE FROM experiment.dataset " - "WHERE id = %s " - ), - [ - self.id, - ], - ) - - self.id = None - - @staticmethod - def _get_equipment(id_, cursor): - cursor.execute( - ( - "SELECT equipment_id FROM " - "experiment.dataset_equipment " - "WHERE dataset_id=(%s)" - ), - [id_], - ) - records = cursor.fetchall() - return [result[0] for result in records] - - @staticmethod - def select_from_name_date( - name, date, conn - ): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT " - "id, type, " - "cell_id, owner_id, purpose, " - "json_data " - "FROM experiment.dataset " - "WHERE name=(%s) AND date=(%s)" - ), - [name, date], - ) - result = cursor.fetchone() - if result is None: - return None - return DatasetRow( - id_=result[0], - name=name, - date=date, - dataset_type=result[1], - cell_id=result[2], - owner_id=result[3], - purpose=result[4], - equipment=( - DatasetRow._get_equipment(result[0], cursor) - ), - json_data=json.loads(result[5]) - if result[5] is not None - else None, - ) - - @staticmethod - def select_from_id(id_, conn, get_equipment=True): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT name, date, type, " - "cell_id, owner_id, purpose, " - "json_data " - "FROM experiment.dataset WHERE id=(%s)" - ), - [id_], - ) - result = cursor.fetchone() - if result is None: - return None - return DatasetRow( - id_=id_, - name=result[0], - date=result[1], - dataset_type=result[2], - cell_id=result[3], - owner_id=result[4], - purpose=result[5], - equipment=( - DatasetRow._get_equipment(id_, cursor) if get_equipment else None - ), - json_data=json.loads(result[6]) - if result[6] is not None - else None, - - ) - - @staticmethod - def all_result(records, cursor): - return [ - DatasetRow( - id_=result[0], - name=result[1], - date=result[2], - dataset_type=result[3], - cell_id=result[4], - owner_id=result[5], - purpose=result[6], - equipment=( - DatasetRow._get_equipment(result[0], cursor) - ), - json_data=json.loads(result[7]) - if result[7] is not None - else None, - ) - for result in records - ] - - @staticmethod - def all(conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT id, name, date, type, " - "cell_id, owner_id, purpose, " - "json_data " - "FROM experiment.dataset" - ) - ) - records = cursor.fetchall() - return DatasetRow.all_result(records, cursor) - - @staticmethod - def all_with_access(user_id, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT id, name, date, type, " - "cell_id, owner_id, purpose, " - "json_data " - "FROM experiment.dataset " - "LEFT JOIN experiment.access ON " - "experiment.access.dataset_id = id " - "WHERE experiment.access.user_id=(%s)" - ), - [user_id] - ) - records = cursor.fetchall() - return DatasetRow.all_result(records, cursor) - - @staticmethod - def select_filtered_dataset( - conn, name_like, min_date, max_date, dataset_type - ): - filter_query = "" - filter_values = [] - if name_like is not None and len(name_like) > 0: - filter_query = "name LIKE %s" - filter_values.append(name_like) - if min_date is not None: - if filter_query != "": - filter_query = filter_query + " AND " - filter_query = filter_query + "date >= %s" - filter_values.append(min_date) - if max_date is not None: - if filter_query != "": - filter_query = filter_query + " AND " - filter_query = filter_query + "date <= %s" - filter_values.append(max_date) - if dataset_type is not None and len(dataset_type) > 0: - if filter_query != "": - filter_query = filter_query + " AND " - filter_query = filter_query + "type IN %s" - filter_values.append(tuple(dataset_type)) - if filter_query == "": - return DatasetRow.all(conn) - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT id, name, date, type, " - "cell_id, owner_id, purpose, " - "json_data " - "FROM experiment.dataset " - "WHERE " + filter_query - ), - filter_values, - ) - records = cursor.fetchall() - return [ - DatasetRow( - id_=result[0], - name=result[1], - date=result[2], - dataset_type=result[3], - cell_id=result[4], - owner_id=result[5], - purpose=result[6], - equipment=( - DatasetRow._get_equipment(result[0], cursor) - ), - json_data=json.loads(result[7]) - if result[7] is not None - else None, - ) - for result in records - ] diff --git a/backend/galvanalyser/database/experiment/equipment.py b/backend/galvanalyser/database/experiment/equipment.py deleted file mode 100644 index 5f81267b..00000000 --- a/backend/galvanalyser/database/experiment/equipment.py +++ /dev/null @@ -1,21 +0,0 @@ -from galvanalyser.database import Base -from sqlalchemy import ( - Column, ForeignKey, Integer, String, - DateTime, JSON, -) -from sqlalchemy.orm import relationship -from dataclasses import dataclass - - -@dataclass -class Equipment(Base): - __tablename__ = 'equipment' - __table_args__ = {'schema': 'experiment'} - - id: int - name: str - type: str - - id = Column(Integer, primary_key=True) - name = Column(String) - type = Column(String) diff --git a/backend/galvanalyser/database/experiment/equipment_row.py b/backend/galvanalyser/database/experiment/equipment_row.py deleted file mode 100644 index ab12d417..00000000 --- a/backend/galvanalyser/database/experiment/equipment_row.py +++ /dev/null @@ -1,136 +0,0 @@ -import psycopg2 -from galvanalyser.database import Row - - -class EquipmentRow(Row): - def __init__( - self, - name, - id=None, - type=None, - ): - self.id = id - self.name = name - self.type = type - - def to_dict(self): - obj = { - 'id': self.id, - 'name': self.name, - 'type': self.type, - } - return obj - - def __eq__(self, other): - if isinstance(other, EquipmentRow): - return ( - self.id == other.id and - self.name == other.name and - self.type == other.type - ) - - return False - - def insert(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "INSERT INTO experiment.equipment (" - "name, type) " - "VALUES (%s, %s) " - "RETURNING id" - ), - [ - self.name, - self.type, - ], - ) - result = cursor.fetchone() - self.id = result[0] - - def update(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "UPDATE experiment.equipment SET " - "name = (%s), " - "type = (%s) " - "WHERE id=(%s)" - ), - [ - self.name, - self.type, self.id, - ], - ) - - def delete(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "DELETE FROM experiment.equipment " - "WHERE id=(%s)" - ), - [self.id], - ) - - @staticmethod - def all(conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT id, name, type " - "FROM " - "experiment.equipment" - ), - ) - records = cursor.fetchall() - return [ - EquipmentRow( - id=result[0], - name=result[1], - type=result[2], - ) - for result in records - ] - - @staticmethod - def select_from_id(id_, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT name, type " - "FROM " - "experiment.equipment " - "WHERE id=(%s)" - ), - [id_], - ) - result = cursor.fetchone() - if result is None: - return None - return EquipmentRow( - id=id_, - name=result[0], - type=result[1], - ) - - @staticmethod - def select_from_name(name, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT id, type " - "FROM " - "experiment.equipment " - "WHERE name=(%s)" - ), - [name], - ) - result = cursor.fetchone() - if result is None: - return None - return EquipmentRow( - id=result[0], - name=name, - type=result[1], - ) diff --git a/backend/galvanalyser/database/experiment/institution_row.py b/backend/galvanalyser/database/experiment/institution_row.py deleted file mode 100644 index 1dea1a62..00000000 --- a/backend/galvanalyser/database/experiment/institution_row.py +++ /dev/null @@ -1,90 +0,0 @@ -import psycopg2 -from galvanalyser.database import Row - - -class InstitutionRow(Row): - def __init__(self, name, id_=None): - self.id = id_ - self.name = name - - def to_dict(self): - obj = { - 'id': self.id, - 'name': self.name, - } - return obj - - def insert(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "INSERT INTO experiment.institution (name) " - "VALUES (%s)" - ), - [self.name], - ) - - def update(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "UPDATE experiment.institution SET " - "name = (%s) " - "WHERE id=(%s)" - ), - [ - self.name, self.id - ], - ) - - def delete(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "DELETE FROM experiment.institution" - "WHERE id=(%s)" - ), - [self.id], - ) - - @staticmethod - def all(conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT id, name FROM " - "experiment.institution" - ), - ) - records = cursor.fetchall() - return [ - InstitutionRow( - id_=result[0], - name=result[1], - ) - for result in records - ] - - @staticmethod - def select_from_id(id_, conn): - with conn.cursor() as cursor: - cursor.execute( - ("SELECT name FROM experiment.institution " "WHERE id=(%s)"), - [id_], - ) - result = cursor.fetchone() - if result is None: - return None - return InstitutionRow(id_=id_, name=result[0]) - - @staticmethod - def select_from_name(name, conn): - with conn.cursor() as cursor: - cursor.execute( - ("SELECT id FROM experiment.institution " "WHERE name=(%s)"), - [name], - ) - result = cursor.fetchone() - if result is None: - return None - return InstitutionRow(id_=result[0], name=name) diff --git a/backend/galvanalyser/database/experiment/metadata_row.py b/backend/galvanalyser/database/experiment/metadata_row.py deleted file mode 100644 index 8c6b5d6e..00000000 --- a/backend/galvanalyser/database/experiment/metadata_row.py +++ /dev/null @@ -1,138 +0,0 @@ -import psycopg2 -import json -from datetime import date, datetime -from galvanalyser.database import Row - - -def json_serial(obj): - """JSON serializer for objects not serializable by default json code - Modified from https://stackoverflow.com/a/22238613 - """ - - if isinstance(obj, (datetime, date)): - return obj.isoformat() - return str(obj) - - -class MetadataRow(Row): - def __init__( - self, - dataset_id, - cell_id=None, - owner=None, - purpose=None, - test_equipment=None, - json_data=None, - ): - self.dataset_id = dataset_id - self.cell_id = cell_id - self.owner = owner - self.purpose = purpose - self.test_equipment = test_equipment - self.json_data = json_data - - def to_dict(self): - json_str = json.dumps(self.json_data, default=json_serial) - obj = { - 'dataset_id': self.dataset_id, - 'cell_id': self.cell_id, - 'owner': self.owner, - 'purpose': self.purpose, - 'test_equipment': self.test_equipment, - 'json_data': json_str, - } - return obj - - def __eq__(self, other): - if isinstance(other, MetadataRow): - return ( - self.dataset_id == other.dataset_id and - self.cell_id == other.cell_id and - self.owner == other.owner and - self.purpose == other.purpose and - self.test_equipment == other.test_equipment and - self.json_data == other.json_data - ) - - return False - - def __repr__(self): - return ('MetadataRow({}, {}, {}, {}, {}, {})' - .format( - self.dataset_id, - self.cell_id, - self.owner, - self.purpose, - self.test_equipment, - self.json_data, - )) - - def insert(self, conn): - # make sure we dont have any null unicode values in the json - json_str = json.dumps(self.json_data, default=json_serial) - json_str = json_str.replace(r'\u0000', '') - - with conn.cursor() as cursor: - cursor.execute( - ( - "INSERT INTO experiment.metadata (dataset_id, " - "cell_id, owner, purpose, test_equipment, " - "json_data) " - "VALUES (%s, %s, %s, %s, %s, %s)" - ), - [ - self.dataset_id, - self.cell_id, - self.owner, - self.purpose, - self.test_equipment, - json_str, - ], - ) - - def update(self, conn): - # make sure we dont have any null unicode values in the json - json_str = json.dumps(self.json_data, default=json_serial) - json_str = json_str.replace(r'\u0000', '') - - with conn.cursor() as cursor: - cursor.execute( - ( - "UPDATE experiment.metadata SET " - "cell_id = (%s), owner = (%s), " - "purpose = (%s), test_equipment = (%s), " - "json_data = (%s) " - "WHERE dataset_id=(%s)" - ), - [ - self.cell_id, self.owner, - self.purpose, self.test_equipment, - json_str, self.dataset_id - ], - ) - - @staticmethod - def select_from_dataset_id(dataset_id, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT cell_id, owner, purpose, " - "test_equipment, json_data FROM " - "experiment.metadata " - "WHERE dataset_id=(%s)" - ), - [dataset_id], - ) - result = cursor.fetchone() - if result is None: - return None - return MetadataRow( - dataset_id=dataset_id, - cell_id=result[0], - owner=result[1], - purpose=result[2], - test_equipment=result[3], - json_data=json.loads(result[4]) - if result[4] is not None - else None, - ) diff --git a/backend/galvanalyser/database/experiment/range_label.py b/backend/galvanalyser/database/experiment/range_label.py deleted file mode 100644 index 8f333225..00000000 --- a/backend/galvanalyser/database/experiment/range_label.py +++ /dev/null @@ -1,28 +0,0 @@ -from galvanalyser.database import Base -from sqlalchemy import ( - Column, ForeignKey, Integer, String, - DateTime, -) -from sqlalchemy.orm import relationship -from dataclasses import dataclass, field -from sqlalchemy.dialects.postgresql import INT8RANGE -from typing import List -from sqlalchemy_utils import Int8RangeType -from intervals import IntInterval - -@dataclass -class RangeLabel(Base): - __tablename__ = 'range_label' - __table_args__ = {'schema': 'experiment'} - - id: int - label_name: str - sample_range: IntInterval - info: str - - id = Column(Integer, primary_key=True) - dataset_id = Column(Integer, ForeignKey('experiment.dataset.id')) - label_name = Column(String) - - sample_range = Column(Int8RangeType) - info = Column(String) diff --git a/backend/galvanalyser/database/experiment/range_label_row.py b/backend/galvanalyser/database/experiment/range_label_row.py deleted file mode 100644 index be583639..00000000 --- a/backend/galvanalyser/database/experiment/range_label_row.py +++ /dev/null @@ -1,137 +0,0 @@ -import psycopg2 -from galvanalyser.database import Row - - -class RangeLabelRow(Row): - def __init__( - self, - dataset_id, - label_name, - lower_bound, - upper_bound, - info=None, - id_=None, - ): - self.id = id_ - self.dataset_id = dataset_id - self.label_name = label_name - self.lower_bound = lower_bound - self.upper_bound = upper_bound - self.info = info - - def to_dict(self): - obj = { - 'id': self.id, - 'dataset_id': self.dataset_id, - 'label_name': self.label_name, - 'lower_bound': self.lower_bound, - 'upper_bound': self.upper_bound, - 'info': self.info, - } - return obj - - def insert(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "INSERT INTO experiment.range_label " - "(dataset_id, label_name, sample_range, info) " - "VALUES (%s, %s, '[%s, %s)', %s) " - "ON CONFLICT ON CONSTRAINT range_label_pkey DO UPDATE SET " - "sample_range = '[%s, %s)', info = %s " - "RETURNING id" - ), - [ - self.dataset_id, - self.label_name, - self.lower_bound, - self.upper_bound, - self.info, - self.lower_bound, - self.upper_bound, - self.info, - ], - ) - self.id = cursor.fetchone()[0] - - @staticmethod - def select_from_dataset_id(dataset_id, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT id, label_name, sample_range, info, " - "FROM experiment.range_label " - "WHERE dataset_id=(%s)" - ), - [dataset_id], - ) - records = cursor.fetchall() - return [ - RangeLabelRow( - id_=result[0], - dataset_id=dataset_id, - label_name=result[1], - lower_bound=result[2].lower, - upper_bound=result[2].upper, - info=result[3], - ) - for result in records - ] - - @staticmethod - def select_from_dataset_id_and_label_name(dataset_id, label_name, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT id, sample_range, info, " - "FROM experiment.range_label " - "WHERE dataset_id=(%s) AND label_name=(%s)" - ), - [dataset_id, label_name], - ) - result = cursor.fetchone() - if result is None: - return None - return RangeLabelRow( - id_=result[0], - dataset_id=dataset_id, - label_name=label_name, - lower_bound=result[1][0], - upper_bound=result[1][1], - info=result[2], - ) - - @staticmethod - def select_filtered_from_dataset_id( - dataset_id, conn, name_like=None - ): - filter_query = [] - filter_values = [dataset_id] - if name_like is not None and len(name_like) > 0: - filter_query.append("label_name LIKE %s") - filter_values.append(name_like) - if len(filter_query) == 0: - return RangeLabelRow.select_from_dataset_id(dataset_id, conn) - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT * FROM (" - "SELECT id, label_name, sample_range, info, " - "FROM experiment.range_label " - "WHERE dataset_id=(%s)" - ") as t WHERE " + (" AND ".join(filter_query)) - ), - filter_values, - ) - records = cursor.fetchall() - return [ - RangeLabelRow( - id_=result[0], - dataset_id=dataset_id, - label_name=result[1], - lower_bound=result[2].lower, - upper_bound=result[2].upper, - info=result[3], - ) - for result in records - ] diff --git a/backend/galvanalyser/database/experiment/timeseries_data.py b/backend/galvanalyser/database/experiment/timeseries_data.py deleted file mode 100644 index 8e6c2dc9..00000000 --- a/backend/galvanalyser/database/experiment/timeseries_data.py +++ /dev/null @@ -1,28 +0,0 @@ -from galvanalyser.database import Base -from sqlalchemy import ( - Column, ForeignKey, Integer, String, - DateTime, JSON, Float -) -from sqlalchemy.orm import relationship -from dataclasses import dataclass - - -@dataclass -class TimeseriesData(Base): - __tablename__ = 'timeseries_data' - __table_args__ = {'schema': 'experiment'} - - sample_no: int - column_id: int - value: float - - sample_no = Column(Integer, primary_key=True) - column_id = Column( - Integer, - ForeignKey('experiment.column.id'), primary_key=True - ) - value = Column(Float) - column = relationship( - 'Column', - backref='timeseries_data' - ) diff --git a/backend/galvanalyser/database/experiment/timeseries_data_column.py b/backend/galvanalyser/database/experiment/timeseries_data_column.py deleted file mode 100644 index bc9e15ea..00000000 --- a/backend/galvanalyser/database/experiment/timeseries_data_column.py +++ /dev/null @@ -1,155 +0,0 @@ -from psycopg2 import sql -from galvanalyser.database.experiment.timeseries_data_row import ( - TEST_TIME_COLUMN_ID, -) - -import numpy as np -from galvanalyser.database.experiment import ( - TimeseriesDataRow, ColumnRow -) - -def select_timeseries_column( - dataset_id, column_id, conn, max_samples=None): - """ - Arguments - --------- - - dataset_id: int - id of dataset - columns: int - id of column to get - sample_range: (int, int) - length two tuple with beginnging and end sample numbers - max_samples: int - subsample to give an array of only max_samples - """ - column = ColumnRow.select_from_id(column_id, conn) - - pivot_for_column = ( - 'MAX(case when column_id={} then value else NULL end)' - ).format(column.id) - - max_sample_number = ( - 'SELECT MAX(sample_no) ' - 'FROM experiment.timeseries_data ' - 'WHERE column_id={},' - ).format(column.id) - - if max_samples is None: - filter_by_max_samples = '' - else: - filter_by_max_samples = \ - 'and sample_no%(({})/2000)=0'.format(max_sample_number) - - sql = ( - 'SELECT {} ' - 'FROM experiment.timeseries_data ' - 'WHERE column_id={} {}' - 'GROUP BY sample_no ' - 'ORDER by sample_no ' - ).format(pivot_for_column, column.id, - filter_by_max_samples) - - with conn.cursor() as cursor: - cursor.execute(sql) - records = cursor.fetchall() - return np.array([r[0] for r in records]) - - - -def select_experiment_columns(dataset_id, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - 'SELECT experiment.timeseries_data.column_id, experiment."column".name ' - "FROM experiment.timeseries_data " - 'INNER JOIN experiment."column" ON experiment.timeseries_data.column_id=experiment."column".id ' - "WHERE experiment.timeseries_data.dataset_id=%s AND experiment.timeseries_data.sample_no in " - "(SELECT sample_no FROM experiment.timeseries_data WHERE dataset_id=%s LIMIT 1);" - ), - [dataset_id, dataset_id], - ) - records = cursor.fetchall() - return [(result[0], result[1]) for result in records] - - -def select_timeseries_data_record_nos_in_range( - dataset_id, samples_from, samples_to, conn -): - with conn.cursor("column_cursor") as cursor: - cursor.execute( - ( - "SELECT sample_no FROM experiment.timeseries_data " - "WHERE dataset_id=%s AND column_id=%s AND sample_no >= %s AND sample_no < %s" - " ORDER BY sample_no ASC" - ), - [ - dataset_id, - TEST_TIME_COLUMN_ID, # Use the test time column to get distinct sample no - # values since it should always be there and will be - # cheaper than SELECT DISTINCT - samples_from, - samples_to, - ], - ) - return tuple(column for column in zip(*(sample for sample in cursor))) - - -def select_timeseries_data_column_in_range( - dataset_id, column_id, samples_from, samples_to, conn -): - with conn.cursor("column_cursor") as cursor: - cursor.execute( - ( - "SELECT sample_no, value FROM experiment.timeseries_data " - "WHERE dataset_id=%s AND column_id=%s AND sample_no >= %s AND sample_no < %s" - " ORDER BY sample_no ASC" - ), - [dataset_id, column_id, samples_from, samples_to], - ) - return tuple(column for column in zip(*(sample for sample in cursor))) - - -def select_closest_record_no_above_or_below( - dataset_id, column_id, value, conn, below=True -): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT sample_no FROM " - "(" - "(SELECT sample_no, value from experiment.timeseries_data" - " WHERE dataset_id=%s AND column_id=%s AND value >= %s " - "ORDER BY value LIMIT 1) " - "UNION ALL " - "(SELECT sample_no, value from experiment.timeseries_data" - " WHERE dataset_id=%s AND column_id=%s AND value <= %s " - "ORDER BY value DESC LIMIT 1)" - ") as foo " - "ORDER BY sample_no " + ("ASC" if below else "DESC") + " " - "LIMIT 1" - ), - [dataset_id, column_id, value, dataset_id, column_id, value], - ) - return cursor.fetchone()[0] - - -## http://aklaver.org/wordpress/2018/04/21/building-dynamic-sql-using-psycopg2/ -# def select_dataset_data_columns_in_range( -# dataset_id, columns, samples_from, samples_to, conn -# ): -# with conn.cursor("column_cursor") as cursor: -# query_string = sql.SQL( -# ( -# "SELECT {} FROM experiment.timeseries_data " -# "WHERE dataset_id={} AND sample_no >= {} AND sample_no < {}" -# " ORDER BY sample_no ASC" -# ) -# ).format( -# sql.SQL(",").join(map(sql.Identifier, columns)), -# sql.Placeholder(), -# sql.Placeholder(), -# sql.Placeholder(), -# ) -# cursor.execute(query_string, [dataset_id, samples_from, samples_to]) -# return tuple(column for column in zip(*(sample for sample in cursor))) diff --git a/backend/galvanalyser/database/experiment/timeseries_data_row.py b/backend/galvanalyser/database/experiment/timeseries_data_row.py deleted file mode 100644 index 78f22910..00000000 --- a/backend/galvanalyser/database/experiment/timeseries_data_row.py +++ /dev/null @@ -1,194 +0,0 @@ -import psycopg2 -from galvanalyser.database.util.iter_file import IteratorFile -from timeit import default_timer as timer - -from galvanalyser.database.experiment import ColumnRow - -import galvanalyser.database.util.battery_exceptions as battery_exceptions - -RECORD_NO_COLUMN_ID = 0 -TEST_TIME_COLUMN_ID = 1 -VOLTAGE_COLUMN_ID = 2 -AMPS_COLUMN_ID = 3 -ENERGY_CAPACITY_COLUMN_ID = 4 -CHARGE_CAPACITY_COLUMN_ID = 5 -TEMPERATURE_COLUMN_ID = 6 -STEP_TIME_COLUMN_ID = 7 -IMPEDENCE_MAG_COLUMN_ID = 8 -IMPEDENCE_PHASE_COLUMN_ID = 9 -FREQUENCY_COLUMN_ID = 10 - -UNIT_UNITLESS = 0 -UNIT_SECONDS = 1 -UNIT_VOLTS = 2 -UNIT_AMPS = 3 -UNIT_WATT_HOURS = 4 -UNIT_AMP_HOURS = 5 -UNIT_CENTIGRADE = 6 -UNIT_WATTS = 7 -UNIT_OHMS = 8 -UNIT_DEGREES = 9 -UNIT_HERTZ = 10 - -class TimeseriesDataRow: - def __init__(self, sample_no, column_id, value, column_type_id=None): - self.sample_no = sample_no - self.column_id = column_id - self.column_type_id = column_type_id - self.value = value - - def __str__(self): - return ( - 'TimeseriesDataRow(sample_no={} ' - 'column_id={}, value={})' - ).format( - self.sample_no, - self.column_id, - self.value - ) - - def __repr__(self): - return self.__str__() - - def insert(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "INSERT INTO experiment.timeseries_data " - "(sample_no, column_id, value) " - "VALUES (, %s, %s, %s)" - ), - [self.sample_no, self.column_id, self.value], - ) - - @staticmethod - def insert_input_file( - input_file, - dataset_id, - conn, - last_values=None, - ): - column_name_to_id = {} - # create mapping from col id to col name, creating new columns as - # appropriate - columns = input_file.get_columns() - has_record_column = False - for name, type_id in columns: - # don't want to create a column for sample number - if type_id == RECORD_NO_COLUMN_ID: - has_record_column = True - column_name_to_id[name] = -2 - continue - - col = ColumnRow.select_from_dataset_with_name( - dataset_id, name, conn - ) - if col is None: - col = ColumnRow( - dataset_id=dataset_id, - type_id=type_id, - name=name - ) - col.insert(conn) - column_name_to_id[name] = col.id - - print("Getting data") - row_generator = input_file.get_data_row_generator( - column_name_to_id, - last_values, - ) - iter_file = IteratorFile(row_generator) - num_value_columns = len(columns) - if has_record_column: - num_value_columns -= 1 - start_row = 0 if last_values is None else last_values[0].sample_no - num_rows_to_insert = input_file.metadata["num_rows"] - start_row - expected_insert_count = num_rows_to_insert * num_value_columns - with conn.cursor() as cursor: - print("Copying data to table") - start = timer() - cursor.copy_expert( - 'COPY experiment.timeseries_data FROM STDIN', iter_file - ) - end = timer() - if cursor.rowcount != expected_insert_count: - raise battery_exceptions.InsertError( - "Insert failed. Inserted {} of {} values ({} rows * {} columns) before failure".format( - cursor.rowcount, - expected_insert_count, - num_rows_to_insert, - num_value_columns, - ) - ) - print("Done copying data to table") - print( - "Inserted {} rows ({} sample sets) in {:.2f} seconds".format( - cursor.rowcount, num_rows_to_insert, end - start - ) - ) - - @staticmethod - def select_one_from_dataset_id_and_sample_no(dataset_id, sample_no, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT column_id, value " - "FROM experiment.timeseries_data " - "WHERE dataset_id=(%s) AND sample_no=(%s) " - "LIMIT 1" - ), - [dataset_id, sample_no], - ) - result = cursor.fetchone() - if result is None: - return None - return TimeseriesDataRow( - dataset_id=dataset_id, - sample_no=sample_no, - column_id=result[0], - value=result[1], - ) - - @staticmethod - def get_column_type_id(col_id, cursor): - cursor.execute( - ( - "SELECT type_id " - 'FROM experiment."column" ' - "WHERE id=(%s)" - "" - ), - [col_id], - ) - return cursor.fetchone()[0] - - @staticmethod - def select_latest_by_dataset_id(dataset_id, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "WITH dataset_columns as (" - 'SELECT id FROM experiment."column" WHERE ' - "dataset_id=(%s)) " - "SELECT sample_no, column_id, value " - "FROM experiment.timeseries_data " - "WHERE column_id IN (SELECT id FROM dataset_columns) " - "AND sample_no IN ( " - "SELECT sample_no from experiment.timeseries_data " - "WHERE column_id IN (SELECT id FROM dataset_columns) " - "ORDER BY sample_no DESC LIMIT 1) " - ), - [dataset_id], - ) - records = cursor.fetchall() - return [ - TimeseriesDataRow( - sample_no=result[0], - column_id=result[1], - column_type_id=TimeseriesDataRow.get_column_type_id( - result[1], cursor - ), - value=result[2], - ) - for result in records - ] diff --git a/backend/galvanalyser/database/experiment/unit.py b/backend/galvanalyser/database/experiment/unit.py deleted file mode 100644 index 9557f026..00000000 --- a/backend/galvanalyser/database/experiment/unit.py +++ /dev/null @@ -1,104 +0,0 @@ -from galvanalyser.database import Base -from sqlalchemy import ( - Column, ForeignKey, Integer, String, - DateTime, JSON, -) -from sqlalchemy.orm import relationship -from dataclasses import dataclass - -from .timeseries_data_row import ( - UNIT_UNITLESS, - UNIT_SECONDS, - UNIT_VOLTS, - UNIT_AMPS, - UNIT_WATT_HOURS, - UNIT_AMP_HOURS, - UNIT_CENTIGRADE, - UNIT_WATTS, - UNIT_OHMS, - UNIT_DEGREES, - UNIT_HERTZ, -) - -@dataclass -class Unit(Base): - __tablename__ = 'unit' - __table_args__ = {'schema': 'experiment'} - - id: int - name: str - symbol: str - description: str - - id = Column(Integer, primary_key=True) - name = Column(String) - symbol = Column(String) - description = Column(String) - - conversions = { - 'V': { - 'multiplier': 1, - 'standard_unit': UNIT_VOLTS, - }, - 'Volts': { - 'multiplier': 1, - 'standard_unit': UNIT_VOLTS, - }, - 's': { - 'multiplier': 1, - 'standard_unit': UNIT_SECONDS, - }, - 'W.h': { - 'multiplier': 1, - 'standard_unit': UNIT_WATT_HOURS, - }, - 'Watt-hr': { - 'multiplier': 1, - 'standard_unit': UNIT_WATT_HOURS, - }, - 'A.h': { - 'multiplier': 1, - 'standard_unit': UNIT_AMP_HOURS, - }, - 'Amp-hr': { - 'multiplier': 1, - 'standard_unit': UNIT_AMP_HOURS, - }, - 'Amps': { - 'multiplier': 1, - 'standard_unit': UNIT_AMPS, - }, - 'A': { - 'multiplier': 1, - 'standard_unit': UNIT_AMPS, - }, - 'mA': { - 'multiplier': 1e-3, - 'standard_unit': UNIT_VOLTS, - }, - 'mA.h': { - 'multiplier': 1e-3, - 'standard_unit': UNIT_AMP_HOURS, - }, - '': { - 'multiplier': 1, - 'standard_unit': UNIT_UNITLESS, - }, - 'celsius': { - 'multiplier': 1, - 'standard_unit': UNIT_CENTIGRADE, - } - } - @classmethod - def get_all_units(cls): - return cls.conversions.keys() - - @classmethod - def convert(cls, symbol, value): - if symbol not in cls.conversions: - raise RuntimeError('Unknown Unit {}'.format(symbol)) - return cls.conversions[symbol]['multiplier'] * value - - - - diff --git a/backend/galvanalyser/database/harvester/__init__.py b/backend/galvanalyser/database/harvester/__init__.py deleted file mode 100644 index 23d64101..00000000 --- a/backend/galvanalyser/database/harvester/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -from .harvester_row import HarvesterRow -from .harvester import Harvester -from .monitored_path_row import MonitoredPathRow -from .monitored_path import MonitoredPath -from .observed_file_row import ( - ObservedFileRow, - ObservedFilePathRow, -) -from .observed_file import ObservedFile diff --git a/backend/galvanalyser/database/harvester/harvester.py b/backend/galvanalyser/database/harvester/harvester.py deleted file mode 100644 index a6850815..00000000 --- a/backend/galvanalyser/database/harvester/harvester.py +++ /dev/null @@ -1,41 +0,0 @@ -from galvanalyser.database import Base -from galvanalyser.database.cell_data import Cell -from galvanalyser.database.user_data import User -from galvanalyser.database.experiment import ( - Equipment, RangeLabel, TimeseriesData, Column as GColumn -) -from sqlalchemy import ( - Column, ForeignKey, Integer, String, - DateTime, Table, Boolean -) -from sqlalchemy.orm import object_session -from sqlalchemy.ext.associationproxy import association_proxy -from sqlalchemy.orm import relationship -import datetime -from typing import List -from dataclasses import dataclass - -@dataclass -class Harvester(Base): - __tablename__ = 'harvester' - __table_args__ = {'schema': 'harvesters'} - - id: int - machine_id: int - harvester_name: str - last_successful_run: datetime.datetime - is_running: bool - periodic_hour: int - - id = Column(Integer, primary_key=True) - machine_id = Column(String) - harvester_name = Column(String) - last_successful_run = Column(DateTime) - is_running = Column(Boolean) - periodic_hour = Column(Integer) - monitored_paths = relationship( - 'MonitoredPath', - backref='harvester', - ) - - diff --git a/backend/galvanalyser/database/harvester/harvester_row.py b/backend/galvanalyser/database/harvester/harvester_row.py deleted file mode 100644 index 67cb6422..00000000 --- a/backend/galvanalyser/database/harvester/harvester_row.py +++ /dev/null @@ -1,146 +0,0 @@ -import psycopg2 -from galvanalyser.database import Row - -class HarvesterRow(Row): - def __init__(self, machine_id, - harvester_name, - is_running=False, - last_successful_run=None, - periodic_hour=None, id_=None): - self.machine_id = machine_id - self.id = id_ - self.is_running = is_running - self.harvester_name = harvester_name - self.periodic_hour = periodic_hour - self.last_successful_run = last_successful_run - - def to_dict(self): - if self.last_successful_run is not None: - last_successful_run = self.last_successful_run.isoformat() - else: - last_successful_run = None - obj = { - 'id': self.id, - 'machine_id': self.machine_id, - 'is_running': self.is_running, - 'periodic_hour': self.periodic_hour, - 'harvester_name': self.harvester_name, - 'last_successful_run': last_successful_run, - } - return obj - - def insert(self, conn): - with conn.cursor() as cursor: - cursor.execute( - "INSERT INTO harvesters.harvester " - "(machine_id, harvester_name, " - "is_running, " - "periodic_hour, last_successful_run) " - "VALUES (%s, %s, %s, %s, %s) RETURNING id", - [self.machine_id, self.harvester_name, - self.is_running, - self.periodic_hour, - self.last_successful_run], - ) - self.id = cursor.fetchone()[0] - - def update(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "UPDATE harvesters.harvester SET " - "machine_id = (%s), periodic_hour = (%s), " - "is_running = (%s), " - "last_successful_run = (%s), " - "harvester_name = (%s) " - "WHERE id=(%s)" - ), - [self.machine_id, self.periodic_hour, - self.is_running, - self.last_successful_run, self.harvester_name, - self.id], - ) - - - def delete(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "DELETE FROM harvesters.harvester " - "WHERE id=(%s)" - ), - [self.id], - ) - - @staticmethod - def select_from_id(id_, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT machine_id, periodic_hour, " - "last_successful_run, harvester_name, " - "is_running " - "FROM harvesters.harvester WHERE " - "id=(%s)" - ), - [id_], - ) - result = cursor.fetchone() - if result is None: - return None - return HarvesterRow( - id_=id_, - machine_id=result[0], - periodic_hour=result[1], - last_successful_run=result[2], - harvester_name=result[3], - is_running=result[4], - ) - - @staticmethod - def select_from_machine_id(machine_id, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT id, periodic_hour, last_successful_run, " - "harvester_name, is_running " - "FROM harvesters.harvester WHERE " - "machine_id=(%s)" - ), - [machine_id], - ) - result = cursor.fetchone() - if result is None: - return None - return HarvesterRow( - id_=result[0], - machine_id=machine_id, - periodic_hour=result[1], - last_successful_run=result[2], - harvester_name=result[3], - is_running=result[4], - ) - - @staticmethod - def all(conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT id, machine_id, " - "periodic_hour, last_successful_run, " - "harvester_name, is_running " - "FROM harvesters.harvester" - ), - ) - records = cursor.fetchall() - return [ - HarvesterRow( - machine_id=result[1], - periodic_hour=result[2], - last_successful_run=result[3], - harvester_name=result[4], - is_running=result[5], - id_=result[0], - ) - for result in records - ] diff --git a/backend/galvanalyser/database/harvester/monitored_path.py b/backend/galvanalyser/database/harvester/monitored_path.py deleted file mode 100644 index db881dfa..00000000 --- a/backend/galvanalyser/database/harvester/monitored_path.py +++ /dev/null @@ -1,40 +0,0 @@ -from galvanalyser.database import Base -from sqlalchemy import ( - Column, ForeignKey, Integer, String, - DateTime, Table, Boolean -) -from sqlalchemy.orm import relationship -import datetime -from typing import List -from dataclasses import dataclass - -association_table = Table( - 'monitored_for', - Base.metadata, - Column( - 'path_id', - ForeignKey('harvesters.monitored_path.id'), - primary_key=True - ), - Column('user_id', ForeignKey('user_data.user.id'), primary_key=True), - schema='harvesters', -) - - -@dataclass -class MonitoredPath(Base): - __tablename__ = 'monitored_path' - __table_args__ = {'schema': 'harvesters'} - - id: int - harvester_id: int - path: str - - id = Column(Integer, primary_key=True) - harvester_id = Column(Integer, ForeignKey('harvesters.harvester.id')) - path = Column(String) - - monitored_for = relationship( - "User", - secondary=association_table, - ) diff --git a/backend/galvanalyser/database/harvester/monitored_path_row.py b/backend/galvanalyser/database/harvester/monitored_path_row.py deleted file mode 100644 index d91c558e..00000000 --- a/backend/galvanalyser/database/harvester/monitored_path_row.py +++ /dev/null @@ -1,181 +0,0 @@ -import psycopg2 -import json -from galvanalyser.database import Row - - -class MonitoredPathRow(Row): - def __init__( - self, harvester_id, monitored_for, path, id_=None - ): - self.harvester_id = harvester_id - if monitored_for is None: - self.monitored_for = [] - else: - self.monitored_for = monitored_for - self.path = path - self.id = id_ - - def __str__(self): - return ( - 'MonitoredPathRow(harvester_id={}, monitored_for={} ' - 'path={}, id={})' - ).format( - self.harvester_id, - self.monitored_for, - self.path, - self.id - ) - - def to_dict(self): - obj = { - 'harvester_id': self.harvester_id, - 'monitored_for': self.monitored_for, - 'path': self.path, - 'id': self.id, - } - return obj - - def _insert_monitored_paths(self, cursor): - if len(self.monitored_for) > 0: - monitored_for_rows = b','.join( - cursor.mogrify( - "(%s,%s)", [self.id, x] - ) - for x in self.monitored_for - ) - cursor.execute( - ( - b"INSERT INTO harvesters.monitored_for " - b"(path_id, user_id) VALUES " + monitored_for_rows - ), - ) - - def insert(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "INSERT INTO harvesters.monitored_path " - "(harvester_id, path) VALUES (%s, %s) " - "RETURNING id" - ), - [self.harvester_id, self.path], - ) - self.id = cursor.fetchone()[0] - - self._insert_monitored_paths(cursor) - - def update(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "UPDATE harvesters.monitored_path SET " - "harvester_id = (%s), " - "path = (%s) " - "WHERE id=(%s)" - ), - [ - self.harvester_id, - self.path, self.id - ], - ) - cursor.execute( - ( - "DELETE FROM harvesters.monitored_for " - "WHERE path_id=(%s)" - ), - [self.id], - ) - self._insert_monitored_paths(cursor) - - def delete(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "DELETE FROM harvesters.monitored_path " - "WHERE id=(%s)" - ), - [self.id], - ) - - @staticmethod - def _get_monitored_for(id_, cursor): - cursor.execute( - ( - "SELECT user_id FROM " - "harvesters.monitored_for " - "WHERE path_id=(%s)" - ), - [id_], - ) - records = cursor.fetchall() - return [result[0] for result in records] - - @staticmethod - def select_from_id(id_, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT harvester_id, path FROM " - "harvesters.monitored_path " - "WHERE id=(%s)" - ), - [id_], - ) - result = cursor.fetchone() - if result is None: - return None - return MonitoredPathRow( - harvester_id=result[0], - monitored_for=( - MonitoredPathRow._get_monitored_for(result[0], cursor) - ), - path=result[1], - id_=id_, - ) - - @staticmethod - def select_from_harvester_id(harvester_id, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT path, id FROM " - "harvesters.monitored_path " - "WHERE harvester_id=(%s)" - ), - [harvester_id], - ) - records = cursor.fetchall() - return [ - MonitoredPathRow( - harvester_id=harvester_id, - monitored_for=( - MonitoredPathRow._get_monitored_for(result[1], cursor) - ), - path=result[0], - id_=result[1], - ) - for result in records - ] - - @staticmethod - def select_from_harvester_id_and_path(harvester_id, path, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT id FROM " - "harvesters.monitored_path " - "WHERE harvester_id=(%s) AND path=(%s)" - ), - [harvester_id, path], - ) - result = cursor.fetchone() - if result is None: - return None - return MonitoredPathRow( - harvester_id=harvester_id, - monitored_for=( - MonitoredPathRow._get_monitored_for(result[0], cursor) - ), - path=path, - id_=result[0], - ) diff --git a/backend/galvanalyser/database/harvester/observed_file.py b/backend/galvanalyser/database/harvester/observed_file.py deleted file mode 100644 index 8b8943e6..00000000 --- a/backend/galvanalyser/database/harvester/observed_file.py +++ /dev/null @@ -1,25 +0,0 @@ -from galvanalyser.database import Base -from sqlalchemy import ( - Column, ForeignKey, Integer, String, - DateTime, Table, Boolean -) -from sqlalchemy.orm import relationship -import datetime -from typing import List -from dataclasses import dataclass - - -@dataclass -class ObservedFile(Base): - __tablename__ = 'observed_file' - __table_args__ = {'schema': 'harvesters'} - - monitor_path_id: int - path: str - last_observed_size: int - last_observed_time: datetime.datetime - - monitor_path_id = Column(Integer, primary_key=True) - path = Column(String, primary_key=True) - last_observed_size = Column(Integer) - last_observed_time = Column(DateTime) diff --git a/backend/galvanalyser/database/harvester/observed_file_row.py b/backend/galvanalyser/database/harvester/observed_file_row.py deleted file mode 100644 index 5f7fd07a..00000000 --- a/backend/galvanalyser/database/harvester/observed_file_row.py +++ /dev/null @@ -1,242 +0,0 @@ -import psycopg2 -from galvanalyser.database import Row -from galvanalyser.database.harvester import MonitoredPathRow - -class ObservedFileRow(Row): - def __init__( - self, - monitor_path_id, - path, - last_observed_size, - last_observed_time, - file_state=None, - ): - self.monitor_path_id = monitor_path_id - self.path = path - self.last_observed_size = last_observed_size - self.last_observed_time = last_observed_time - self.file_state = file_state - - def to_dict(self): - obj = { - 'monitor_path_id': self.monitor_path_id, - 'path': self.path, - 'last_observed_size': self.last_observed_size, - 'last_observed_time': self.last_observed_time.isoformat(), - 'file_state': self.file_state, - } - return obj - - def __str__(self): - return ( - 'ObservedFileRow(monitor_path_id={}, path={} ' - 'last_observed_size={}, last_observed_time={} ' - 'file_state={})' - ).format( - self.monitor_path_id, - self.path, - self.last_observed_size, - self.last_observed_time, - self.file_state - ) - - def insert(self, conn): - with conn.cursor() as cursor: - if self.file_state is None: - cursor.execute( - ( - "INSERT INTO harvesters.observed_file " - "(monitor_path_id, path, last_observed_size, " - "last_observed_time) VALUES (%s, %s, %s, %s) " - "ON CONFLICT ON CONSTRAINT observed_file_pkey " - "DO UPDATE SET " - "last_observed_size = %s, last_observed_time = %s" - ), - [ - self.monitor_path_id, - self.path, - self.last_observed_size, - self.last_observed_time, - self.last_observed_size, - self.last_observed_time, - ], - ) - else: - cursor.execute( - ( - "INSERT INTO harvesters.observed_file " - "(monitor_path_id, path, last_observed_size, " - "last_observed_time, file_state) " - "VALUES (%s, %s, %s, %s, %s) " - "ON CONFLICT ON CONSTRAINT observed_file_pkey " - "DO UPDATE SET " - "last_observed_size = %s, last_observed_time = %s, " - "file_state = %s" - ), - [ - self.monitor_path_id, - self.path, - self.last_observed_size, - self.last_observed_time, - self.file_state, - self.last_observed_size, - self.last_observed_time, - self.file_state, - ], - ) - - @staticmethod - def select_from_id_and_path(monitor_path_id, path, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT last_observed_size, last_observed_time, " - "file_state FROM " - "harvesters.observed_file WHERE " - "monitor_path_id=(%s) AND path=(%s)" - ), - [monitor_path_id, path], - ) - result = cursor.fetchone() - if result is None: - return None - return ObservedFileRow( - monitor_path_id, - path, - last_observed_size=result[0], - last_observed_time=result[1], - file_state=result[2], - ) - - @staticmethod - def select_from_id_(monitor_path_id, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT path, last_observed_size, last_observed_time, " - "file_state FROM " - "harvesters.observed_file WHERE monitor_path_id=(%s)" - ), - [monitor_path_id], - ) - records = cursor.fetchall() - return [ - ObservedFileRow( - monitor_path_id, - path=result[0], - last_observed_size=result[1], - last_observed_time=result[2], - file_state=result[3], - ) - for result in records - ] - - @staticmethod - def select_from_harvester_id_with_state(harvester_id, file_state, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT hof.monitor_path_id, hof.path, " - "hof.last_observed_size, hof.last_observed_time " - "FROM harvesters.observed_file AS hof " - "INNER JOIN harvesters.monitored_path AS hmp ON " - "hof.monitor_path_id = hmp.monitor_path_id " - "WHERE " - "hmp.harvester_id=(%s) AND hof.file_state=(%s)" - ), - [harvester_id, file_state], - ) - records = cursor.fetchall() - return [ - ObservedFileRow( - monitor_path_id=result[0], - path=result[1], - last_observed_size=result[2], - last_observed_time=result[3], - file_state=file_state, - ) - for result in records - ] - - -class ObservedFilePathRow: - def __init__( - self, - monitor_path_id, - monitored_path, - observed_path, - monitored_for, - last_observed_size, - last_observed_time, - file_state=None, - ): - self.monitor_path_id = monitor_path_id - self.monitored_path = monitored_path - self.observed_path = observed_path - self.monitored_for = monitored_for - self.last_observed_size = last_observed_size - self.last_observed_time = last_observed_time - self.file_state = file_state - - - - @staticmethod - def select_from_harvester_id_with_state(harvester_id, file_state, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT hof.monitor_path_id, hmp.path, hof.path, " - "hof.last_observed_size, " - "hof.last_observed_time " - "FROM harvesters.observed_file AS hof " - "INNER JOIN harvesters.monitored_path AS hmp ON " - "hof.monitor_path_id = hmp.id " - "WHERE " - "hmp.harvester_id=(%s) AND hof.file_state=(%s)" - ), - [harvester_id, file_state], - ) - records = cursor.fetchall() - return [ - ObservedFilePathRow( - monitor_path_id=result[0], - monitored_path=result[1], - observed_path=result[2], - monitored_for=( - MonitoredPathRow._get_monitored_for(result[0], cursor) - ), - last_observed_size=result[3], - last_observed_time=result[4], - file_state=file_state, - ) - for result in records - ] - - def update_observed_file_state(self, file_state, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "UPDATE harvesters.observed_file SET file_state = %s" - "WHERE monitor_path_id=(%s) AND path=(%s)" - ), - [file_state, self.monitor_path_id, self.observed_path], - ) - - def update_observed_file_state_if_state_is( - self, new_file_state, current_file_state, conn - ): - with conn.cursor() as cursor: - cursor.execute( - ( - "UPDATE harvesters.observed_file SET file_state = %s" - "WHERE monitor_path_id=(%s) AND path=(%s) " - "AND file_state=(%s)" - ), - [ - new_file_state, - self.monitor_path_id, - self.observed_path, - current_file_state, - ], - ) - return cursor.rowcount diff --git a/backend/galvanalyser/database/row.py b/backend/galvanalyser/database/row.py deleted file mode 100644 index d94e14eb..00000000 --- a/backend/galvanalyser/database/row.py +++ /dev/null @@ -1,15 +0,0 @@ -import json - -class Row: - def to_dict(self, arg): - raise NotImplementedError - - @classmethod - def to_json(cls, arg): - if isinstance(arg, list): - list_obj = [x.to_dict() for x in arg] - return json.dumps(list_obj) - elif isinstance(arg, cls): - return json.dumps(arg.to_dict()) - - diff --git a/backend/galvanalyser/database/setup.pgsql b/backend/galvanalyser/database/setup.pgsql deleted file mode 100644 index 848ba3b6..00000000 --- a/backend/galvanalyser/database/setup.pgsql +++ /dev/null @@ -1,557 +0,0 @@ --- SCHEMA: user_data - --- DROP SCHEMA user_data ; - -CREATE SCHEMA user_data - AUTHORIZATION postgres; - -GRANT ALL ON SCHEMA user_data TO postgres; - --- Table: user_data.user - --- DROP TABLE user_data.user; - -CREATE TABLE user_data.user -( - id bigserial PRIMARY KEY, - username VARCHAR (100), - password VARCHAR (64), --storing a 32-bit hash - salt VARCHAR (64), --storing a 32-bit salt - email VARCHAR (100), - UNIQUE (username), - CONSTRAINT username_email_notnull CHECK ( - NOT ( - ( username IS NULL OR username = '' ) - AND - ( email IS NULL OR email = '' ) - ) - ) -) -WITH ( - OIDS = FALSE -); - - -ALTER TABLE user_data.user - OWNER to postgres; - --- Table: user_data.group - --- DROP TABLE user_data.group; - -CREATE TABLE user_data.group -( - id bigserial PRIMARY KEY, - groupname VARCHAR (100), - UNIQUE (groupname), - CONSTRAINT name_notnull CHECK ( - NOT ( groupname IS NULL OR groupname = '' ) - ) -) -WITH ( - OIDS = FALSE -); - -INSERT INTO user_data.group (groupname) VALUES ('admin'); - --- Table: user_data.membership - --- DROP TABLE user_data.membership; - -CREATE TABLE user_data.membership -( - user_id bigint, - group_id bigint, - PRIMARY KEY (user_id, group_id) -) -WITH ( - OIDS = FALSE -); - - -ALTER TABLE user_data.membership - OWNER to postgres; - - --- SCHEMA: harvesters - --- DROP SCHEMA harvesters ; - -CREATE SCHEMA harvesters - AUTHORIZATION postgres; - -GRANT ALL ON SCHEMA harvesters TO postgres; - -GRANT USAGE ON SCHEMA harvesters TO ${harvester_role}; - --- Table: harvesters.harvester - --- DROP TABLE harvesters.harvester; - -CREATE TABLE harvesters.harvester -( - id bigserial NOT NULL, - machine_id text NOT NULL, - harvester_name text, - last_successful_run timestamp with time zone, - is_running bool DEFAULT FALSE, - periodic_hour integer, - PRIMARY KEY (id), - UNIQUE (machine_id), - CONSTRAINT is_hour CHECK (periodic_hour >= 0 AND periodic_hour < 24) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -ALTER TABLE harvesters.harvester - OWNER to postgres; - -GRANT UPDATE, SELECT ON TABLE harvesters.harvester TO ${harvester_role}; - -GRANT ALL ON TABLE harvesters.harvester TO postgres; - -ALTER TABLE harvesters.harvester ENABLE ROW LEVEL SECURITY; - -CREATE POLICY harvester_access_policy ON harvesters.harvester -USING ( harvester_name = current_user); - - --- Table: harvesters.monitored_path - --- DROP TABLE harvesters.monitored_path; - -CREATE TABLE harvesters.monitored_path -( - id bigserial NOT NULL, - harvester_id bigint NOT NULL, - path text NOT NULL, - UNIQUE (path, harvester_id), - PRIMARY KEY (id), - FOREIGN KEY (harvester_id) - REFERENCES harvesters.harvester (id) MATCH SIMPLE - ON UPDATE CASCADE - ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -ALTER TABLE harvesters.monitored_path - OWNER to postgres; - -GRANT SELECT ON TABLE harvesters.monitored_path TO ${harvester_role}; - -GRANT ALL ON TABLE harvesters.monitored_path TO postgres; - --- Table: experiment.monitored_for - --- DROP TABLE experiment.monitored_for; - -CREATE TABLE harvesters.monitored_for -( - path_id bigint NOT NULL, - user_id bigint NOT NULL, - PRIMARY KEY (path_id, user_id), - FOREIGN KEY (path_id) - REFERENCES harvesters.monitored_path (id) MATCH SIMPLE - ON UPDATE CASCADE - ON DELETE CASCADE, - FOREIGN KEY (user_id) - REFERENCES user_data.user (id) MATCH SIMPLE - ON UPDATE CASCADE - ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -); - -ALTER TABLE harvesters.monitored_for - OWNER to postgres; - -GRANT ALL ON TABLE harvesters.monitored_for TO postgres; - -GRANT SELECT ON TABLE harvesters.monitored_for TO ${harvester_role}; - --- Type: file_state_t - --- DROP TYPE harvesters.file_state_t; - -CREATE TYPE harvesters.file_state_t AS ENUM - ('IMPORTED', 'IMPORTING', 'STABLE', 'UNSTABLE', 'IMPORT_FAILED', 'GROWING'); - -ALTER TYPE harvesters.file_state_t - OWNER TO postgres; - - --- Table: harvesters.observed_file - --- DROP TABLE harvesters.observed_file; - -CREATE TABLE harvesters.observed_file -( - monitor_path_id bigint NOT NULL, - path text NOT NULL, - last_observed_size bigint NOT NULL, - last_observed_time timestamp with time zone NOT NULL, - file_state harvesters.file_state_t NOT NULL DEFAULT 'UNSTABLE'::harvesters.file_state_t, - CONSTRAINT observed_file_pkey PRIMARY KEY (monitor_path_id, path), - FOREIGN KEY (monitor_path_id) - REFERENCES harvesters.monitored_path (id) MATCH SIMPLE - ON UPDATE NO ACTION - ON DELETE NO ACTION -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -ALTER TABLE harvesters.observed_file - OWNER to postgres; - -GRANT INSERT, SELECT, UPDATE, DELETE ON TABLE harvesters.observed_file TO ${harvester_role}; - -GRANT ALL ON TABLE harvesters.observed_file TO postgres; - --- SCHEMA: cell_data - --- DROP SCHEMA cell_data ; - -CREATE SCHEMA cell_data - AUTHORIZATION postgres; - -GRANT USAGE ON SCHEMA cell_data TO ${harvester_role}; - --- Table: cell_data.cell - --- DROP TABLE cell_data.cell; - -CREATE TABLE cell_data.cell -( - id bigserial NOT NULL, - name text NOT NULL, - form_factor varchar(11), - link_to_datasheet text, - anode_chemistry text, - cathode_chemistry text, - nominal_capacity double precision, - nominal_cell_weight double precision, - manufacturer text, - CONSTRAINT cell_unique_name UNIQUE (name), - CONSTRAINT cell_pkey PRIMARY KEY (id) -) WITH ( - OIDS = FALSE -); - -ALTER TABLE cell_data.cell - OWNER to postgres; - -GRANT SELECT ON TABLE cell_data.cell TO ${harvester_role}; - -GRANT ALL ON TABLE cell_data.cell TO postgres; - - --- SCHEMA: experiment - --- DROP SCHEMA experiment ; - -CREATE SCHEMA experiment - AUTHORIZATION postgres; - -GRANT ALL ON SCHEMA experiment TO postgres; - -GRANT USAGE ON SCHEMA experiment TO ${harvester_role}; - --- Table: experiment.dataset - --- DROP TABLE experiment.dataset; - -CREATE TABLE experiment.dataset -( - id bigserial NOT NULL, - name text NOT NULL, - date timestamp with time zone NOT NULL, - type text NOT NULL, - cell_id bigint, - owner_id bigint, - purpose text, - json_data jsonb, - - PRIMARY KEY (name, date), - FOREIGN KEY (cell_id) - REFERENCES cell_data.cell (id) MATCH SIMPLE - ON UPDATE CASCADE - ON DELETE SET NULL, - FOREIGN KEY (owner_id) - REFERENCES user_data.user (id) MATCH SIMPLE - ON UPDATE CASCADE - ON DELETE SET NULL, - - UNIQUE (id) -) -WITH ( - OIDS = FALSE -); - -ALTER TABLE experiment.dataset - OWNER to postgres; - -GRANT INSERT, UPDATE, SELECT, TRIGGER ON TABLE experiment.dataset TO ${harvester_role}; - -GRANT ALL ON TABLE experiment.dataset TO postgres; - -GRANT ALL ON SEQUENCE experiment.dataset_id_seq TO postgres; - -GRANT USAGE ON SEQUENCE experiment.dataset_id_seq TO ${harvester_role}; - --- Table: experiment.equipment - --- DROP TABLE experiment.equipment; - -CREATE TABLE experiment.equipment -( - id bigserial NOT NULL, - name VARCHAR (50) NOT NULL, - type VARCHAR (50), - UNIQUE (name), - PRIMARY KEY (id) -) -WITH ( - OIDS = FALSE -); - -ALTER TABLE experiment.equipment - OWNER to postgres; - -GRANT ALL ON TABLE experiment.equipment TO postgres; - -GRANT SELECT ON TABLE experiment.equipment TO ${harvester_role}; - - --- Table: experiment.dataset_equipment - --- DROP TABLE experiment.dataset_equipment; - -CREATE TABLE experiment.dataset_equipment -( - dataset_id bigint NOT NULL, - equipment_id bigint NOT NULL, - PRIMARY KEY (dataset_id, equipment_id), - FOREIGN KEY (dataset_id) - REFERENCES experiment.dataset (id) MATCH SIMPLE - ON UPDATE CASCADE - ON DELETE CASCADE, - FOREIGN KEY (equipment_id) - REFERENCES experiment.equipment (id) MATCH SIMPLE - ON UPDATE CASCADE - ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -); - -ALTER TABLE experiment.dataset_equipment - OWNER to postgres; - -GRANT ALL ON TABLE experiment.dataset_equipment TO postgres; - -GRANT SELECT ON TABLE experiment.dataset_equipment TO ${harvester_role}; - - --- Table: experiment.access - --- DROP TABLE experiment.access; - -CREATE TABLE experiment.access -( - dataset_id bigint NOT NULL, - user_id bigint NOT NULL, - PRIMARY KEY (dataset_id, user_id), - FOREIGN KEY (dataset_id) - REFERENCES experiment.dataset (id) MATCH SIMPLE - ON UPDATE CASCADE - ON DELETE CASCADE, - FOREIGN KEY (user_id) - REFERENCES user_data.user (id) MATCH SIMPLE - ON UPDATE CASCADE - ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -); - -ALTER TABLE experiment.access - OWNER to postgres; - -GRANT INSERT, SELECT ON TABLE experiment.access TO ${harvester_role}; - -GRANT ALL ON TABLE experiment.access TO postgres; - -CREATE TABLE experiment.unit -( - id bigserial NOT NULL, - name text NOT NULL, - symbol text NOT NULL, - description text, - PRIMARY KEY (id) -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -ALTER TABLE experiment.unit - OWNER TO ${harvester_role}; - -ALTER SEQUENCE experiment.unit_id_seq - OWNER TO ${harvester_role}; - --- Table: experiment.column_type - --- DROP TABLE experiment.column_type; - -CREATE TABLE experiment.column_type -( - id bigserial NOT NULL, - name text NOT NULL, - description text, - unit_id bigint, - PRIMARY KEY (id), - FOREIGN KEY (unit_id) - REFERENCES experiment.unit (id) MATCH SIMPLE - ON UPDATE CASCADE - ON DELETE SET NULL -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -ALTER TABLE experiment.column_type - OWNER TO ${harvester_role}; - -ALTER SEQUENCE experiment.column_type_id_seq - OWNER TO ${harvester_role}; - --- Table: experiment."column" - --- DROP TABLE experiment."column"; - -CREATE TABLE experiment."column" -( - id bigserial NOT NULL, - name text NOT NULL, - dataset_id bigint NOT NULL, - type_id bigint NOT NULL, - PRIMARY KEY (id), - CONSTRAINT column_in_dataset_unique UNIQUE (name, dataset_id), - FOREIGN KEY (type_id) - REFERENCES experiment.column_type (id) MATCH SIMPLE - ON UPDATE CASCADE - ON DELETE RESTRICT, - FOREIGN KEY (dataset_id) - REFERENCES experiment.dataset (id) MATCH SIMPLE - ON UPDATE CASCADE - ON DELETE CASCADE -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -ALTER TABLE experiment."column" - OWNER TO ${harvester_role}; - -ALTER SEQUENCE experiment.column_id_seq - OWNER TO ${harvester_role}; - --- Add required column - -INSERT INTO experiment.unit (id, name, symbol, description) VALUES (0, 'Unitless', '', 'A value with no units'); -INSERT INTO experiment.unit (id, name, symbol, description) VALUES (1, 'Time', 's', 'Time in seconds'); -INSERT INTO experiment.unit (id, name, symbol, description) VALUES (2, 'Volts', 'V', 'Voltage'); -INSERT INTO experiment.unit (id, name, symbol, description) VALUES (3, 'Amps', 'A', 'Current'); -INSERT INTO experiment.unit (id, name, symbol, description) VALUES (4, 'Energy', 'Wh', 'Energy in Watt-Hours'); -INSERT INTO experiment.unit (id, name, symbol, description) VALUES (5, 'Charge', 'Ah', 'Charge in Amp-Hours'); -INSERT INTO experiment.unit (id, name, symbol, description) VALUES (6, 'Temperature', '°c', 'Temperature in Centigrade'); -INSERT INTO experiment.unit (id, name, symbol, description) VALUES (7, 'Power', 'W', 'Power in Watts'); -INSERT INTO experiment.unit (id, name, symbol, description) VALUES (8, 'Ohm', 'Ω', 'Resistance or impediance in Ohms'); -INSERT INTO experiment.unit (id, name, symbol, description) VALUES (9, 'Degrees', '°', 'Angle in degrees'); -INSERT INTO experiment.unit (id, name, symbol, description) VALUES (10, 'Frequency', 'Hz', 'Frequency in Hz'); -SELECT setval('experiment.unit_id_seq'::regclass, 10); - -INSERT INTO experiment.column_type (id, name, description, unit_id) VALUES (-1, 'Unknown', 'unknown column type', NULL); -INSERT INTO experiment.column_type (id, name, description, unit_id) VALUES (0, 'Sample Number', 'The sample or record number. Is increased by one each time a test machine records a reading. Usually counts from 1 at the start of a test', 0); -INSERT INTO experiment.column_type (id, name, description, unit_id) VALUES (1, 'Time', 'The time in seconds since the test run began.', 1); -INSERT INTO experiment.column_type (id, name, description, unit_id) VALUES (2, 'Volts', 'The voltage of the cell.', 2); -INSERT INTO experiment.column_type (id, name, description, unit_id) VALUES (3, 'Amps', 'The current current.', 3); -INSERT INTO experiment.column_type (id, name, description, unit_id) VALUES (4, 'Energy Capacity', 'The Energy Capacity.', 4); -INSERT INTO experiment.column_type (id, name, description, unit_id) VALUES (5, 'Charge Capacity', 'The Charge Capacity.', 5); -INSERT INTO experiment.column_type (id, name, description, unit_id) VALUES (6, 'Temperature', 'The temperature.', 6); -INSERT INTO experiment.column_type (id, name, description, unit_id) VALUES (7, 'Step Time', 'The time in seconds since the current step began.', 1); -INSERT INTO experiment.column_type (id, name, description, unit_id) VALUES (8, 'Impedence Magnitude', 'The magnitude of the impedence (EIS).', 8); -INSERT INTO experiment.column_type (id, name, description, unit_id) VALUES (9, 'Impedence Phase', 'The phase of the impedence (EIS).', 9); -INSERT INTO experiment.column_type (id, name, description, unit_id) VALUES (10, 'Frequency', 'The frequency of the input EIS voltage signal.', 10); -SELECT setval('experiment.column_type_id_seq'::regclass, 10); - - --- Table: experiment.timeseries_data - --- DROP TABLE experiment.timeseries_data; - -CREATE TABLE experiment.timeseries_data -( - sample_no bigint NOT NULL, - column_id bigint NOT NULL, - value double precision NOT NULL, - PRIMARY KEY (sample_no, column_id), - FOREIGN KEY (column_id) - REFERENCES experiment."column" (id) MATCH SIMPLE - ON UPDATE CASCADE - ON DELETE RESTRICT -) -WITH ( - OIDS = FALSE -) -TABLESPACE pg_default; - -ALTER TABLE experiment.timeseries_data - OWNER TO ${harvester_role}; - --- Table: experiment.range_label - --- DROP TABLE experiment.range_label; - -CREATE TABLE experiment.range_label -( - id bigserial NOT NULL, - dataset_id bigint NOT NULL, - label_name text NOT NULL, - sample_range int8range NOT NULL, - info text, - PRIMARY KEY (dataset_id, label_name), - FOREIGN KEY (dataset_id) - REFERENCES experiment.dataset (id) MATCH SIMPLE - ON UPDATE CASCADE - ON DELETE CASCADE, - UNIQUE (id) -) -WITH ( - OIDS = FALSE -); - -ALTER TABLE experiment.range_label - OWNER to postgres; - -GRANT INSERT, SELECT, UPDATE ON TABLE experiment.range_label TO ${harvester_role}; - -GRANT USAGE ON SEQUENCE experiment.range_label_id_seq TO ${harvester_role}; - --- SELECT * FROM experiment.data as d --- INNER JOIN experiment.range_label AS m ON --- d.dataset_id = m.dataset_id --- WHERE m.dataset_id = 46 and --- texteq(m.label_name, 'test_label_1') and --- d.sample_no <@ m.sample_range diff --git a/backend/galvanalyser/database/user_data/__init__.py b/backend/galvanalyser/database/user_data/__init__.py deleted file mode 100644 index 95c6e829..00000000 --- a/backend/galvanalyser/database/user_data/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .user_row import UserRow -from .user_and_group import User, Group diff --git a/backend/galvanalyser/database/user_data/user_and_group.py b/backend/galvanalyser/database/user_data/user_and_group.py deleted file mode 100644 index 38dd9e6e..00000000 --- a/backend/galvanalyser/database/user_data/user_and_group.py +++ /dev/null @@ -1,74 +0,0 @@ -from galvanalyser.database import Base -from sqlalchemy import ( - Column, ForeignKey, Integer, String, - DateTime, JSON, Table -) -from typing import List -from sqlalchemy.orm import relationship -from dataclasses import dataclass - -association_table = Table( - 'membership', - Base.metadata, - Column('user_id', ForeignKey('user_data.user.id'), primary_key=True), - Column('group_id', ForeignKey('user_data.group.id'), primary_key=True), - schema='user_data', -) - -access_association_table = Table( - 'access', - Base.metadata, - Column( - 'dataset_id', - ForeignKey('experiment.dataset.id'), - primary_key=True - ), - Column('user_id', ForeignKey('user_data.user.id'), primary_key=True), - schema='experiment', -) - -@dataclass -class User(Base): - # __table__ = db.Model.metadata.tables['experiment.database'] - __tablename__ = 'user' - __table_args__ = {'schema': 'user_data'} - - id: int - username: str - email: str - groups: List['Group'] - - id = Column(Integer, primary_key=True) - datasets = relationship( - 'Dataset', backref='owner', - ) - accessible_datasets = relationship( - 'Dataset', - secondary=access_association_table, - ) - groups = relationship( - "Group", - secondary=association_table, - back_populates="users" - ) - username = Column(String) - password = Column(String) - salt = Column(String) - email = Column(String) - - -@dataclass -class Group(Base): - __tablename__ = 'group' - __table_args__ = {'schema': 'user_data'} - - id: int - groupname: str - - id = Column(Integer, primary_key=True) - users = relationship( - "User", - secondary=association_table, - back_populates="groups" - ) - groupname = Column(String) diff --git a/backend/galvanalyser/database/user_data/user_row.py b/backend/galvanalyser/database/user_data/user_row.py deleted file mode 100644 index 69e9bda6..00000000 --- a/backend/galvanalyser/database/user_data/user_row.py +++ /dev/null @@ -1,177 +0,0 @@ -import psycopg2 -import os -import hashlib -from validate_email import validate_email -import json -from galvanalyser.database import Row - - -def verify_email(email): - return os.environ.get('FLASK_DEBUG', False) or validate_email( - email_address=email, - check_blacklist=True, - check_format=True, - check_dns=True, dns_timeout=10, - check_smtp=False, - ) - - -class UserRow(Row): - def __init__(self, username, email, password=None, salt=None, id_=None): - self.username = username - self.password = password - self.salt = salt - self.email = email - self.id = id_ - - @staticmethod - def create(username, password, email): - # limit password length: - # https://docs.python.org/3/library/hashlib.html#key-derivation - if len(password) > 1024: - raise RuntimeError( - 'password must be less than 1024 character in length' - ) - if not verify_email(email): - raise RuntimeError( - 'email address "{}" not valid'.format(email) - ) - salt = os.urandom(32) - key = hashlib.pbkdf2_hmac( - 'sha256', - password.encode('utf-8'), - salt, - 100000 - ) - return UserRow( - username, email, - password=key.hex(), salt=salt.hex() - ) - - def validate_password(self, password): - new_key = hashlib.pbkdf2_hmac( - 'sha256', - password.encode('utf-8'), - bytes.fromhex(self.salt), - 100000 - ) - return new_key.hex() == self.password - - @staticmethod - def from_json(json_str): - user_dict = json.loads(json_str) - return UserRow( - username=user_dict['username'], - email=user_dict['email'], - id_=user_dict['id'], - ) - - def to_dict(self): - # dont expose salt or hashed password - obj = { - 'id': self.id, - 'username': self.username, - 'email': self.email, - } - return obj - - def insert(self, conn): - with conn.cursor() as cursor: - cursor.execute( - "INSERT INTO user_data.user " - "(username, password, salt, email) " - "VALUES (%s, %s, %s, %s) RETURNING id", - [self.username, self.password, self.salt, - self.email], - ) - self.id = cursor.fetchone()[0] - - def update(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "UPDATE user_data.user SET " - "username = (%s) " - "password = (%s) " - "salt = (%s) " - "email = (%s) " - "WHERE id=(%s)" - ), - [self.username, self.password, self.salt, self.email], - ) - - def delete(self, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "DELETE FROM user_data.user " - "WHERE id=(%s)" - ), - [self.id], - ) - - @staticmethod - def select_from_id(id_, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT username, email, password, salt " - "FROM user_data.user WHERE " - "id=(%s)" - ), - [id_], - ) - result = cursor.fetchone() - if result is None: - return None - return UserRow( - id_=id_, - username=result[0], - email=result[1], - password=result[2], - salt=result[3], - ) - - @staticmethod - def select_from_username(username, conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT id, email, password, salt " - "FROM user_data.user WHERE " - "username=(%s)" - ), - [username], - ) - result = cursor.fetchone() - if result is None: - return None - return UserRow( - id_=result[0], - username=username, - email=result[1], - password=result[2], - salt=result[3], - ) - - - @staticmethod - def all(conn): - with conn.cursor() as cursor: - cursor.execute( - ( - "SELECT id, username, email, password, salt " - "FROM user_data.user" - ), - ) - records = cursor.fetchall() - return [ - UserRow( - id_=result[0], - username=result[1], - email=result[2], - password=result[3], - salt=result[4], - ) - for result in records - ] diff --git a/backend/galvanalyser/harvester/__init__.py b/backend/galvanalyser/harvester/__init__.py deleted file mode 100644 index 3802c99f..00000000 --- a/backend/galvanalyser/harvester/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .harvester import main diff --git a/backend/galvanalyser/harvester/harvester.py b/backend/galvanalyser/harvester/harvester.py deleted file mode 100644 index dae84c4f..00000000 --- a/backend/galvanalyser/harvester/harvester.py +++ /dev/null @@ -1,395 +0,0 @@ -# SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2020, The Chancellor, Masters and Scholars of the University -# of Oxford, and the 'Galvanalyser' Developers. All rights reserved. - -import os -import sys -import json -import psutil -import psycopg2 -import click -from datetime import datetime, timezone -from galvanalyser.database.harvester import ( - HarvesterRow, - MonitoredPathRow, - ObservedFileRow, - ObservedFilePathRow -) -from galvanalyser.database.experiment import ( - DatasetRow, - AccessRow, - TimeseriesDataRow, - RangeLabelRow, -) -from galvanalyser.database.user_data import UserRow - -from galvanalyser.database.util.battery_exceptions import UnsupportedFileTypeError - -import traceback - -from .ivium_input_file import IviumInputFile -from .biologic_input_file import BiologicMprInputFile -from .maccor_input_file import ( - MaccorInputFile, - MaccorExcelInputFile, - MaccorRawInputFile, -) - -registered_input_files = [ - BiologicMprInputFile, - IviumInputFile, - MaccorInputFile, - MaccorExcelInputFile, - MaccorRawInputFile, -] - - -def has_handle(fpath): - """ - Returns true if the file is in use by a process - """ - for proc in psutil.process_iter(): - try: - for item in proc.open_files(): - if fpath == item.path: - return True - except Exception: - pass - - return False - - -def load_config(config_file_path): - with open(config_file_path, "r") as json_file: - return json.load(json_file) - - -def write_config_template(config_template_path): - template = { - "database_username": "harvester_user", - "database_password": "password", - "database_host": "127.0.0.1", - "database_port": 5432, - "database_name": "galvanalyser", - "machine_id": "my_machine_01", - } - with open(config_template_path, "w") as json_file: - json.dump(template, json_file, indent=4) - - -def monitor_path(monitor_path_id, base_path, path, monitored_for, conn): - - absolute_path = path - if not os.path.isabs(path) and base_path is not None: - absolute_path = os.path.join(base_path, path) - - print("Examining " + absolute_path + " for users " + str(monitored_for)) - try: - current_files_old = os.listdir(absolute_path) - current_files = [ - os.path.relpath(os.path.join(dp, f), absolute_path) - for dp, dn, fn in os.walk(absolute_path) - for f in fn - ] - print(current_files_old) - print(current_files) - - except FileNotFoundError: - print("ERROR: Requested path not found on this machine: " + absolute_path) - return - for file_path in current_files: - print("") - full_file_path = os.path.join(absolute_path, file_path) - print("Found " + full_file_path) - current_observation = ObservedFileRow( - monitor_path_id, - file_path, - os.path.getsize(full_file_path), - datetime.now(timezone.utc), - ) - database_observation = ObservedFileRow.select_from_id_and_path( - monitor_path_id, file_path, conn - ) - if database_observation is None: - print("Found a new file " + file_path) - current_observation.insert(conn) - else: - print(current_observation.last_observed_time) - print(database_observation.last_observed_time) - if ( - database_observation.file_state in { - "STABLE", - "IMPORT_FAILED", - } and current_observation.last_observed_size - != database_observation.last_observed_size - ): - print( - "File has changed size since last it was checked, " - "marking as unstable" - ) - current_observation.file_state = "UNSTABLE" - current_observation.insert(conn) - continue - elif ( - database_observation.file_state in { - "IMPORTED", - } and current_observation.last_observed_size - > database_observation.last_observed_size - ): - print( - "Imported file has changed size since last it was " - "checked, marking as growing" - ) - current_observation.file_state = "GROWING" - current_observation.insert(conn) - elif database_observation.file_state in { - "IMPORTED", - "IMPORT_FAILED", - }: - # This file has already been handled - print( - "File has already been handled. State is currently " - + str(database_observation.file_state) - ) - elif ( - current_observation.last_observed_size - != database_observation.last_observed_size - ): - # The file is changing, record its size - print( - "File has changed size since last it was checked, skipping" - ) - current_observation.insert(conn) - elif has_handle(full_file_path): - # the file is currently in use, record this update time - print("File is currently in use, skipping") - current_observation.insert(conn) - elif ( - current_observation.last_observed_time - - database_observation.last_observed_time - ).total_seconds() > 60: - # the file hasn't changed in the last minute - current_observation.file_state = "STABLE" - current_observation.insert(conn) - print("Marking file as stable") - else: - # The file hasn't changed this time, but it hasn't been over a - # minute since we last checked - # We don't update the database because we don't want to change - # the timestamp of our last observation and nothing else has - # changed - print("Waiting for file to become stable") - print("Done monitoring paths\n") - - -def import_file(base_path, file_path_row, harvester_name, conn): - """ - Attempts to import a given file - """ - absolute_path = file_path_row.monitored_path - if not os.path.isabs(absolute_path) and base_path is not None: - absolute_path = os.path.join(base_path, absolute_path) - - fullpath = os.path.join( - absolute_path, file_path_row.observed_path - ) - print("") - if not os.path.isfile(fullpath): - print("Is not a file, skipping: " + fullpath) - return - print("Importing " + fullpath) - rows_updated = file_path_row.update_observed_file_state_if_state_is( - "IMPORTING", "STABLE", conn - ) - if rows_updated == 0: - print("File was not stable as expected, skipping import") - return - try: - # Attempt reading the file before updating the database to avoid - # creating rows for a file we can't read. - # TODO handle rows in the dataset and access tables with no - # corresponding data since the import might fail while reading the data - # anyway - input_file = None - for input_file_cls in registered_input_files: - try: - print('Tried input reader {}'.format(input_file_cls)) - input_file = input_file_cls(fullpath) - except Exception as e: - print('...failed with: ', type(e), e) - else: - print('...succeeded...') - break - if input_file is None: - raise UnsupportedFileTypeError - - # use a transaction to avoid generating dataset rows if import fails - conn.autocommit = False - with conn: - # Check if this dataset is already in the db - dataset_row = DatasetRow.select_from_name_date( - name=input_file.metadata["Dataset Name"], - date=input_file.metadata["Date of Test"], - conn=conn, - ) - is_new_dataset = dataset_row is None - last_data = None - if is_new_dataset: - dataset_row = DatasetRow( - name=input_file.metadata["Dataset Name"], - date=input_file.metadata["Date of Test"], - dataset_type=input_file.metadata["Machine Type"], - ) - dataset_row.insert(conn) - print("Added dataset id " + str(dataset_row.id)) - else: - print("This dataset is already in the database") - last_data = TimeseriesDataRow.select_latest_by_dataset_id( - dataset_row.id, conn - ) - last_sample_no = max([ts_row.sample_no for ts_row in last_data]) - print("last sample number in database = {}".format(last_sample_no)) - print("last sample number in file = {}" - .format(input_file.metadata["last_sample_no"])) - dataset_id = dataset_row.id - for user_id in file_path_row.monitored_for: - print(" Allowing access to user id", user_id) - access_row = AccessRow( - dataset_id=dataset_id, user_id=user_id - ) - access_row.insert(conn) - input_file.metadata["dataset_id"] = dataset_id - new_data = True - if is_new_dataset: - print("Inserting Data") - TimeseriesDataRow.insert_input_file( - input_file, dataset_id, conn - ) - print("Finished inserting Data") - elif ( - last_sample_no < input_file.metadata["last_sample_no"] - ): - # This is more data for an existing experiment - print("Inserting Additional Data") - TimeseriesDataRow.insert_input_file( - input_file, dataset_id, conn, last_values=last_data - ) - print("Finished Additional Data") - # TODO handle inserting metadata when extending a dataset - else: - print("Dataset already in database") - new_data = False - if new_data: - RangeLabelRow( - dataset_id, - "all", - int(input_file.metadata["first_sample_no"]), - int(input_file.metadata["last_sample_no"]) + 1, - ).insert(conn) - for label, sample_range in input_file.get_data_labels(): - print("inserting {}".format(label)) - RangeLabelRow( - dataset_id, - label, - sample_range[0], - sample_range[1], - ).insert(conn) - if "misc_file_data" in input_file.metadata: - json_dict = input_file.metadata["misc_file_data"] - print("Storing misc file metadata") - dataset_row.json_data = json_dict - dataset_row.update(conn, update_equipment=False) - file_path_row.update_observed_file_state("IMPORTED", conn) - print("File successfully imported") - except Exception as e: - conn.autocommit = True - file_path_row.update_observed_file_state("IMPORT_FAILED", conn) - print("Import failed for " + fullpath) - # perhaps the exception should be saved to the database - # print it for now during development - traceback.print_exc() - finally: - conn.autocommit = True - - -def main(database_user=None, database_password=None, machine_id=None, - database_host=None, database_port=None, - database_name=None, base_path=None): - try: - config = load_config("./config/harvester-config.json") - except FileNotFoundError: - config = {} - config["database_username"] = database_user - config["database_password"] = database_password - config["machine_id"] = machine_id - config["database_host"] = database_host - config["database_port"] = database_port - config["database_name"] = database_name - - conn = psycopg2.connect( - host=config["database_host"], - port=config["database_port"], - database=config["database_name"], - user=config["database_username"], - password=config["database_password"], - ) - conn.autocommit = True - print('finding machine', config['machine_id']) - harvester = HarvesterRow.select_from_machine_id( - config["machine_id"], conn - ) - - if harvester.is_running: - return - - try: - harvester.is_running = True - harvester.update(conn) - conn.commit() - if harvester is None: - print( - "Error: Could not find a harvester id for a machine called " - + config["machine_id"] - + " in the harvester database" - ) - sys.exit(1) - monitored_paths_rows = MonitoredPathRow.select_from_harvester_id( - harvester.id, conn - ) - print( - config["machine_id"] - + " is monitoring " - + str(len(monitored_paths_rows)) - + " directories" - ) - for monitored_paths_row in monitored_paths_rows: - monitor_path( - monitored_paths_row.id, - base_path, - monitored_paths_row.path, - monitored_paths_row.monitored_for, - conn, - ) - # files for import - stable_observed_file_path_rows = \ - ObservedFilePathRow.select_from_harvester_id_with_state( - harvester.id, "STABLE", conn - ) - for stable_observed_file_path_row in stable_observed_file_path_rows: - # import the file - import_file( - base_path, - stable_observed_file_path_row, - config["machine_id"], - conn, - ) - harvester.last_successful_run = datetime.now(timezone.utc) - finally: - if conn: - harvester.is_running = False - harvester.update(conn) - conn.close() - - -if __name__ == "__main__": - main() diff --git a/backend/galvanalyser/routes.py b/backend/galvanalyser/routes.py deleted file mode 100644 index b6561d04..00000000 --- a/backend/galvanalyser/routes.py +++ /dev/null @@ -1,705 +0,0 @@ -# SPDX-License-Identifier: BSD-2-Clause -# Copyright (c) 2020, The Chancellor, Masters and Scholars of the University -# of Oxford, and the 'Galvanalyser' Developers. All rights reserved. - -import sys -import flask -import numpy as np -from flask_cors import cross_origin -from flask import request, abort, jsonify, make_response -import os -from datetime import timezone -from datetime import datetime -from datetime import timedelta -import json -import dataclasses - -from celery.schedules import crontab - - -from flask_jwt_extended import create_access_token -from flask_jwt_extended import jwt_required -from flask_jwt_extended import get_jwt -from flask_jwt_extended import set_access_cookies -from flask_jwt_extended import unset_jwt_cookies -from flask_jwt_extended import get_jwt_identity - - -from .database.experiment import ( - AccessRow, Dataset, ColumnRow, MetadataRow, Equipment, -) -from .database.user_data import ( - User, Group -) -from .database.cell_data import ( - Cell -) -from .database.harvester import ( - MonitoredPathRow, HarvesterRow, ObservedFileRow, - MonitoredPath, Harvester, ObservedFile, -) -from .database.experiment import select_timeseries_column - -from .database.experiment.timeseries_data_row import ( - TimeseriesDataRow, - RECORD_NO_COLUMN_ID, -) -from sqlalchemy import select -import math -import psycopg2 - -from flask import current_app as app -from celery import current_app as celery - -from functools import wraps - -from .database.user_data import UserRow - -from galvanalyser import Session - -from galvanalyser.harvester import main as harvester_main - - -@app.after_request -def refresh_expiring_jwts(response): - try: - exp_timestamp = get_jwt()["exp"] - now = datetime.now(timezone.utc) - target_timestamp = datetime.timestamp(now + timedelta(minutes=30)) - if target_timestamp > exp_timestamp: - access_token = create_access_token(identity=get_jwt_identity()) - set_access_cookies(response, access_token) - return response - except (RuntimeError, KeyError): - # Case where there is not a valid JWT. Just return the original respone - return response - - -@app.route('/api/login', methods=['POST']) -def login(): - - auth = request.authorization - - if not auth or not auth.username or not auth.password: - return make_response( - 'could not verify', 401, - {'WWW.Authentication': 'Basic realm: "login required"'} - ) - - conn = app.config["GET_DATABASE_CONN_FOR_SUPERUSER"]() - user = UserRow.select_from_username(auth.username, conn) - - if user is not None and user.validate_password(auth.password): - with Session() as session: - current_user = session.get(User, user.id) - access_token = create_access_token( - identity=json.dumps( - dataclasses.asdict(current_user) - ) - ) - response = jsonify({ - "message": "login successful", - "user": dataclasses.asdict(current_user) - }) - set_access_cookies(response, access_token) - return response - - return jsonify({ - "message": "login unsuccessful" - }), 401 - - return make_response( - 'could not verify', 401, - {'WWW.Authentication': 'Basic realm: "login required"'} - ) - - -@app.route("/api/logout", methods=["POST"]) -def logout(): - response = jsonify({"message": "logout successful"}) - unset_jwt_cookies(response) - return response - - -@app.route('/api/token', methods=['GET']) -@cross_origin() -@jwt_required() -def get_token(): - current_user = json.loads(get_jwt_identity()) - conn = app.config["GET_DATABASE_CONN_FOR_SUPERUSER"]() - user = UserRow.select_from_id(current_user['id'], conn) - access_token = create_access_token( - identity=UserRow.to_json(user) - ) - response = jsonify({ - "access_token": access_token, - }) - return response - - -@app.route('/api/refresh', methods=['POST']) -def refresh(): - old_token = request.get_data() - try: - data = jwt.decode( - old_token, app.config['SECRET_KEY'], - algorithms=['HS256'], - options={"verify_exp": False} - ) - except jwt.ExpiredSignatureError: - return jsonify({ - 'message': 'Token has expired, please login again' - }), 401 - except jwt.InvalidTokenError: - return jsonify({ - 'message': 'Invalid token, please login again' - }), 401 - - new_token = create_token(data['username'], data['role']) - return jsonify({'access_token': new_token}) - - -@app.route('/api/hello', methods=['GET']) -@cross_origin() -def hello(): - return 'Hello' - - -@app.route('/', methods=['GET']) -@cross_origin() -def root(): - return 'Hello' - - -@app.route('/api/user/current', methods=['GET']) -@cross_origin() -@jwt_required() -def current_user(): - with Session() as session: - current_user = json.loads(get_jwt_identity()) - user = session.get(User, current_user['id']) - return jsonify(user) - - -@app.route('/api/user', methods=['GET']) -@cross_origin() -@jwt_required() -def user(id_=None): - with Session() as session: - if id_ is None: - return jsonify(session.execute(select(User)).scalars().all()) - else: - return jsonify(session.get(User, id_)) - - -@app.route('/api/dataset', methods=['GET']) -@app.route('/api/dataset/', methods=['GET', 'PUT']) -@cross_origin() -@jwt_required() -def dataset(id_=None): - with Session() as session: - current_user = json.loads(get_jwt_identity()) - user = session.get(User, current_user['id']) - is_admin = any([g.groupname == 'admin' for g in user.groups]) - - if request.method == 'GET': - if is_admin: - if id_ is None: - return jsonify(session.execute(select(Dataset)).scalars().all()) - else: - return jsonify(session.get(Dataset, id_)) - - if id_ is None: - accessible_ids = [ - d.id for d in user.accessible_datasets - ] - all_datasets = ( - user.accessible_datasets + - [d for d in user.datasets - if d.id not in accessible_ids] - ) - - return jsonify(all_datasets) - else: - dataset = next( - (i for i in user.accessible_datasets if i.id == id_), - None - ) - if dataset is None: - dataset = next( - (i for i in user.datasets if i.id == id_), - None - ) - - if dataset is None: - return jsonify({ - 'message': ( - 'dataset {} not found or user {} ' - 'does not have access'.format( - id_, current_user['username'], - ) - ) - }), 404 - return jsonify(dataset) - elif request.method == 'PUT': - no_owner = session.get(Dataset, id_).owner_id is None - if is_admin or no_owner: - dataset = session.get(Dataset, id_) - else: - dataset = next( - (i for i in user.datasets if i.id == id_), - None - ) - if dataset is None: - dataset = next( - (i for i in user.datasets if i.id == id_), - None - ) - - if dataset is None: - return jsonify({ - 'message': ( - 'dataset {} not found or user {} is not owner' - .format( - id_, current_user['username'], - )) - }), 404 - - if dataset is None: - return jsonify({ - 'message': 'dataset not found' - }), 404 - - request_data = request.get_json() - - if 'name' in request_data: - dataset.name = request_data['name'] - if 'cell_id' in request_data: - dataset.cell_id = request_data['cell_id'] - if dataset.cell_id == '': - dataset.cell_id = None - if 'owner_id' in request_data: - dataset.owner_id = request_data['owner_id'] - if 'equipment' in request_data: - dataset.equipment = [ - session.get(Equipment, id_) - for id_ in request_data['equipment'] - ] - if 'purpose' in request_data: - dataset.purpose = request_data['purpose'] - - session.commit() - return jsonify(dataset) - - -@ app.route('/api/equipment', methods=['GET', 'POST']) -@ app.route('/api/equipment/', methods=['GET', 'PUT', 'DELETE']) -@ cross_origin() -@ jwt_required() -def equipment(id_=None): - with Session() as session: - if request.method == 'GET': - if id_ is None: - return jsonify(session.query(Equipment).all()) - else: - equipment = session.get(Equipment, id_) - if equipment is None: - return jsonify({ - 'message': 'equipment not found' - }), 404 - return jsonify(equipment) - elif request.method == 'POST': - request_data = request.get_json() - equipment = Equipment( - name=request_data.get('name', None), - type=request_data.get('type', None), - ) - session.add(equipment) - session.commit() - return jsonify(equipment) - elif request.method == 'PUT': - equipment = session.get(Equipment, id_) - if equipment is None: - return jsonify({ - 'message': 'equipment not found' - }), 404 - - request_data = request.get_json() - - if 'type' in request_data: - equipment.type = request_data['type'] - if 'name' in request_data: - equipment.name = request_data['name'] - - session.commit() - return jsonify(equipment) - elif request.method == 'DELETE': - equipment = session.get(Equipment, id_) - if equipment is None: - return jsonify({ - 'message': 'equipment not found' - }), 404 - - session.delete(equipment) - session.commit() - return jsonify({'success': True}), 200 - - -@ app.route('/api/cell', methods=['GET', 'POST']) -@ app.route('/api/cell/', methods=['GET', 'PUT', 'DELETE']) -@ cross_origin() -@ jwt_required() -def cell(id_=None): - with Session() as session: - if request.method == 'GET': - if id_ is None: - return jsonify(session.query(Cell).all()) - else: - cell = session.get(Cell, id_) - if cell is None: - return jsonify({ - 'message': 'cell not found' - }), 404 - return jsonify(cell) - - elif request.method == 'POST': - request_data = request.get_json() - cell = Cell( - name=request_data.get('name', None), - manufacturer=request_data.get('manufacturer', None), - form_factor=request_data.get('form_factor', None), - link_to_datasheet=request_data.get('link_to_datasheet', None), - anode_chemistry=request_data.get('anode_chemistry', None), - cathode_chemistry=request_data.get('cathode_chemistry', None), - nominal_capacity=request_data.get('nominal_capacity', None), - nominal_cell_weight=request_data.get('nominal_cell_weight', None), - ) - session.add(cell) - session.commit() - return jsonify(cell) - elif request.method == 'PUT': - cell = session.get(Cell, id_) - if cell is None: - return jsonify({ - 'message': 'cell not found' - }), 404 - - request_data = request.get_json() - - if 'manufacturer' in request_data: - cell.manufacturer = request_data['manufacturer'] - if 'name' in request_data: - cell.name = request_data['name'] - if 'manufacturer' in request_data: - cell.manufacturer = request_data['manufacturer'] - if 'form_factor' in request_data: - cell.form_factor = request_data['form_factor'] - if 'link_to_datasheet' in request_data: - cell.link_to_datasheet = request_data['link_to_datasheet'] - if 'anode_chemistry' in request_data: - cell.anode_chemistry = request_data['anode_chemistry'] - if 'cathode_chemistry' in request_data: - cell.cathode_chemistry = request_data['cathode_chemistry'] - if 'nominal_capacity' in request_data: - cell.nominal_capacity = request_data['nominal_capacity'] - if 'nominal_cell_weight' in request_data: - cell.nominal_cell_weight = request_data['nominal_cell_weight'] - - session.commit() - return jsonify(cell) - elif request.method == 'DELETE': - cell = session.get(Cell, id_) - if cell is None: - return jsonify({ - 'message': 'cell not found' - }), 404 - - session.delete(cell) - session.commit() - return jsonify({'success': True}), 200 - - -@ app.route('/api/manufacturer', methods=['GET', 'POST']) -@ app.route('/api/manufacturer/', methods=['GET', 'PUT', 'DELETE']) -@ jwt_required() -@ cross_origin() -def manufacturer(id_=None): - conn = app.config["GET_DATABASE_CONN_FOR_SUPERUSER"]() - if request.method == 'GET': - if id_ is None: - manufacturer = ManufacturerRow.all(conn) - else: - manufacturer = ManufacturerRow.select_from_id(id_, conn) - if manufacturer is None: - return jsonify({ - 'message': 'manufacturer not found' - }), 404 - return ManufacturerRow.to_json(manufacturer) - elif request.method == 'POST': - request_data = request.get_json() - manufacturer = ManufacturerRow( - name=request_data.get('name', ''), - ) - manufacturer.insert(conn) - conn.commit() - return ManufacturerRow.to_json(manufacturer) - elif request.method == 'PUT': - manufacturer = ManufacturerRow.select_from_id(id_, conn) - if manufacturer is None: - return jsonify({ - 'message': 'manufacturer not found' - }), 404 - - request_data = request.get_json() - - if 'name' in request_data: - manufacturer.name = request_data['name'] - - manufacturer.update(conn) - conn.commit() - return ManufacturerRow.to_json(manufacturer) - elif request.method == 'DELETE': - manufacturer = ManufacturerRow.select_from_id( - id_, conn - ) - if manufacturer is None: - return jsonify({ - 'message': 'manufacturer not found' - }), 404 - - manufacturer.delete(conn) - conn.commit() - return jsonify({'success': True}), 200 - - -@ app.route('/api/dataset/', methods=['GET']) -@ jwt_required() -@ cross_origin() -def dataset_by_id(dataset_id): - conn = app.config["GET_DATABASE_CONN_FOR_SUPERUSER"]() - datasets = DatasetRow.select_from_id(dataset_id, conn) - return DatasetRow.to_json(datasets) - - -@ app.route('/api/file', methods=['GET']) -@ jwt_required() -@ cross_origin() -def file(): - conn = app.config["GET_DATABASE_CONN_FOR_SUPERUSER"]() - path_id = request.args['path_id'] - files = ObservedFileRow.select_from_id_(path_id, conn) - return ObservedFileRow.to_json(files) - - -def serialise_numpy_array(np_array): - response = flask.make_response(np_array.tobytes()) - response.headers.set('Content-Type', 'application/octet-stream') - return response - - -@ app.route('/api/dataset//', methods=['GET']) -@ jwt_required() -@ cross_origin() -def timeseries_column(dataset_id, col_id): - conn = app.config["GET_DATABASE_CONN_FOR_SUPERUSER"]() - - array = select_timeseries_column(dataset_id, col_id, conn) - - single_precision = request.args.get('single_precision', True) - if single_precision: - array = array.astype(np.float32) - - return serialise_numpy_array(array) - - -@ celery.task() -def run_harvester_celery(machine_id): - harvester_main( - os.getenv('HARVESTER_USERNAME'), - os.getenv('HARVESTER_PASSWORD'), - machine_id, - 'postgres', '5433', - 'galvanalyser', base_path='/usr/data' - ) - - -def run_harvester_periodic(harvester, sender=celery): - if harvester.periodic_hour is None: - del_harvester_periodic(harvester, sender=sender) - else: - sender.add_periodic_task( - crontab(hour=harvester.periodic_hour, minute=0), - run_harvester_celery - .s(harvester.machine_id) - .set(queue=harvester.harvester_name), - name=harvester.machine_id + 'periodic' - ) - - -def del_harvester_periodic(harvester, sender=celery): - key = harvester.machine_id + 'periodic' - if key in celery.conf.beat_schedule: - del celery.conf.beat_schedule[key] - - -@ celery.on_after_finalize.connect -def setup_periodic_tasks(sender, **kwargs): - conn = sender.conf["GET_DATABASE_CONN_FOR_SUPERUSER"]() - for harvester in HarvesterRow.all(conn): - run_harvester_periodic(harvester, sender=sender) - - -@ celery.task() -def get_env_celery(): - env_var = 'GALVANALYSER_HARVESTER_BASE_PATH' - return {env_var: os.getenv(env_var)} - - -@ app.route('/api/harvester//env', methods=['GET']) -@ jwt_required() -@ cross_origin() -def env_harvester(id_=None): - conn = app.config["GET_DATABASE_CONN_FOR_SUPERUSER"]() - harvester = HarvesterRow.select_from_id( - id_, conn - ) - result = get_env_celery.apply_async( - queue=harvester.harvester_name - ) - return jsonify(result.get()), 200 - - -@ app.route('/api/harvester//run', methods=['PUT']) -@ jwt_required() -@ cross_origin() -def run_harvester(id_=None): - conn = app.config["GET_DATABASE_CONN_FOR_SUPERUSER"]() - harvester = HarvesterRow.select_from_id( - id_, conn - ) - run_harvester_celery.apply_async( - args=[harvester.machine_id], - queue=harvester.harvester_name - ) - return jsonify({'success': True}), 200 - - -@ app.route('/api/harvester', methods=['GET', 'POST']) -@ app.route('/api/harvester/', methods=['GET', 'PUT', 'DELETE']) -@ jwt_required() -@ cross_origin() -def harvester(id_=None): - user = UserRow.from_json(get_jwt_identity()) - conn = app.config["GET_DATABASE_CONN_FOR_SUPERUSER"]() - with Session() as session: - current_user = json.loads(get_jwt_identity()) - user = session.get(User, current_user['id']) - is_admin = any([g.groupname == 'admin' for g in user.groups]) - if request.method == 'GET': - if id_ is None: - return jsonify(session.execute(select(Harvester)).scalars().all()) - else: - return jsonify(session.get(Harvester, id_)) - elif request.method == 'PUT': - if not is_admin: - return jsonify({ - 'message': ( - 'only admin users can edit harvesters' - ) - }), 404 - harvester = session.get(Harvester, id_) - request_data = request.get_json() - if 'machine_id' in request_data: - harvester.machine_id = request_data['machine_id'] - if 'periodic_hour' in request_data: - harvester.periodic_hour = request_data['periodic_hour'] - session.commit() - - # add periodic task - run_harvester_periodic(harvester) - - return jsonify(harvester) - elif request.method == 'POST': - if not is_admin: - return jsonify({ - 'message': ( - 'only admin users can create harvesters' - ) - }), 404 - request_data = request.get_json() - new_harvester = Harvester( - machine_id=request_data.get('machine_id', None), - harvester_name=os.getenv('HARVESTER_USERNAME'), - ) - session.add(new_harvester) - session.commit() - - # add periodic task - run_harvester_periodic(new_harvester) - - return jsonify(new_harvester) - elif request.method == 'DELETE': - if not is_admin: - return jsonify({ - 'message': ( - 'only admin users can delete harvesters' - ) - }), 404 - harvester = session.get(Harvester, id_) - session.delete(harvester) - session.commit() - - # delete periodic task - del_harvester_periodic(harvester) - return jsonify({'success': True}), 200 - - -@ app.route('/api/monitored_path', methods=['GET', 'POST']) -@ app.route('/api/monitored_path/', methods=['GET', 'PUT', 'DELETE']) -@ jwt_required() -@ cross_origin() -def monitored_path(id_=None): - conn = app.config["GET_DATABASE_CONN_FOR_SUPERUSER"]() - if request.method == 'GET': - if id_ is not None: - paths = MonitoredPathRow.select_from_id( - id_, conn - ) - else: - harvester_id = request.args['harvester_id'] - paths = MonitoredPathRow.select_from_harvester_id( - harvester_id, conn - ) - return MonitoredPathRow.to_json(paths) - elif request.method == 'PUT': - path = MonitoredPathRow.select_from_id( - id_, conn - ) - request_data = request.get_json() - if 'path' in request_data: - path.path = request_data['path'] - if 'monitored_for' in request_data: - path.monitored_for = request_data['monitored_for'] - - if 'harvester_id' in request_data: - path.harvester_id = request_data['harvester_id'] - path.update(conn) - conn.commit() - return MonitoredPathRow.to_json(path) - elif request.method == 'POST': - request_data = request.get_json() - new_path = MonitoredPathRow( - request_data['harvester_id'], - request_data.get('monitored_for', []), - request_data.get('path', ''), - ) - new_path.insert(conn) - conn.commit() - return MonitoredPathRow.to_json(new_path) - elif request.method == 'DELETE': - path = MonitoredPathRow.select_from_id( - id_, conn - ) - path.delete(conn) - conn.commit() - return jsonify({'success': True}), 200 diff --git a/backend/index.html b/backend/index.html deleted file mode 100644 index 5ab2f8a4..00000000 --- a/backend/index.html +++ /dev/null @@ -1 +0,0 @@ -Hello \ No newline at end of file diff --git a/backend/manage.py b/backend/manage.py deleted file mode 100644 index 487a9986..00000000 --- a/backend/manage.py +++ /dev/null @@ -1,215 +0,0 @@ -from flask.cli import FlaskGroup -import click -import psycopg2 -from app import app -import copy -import unittest -import os -import sys -from galvanalyser import Session -import galvanalyser.database as database -from galvanalyser.database.harvester import MonitoredPathRow -from galvanalyser.harvester.harvester import main as harvester_main -from galvanalyser.database.user_data import UserRow, Group, User -from sqlalchemy import select -import json -import subprocess - -cli = FlaskGroup(app) - -@cli.command("test") -@click.option('--path', default='/usr/app/test') -@click.option('--test', default='') -def test(path, test): - if not os.path.exists(os.path.join(path, 'test_case.py')): - raise RuntimeError(( - 'test_case.py does not exist in {}. ' - 'Is the path correct?').format(path) - ) - - sys.path.append(path) - from test_case import GalvanalyserTestCase - - test_config = copy.copy(app.config) - test_config["GALVANISER_DATABASE"]["NAME"] = GalvanalyserTestCase.DATABASE - - # create database environment that test case expects - database.create_database( - test_config, - test=True - ) - - # create test user - conn = app.config["GET_DATABASE_CONN_FOR_SUPERUSER"]() - user = UserRow( - GalvanalyserTestCase.USER, - password=GalvanalyserTestCase.USER_PWD, - email='test@gmail.com' - ) - user.insert(conn) - conn.commit() - - database.create_harvester_user( - test_config, - GalvanalyserTestCase.HARVESTER, - GalvanalyserTestCase.HARVESTER_PWD, - test=True - ) - - database.create_machine_id( - test_config, - GalvanalyserTestCase.MACHINE_ID, - GalvanalyserTestCase.HARVESTER, - ) - - database.add_machine_path( - test_config, - GalvanalyserTestCase.MACHINE_ID, - GalvanalyserTestCase.DATA_DIR, - [user.id], - ) - - # run harvester tests - if test == '': - test_suite = unittest.defaultTestLoader.discover(path) - else: - test_suite = unittest.defaultTestLoader.loadTestsFromName(test) - - runner = unittest.TextTestRunner() - runner.run(test_suite) - - -@cli.command("create_db") -@click.confirmation_option( - prompt='This will delete the current database, are you sure?' -) -def create_db(): - database.create_database(app.config) - database.create_harvester_user( - app.config, - os.getenv('HARVESTER_USERNAME'), - os.getenv('HARVESTER_PASSWORD') - ) - -@cli.command("create_redash_db") -@click.confirmation_option( - prompt='This will delete the current database, are you sure?' -) -def create_redash_db(): - backup_file = 'galvanalyserapp/database/redash_backup.sql' - try: - process = subprocess.Popen( - ['pg_restore', - '--clean', - '--if-exists', - '--dbname={}' - .format(app.config['db_conf']['redash_url']), - backup_file], - stdout=subprocess.PIPE - ) - output = process.communicate()[0] - if int(process.returncode) != 0: - print('Command failed. Return code : {}' - .format(process.returncode)) - return output - except Exception as e: - print("Issue with the db restore : {}".format(e)) - - -@cli.command("backup_redash_db") -def backup_redash_db(): - backup_file = '/usr/data/redash_backup.sql' - try: - process = subprocess.Popen( - ['pg_dump', - '--dbname={}' - .format(app.config['db_conf']['redash_url']), - '-Fc', - '-f', backup_file], - stdout=subprocess.PIPE - ) - output = process.communicate()[0] - if int(process.returncode) != 0: - print('Command failed. Return code : {}' - .format(process.returncode)) - exit(1) - return output - except Exception as e: - print(e) - exit(1) - - -@cli.command("create_user") -@click.option('--username', prompt=True) -@click.option('--password', prompt=True, hide_input=True, confirmation_prompt=True) -@click.option('--email', prompt=True) -@click.option('--admin/--no-admin', prompt=True) -def create_user(username, password, email, admin): - conn = app.config["GET_DATABASE_CONN_FOR_SUPERUSER"]() - UserRow.create(username, password, email).insert(conn) - conn.commit() - if admin: - with Session() as session: - # TODO: change above UserRow to a User to reuse here - user = session.execute( - select(User).where(User.username == username) - ).scalar_one() - admin = session.execute( - select(Group).where(Group.groupname == 'admin') - ).scalar_one() - user.groups.append(admin) - session.commit() - - -@cli.command("create_harvester") -@click.option('--harvester', prompt=True) -@click.option('--password', prompt=True, hide_input=True, confirmation_prompt=True) -def create_harvester(harvester, password): - if harvester == 'harvester': - print('ERROR: "{}" is not a valid harvester name'.format(harvester)) - return - database.create_harvester_user(app.config, harvester, password) - - -@cli.command("create_machine_id") -@click.option('--machine_id', prompt=True) -@click.option('--harvester_name', prompt=True) -def create_machine_id(machine_id, harvester_name): - database.create_machine_id( - app.config, machine_id, harvester_main - ) - - -@cli.command("add_machine_path") -@click.option('--machine_id', prompt=True) -@click.option('--path', prompt=True) -@click.option('--user', prompt=True) -def add_machine_path(machine_id, path, user): - if os.path.isabs(path): - print( - 'Please enter a relative path to GALVANALYSER_HARVESTER_BASE_PATH' - ) - return - - database.add_machine_path(app.config, machine_id, path, [user]) - - -@cli.command("edit_machine_path") -@click.option('--machine_id', prompt=True) -def edit_machine_path(machine_id): - database.edit_machine_path(app.config, machine_id) - - -@cli.command("run_harvester") -@click.option('--harvester', prompt=True) -@click.option('--password', prompt=True, hide_input=True, confirmation_prompt=True) -@click.option('--machine_id', prompt=True) -def run_harvester(harvester, password, machine_id): - harvester_main( - harvester, password, machine_id, - 'postgres', '5433', - 'galvanalyser', base_path='/usr/data' - ) - -if __name__ == "__main__": - cli() diff --git a/backend/requirements-test.txt b/backend/requirements-test.txt new file mode 100644 index 00000000..b5363a62 --- /dev/null +++ b/backend/requirements-test.txt @@ -0,0 +1,2 @@ +factory_boy==3.2.1 +faker==17.0.0 \ No newline at end of file diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 00000000..a294107c --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,8 @@ +Django==4.1.4 +django-cors-headers==3.13.0 +django-filter==22.1 +djangorestframework==3.14.0 +django-rest-knox==4.2.0 +psycopg2-binary==2.9.5 +redis==4.4.0 +drf-spectacular==0.25.1 \ No newline at end of file diff --git a/backend/server.sh b/backend/server.sh index 7e86d151..79999a25 100755 --- a/backend/server.sh +++ b/backend/server.sh @@ -1,11 +1,33 @@ -#!/usr/bin/env bash +#!/bin/sh +# init.sh -mkdir -p /var/run/celery /var/log/celery -chown -R nobody:nogroup /var/run/celery /var/log/celery +# adapted from https://docs.docker.com/compose/startup-order/ -python manage.py run -h 0.0.0.0 & \ -celery -A app.celery beat \ - --loglevel=DEBUG \ - --logfile=/var/log/celery/scheduler.log \ - -s /var/run/celery/celerybeat-schedule \ - --uid=nobody --gid=nogroup && fg +set -e +PGUP=1 + +while [ $PGUP -ne 0 ]; do + pg_isready -d "postgresql://postgres:galvanalyser@postgres:5433/postgres" + PGUP=$? + >&2 echo "Postgres is unavailable - sleeping" + sleep 1 +done + +>&2 echo "Postgres ready - initialising" +cd backend_django || exit 1 +python manage.py makemigrations +python manage.py migrate +python manage.py init_db +python manage.py create_superuser + +>&2 echo "... populating database" +python manage.py loaddata galvanalyser/fixtures/DataUnit.json +python manage.py loaddata galvanalyser/fixtures/DataColumnType.json + +>&2 echo "Initialisation complete - starting server" + +if [ -z "${DJANGO_TEST}" ]; then + python manage.py runserver 0.0.0.0:5000 +else + python manage.py test --noinput +fi diff --git a/backend/setup.py b/backend/setup.py deleted file mode 100644 index d48f3aae..00000000 --- a/backend/setup.py +++ /dev/null @@ -1,38 +0,0 @@ -import setuptools - -with open("README.md", "r", encoding="utf-8") as fh: - long_description = fh.read() - -setuptools.setup( - name="galvanalyser", - version="0.0.1", - author="Martin Robinson", - author_email="martin.robinson@cs.ox.ac.uk", - description="galvanalyser", - long_description=long_description, - long_description_content_type="text/markdown", - packages=setuptools.find_packages(), - classifiers=[ - "Programming Language :: Python :: 3", - "License :: OSI Approved :: MIT License", - "Operating System :: OS Independent", - ], - python_requires='>=3.5', - install_requires=[ - 'sqlalchemy', - 'sqlalchemy_utils', - 'marshmallow', - 'intervals', - 'psycopg2-binary', - 'flask-login', - 'flask-cors', - 'flask-jwt-extended', - 'celery[redis]', - 'py3-validate-email', - 'galvani', - 'psutil', - 'maya', - 'xlrd==1.2.0', - 'openpyxl', - ] -) diff --git a/backend/test/test_biologic.py b/backend/test/test_biologic.py deleted file mode 100644 index c3ab570b..00000000 --- a/backend/test/test_biologic.py +++ /dev/null @@ -1,25 +0,0 @@ -from test_case import GalvanalyserTestCase -import glob -from galvanalyser.harvester.biologic_input_file import BiologicMprInputFile - -class TestBiologicFileFormat(GalvanalyserTestCase): - def test_units(self): - for filename in glob.glob(self.DATA_DIR + '/*.mpr'): - input_file = BiologicMprInputFile(filename) - mapping = input_file.get_columns() - self.assertGreater(len(mapping), 0) - self.assertEqual(input_file.convert_unit("I/mA", 1e3), 1) - - def test_read_mpr_files(self): - for filename in glob.glob(self.DATA_DIR + '/*.mpr'): - input_file = BiologicMprInputFile(filename) - metadata = input_file.metadata - task_generator = input_file.get_data_labels() - num_tasks = sum(1 for t in task_generator) - self.assertGreater(num_tasks, 0) - data_generator = input_file.load_data( - filename, ["I/mA"] - ) - num_samples = sum(1 for d in data_generator) - self.assertEqual(num_samples, metadata['num_rows']) - diff --git a/backend/test/test_case.py b/backend/test/test_case.py deleted file mode 100644 index 5c719bf7..00000000 --- a/backend/test/test_case.py +++ /dev/null @@ -1,69 +0,0 @@ -import unittest -import psycopg2 -from galvanalyser import init_database -import os - -import flask -from sqlalchemy import create_engine -from sqlalchemy.orm import sessionmaker - - -class GalvanalyserTestCase(unittest.TestCase): - USER = 'test' - USER_PWD = 'test' - HARVESTER = 'my_test_harvester' - HARVESTER_PWD = 'my_test_harvester' - DATABASE = "gtest" - DATA_DIR = '/usr/test_data' - MACHINE_ID = 'my_test_harvester' - POSTGRES_USER = 'postgres' - POSTGRES_USER_PWD = os.getenv('POSTGRES_PASSWORD') - - @classmethod - def setUpClass(self): - app = flask.Flask(__name__) - - app.config.from_mapping( - { - 'SQLALCHEMY_DATABASE_URI': - 'postgresql://{}:{}@{}/{}'.format( - self.POSTGRES_USER, - self.POSTGRES_USER_PWD, - 'postgres:5433', - self.DATABASE, - ), - 'SQLALCHEMY_ECHO': True, - 'SQLCHEMY_TRACK_MODIFICATIONS': False, - 'SQLALCHEMY_BINDS': { - 'harvester': 'postgresql://{}:{}@{}/{}'.format( - self.HARVESTER, - self.HARVESTER_PWD, - 'postgres:5433', - self.DATABASE, - ), - }, - } - ) - - self.Session, self.HarvesterSession = init_database(app.config) - - self.harvester_conn = psycopg2.connect( - host="postgres", - port=5433, - database=self.DATABASE, - user=self.HARVESTER, - password=self.HARVESTER_PWD, - ) - - self.postgres_conn = psycopg2.connect( - host="postgres", - port=5433, - database=self.DATABASE, - user=self.POSTGRES_USER, - password=self.POSTGRES_USER_PWD, - ) - - @classmethod - def tearDownClass(self): - self.harvester_conn.close() - self.postgres_conn.close() diff --git a/backend/test/test_cell_row.py b/backend/test/test_cell_row.py deleted file mode 100644 index ad22df6b..00000000 --- a/backend/test/test_cell_row.py +++ /dev/null @@ -1,22 +0,0 @@ -from test_case import GalvanalyserTestCase -from galvanalyser.database.cell_data import ( - Cell, -) - -from sqlalchemy import select - -class TestCellRow(GalvanalyserTestCase): - def test_insert(self): - with self.Session() as session: - uid = '123e4567-e89b-12d3-a456-426614174000' - cell = Cell( - name=uid, - ) - session.add(cell) - session.commit() - cell2 = session.execute( - select(Cell).where(Cell.id == cell.id) - ).one()[0] - - self.assertEqual(cell, cell2) - self.assertEqual(cell, cell2) diff --git a/backend/test/test_dataset_row.py b/backend/test/test_dataset_row.py deleted file mode 100644 index 3a3e6719..00000000 --- a/backend/test/test_dataset_row.py +++ /dev/null @@ -1,111 +0,0 @@ -from test_case import GalvanalyserTestCase -from galvanalyser.database.experiment import ( - MetadataRow, - AccessRow, - DatasetRow, - Dataset, - Equipment, - Column, - TimeseriesData, - RangeLabel, - ColumnType, -) -from galvanalyser.database.cell_data import ( - Cell -) -from sqlalchemy import select -import datetime - - -class TestDatasetRow(GalvanalyserTestCase): - def test_insert(self): - with self.HarvesterSession() as session: - dataset = Dataset( - name='test_dataset_row', - date=datetime.datetime.now(), - type='test', - ) - session.add(dataset) - session.commit() - dataset2 = session.execute( - select(Dataset).where(Dataset.id == dataset.id) - ).one()[0] - - self.assertEqual(dataset, dataset2) - - def test_dataset_relationships(self): - with self.Session() as session: - # create dataset - dataset = Dataset( - name='tester', - date=datetime.datetime.now(), - type='test', - ) - session.add(dataset) - session.commit() - - # add equipment - equip = Equipment( - name='test', type='test type' - ) - session.add(equip) - dataset.equipment = [equip] - - # add cell - cell = Cell( - name='test' - ) - session.add(cell) - dataset.cell = cell - - # add samples - column_type = session.get(ColumnType, -1) - column0 = Column( - name='test', - dataset_id=dataset.id, - type_id=column_type.id, - ) - session.add(column0) - column1 = Column( - name='test2', - dataset_id=dataset.id, - type_id=column_type.id, - ) - session.add(column1) - session.commit() - - session.bulk_save_objects([ - TimeseriesData( - sample_no=0, - column_id=column0.id, - value=0 - ), - TimeseriesData( - sample_no=1, - column_id=column0.id, - value=1 - ), - TimeseriesData( - sample_no=2, - column_id=column0.id, - value=2 - ), - TimeseriesData( - sample_no=0, - column_id=column1.id, - value=0 - ), - - ]) - - range_label = RangeLabel( - label_name='test', - dataset_id=dataset.id, - sample_range=[0, 2], - info="a description here" - ) - session.add(range_label) - session.commit() - self.assertEqual(len(dataset.columns), 2) - self.assertEqual(len(dataset.equipment), 1) - self.assertEqual(len(dataset.ranges), 1) diff --git a/backend/test/test_harvester.py b/backend/test/test_harvester.py deleted file mode 100644 index 654bc077..00000000 --- a/backend/test/test_harvester.py +++ /dev/null @@ -1,108 +0,0 @@ -from test_case import GalvanalyserTestCase -from timeit import default_timer as timer -import galvanalyser.harvester as harvester -from galvanalyser.database.harvester import ( - HarvesterRow, - MonitoredPathRow, - ObservedFileRow, -) -from galvanalyser.database.experiment import DatasetRow - -import os -import json -from datetime import datetime, timezone, timedelta - - - -class TestHarvester(GalvanalyserTestCase): - # well capture all the filename that failed here - def setUp(self): - self.verificationErrors = [] - - # if any files failed, print errors here - def tearDown(self): - self.maxDiff = None - self.assertEqual([], self.verificationErrors) - - def test_main(self): - harvester.main( - database_user=self.HARVESTER, - database_password=self.HARVESTER_PWD, - machine_id=self.MACHINE_ID, - database_host="postgres", - database_port=5433, - database_name=self.DATABASE, - base_path=None - ) - - # should have added files to database - harvester_row = HarvesterRow.select_from_machine_id( - self.MACHINE_ID, - self.harvester_conn - ) - self.assertIsNotNone(harvester_row) - - monitor_path = \ - MonitoredPathRow.select_from_harvester_id_and_path( - harvester_row.id, - self.DATA_DIR, - self.harvester_conn - ) - self.assertIsNotNone(monitor_path) - file = ObservedFileRow.select_from_id_( - monitor_path.id, - self.harvester_conn - ) - # check all files are in, then mark them stable for > 1 min - for root, dirs, files in os.walk(self.DATA_DIR): - for name in files: - # check that filename is in list of files - relname = os.path.relpath(os.path.join(root, name), self.DATA_DIR) - file = ObservedFileRow.select_from_id_and_path( - monitor_path.id, - relname, - self.harvester_conn - ) - self.assertIsNotNone(file) - - file.file_state = 'STABLE' - file.last_observed_time = \ - datetime.now(timezone.utc) - timedelta(minutes=1), - file.insert(self.harvester_conn) - self.harvester_conn.commit() - - - # files are now stable, rerun main to insert them - harvester.main( - database_user=self.HARVESTER, - database_password=self.HARVESTER_PWD, - machine_id=self.MACHINE_ID, - database_host="postgres", - database_port=5433, - database_name=self.DATABASE, - base_path=None - ) - - # check that they are all inserted successfully - for root, dirs, files in os.walk(self.DATA_DIR): - for name in files: - relname = os.path.relpath(os.path.join(root, name), self.DATA_DIR) - file = ObservedFileRow.select_from_id_and_path( - monitor_path.id, - relname, - self.harvester_conn - ) - self.assertIsNotNone(file) - try: - self.assertEqual(file.file_state, 'IMPORTED') - except AssertionError as e: - self.verificationErrors.append( - 'filename = {}, error = {}'.format(name, e) - ) - - -if __name__ == '__main__': - unittest.main() - - - diff --git a/backend/test/test_input_file.py b/backend/test/test_input_file.py deleted file mode 100644 index 68de7e89..00000000 --- a/backend/test/test_input_file.py +++ /dev/null @@ -1,96 +0,0 @@ -from test_case import GalvanalyserTestCase -from galvanalyser.database.experiment import ( - InputFile, - TimeseriesDataRow, - DatasetRow, -) -import datetime - - -class DummyInput(InputFile): - - data = [ - [1.0, 2.0, 3.0], - [2.0, 3.0, 4.0], - [3.0, 4.0, 5.0], - [4.0, 5.0, 6.0], - [5.0, 6.0, 7.0], - [6.0, 7.0, 8.0], - ] - - def __init__(self, file_path): - super().__init__(file_path) - - def get_file_column_to_standard_column_mapping(self): - return {"amps": 2, "volts": 3, "test_time": 1} - - def load_data(self, file_path, columns, column_renames=None): - columns_of_interest = [] - column_names = ["test_time", "amps", "volts"] - for col_idx, column_name in enumerate(column_names): - if column_name in columns: - columns_of_interest.append(col_idx) - if column_renames is not None and column_name in column_renames: - column_names[col_idx] = column_renames[column_name] - for row in self.data: - yield { - column_names[col_idx]: row[col_idx] - for col_idx in columns_of_interest - } - - def get_data_labels(self): - for item in []: - yield item - - def load_metadata(self): - metadata = {} - metadata["Machine Type"] = "Dummy" - metadata["Dataset Name"] = "Dummy1" - metadata["Date of Test"] = datetime.datetime.now() - columns_with_data = { - "amps": { - "has_data": True, "is_numeric": True, - "unit": "Amps", - - }, - "volts": { - "has_data": True, "is_numeric": True, - "unit": "V", - - }, - "test_time": { - "has_data": True, "is_numeric": True, - "unit": "s", - - }, - } - metadata["num_rows"] = len(self.data) - metadata["first_sample_no"] = 1 - metadata["last_sample_no"] = len(self.data) - print(metadata) - return metadata, columns_with_data - - def validate_file(self): - return - - -class TestInputFile(GalvanalyserTestCase): - def test_dummy_input(self): - - dataset = DatasetRow( - name='dummy', - date=datetime.datetime.now(), - dataset_type='test', - ) - dataset.insert(self.harvester_conn) - - input_file = DummyInput('nofile') - TimeseriesDataRow.insert_input_file( - input_file, dataset.id, self.harvester_conn - ) - latest_row = TimeseriesDataRow\ - .select_latest_by_dataset_id(dataset.id, self.harvester_conn) - self.assertCountEqual( - [6.0, 7.0, 8.0], - [x.value for x in latest_row] - ) diff --git a/backend/test/test_ivium.py b/backend/test/test_ivium.py deleted file mode 100644 index 7e2dabc5..00000000 --- a/backend/test/test_ivium.py +++ /dev/null @@ -1,28 +0,0 @@ -from test_case import GalvanalyserTestCase -import glob -from galvanalyser.harvester.ivium_input_file import IviumInputFile - - -class TestIviumFileFormat(GalvanalyserTestCase): - def test_units(self): - for filename in glob.glob(self.DATA_DIR + '/*.idf'): - input_file = IviumInputFile(filename) - mapping = input_file.get_columns() - self.assertGreater(len(mapping), 0) - self.assertEqual(input_file.convert_unit("amps", 1), 1) - - def test_read_idf_files(self): - for filename in glob.glob(self.DATA_DIR + '/*.idf'): - input_file = IviumInputFile(filename) - metadata = input_file.metadata - task_generator = input_file.get_data_labels() - num_tasks = sum(1 for t in task_generator) - num_tasks_from_metadata = len( - metadata['misc_file_data']['Tasks'] - ) - self.assertEqual(num_tasks, num_tasks_from_metadata) - data_generator = input_file.load_data( - filename, ["amps", "volts", "test_time"] - ) - num_samples = sum(1 for d in data_generator) - self.assertEqual(num_samples, metadata['num_rows']) diff --git a/backend/test/test_maccor.py b/backend/test/test_maccor.py deleted file mode 100644 index 356dbbb9..00000000 --- a/backend/test/test_maccor.py +++ /dev/null @@ -1,39 +0,0 @@ -from test_case import GalvanalyserTestCase -import os -from galvanalyser.database.util.battery_exceptions import UnsupportedFileTypeError -from galvanalyser.harvester.maccor_input_file import MaccorInputFile - -class TestMaccorFileFormat(GalvanalyserTestCase): - def test_units(self): - for root, dirs, files in os.walk(self.DATA_DIR): - for name in files: - filename = os.path.join(root, name) - try: - input_file = MaccorInputFile(filename) - except UnsupportedFileTypeError: - continue - - mapping = input_file.get_columns() - self.assertGreater(len(mapping), 0) - - def test_read_csv_files(self): - files_found = 0 - for root, dirs, files in os.walk(self.DATA_DIR): - for name in files: - filename = os.path.join(root, name) - try: - input_file = MaccorInputFile(filename) - files_found += 1 - except UnsupportedFileTypeError: - continue - metadata = input_file.metadata - task_generator = input_file.get_data_labels() - num_tasks = sum(1 for t in task_generator) - self.assertGreater(num_tasks, 0) - data_generator = input_file.load_data( - filename, ["Amps", "Volts"] - ) - num_samples = sum(1 for d in data_generator) - self.assertEqual(num_samples, metadata['num_rows']) - self.assertGreater(files_found, 0) - diff --git a/backend/test/test_user_group.py b/backend/test/test_user_group.py deleted file mode 100644 index 337d404a..00000000 --- a/backend/test/test_user_group.py +++ /dev/null @@ -1,46 +0,0 @@ -from test_case import GalvanalyserTestCase -from galvanalyser.database.user_data import ( - Group, User -) -from sqlalchemy import select -import datetime - - -class TestUserGroup(GalvanalyserTestCase): - def test_admin_group_exists(self): - with self.Session() as session: - admin = session.execute( - select(Group).where(Group.groupname == 'admin') - ).one()[0] - self.assertEqual(admin.groupname, 'admin') - - def test_relationships(self): - with self.Session() as session: - # create user - user = User( - username='tester', - email='test@gmail.com', - ) - - # create group - group = Group( - groupname='everyone', - ) - - # get admin group - admin = session.execute( - select(Group).where(Group.groupname == 'admin') - ).one()[0] - - # add to groups - user.groups.append(group) - user.groups.append(admin) - - session.add_all([user, group]) - session.commit() - - # get back user - user = session.execute( - select(User).where(User.username == 'tester') - ).one()[0] - self.assertEqual(len(user.groups), 2) diff --git a/backend/worker.sh b/backend/worker.sh deleted file mode 100755 index 4763789a..00000000 --- a/backend/worker.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -mkdir -p /var/run/celery /var/log/celery -chown -R nobody:nogroup /var/run/celery /var/log/celery - -exec celery -A app.celery worker \ - --loglevel=INFO \ - --logfile=/var/log/celery/worker.log \ - -O fair \ - -Q $HARVESTER_USERNAME \ - --uid=nobody --gid=nogroup diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 878591ad..cf3bc90d 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -1,82 +1,42 @@ version: "2" services: - app: - image: app + harvester: build: dockerfile: Dockerfile - context: ./backend + context: ./harvester depends_on: - - redis - - rabbitmq - - postgres - ports: - - "5001:5000" + - app volumes: - - ./backend:/usr/app + - ./harvester:/usr/harvester + - ./.harvester:/harvester_files - "${GALVANALYSER_HARVESTER_TEST_PATH}:/usr/test_data" - - "${GALVANALYSER_HARVESTER_BASE_PATH}:/usr/data" - - "${CELERY_LOG_DIR}:/var/log/celery" - restart: unless-stopped - working_dir: /usr/app - command: ./server.sh + working_dir: /usr/harvester restart: unless-stopped - env_file: - - ./.env - worker: - image: app - command: ./worker.sh - depends_on: - - app - volumes: - - ./backend:/usr/app - - "${GALVANALYSER_HARVESTER_BASE_PATH}:/usr/data" - - "${CELERY_LOG_DIR}:/var/log/celery" + command: python start.py --name "harvey" --url http://app:5000/ --user_id 1 --run_foreground --restart +# command: tail -F anything - working_dir: /usr/app - restart: unless-stopped - env_file: - - ./.env frontend: image: frontend_dev build: dockerfile: Dockerfile_dev context: ./frontend - depends_on: - - app ports: - "3000:3000" - volumes: - - ./frontend:/app - restart: unless-stopped - working_dir: /app command: yarn start restart: unless-stopped - env_file: - - ./.env - rabbitmq: - image: "rabbitmq" - ports: - - "5672:5672" - env_file: - - ./.env - restart: unless-stopped - redis: - image: redis:5.0-alpine - restart: always - command: redis-server --requirepass ${REDIS_PASSWORD} - ports: - - "6379:6379" - volumes: - - "${REDIS_DATA_PATH}:/var/lib/redis" - postgres: - image: "postgres" - stop_signal: SIGINT # Fast Shutdown mode - ports: - - "5433:5433" - command: -p 5433 - volumes: - - "${GALVANALYSER_DATA_PATH}:/var/lib/postgresql/data" - env_file: - - ./.env - restart: unless-stopped - + +# old_worker: +# build: +# dockerfile: Dockerfile +# context: ./backend +# command: python manage.py test +# depends_on: +# - postgres +# volumes: +# - ./backend:/usr/app +# - "${GALVANALYSER_HARVESTER_BASE_PATH}:/usr/data" +# - "${GALVANALYSER_HARVESTER_TEST_PATH}:/usr/test_data" +# - "${CELERY_LOG_DIR}:/var/log/celery" +# working_dir: /usr/app +# env_file: +# - ./.env diff --git a/docker-compose.harvester.yml b/docker-compose.harvester.yml new file mode 100644 index 00000000..842b3bc6 --- /dev/null +++ b/docker-compose.harvester.yml @@ -0,0 +1,14 @@ +version: "2" +services: + harvester: + build: + dockerfile: Dockerfile + context: ./harvester + volumes: + - ./harvester:/usr/harvester + - ./.harvester:/harvester_files + working_dir: /usr/harvester + restart: unless-stopped + stdin_open: true + tty: true + command: python start.py \ No newline at end of file diff --git a/docker-compose.test.yml b/docker-compose.test.yml new file mode 100644 index 00000000..282b6b9d --- /dev/null +++ b/docker-compose.test.yml @@ -0,0 +1,45 @@ +version: "2" +services: + + postgres: + image: "postgres" + stop_signal: SIGINT # Fast Shutdown mode + ports: + - "5433:5433" + command: -p 5433 + volumes: + - "${GALVANALYSER_DATA_PATH}:/var/lib/postgresql/data" + environment: + POSTGRES_PASSWORD: "galvanalyser" + restart: unless-stopped + + app_test: + build: + dockerfile: Dockerfile-test + context: backend + depends_on: + - postgres + ports: + - "5005:5005" + volumes: + - ./backend:/usr/app + restart: unless-stopped + working_dir: /usr/app/backend_django + command: ../server.sh +# command: tail -F anything + environment: + POSTGRES_PASSWORD: "galvanalyser" + DJANGO_SECRET_KEY: "long-and-insecure-key-12345" + DJANGO_TEST: "TRUE" + + harvester: + build: + dockerfile: Dockerfile + context: ./harvester + volumes: + - ./harvester:/usr/harvester + - ./.harvester:/harvester_files + - "${GALVANALYSER_HARVESTER_TEST_PATH}:/usr/test_data" + working_dir: /usr + restart: unless-stopped + command: python -m unittest discover -s /usr/harvester/test diff --git a/docker-compose.yml b/docker-compose.yml index 9d8c2f33..5cfde037 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,38 +4,20 @@ services: image: app build: dockerfile: Dockerfile - context: ./backend + context: backend depends_on: - - redis - - rabbitmq - postgres ports: - - "5001:5000" + - "5000:5000" volumes: - ./backend:/usr/app - - "${GALVANALYSER_HARVESTER_TEST_PATH}:/usr/test_data" - - "${GALVANALYSER_HARVESTER_BASE_PATH}:/usr/data" - - "${CELERY_LOG_DIR}:/var/log/celery" - restart: unless-stopped working_dir: /usr/app - command: ./server.sh - restart: unless-stopped env_file: - ./.env - worker: - image: app - command: ./worker.sh - depends_on: - - app - volumes: - - ./backend:/usr/app - - "${GALVANALYSER_HARVESTER_BASE_PATH}:/usr/data" - - "${CELERY_LOG_DIR}:/var/log/celery" - - working_dir: /usr/app + - ./.env.secret restart: unless-stopped - env_file: - - ./.env + command: ./server.sh + frontend: image: frontend build: @@ -47,35 +29,20 @@ services: - "80:80" volumes: - ./frontend:/app - restart: unless-stopped working_dir: /app - restart: unless-stopped env_file: - ./.env - rabbitmq: - image: "rabbitmq" - ports: - - "5672:5672" - env_file: - - ./.env restart: unless-stopped - redis: - image: redis:5.0-alpine - restart: always - command: redis-server --requirepass ${REDIS_PASSWORD} - ports: - - "6379:6379" - volumes: - - "${REDIS_DATA_PATH}:/var/lib/redis" + postgres: image: "postgres" stop_signal: SIGINT # Fast Shutdown mode ports: - "5433:5433" - command: -p 5433 volumes: - "${GALVANALYSER_DATA_PATH}:/var/lib/postgresql/data" env_file: - ./.env + - ./.env.secret restart: unless-stopped - + command: -p 5433 diff --git a/docs/AdministrationGuide.md b/docs/AdministrationGuide.md deleted file mode 100644 index 41ab2f05..00000000 --- a/docs/AdministrationGuide.md +++ /dev/null @@ -1,55 +0,0 @@ -# Galvalanyser Administration - -This guide assumes you have a Galvanalyser server setup. - -## User roles - -There are two types of users in galvanalyser: -1. The first are standard user accounts, that are used for authentication on the - frontend, and the REST API. Users can optionally belong to an Admin group, which - allows them more permissions in terms of viewing and editing dataset metadata, and - allows for setting up and altering harvester schedules and directories. -2. The second is the harvester user account. Ordinarily, there is only one harvester - user account, and the username and password for this account is set in the `.env` - file in the server. This account is a postgres account on the database, and the - harvesters use this account to upload data directly to the database. - - -## Creating users - -User accounts can be added using the `docker-compose` CLI interface. The command for -creating a new user is: - -```bash -docker-compose run --rm app python manage.py create_user -``` - -You will be prompted for a username, password and email for the new user, and asked if -this user should belong to the Admin group - -## Configuring harvesters - -Harvesters are created and configured via the frontend web application, and only by -users that belong to the Admin group. - -First navigate to the harvester page (the cloud upload icon in the left hand side -drawer). Here you are presented with an (initially empty) table of harvester machines. -Add a new machine using the "plus" button and fill in a name. Click the save button -(disk icon) to save your new name. - -Click on your new harvester and you will be presented with an (initially empty) list of -paths to monitor. The base path should correspond with the -GALVANALYSER_HARVESTER_BASE_PATH environment variable that you set in the `.env` file. -Use the "plus" button to add a new path and edit it to the directory that you wish to -monitor. - -Now that you have a harvester and a path to monitor, click on the harvester and click -the "play" button to run it. While the harvester is running, the "Is Running" column -will indicate this, and once it has completed the "Last Completed Run" will record the -last time the harvester ran to completion. If you wish to run the harvester periodically -then enter a number in the "Periodic Hour" column. This correspond to the hour of the -day that you wish the harvester to run in 24 hour time, so for example if you enter in -"1", then the harvester will be run every day at 1am. - -Once you have run your new harvester, you can click on each monitored path to see a list -of the files that have been found in each path, as well as their current status. diff --git a/docs/DevelopmentGuide.md b/docs/DevelopmentGuide.md index ac21c9de..2846e42f 100644 --- a/docs/DevelopmentGuide.md +++ b/docs/DevelopmentGuide.md @@ -1,44 +1,171 @@ -### Create initial galvanalyser database: +# Gavanalyser Development Guide -```bash -docker-compose run --rm app python manage.py create_db +## Project Folder Structure + +Below is a tree diagram of the folder structure of this project and a short description of what is in each folder. +``` +├── .env -- configuration environment variables for the server +├── [.env.secret] -- secret configuration environment varaibles for server +├── docker-compose.yml -- docker-compose file for production +├── docker-compose.dev.yml -- development docker-compose file. Symlink to docker-compose.override.yml for automatic inclusion. +├── docker-compose.test.yml -- docker-compose file for running Django tests +├── docker-compose.harvester.yml -- docker-compose file for running harvester instances. Production. +├── backend/ -- The Django backend +│ ├── Dockerfile -- docker file for production and development +│ ├── Dockerfile_test -- docker file for unit testing +│ ├── requirements.txt -- Python library definition +│ ├── requirements-test.txt -- Python library definition for unit testing +│ ├── server.sh -- Initilisation shell script (waits on database, then launches Django) +│ ├── config/ -- Django configuration files +│ ├── galvanalyser/ -- Django application +│ └── tests/ -- unit tests for backend +├── docs/ -- documentation +├── frontend/ -- The react frontend code +│ ├── Dockerfile -- docker file for production +│ ├── Dockerfile_dev -- docker file for development +│ └── src/ -- source code for react components and app +└── harvester/ -- The react frontend code + ├── Dockerfile -- docker file for production and development + ├── harvester/ -- harvester code + │ └── parse/ -- code for parsing specific battery cycling data files + └── test/ -- unit tests for harvester ``` +## Running + +### To run the entire stack for development -### Create a harvester user (can be shared amongst particular machines) +Follow the [First Time Quick Setup](FirstTimeQuickSetup.md) guide first. -There is normally only a single harvester user account, which is used by the backend -server to run harvesters, and which is created by the `create_db` command -using the information in the `.env` file. However, there is also the possibility to run -harvesters not part of the main backend server (i.e. on a tester machine), and this -command will create new harvester users for this purpose. +Next, create a link for `docker-compose.dev.yml` to `docker-compose.override.yml`. +If your operating system does not provide link capability, create a copy of +`docker-compose.dev.yml` but remember to copy any changes you make to +`docker-compose.override.yml` back to `docker-compose.dev.yml` or they will +be lost (`docker-compose.override.yml` is `.gitignore`d): ```bash -docker-compose run --rm app python manage.py create_harvester +ln -s docker-compose.dev.yml docker-compose.override.yml +docker-compose up --build ``` -Options: -- `--harvester` -- `--password` +The main difference from the production `docker-compose.yml` file is that the developer +can edit all the code in the frontend and backend files, and this will automatically +compile and restart the dockerised frontend and backend servers appropriately, useful in +development. Additionally, the development configuration includes a Harvester instance so that +you do not have to create Harvesters in an additional step. + +## Testing +Tests are run automatically with a GitHub Action (`.github/workflows/unit-test.yml`), +and can also be run manually during development. -### Run backend tests (including harvester code) +### Harvester unit tests The test-suite runs over a set of battery tester files in the directory specified by -`GALVANALYSER_HARVESTER_TEST_PATH` +`GALVANALYSER_HARVESTER_TEST_PATH`. +To access the test-suite, contact Martin who can provide the necessary credentials to +acquire the files from the remote repository. ```bash -docker-compose run --rm app python manage.py test +docker-compose run --rm harvester cd /usr && python -m unittest discover -s /usr/harvester/test ``` +### Backend unit tests -### To run the entire stack for development +The Django backend has Django Rest Framework tests, using `FactoryBoy` and `Faker`. ```bash -sudo docker-compose -f docker-compose.dev.yml up +docker-compose -f docker-compose.test.yml run --rm app_test python manage.py test ``` -The main difference from the production `docker-compose.yml` file is that the developer -can edit all the code in the frontend and backend files, and this will automatically -compile and restart the dockerised frontend and backend servers appropriately, useful in -development. +## Technology used + +This section provides a brief overview of the technology +used to implement the different parts of the project. + +### Docker + +Dockerfiles are provided to run all components of this project in containers. +A docker-compose file exists to simplify starting the complete server side +system including the database, the web app and the Nginx server. +All components of the project can be run natively, +however using Docker simplifies this greatly. + +A Docker container is also used for building the web app and its dependencies +to simplify cross platform deployment and ensure a consistent and reliable +build process. + +### Backend server + +The server is a [Django](https://docs.djangoproject.com/en/4.1/) web application, +which uses the [Django REST Framework](https://www.django-rest-framework.org/) +to provide a REST API. +The following 3rd party additions are also included: +- [django-rest-knox](https://james1345.github.io/django-rest-knox/) + - Token authentication +- [django-filter](https://django-filter.readthedocs.io/en/main/) + - Record filtering and searching +- [django-cors-headers](https://pypi.org/project/django-cors-headers/) + - CORS handling +- [drf-spectacular](https://drf-spectacular.readthedocs.io/en/latest/readme.html) + - OpenAPI REST API specification + +There are tweaks to the basic Django systems for: +- providing an unmanaged database table for Timeseries data + - table created in `backend/backend_django/galvanalyser/management/commands/init_db.py` + - called in `backend/server.sh` + - unmanaged model included in `backend/backend_django/galvanalyser/models.py` +- prefilling the database with default columns and units + - `backend/backend_django/galvanalyser/fixtures/` contains fixture files + - loaded in `backend/server.sh` +- creating superuser account + - created by `backend/backend_django/galvanalyser/management/commands/create_superuser.py` + - called in `backend/server.sh` + - configuration via `.env.secret`'s `DJANGO_SUPERUSER_PASSWORD` entry +- providing a custom permission mechanism for Harvesters + - code in `backend/backend_django/galvanalyser/auth.py` + - used in `backend/backend_django/galvanalyser/views.py:HarvesterViewSet` +- extending `drf-spectacular` to play nicely with `django-rest-knox` + - code in `backend/backend_django/galvanalyser/schema.py` +- providing a mechanism for yielding data rapidly into the database via SQL's COPY directive + - code in `backend/backend_django/galvanalyser/utils.py` + +Additionally, there are some tricks here and there in +`backend/backend_django/galvanalyser/serializers.py` and +`backend/backend_django/galvanalyser/models.py`. +It's hard to say what's counterintuitive off the bat, however, +so if something confuses you and you figure it out, please document it here! + +### Harvesters + +The harvesters are python scripts which monitor directories for tester datafiles, +parse them according to their format, and send the data and any metadata to the Django REST API. +The harvesters run continually, with an optional sleep duration in their cycle. + +The `docker-compose.dev.yml` file has an example of how to automatically configure +a new harvester instance in the initial docker compose command. + +### Frontend web application + +The frontend is written using TypeScript, the [React](https://reactjs.org/) framework +and [Material-UI](https://material-ui.com/) components. + +It has its own caching system to reduce calls made to the REST API and their +consequent loading times. + +### Database + +The project uses PostgreSQL for its database. Other databases are currently not +supported. An entity relationship diagram is shown below. + + + +## Contributor guide + +We very much welcome contributions. +Please feel free to participate in discussion around the issues listed on GitHub, +submit new bugs or feature requests, or help contribute to the codebase. + +If you are contributing to the codebase, we request that your pull requests +identify and solve a specific problem, and include unit tests for code that +has been added or modified. \ No newline at end of file diff --git a/docs/FirstTimeQuickSetup.md b/docs/FirstTimeQuickSetup.md index d15bc621..4dd07a11 100644 --- a/docs/FirstTimeQuickSetup.md +++ b/docs/FirstTimeQuickSetup.md @@ -1,14 +1,10 @@ # First Time Quick Setup -This section describes the command line commands you will need to run to set up the -system for the first time. It is assumed you are logged into the server machine that you -wish to use, using the user account that you want to run the server with - -The steps below have been tested in a bash shell on a server running Ubuntu. The entire -application has been dockerised, so can in theory be used on other operating systems -with minimal modification. However, `systemd` instructions below are specific to the -Linux operating system. - +This section describes how to set up the system for the first time. +It is assumed you are logged into the server machine that you +wish to use, using the user account that you want to run the server with. +The entire application has been dockerised, so can in theory be used on +any major operating system with minimal modification. ## Installing required tools @@ -35,41 +31,44 @@ git clone https://gitlab.com/battery-intelligence-lab/galvanalyser-project/galva cd galvanalyser ``` -## Setup global environment variables +## Setup environment variables -Open the `.env` file in the root of the repository. This file specifies the options that -you can use to setup your galvanalyser installation, such as passwords and data -locations. Comments in the file give more detailed information on each option. Please go -through each option and edit to your desired configuration. +The Galvanalyser project uses two `.env` files, `.env` and `.env.secret`. -## Building docker images (only when upgrading to a new version of galvanalyser) +You will already have a `.env` file in the repository you cloned, with sensible defaults. +If you wish to change where the database is saved, however, you can change the first entry +in `.env`, `GALVANALYSER_DATA_PATH` to the directory where you want the postgres database. -If you have previously installed and run galvanalyser you might already have old docker -images already built. To rebuild the images, run the following command: - -```bash -docker-compose build -``` +### Creating `.env.secret` -## Setting up and creating user accounts on the galvanalyser database +The second `.env` file is a secrets file. +This is not included because you should come up with your own secret values for the +entries within it. +Create the file and edit it so that it has the following keys: +- DJANGO_SECRET_KEY +- DJANGO_SUPERUSER_PASSWORD +- POSTGRES_PASSWORD -Installation and administration of galvanalyser is done using a command line interface -(cli) that you can run via `docker-compose`. Change directory to the root of the repository -and run the following command to create the galvanalyser database tables. +All of these values should be unguessable secure passwords. +DJANGO_SECRET_KEY should be very long and complex, consider 60+ characters +with a mixture of special characters (avoid $), upper- and lower-case letters, +and numbers. +The only one of these you will need to use again will be the superuser password. -**Note**: *when this command is run, it will drop all tables from the current database, -so if you have existing data it will be deleted.* +If you would like the Django superuser to have a name that is not 'admin', +you can also specify DJANGO_SUPERUSER_USERNAME. -```bash -docker-compose run --rm app python manage.py create_db +```shell +vi .env.secret # could also use nano, emacs, etc. ``` -Now you can create one or more user accounts. Create one user account for each user you -want to be able to login to the galvanalyser web application. Access permissions on each -dataset stored in galvanalyser give access only to certain user accounts. +## Building docker images (only when upgrading to a new version of galvanalyser) + +If you have previously installed and run galvanalyser you might already have old docker +images already built. To rebuild the images, run the following command: ```bash -docker-compose run --rm app python manage.py create_user +docker-compose build ``` # Running Galvanalyser @@ -82,10 +81,75 @@ docker-compose up ``` Now view the 'localhost' IP address [http://127.0.0.1/](http://127.0.0.1/) in your -browser and you should see the Galvanalyser login page. If you wish to use the frontend -from another machine, use the IP address or URL of the server instead. +browser and you should see the Galvanalyser login page. +This is the web frontend. +If you wish to use the frontend from another machine, +use the IP address or URL of the server instead. + +## Creating a user account + +It's not a good idea to do everything with the Django superuser, +so create a new account on the login page. +You'll see that you get a message telling you that the account +needs to be approved by an existing account. +- Refresh the page, and login using the _superuser_ credentials. +- Once logged in, go to the bottom tab in the menu (Activate Users), + and click the button next to your new user account +- Now, click the logout button in the top right, + and log back in with your new user account + +# Setting up a Harvester + +Harvesters are set up using a part of the code of the main Galvanalyser repository. +The first step, then, is to log onto the machine that will run the harvesters and +clone the repository again. +If you are using the same server for the harvester and the rest of Galvanalyser, +you can skip this step. -Use one of the user accounts you created earlier to log-in to the frontend. +```bash +git clone https://gitlab.com/battery-intelligence-lab/galvanalyser-project/galvanalyser.git +cd galvanalyser +``` + +Next, launch the harvester container, specifying the Harvester's docker-compose configuration file: + +```shell +docker-compose -f docker-compose.harvester.yml run harvester +``` + +This will launch into an interactive shell which will guide you through the Harvester setup process. + +First, you'll be asked for the Galvanalyser server URL. +If you're running on the same server as the Galvanalyser server, this will be `http://app:5000`, +otherwise it will be the path you entered above to connect to the web frontend, +but with the port set to 5000. So if you went to `http://example.com:80` (or just `http://example.com`), +go to `http://example.com:5000`. + +Next, you'll be asked to specify a name for the new Harvester. + +Each Harvester needs at least one administrator. +You'll be given a list of active user accounts, and will select one to be the +Harvester administrator. +If you're following this guide, you'll see the Django superuser account and the +regular user account you just created. +Select the regular user account. +You can add other administrators and users to the Harvester using the web frontend later. + +When an administrator has been selected the Harvester will register itself with +the Galvanalyser server and begin to monitor for data files. +Of course, it currently has no directories to monitor, so the last step is to +go to the web frontend and configure at least one monitored path for the Harvester. + +Open up the web frontend in a browser, log in as the Harvester administrator user, +and select the 'Harvesters' tab. +Click on the magnifying glass icon to see details for your new Harvester. +Enter a path for the Harvester to monitor (relative to the Harvester's system), +and click the plus icon to save your new path. + +The Harvester will now crawl the directory, observing files and importing them +when they have been stable for a sufficiently long time. + +# Maintenance To run the server in detached mode (i.e. run containers in the background) using the `-d` option @@ -98,4 +162,10 @@ To start the server side system again after it has been stopped simply run `docker-compose up` in the root folder. A template SystemD service file is included in the repository root directory -`galvanalyser.service` that can be used to automatically start the system. +`galvanalyser.service` that can be used to automatically start the system on Linux servers. + + +If Harvesters go down, they can be restarted by overriding the launch command: +```shell +docker-compose -f docker-compose.harvester.yml run --entrypoint "python start.py --restart" harvester +``` diff --git a/docs/GalvanalyserStructure.PNG b/docs/GalvanalyserStructure.PNG index 0ac2e421e3aa0764a3dcf760b716cfa884d31dd0..5f5e14c0ab79401a3a18e1d12ddabfa093123a7a 100644 GIT binary patch literal 434227 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 uW~88kSIO@jEJ8m`^S$pjhkkTm+C# zqn#xpMzhkI^sO1iSJh~Y%KxRvC?<*we?WbK))x(LUSjUV$v0$sMU=ukcc|yqfam!B z*@*()+`*}d0!vyTl0aNId^j867wi&jnsamBTh7Nq7=Sg8Z&@$C*$My05ceCC9&I=YCX{|En#a@bCSCy@F`#8K4H{@TnNj6z7aYZT3I zx`dF*)ik>nukvMg+4HJU64Q*^LyW4vlJT(gJ1~YV(zSxhHPL&jGY(=+(NnOY^InMy z6NWSSX?yYSnw$)HW4Ll~EzMS`fd3ggK(O#t*dA}dr#ixSvQqRdi%k9N*AKDt!_Ei& zK;QdE<#7?zOIcYLTYVU+GYxtEzzUL0FX4&ZsXySt(ofkIu*Zb*$`vc$-_9XR;kL_Tmp4iU!@Vk#Kxc}Nc2gWejyY^C9 zz1si2U)JX*M;>5|BF$h{jHi7%(rueFbti#EcKk(P-elBA!V}7Kb_U3- zmw{OAkn&qj)<1>~Vd-!M@mZ@~ohnMnFl<}EDE?6I zb#l5r0So)0xiXBXKui|Zq8^>QkbI(|%C32IH34O6U#%|CW%-5Cp(NrlHf7jDuZsTp z-C_R5rY;|aZZ5(5hI#CcGG*?DK*|V2=C=(3?@AF=PQkW(kNVV7m5o{AQLCE4oY6@*bVLI)QC`FBhGcb(QO{Xhprt%|xE?bISOX!e`N?$P5;n{%vR?(E zD}1n=_w7F29sEYjC7+xU-&@>}iuQl|a?ghEu}LGqbj8S$JnoVNu0Y8?w{J+DII(|t zaW%_#tthjON)&Z3UgO>^e~XmY2Qnj=XEru6r#^oGY-nVlxw$L7@>YIwQ}Rp8WcB+Y z(pskK)jF(e$d*$J*Te*b;yoyOe7JKfE^BsXa_Gw!?Tqr6D>hl(MJ$F7oi}l<=Wp{d zT&x*>+t9L&;F+~2vTY=oOhptAB(`8Br6?Gb;xX;=a5VknE+!CWT_rqGZ@0lne)qr`i|5zwMDqV!8Yx5o zMC+b!dn5ZIXSMOinr{=Vx$5A@4S#$U{lAngu7K~=iqXe9v1M)(GiB`hVgPV8C#R;wb&SKcFICiY99_yQ zKSD&WLB04DWEI#?eK>>JgsTbV9#+{Y8UIM-Y00&7SY(cl^?wmGa+QGLJ(yxNDtr&p@1(mg6+!6TJ7=fI#uSW*1b~X#$Ft;#CQ^PM`I% zXUmz40fX!HeHu!0lLd#hzoB5<-T`CrIa~SOqDgF)=BT6dZNPkaz_g3Q{dw)3iWfy! zrgUSX0CxnA55m0=2z(FtB}Vl?t@JySZ@ox=I9Ttb-a2X)r?iJS z_}s)}*CmRRq!Se_BP(9`a}e|&!e}JcxoP}?bI$V77(qaf9YN1eu3I!h1_e)MtdY)F zeOl!A?`}W$-HkMqmL8+wa(`X>s*QP<-~#$h9~ewZZyAAF@v4q!%pEC#=d7x*1+}g9 zW0{!(IfP7VQ}AeI)@rC};qaiR6A#+aVdq_+4p>ayr#-Hq-I<;2dGk~az^Y);*MDNi-!SXv?$O>Msg9c7 zlfVT?A2g+{sgt^uO4_V?({i{gxZ*`=SMVMirKxsEE`9|m)fpsXvh}H(M1L$hJ6_2e zb&XFeue6w8E|)5A-%Y^rk?8jmiGC?_IOtvCeOfnARvx#Or!8YFT5z_y_Y9V1BK>(9 z$9Fau0JW+!P79q`hiT3kew)>Uw0U&;ja_RMt#{_+v59eQ_7^bs;@wb}EMt^l)gc-2 z%d-!U88}|u@XlYG$w}rLnC6$tb0Bb4c&fSiCd!)8#|>X>uSm030;Y=&5lrf_v9ajN z+b{g%>n-anv2@(?M#p%KYp~MuSJ>aZ>SlFyC~oQv4!e>nFHYJ9YS^Lzl1D4Ay7brA zI1i`a96Z$0d6HZIbVme1B*4OVRTMp4+z56uiV8pVr{ zc)Zmq7>X7sKGTfHR+2`XyVU^JN$XxraW3`j(q%N?ar0H9SXZJDGNgeu<5Z#Yh*tW> z)Z;;cffb4JCJNn$*Xs;<<=Le63x2bS#ZWxdo&wk-N2<@$6UT=Ss1@aA^{AU>W1qI7n>^>;SVNu$>u6ilzqOr57UX49< z=rk}51DvcSQEs)<3DaFpsN>~JA}B!9Rd&NY(zs6_U+eddfo#E)x8Kc*zx5E$)>^cJ zy9!_3pP!PYeIu9i@$={Rf8f2qQc$Lx!tv_F(E z9Bm@jeSte`;ZpabkyBGs*yWg?Cg0aSefo(^;KhxXKb&l#TTAiDhk#Ej`{IQ_CcDz9{LDIvFI7 zaxt^V9}Z*)PxX%vI{XAi6a)o*Hh=3b%ocf=j&!N1BN;~L>ifTVd9~th;kRJ}ee^bs zWYp@q8%XwwnrGer?a9|%9ZM(W1(lC6h?5HKUk+H?kfkF06?D&NIINu>+9>^zwe8E0ZP(HON?4pjBYo%0`OSjNJE>W+#){B992cH z2a6Bx22`^#pQ;;1gc3Ujd{NPOok zl58xr#l+H$3n^2XPl%VTxR65AM!K$<_vH8ZAT$>rR)^EevSh4vkzKR_7(tA1%Kj4h z%XbkS01y+InmojX0FF|4H4hU#5Eak=Qp@^_o=m!WrugY3<=}JdMK>>3hUQ{s6!`#+ zzoChlc$(05<)3P%5(e_1K5YrkO1O|Zx-@dmDNTWA4{rWTaMVwzOC#+*I`({l-*(o? z6b0|jR+<&9;xh}*pLS4MS!Y)Hf@Z~vcO`#?#lGOX#`>NPGX=cz%a|WgJGc3- zErjUTP{qYDGc$Ju|HH45R+hGs&``FCNo~Fw2oOvj7vQ^*`ut9Y21xjOww z9#r^h?J9T_TKC-o76OP8#dBPcl}kGGkdqWv(=Eiu_e^ix{~+T@xkqOZH>)VlyOSvZ ztiD^gVQX5n9`=0Cq8f1;Oj=F2{8w-TG(u1Rq9_@BY4UL+B1**8Ws`YdWQ=1fxADWa z>vPjtygrUP7VYRU8`DV0l6)sh{M>#KvLsL*qnC+^)+}}KXWArb+F@~)?g^`_rTECJ zVE0ou2^g89V|Qak9hF5jqj;`djEG9bj>*1sKR_iSm=Ki(S zii(;EKRT?H=&)9C+0Y$z=M1t*Vg{9n<#2)e{@~1o4Orr$5r%)Ml)&+twAxu_%1>f4;Z+dVN`XiAwsbQqrInRT30GJrpQ%C3`qE-? z;h1RMfRz?DdDDbvNU{0uYi{!b7C$w@A_&_4{uSS-LE{QVS80kC|L2Pmq<#`|(M*ZV zsUYqxz0K6u!px?)$6AT@MQKY6@V4HL;-Cw>YibgqvPk2#@IGJ0l;RV!<=EQ~aZc}Y z$6we6E{VJ+q|LFmh-z)9R`3_;dF1mytx2E;k;Hz;r_drLt{U-OrLCdirOWVFO4N7$ z$Im?k8rc#yll5|F_;>N_KI`=)#_JkjC;&HcD~P*n6W_of{`R&SNi2PS#@An$n)tpX zF8Up$1HmkP`^O+s(?CEYx7%zC+nxmMVpKkvkEKQE%T7l?ad-P6DW zq;IVL@B?-Ca{-5E-HV{{cS9g&cw*`S^!Z9KB& z?0wrZ<8-<|chV;HBErs}zd-)CU+^=c;peszibU>5*=jz-*F1kxzOmESCxPO17=KSRO0n+7o*-~eI=A`dhXt{ zi^`?}f+v;pL=IWfb@V8PX%JR` zOOW9dXLjTs^FMz}FHrCQ&%cE-2ES$J99tJ62d^NhlS*l!#UKuKa%~gB<`_5&K*0Iv>#JiBoDWM>^wN z`*pLOg!?_XPGA8YXns+@ywov2OHAa_)9`_Lj_Oat$hooDcO{w~otJc6o_D zZKDUtgmZ~ng-#;r#mkpvWWwAA&gT$>fz&v@35vLINTy^~fFFN9v!eL?+5r$`h$zG^ z;f5ZFv4%yp{DHaF**~wB_uQ!RpZN2?u9ucV0$HipoI+Zx?W>Eq3BgQsa(XMX@lsQM zFo}IX^q?Rq2~7XuVsitx!6JYX7G~tP0LC*3#byEKFx{8~SO1L1@8^1*AMyCl_2Rd- z5K$$5%|*dfaOmZV&4V=YxZ6sjv54Dm`Y~pF&sdgB0cF(~? zXrS>MxMw(hS7(R&YM!JG+{-&$=Ow4y!hNn2`^)HOj&VelX+}9OkW{-~r^%B;1oB^@$2 zeIq(kXKU(Nl8Da@OKl!qzUF!LvY!U0p9yd-r}(^v)TtRAJyd)tZo&Fc3|nIbIw`R( z9CghjHk`{6)~6)@N9ww@gRC|MrH7PO5=0MrjEdKU>zizei{V+U`YR0 zNV#Ieql%6wLy?<8%mKPF*RTJ1c%J@xc(|A{>SKX5)i>owNnyq8FU`l5a*TD^3aP+< ze_hh!8?0L`i_DYA!Ef?|*`om2t8$I9myCr3x1`;NXCUz-Wr2HxTxv79TaDgXxG+hL zVgH{|rvBF`Lw^8m(H><|=!EF zSE8;?6$-|jz_X8TFb~v}V_NFO^zX%%>#{|681szmp*&TD0gRXZ_iF~u3)-mpxJO(y zC6lzQ$R|XqjJFQ{_fK^9_aAd(@#qH`>qAb-j2;ftJ<@2j*1mdTMAhj*yT=8F(sVm86EFgqE z3L@pf(jskxr+9dIm6etK=H#oePlupz|A{B)vSassL^nq4HeS8D>MVQ`0{)tGwA z&P7GaA?2k_1R4xfbKri!1ew=soYS$J1+y13`1_&JXcj@Ik9c4Xmh;31A6jSwQ;t?x zV9~fnOjKIX$M@#he>ri{zkXzej=@vtiXm!YW^R5u$KXIcekwgo&|hTPOQEOozfE!|Ia+Wb;wuLO|IfVg}%_@ zbQ1O6KPwULUn>#6yWr4HdaDCD4hARWC0CSTsmeO`kk&)xdcMearq1v0uY7$WpSQFK zm$Hc@c9n%Kq2ze;crwRM9bl$0E-tr@4z`^}XG#=2A-{Sln2xp@M?3Z!1noBcZ|EcdMqXtkgGj z`MD)G6#ped2mkhQA7OLWw_FDK@%Af4x^PV%k(*x25`v6b{v)*A;tLIBlH)nhXU}?U z<4rI9a+nN23k=eGQfw>DSKqWtC!w@GA6?a5bF0YhQ*7B%9hE@WKd0Xd3Nj`fi$TUlX;bHCeAIf*YwFIO)HKq-sS+tWmYi^?>0D1w zKWT5Tx$+q~Nv+^ts@`Y6299fKROWC_*_}tqQ_ve6$Rek&5D4Tc_Ff)5i|KF2~{Yj;N2ijdTWi>pa#Cq;|+aTC$*^T{Jf)bTH zBwj1aoIj zsMe^M|7T^v|Jdw6QCXQz;iecfLU$2B6VU&HrFt%kJZTTZViq1uv5TOrV)6+h@*j;m>9+Vec=)q>u$iM54lu(IbmQ zSOx9TP}&T|iRxQC9{%cdOT5>8m*V~XxM=&R-CN3|%NkV<^%SSBSJyBmfgC)7qU=zG zc;=mz-CP{wrO@P;ir6Fc=T`~(?W-&j6c8w2H^weSTT83DzFtt4QId}lWW^LIRy~H1 zRm3-hgyYYPQKDVelP0Bqxmh_r^b!16jPdacFuQ^LStd|X(5?U^$h}K}qrly9H--d8 zw@3lI{>=VGb0hR0a|mT4_7GmkQc3yp2n!Pyz)O}a8OuXz(`LI2#%gWK}6CDTtOKJfi)DY)tO#^gvs#-1d z%lpr-75LlNx{6v6VK&uJkvP8=JDJ#iux^!1vm#`^@w~5O8=HQ=iQm<=2>Z*`#ywt^sbX3 zC0tSwEnTXE>i^g8Rl)#j4odKm3mwFwNHHMNJ67pmmVQJx-|D0G;7Hd&=xhVg7mf4_ zkqT6HaFhbjw5KPH(g;(lTXx6RH5_i9(5})}19#fV-aa%@v`F^PdBCbGzs>`cFtt2+ z@?>hrS@nmG5^T}Tp$q#Y{{`AaG|f!g%uemHFejuM<|vg?82tm_EGE|Cls!2yfsccb zg666D$w^+D`wEh$zhIanp=_wa^yg(N-|}mSD}e4d>Kvrw)N~pfZ;FL=FcQ+^#|R`%)BVnE{gRNi6_b=KtBPXqojP?1hDv7Y-8TmILKGp;oxIHmMz#gmgC z=VjNe1`c2{1c8rf6i>);;{6YNCM##BDq$mt(GgB8q?N?BOm?Y8a~G|cJDxK1&_#cL z<9c7|fJx)vo3ExCJZGT!fawH7-j^>Y2AA*B4=2y`w&C`xfQ=X!;EJ}3EdAr7CDs12 z_V{08Hg)^waS_{HN0MrLF-#dcwIgjm(f^}r2N-J%_BX|ih%8f`+t7t8DJ$<98XrF` z#!qS98Z&otIGV}*I06?VBhTg3>~wM(L8lKpKY&bchP^(@8ooyd(^EX+*rRufz1uPc z3;{7Asg;XDSj5p@{X0a*?a{Aw&o8{H-?kz9pQ5@Y-Yl5Qh@hay@7U2$U+;?900sk| z<58aZ_{D@nHq@)IwLzJWCOG^mO*&~%X)X$d*b*x!QLeDqSbglU|Ki5uFdPE7$-{EZ z;ISgVNaKUKGRPKI15rDru73wrjvf6qdj7A`@~uecAAo* zB*eA$?4ia1$cCyBh8i7C*#LeQF_9g}uYoN)JQoz)-H0se@r0(gHhJ{aj%br=?9A;6 z^>OE$@M(B9{{tb8a)0yx--`?5XTC?|CMh5n8&Y}pwL9YTiJVUvJ~bIYu`b8vhD z8YK^_KfjqH9sfVgqSfuyD0Q12p3mL<(~0Xn@dQQ6>=)5lhHZ8E(}l8Ag&#hAz<^+Q z_#sUh%vav7ailOSTO~^~0b7y)Y;iXzn@QKt%mXqs?aj#YkW}B-zwux5a_` z=S1CZVoMek@`q)ko21sgFND~p)s2>WH-3phe*978m{uQzV=v5KMeL$Py9Ki1VuC4F)+XzE;Yn$Vd+*bE#+WDD3b!3JomomV!0h12ek9bf#d zxZelzLoRyZP@=@Qmz>e@)In50Kz{8NykwkH^`xzo=30?qiuBnxO4^=-!k0GfA&Kv^7kr!a4&Tke8*jP!~wv1=FA!7GDsc{K#~|nZH3ZK zc88AG7eSH}<3USHOBNQEN{qSs8@3~G&hI@rnj^=n_1#v#ux|Y*I=VW1&tCA4@&xk0 zwHzG65P7Oz6qCiR0Tp-M+#wmH_t)?7hyDN}iBn)ie*M;E3x6m&{kA2QF52d*(K#{b)`uSHjesa16S=}4Z7?8Ys zXsr+F&K>kT_^kjk44#}m#4mJf@%8_@R$M7S4foLtp36A?-}`>oK-=7vhJecAKhEnz z%pV}uL)?A!I0%eLx{amGT;6&WgAg<5jzcNa!y^u*-1mDgJbS|xAa=d?{yA&j+zXV8 zc^wY<48sTlT_y3XOu#(~fV8WDgG@w5x)`lV~+A7R*cQ1YX%g-NS@exp8(n4`cbUJMndU zG+1)~^Cf#B+V!ox42^|^gal;R21_BIRgt{a#(r~+JcL1m0|>q(7?U!~Up6o`n+104 zZSGQqAuB}8@F-|#AY=(~Bn(}pPPCUo1S;?AecP6;uKct+K6`DMV1UZC!ngEvct&;9 z%X5VeM&(B_gNs4@xhVu$nYZUSbW#bo5Bc0ZP_ZkI$MwKbJ}}nR_8zvCiTx(nFXSh% zn`lhi3BG^5Dc7ofK7~!cy4zq)+v?8LYn90d${(eD8-cjd|znA0{xq_1V4D?fx>nHlLXncO1T z@BS7S%RRfB>g$6dx0cy$ZH>SE8B}3^p?#WoJ$uG^#>Z`nERvl|idZZEYN7tCf;*(N^%er)Qg+e45jQ`C<( z8TzXEubE3>)#t~;4hR0`>q+@ISEInyrI?JVHU1dlmsr{ax{h3}z`T`(nHd_8C3CHt z`ri^&(7uGcIOYzvbtwy-->aUUtZznJ`Es9m>!okioypM6JhTL>wgL!yd!-*cGo}h* z2YJp!(0Q-OXXNDL(%xWHB9IRwqtbK6gQs@j14k=HV-Q*}kzPS3$C~b(A4( zewTXZ*G=a)P?{Iq_>LaR)%$g%avMDb_yoSWQ`~ygb>lzU924N9@E1_&ExxTtn$`F; z>;fz2S}uYGjPwZ)A&5rew-Y*Mm<(>&@~J6juE@4e&j}yRo1I47!=*)wZeiZ)_wC^# zXRD=+mMT&20r|mQCjl_U18cDhwz4*LG)M?}!U$tjw(aY7rCcRsu4dL{^%!D38kKt z6tZQ0%$3%-ie&UdC>hf;GbJ!;fP@i=RE;$*gsSJeY$ym1fC*FZ;_;ch>H56b=;#z$ zVl2F4exKA<|HUv1Shs68&a+GLArr$+#k z2RZsrPNvnWkX1ZL$)JS=hre&==fw5oWNOA0{6-o)Y2m?iZ_7mDB~A&rH~BBw*;o|r zHzZGyD!jqMkV6VOV%lr|_=w?Bepev#qnS-dz4SWd69sISXf2i1NuYT?j;wToa z05*GgG+{0X_Y)c#tXN8`q5xmi*Kgdrt?}&S@x}2IuZbM`bzw9`#TAo%|6Djihd**F zV(;ydlajHwp_IDOMS5kzaJ6u!*0DrqQ({^wxq{~!{Xr|XBS-`~4EJo;rmi-5gJx6H zJ=G|H%~v9Y;)*;hRG$g?>MR)Sg38VrOBF-f<)6?IlVLMK^9Ni1Q8f=^p&zJQR59H?ys6sK@MqBpxy!PWn zmnxD4>}s*$h3NIf`$xy@%a4E9k4MFv4PA=D_osC0X17zjVH9iGs~ecoxyp|G_p8uF zIZ}~yXQGWFY0403msIHZpHB?Q6GbfIzkbF(HYQ`#CQ@pVQWZpLbc8Dj+hjP#r+9w6SS|qCfB;@uym;8%|t#0$;twT- zhybeZS))^R6tK|E>GZOSUyBx9ATdgIo7@^*6ozD-wcdm-T$iLDijiu_d%W`m$)&ey z?l{wMX_wfYJiQ~%OE-pl_Q=VD+FJ#XHq(m8o$~tY%Z5&G@Xp*LlqbXd?IbEHJ|x*a z+{@}V@IXt%GV1AE9GU&sIKsV%^>An`QKyffKKdaMh&X|&15$ceeWMjd-zMtTvOKeQ z>(DmOp>4>K6=meb-&6X>8?Mhb`O#VXb4Zu1CpLF3{4hp$}myV|Df)>+jLTkAzD2Vnmuzmf5&6)qA$Is--`ZS zii(1ZmFvUvNBgns7QiZwND)7UkSA?^kIGDW@PQ~qnw#BE4%*5NezlZ6oHmrso&8!5 z|6EZ7AI|$?>Z%)r{@(K+k_>;tEGf1N zUfB*Pu4L%_Wh7pPEq<{(=Y6IsI=qD?3(^i(T@60X(K4au*S}mjDT@8t(j4Q()t*n} zQ>y&0*Cks&?Am_!Rlp^$weN^$8tdi4P~~Cu@JT8-j0I&bD6HCQ{y8UGg~QX~`E3c! z*WXEWrH4ElZtt)_(BG5tWxA1tB*qdZ#!@Dg{A6(U>!hb$qim#(tg*>CU+(S8UN(fU zH?t_}IZ)jD_2pbW4jI3k{e;EKQvd=8Ken8V7|`8ey?sVE=FR-BqaK(DX>}(j{JpK{R!PGtaPLwD8+R~3x*FXVG}rk~oo zpo;Y4Df4Et4xX++mcwQTh z?`I1;vx+r*JJ2#nZaSvZG62+El!~c zB@z^`mn1lsG1z;yqiKvjYuFXVm}-bO&N~LbBEm_w7Q$7|Vk5#;RpyiWgOPs;*W4Y@awR6l#1{p4Wq)cn|&k zrg>?a*JcxnWPGwdkVUTNEvId4yTCbO$Z-bwVKrR|-QbG?=U~|RZQ$jFa>1ICcL#6~ z&UEJ(D!ElEFfHtJny&$3E=vumht%?`UncTn&e(nuq-1*wrEJ_YC5Mu2i+5dV-jXrX zd!N=e?`!C~4C%BXC$f2T1a3#^iE8N}ypr%)>eqKFkUdIEcYAtzVxfc?J-nPKjoxDb z1vkz$a@w8n5VJXUObU~}X!>+g>UFn+1hhEg_S0_s@3(p0y(3G%O8(=a;Td_XkTfAh zMqxg@Q;86y6=6n1Utcg&AQRGI7x`LJ}qdvRvG><&?VqI z^Et;=qs%|ORm5ADHIVh&L!P)}zfy4i0ki7%lUO)O3D%RPjp`o)Uv!Sneh`k&{P;1$ z!*=c=KRN4{ZxSpl2s7&Nz0Cf1I)7E^?ZBox-yDz8Qv!eqw zcB1QkW4vs2Hgzh!$y0pLQBAWZdsj!tE${21XYUWqci%uIs;tL(4xHho?_4L$AWY>n zhXLU0o|;TP9O1WDNJz+D?{&D^SK;RRFELaGIeqH0G>5ENCfj7EhpxrXTdf9&Ykby12QrZQp>_E6yOp7tdc#y0!` ztLMz#c&#;9WHRc{@2MkdRlQ4gsL<=XxDLitiWm(MMVqMk{Ll_CS?-JBrv@hUP+ z=Jz=`ya;Nr|CR=n1;{+?WSjv5`a6kOx69Blwvhyt$6o?V7h>Cz+gc zLl`$C4J)CQmuWc!iHfWn8%>~0yH2Ks_kDs0XLR6R%qn{}Q?rEAXRqjNi6VqH#a;Y1 zw=P&K^!UcN5rLwjBK5}c=4>jq!`s+bU#L~R^IbFhy1{V?#}e9O5x4dc-~51EEonpeqt@1DB&HAZ6-Sc8x{!U~>%K|kap+N(K+ug>7r02lJz$J9=yF0;K z7SzB6u>Mp3ya>9b0zMu?f7VGN@QmSVFu|WoL(KCe1Gm_ z>xnjELnS7gXViGA>(26_Ye&Pl_|hwy{bhR1mJ#q1V|EXdDCT3v`v#hKFHH^Tn;*>K zt74#FBMs@P--t zdzT?+!`b2K2-_Ta_vWjrlWiI9UknXX%*~xhxT_2q9r5hRlaL@)rn+fwbCb;5#&1i> z>h+hERTq%mSXTmEj)@bHQh*_0%boo6iwahc7dnlzkf!5Z`?urq62b?Pzds(J26#M7 z@p5dfr;`~Adqg*G_a?QDd1d)`DJrV5(J<}KC~1IBRl^2)et^jz&W{? zgO_$5dd}oJj|G4UPV^+lVOt8Q=3stgX4VdWY_jirt^Ulm3jps{9rf^-K^X|W=toV_ zCX}cnP28%&gD8#kAPP9qoPO;x#}>vY z-{`>e5}jA|F6qd{V98Tqv?MzC0{N<1<~(p2F(^T?5In&>SMQkxO3#y6@I9@kD~tHi z0uwM~Y&;0>EtaE{1Z*GK5oj5)C1UHuwjewEn-oW>KH(GO3i*h^72rI;{-f000n;vU zB`#mN@=2HQr?G{q3M98AE-Saclp5$87_h7*Y2JF8Ob|VqwFhswg4t)$eXCNEAdSnQ z666_NqRL5WzDUM$#3kqUO7I#AHd@PDpC#iUwznHm3SI>VKb`u*uV07<*Q+;!&R+h= zHdFe5Z!+$9#MNP;_~*Eq(WQQ1XUSiHEr1&3!f2SX- z!bPP%Pb7K*O_OP40u@pvu4DUIib3zQXMi~lC(Us^v^!;I+GJs0sKr)O2r18zR|>SS z0u&Qr+*LNIhc)it@l}Rdy@dkQBW%Gl-=6baYfuHwL;W zuG)kKh<=96x(nT4g?UcY#J^WI3A0>Cyc-X!ib#kUz$*Rs0D_;PdH7w2OXnco@`xx4D~oOk1opD+03 zMaOAFXM%nV_`jRm6zmC%S7ezHT6E_xTzFYgQMxd?{jgRp8#ia*iqi*Js0>aUv6QsH z!q(n8N|!aG{&-~>YH$C=9vJ2xKmLi(cIm6rg#94!i0bY=`z3BF_q;!r-1zi#dY_(B z+|u?ZI}6gn7IwJLhq)}#MlcG*4$0nIOKZRDdT@3)$od|9$5wC?G2K*8Z;ebl)P#b2 zHW5n&25{nUFW-oVbSb-g{W^tXOU|BS58(R_{c1BggDmiM=~> zC={O@=T^hW$f!3t6Li9;oaER}!QUCO=P<3SC?mvM9zS*hdXPlmt@OYMS=k%PV0j5o zxr8lX&ohSoyT2bVN5ib3fkmB1xv~f8nioygs|($=Hs4pNMWo@EI(_L}D6hvZLVHFj zbHfHXYXj+%!~mmbCj&PhV@h+Z`N;hTqL1tPZZG%#^%|WUXoS~m|Bbo*DT3U^WPy$= zuQ4)4K*0UK73Z>y#WK{TM5>AKAxHOz?h!5_<%h1HFo+hz1Y`B-r>o@6%qfAfj@!Y1 z;SJ(6@S|WOz5kAAeSx98xi*i0e)&?4na_Su!a7)N&YAc zTX6X8sUmorHOicCLn{vtfbm{N?$`U75{J)01LiMlYij_8jE!3my}xwa{+r7JY9NA2 z?6&3t+(z1PiXfMj0h)(t2wYbnr2ZDhk?^9beV|XcRsk9dPJCkZqhLFjug^|>l+7qH zr+D%=1GDsu(YW_BKkeWzxo^R=a69}psvnyn7+zXf+|1-tQCBa?bC2w+=USgCVl}{$ z-?byP@`8WjLOiTX=|=r${bo=Z&|Ie|Phn2(zeZEeO^gR5wdSOC=?&=)P!;?Z+2>4d zN41EafS$f;*`?%B!cZLh<8M_Vp3=c#_;I~WVZ^&MOk?+|sewBX7!Z#|V_BIIH6kIm zZpmr6$}(7%Uzo#D6TC=gXXiNpF7$@1W@o11>^k2brJXYl1k|$tfb?-Pqq@I2UC_qL z<=#gQP^)rKrR-#>VX5=BsJi*jSI&k&@erF!Gdm1a?K(bwOw2K)IF=#sE)+vjx0g55 z(iq-Q4m+}7^MBW8xBr}3$jxJn5xQNbj*wmSTRn`$%r7bW*OR-7r@80(p<4(wfa;i- zw8Gmu&rX+lMbwcK&r$wii;o!;Sx905BfVzubA<;LPNj=;BO-{zhaUhl`!#DM9eZA5 zVh>C)UtWeAM<+cnmzjK5*-DpZ zjSd>2+!?X?$oZ19tdrX=r#SX%=hV;>3dL*K*d9i*y>Q!f-%8_K{WAEuTA$XEkAQww zZCdhoTJ+_(daTa!3)t>OtOG&3NLiG}!<>)=ulB#OqHZm$ZffuHBm9@vwurc%)FwFU#)!gVMimwl8bw%R-`nw2@VW0iZEpg zKS}#m@cB`5WwO|Y4+W|wtmFcC?D!WkqD6y%ioCT_;R7q}W9Bac4i+mOPmpj=&5gbt zFHuTSzFO?}+?-w3?a)ektK1NB&E#Dl?Mm`4H?y2Dt-xpVrXxf!A0O$5>j{K3QCmQ( zJ|$$@YW$O}r=W!xARiVbb8kkS-Ej%)44t2etF{tb0xu5_zS2CF4_pB(3)(lSL82I& z2heK>UI-NE^c~+Elz64A0F6LMMSvS>lX}*>B6g{cgKSduvS&2bhr7|fWi)$8MT%y^ zt6Z;}g^Dq-xLRP~*xZmo;&itGda-v@Ce^D{HZ7#uu#69mf5$~02fm|+!#XFo#csD` z1seA2{*)m18i|W7=VdJuG z8}G`h`QjLtqHL2I6)k%MoN%xgy`OiCsE*5%fcT2yr_ikr zs&Qma5w2U-$KwHCKnT9RWQ_y=RT$N~T3ZYC*t7n0Vq6!mIL$>E+9}Xu0lQ&BHx+w9 z`71&9ZJfv*Cs;*13Bv{SNzsvKBxuVh8q~dS=x~Ay_0@D=O4GSNE|31B6LPHfAAJHQ zD6;dp7`{=-5mgj&Q>6yhx+vtbVN*2L%97`QFLf0xEd?!bfdnlCsEoo?IgOs<&H1*Z zxY{#gNCwykpa2NCzs&QLhNH_{d0<@mWUOZdv)m!oqVNTgj4-6x%d0%K6wevEV77uVTNDu1pLy+8U} z@p^dbsRPSU5yKH|uNTGphnIJhL1&@edwFE3?$kTm#&23Jv*tkfT62u&+MZj zYg#mRny5d!ejJRDyT||Ig*?9yFmVlN`FRcoO6-MSb~Rpk+;4_8XvXpSbE>JUM#kDg z5HSeThh~?uj{E{7-?B?o1}*aKWR_(FFiwJtg6&*4x>#vxX_2V%rblXX#Vj^B=P`;1 zEPp!I8U)v7t_x$D5pi)IkfqAQOUV7a=M_2FD}pB8T7>slCGDe!4~;ey*f%=X1_)bJ zj+S;Wk2aL}_WW05Ua1k9nI@`zZ(P*bTX|dWol&0?2k~zTz%G?-C6$be*x(Yf-xL<4 z8kTB%di=SmS3g}UC#2-zk^6kNTB~?#RF{Kf6^YG0EiJz*`(7Q-?I89JQBCetbB*Ka zfZdIazf{^ekGCVHS(~vT(R%{AM!>`_!4&o9RN4ODdY0o~R>it4;oDCFDgYhgfX8UI zJ^$kZ0w9kA0fwpAF$*-4+Mzo}%4qx~m=5c*PJX8usMHc3eOPU^8W|WG=2=#-LWy+oC?QG*Wo!)SxdGi~8z;A{Ij47-Wwr(v9rhsCcmvt7oge^uMVdw>oc( z)U{?!@-Z|ph#PwnEg{2lCsR*17Cz(-$BuC=UmT;c)q9LrVDpH2abIux{~_$X+bR4JkQtbIgaOX9MAoHcQ*V-1C(`C=Y6|HrQFw&2Zjv=r%0^5*v_;1 z?-O*Jf9mo;g+OaiBH520KR|>gd>`6{Iaym~S|%tqZ35dD61b!tDBDu>=nVIP?#}u> zNn>+S+sF;~GsD+JKx{!=y$k=lmX-l)VanaYTMe068?wp?Cod53+PfJps;QJ0Q+n?! z=6ous;C1H!&K)m2g!9*wA0hR(Y1aisOO)#oO+X$kY|H_tq;QsT7_tT}b5Xm}6Cs-vHwP@1 z*rMU^-pc1GUo@k`vcNx456r%R#A5-8Q=}G_eeLLDTq={*MvK#|#x<@33&WipbZDKq zM73Qz51#~&wVj40Ja{jomhSK`j$$$o!98UnCa+$a03(6V0Jh->;%=O7x6El?jU%M#K5*!=sko~$(~AV8_HAo7J@uD=Oq zn2-57QcgU^Zcn5E4|@A`8V0-*<7s)=t_xFu%VeyK53lXfQP@+x?T(SB|It z{GX2$m^s)C=*G$@?I@V*uh@Un{BRV5iUlrNPPaIfPPiblP zfD5KdRk`^ci`#VPjo|&-HC@UL^YjmQu$FD%|n$@%-F}*9ofB5~^IQBJKpi zpJ9#vG!mmAKfh_q>*bF|%MPAxVi8cCjreGsf1Jg@hl9I%@6YOdkjedOR?hIzV=LZ zNT>34<$;=al3FcU^$#rTcCKw=&NaulFCBBtZthFEAx6gAYo|3cZ?s@2o4ulwmN3v?)UkSch8)W^4@?y5EXxBD10wn7-PR=oqJwt6 zP5p1y7#I={s9Y?Sv`2-}wcNkh-wU4&gi6$k>NCKa?sj9lUjKZ|M(#Mh$x;tes8xLG+OKzOflPQm zmF^|-;g_(z?Ifc8WQ?c{AiA!yU)p)jqP>KK>L09|Ri-ryLc_03h3a@=*nw96v+(lf z)i*>J)iWr1=%?-;%l#H4x?+j2s^ZvAo&M`KrT%nHC_WQ%z~Z^o@s~4tN7FK?TTdd{ z?OVwL5@vh3VIhGGjixIh!k#!$3rX=V3@8SgIUJ0WicCf+OhbfTRbNifP8+DxwuGK- zzQWR(X?uEJUS52>T!P|-3qL_5gpUiGx&&w5p|DSIE5UZx%7<351xf-iBzn{DCLO@P zC6LGf-)I!}u6A_Q!pbWoF~&cVm_qZ!0OURCIofA%e}6h%+ojO;YGToHLRz|vsr6-v zMnv+;>-ccd^P}wTvVXa1@>9IUo%Hy=;&l4v5O~NX_=iCWV60;bT+iD26Mbk8 zt{i4eP(fY1_`1jh{im@G;ZV_I@c7xYUQ7sdnhSh7v4r8*53z|1q6o!zz`M`h={!Wlrhp^GdI zBGn%UF?PVgHmyl_mnUf$?kfEI-~YIrae(jPfinw>JVl&JiCnEf%Y&WK^OY49Ue71W zc=G5pbcep9r<*|!yNHH32COw!h&sK>Dj@{AdG9g^=*P##U_2zaq9k2OQLzl40LxGa zcZ;7tL1Y{o3Tx-*WzxOcU_!hxfL^dYY$;-J(cx?h;nL=xaqQ&K&wwm*D8m!9BBJN@ zifmiS90reb+gB8(w**znrK@T3CS{Vw3f2#eV+WFpi|r~a+S!ln%t`gZ zlZ39PdD}MWAnX70mod!A3$o<)ADEQ1=CFkINQ2}^FHg>9aJ8@ki?>7wU{Opk#qtEnV;2{RCC zQTS02;#{IAVpI^u9jt`c{zc!ubid%CLKElEU|!F%Z#4LSzwCAPyYvj+5(HRCX0;mm z-zS>UFy~FsO>RQ_T3+rrKN4M3sP5=c>Cl2@s)n1uWJHSm8nE`PLX<7sr-)t@Tn79> zJ6crqx6{T_5f@{7;L5LW5+3>0U%qIf->@CjyCDB~vlnd}<|WOq&g6TDjqZ(94k&9B zFPqMCnVNzZcYeRtn!Nr0n8gzV96)i;AwGmO6e&Hu;bU>}lNT?D-@2qoRCp1ORhvwp z2^k+S)&uyhbB@Io7J?&m*HPT76-%XlS1en#!$*Oxrr!!g)b()S!5&W3gs{Enp+YDN3}CM|8~dO>=^L<{%i1%)ZxNMMB4 z>8GTKFKWworQ%Tix4wW$?hNyOkA)tO9bP4SIBx1w{=a@W{m4H*Tr~>(MR4B%!>?s< z+#Gt^t3wev1ZtNQJeqxy)ys#y;#oK zu)&BT%czJ#$4I7E%2~BgnL|m+FiS{S`!|f;_Wq&QC8MchQ zwB1BWnQ{Vf8S@^><^Ucp>eQRC%>~MQn#9W_XF?=Tu!C+9M+Ve|SU;nYF$)%$5=l!|*JEY?;28_WJ zZoSsAiFmnd#U~|ZTWXMb|H~=~Zg(mRLvig!nS(0jO_!ypI ztfrC5XWv?wqQ1!jbm3rTTGAHI`4CFtsLVmQ1cG#f9UP`ax2yKz4e{w0=`ExE8Ws-e zjWj{;b|^vaM&)L(n?9e5Fr{C_wRQ0;pN2vbe5s}jMo2LLF90QzS5yt3Nn8fDeM&TZ zhwnW4e7}4#khSX1eb#RyaqN7V-hLab^jW5KBGD8rxDEO)O#1%p?Jd~t(bOMx?_R(n zfmJ=BIU+ZKye=HE?2d@`>4bD25toJzQu594&0gVPEiAdt6PvryE1(j`5Cg~lvH@#O z1no$b&-E~+J-Y-fIJvmydNuNP@SO30A9?lp16adndLzu1_QEQx zPataIP8OU~0k{%d$VEgPv4VUls8nC-xFg^^_FTVE+?7zH{c<^@m10`qvM}M22LF-K zQKYM-(U(0Bz0>;V#}NAzqcWKFwYvV&H((tu@Dc3nS;=?0xg3_bPS;oizm{*0s1UQv z9{K=ypZlW@(UB1o9%3^QzNiC%8ib@}uV#DmL~G{kX@=aN9?`iAonHsDLF96A0PQ6Y ztJoaDjp!v)a!gT_j!kmqY1{tyHJW$H(X#~IXyDnS{Y*@cfMBNV-LQ6iFCj7V^epxn zdpMMR@oO9u3iuF63U$vYcl3Ms zP$|B-#+0zgxdO<}c-YTkD9*&0CUpJ%Fsid2U=U#Bv1C4n?*HIH<4xtpgQl#~W{<%a z0}m3jzV=Tiw6!k`ntzCj@UNzIFq5q;HE&FXk5q43-dsPi$rH3dVz&T3|19tYr^0O- z-7-q_^OYh{E++sm& zUjaKMuy?R|HwD~}w_7A=$XZyuZ0i3o>sf9vxZGovYYx)xzLVM(@*rObIOHmF3;Tj@N`7bqUI0LkB!oXe=(WYO`ugwrG7ZsY)RCB7&O7=TLa za@T_u2!z07QR-&cUm#o>TzC(I!sC8LSG{=-q*xRFh03h(!SYoq?`|%K<=6P=Xm!q=Ym6r_Q4VR3ZJ^QY-Pn4YQFYalgiRr+=a}JyN4gvB$hX|jK8sU`F_{esgq5> zu|KcQWiC(Ls**=+ERl!U=n;{dGxSi|1fqs^Ws_GJ_Mi+>a&k{1!jXc?^2;?VDpgMX7e>vJ9s-Glr@yZ9N zt!e`0u9dmH@=YOcj<&`8XNZ?jzH?(&i3H(V^)v+y)zL> zm-#M7vO0wFja%Kr$lTPoY<2_{$Z-DC_i?b5#?mFPeJ-irO7i9w<|aGzo$Q_3DyyEB zJLTo}Xy=tUeR~~&04yP^|2~9;k&(e+oF!p7$g|qCW`$yba*MFKAUSn-zVdRiM2ujM z8d*)$f7p`%IuAauv8pLZkdR-!Oh}lWs&vs)S05i-m>*=A`BKE4H+xyfnbx7*i_Lke zOh5P6`;7>*lWLa+?J6Ax@)qX7Zr`$?SE}7I93n?=7yInldGy%;s!8ljb*>UfZzq{3 z$F>te1n#6T2qdpqMHi+JDTa)K2^oOzphdG}G>lLfX~AzhgVw=?cqwsZv>XRhU?c^T zEz!{`DKutHR)*S9;2a-|yi|Cwu;BB9asd}RBPvJ_rO%|C)qlT#IX4_1&2a!tV&KJ1 zEZ)PqTkd`PAgtVKJNehnnG7B7sS&_4LrJJMFk3!I0Xi+|*6*I4WRxQpBthHo2*s5d z%6|B}!}QC1jD2Kwq!J7k@%d_B=TQv0iQRen3)A(jfT!o*G0d)bnJ;Ni{G|+zCD@;{ zb%NsIUgw=(Q8Ta(970%345xfM8t*b4Z#a!>fj0zKvv}qEV8+ndquw{Av1qb%rtMR!IxR9Nw~=kC;6;|#7`O99nmcm!eB zlw~`JYwL_&8GD0Y3r2HQ+SKb39_5h2{M3G9{`BR`7C0u!<;{Kqoz(p-)?<~?W8lDO zTA6$6)Z+3p_UhPn2U{yj-=?2O0E<8^|J6c3Y&S(>z4ob7*vIX0ZZ)IWbrtH>9?grs zH>hunat^1ul9nW}glgsP?h6p%z_4k_^s7MkEzm%mUEhV7yoDLtyqRWV(@YDt9OJjL z+P%GoSUG~D-Xj2X86k5ToQZGodqwejLAJ5|YPEL$;x{Mc5;#2p)Bl9gU46ZPu<-ty zBv93$w`q3@ZzI;BQk}!6NiP`%+g*H5*8oLQP4wiiNIiy^R z(wKNbzD|8cf_Jzo_2)bF=Zjos~O#*Z3&d5MG$@94NBp z3Gw%D8?zr0g0*MXatC0Vpy3YrxcHJMUU@me#|Fs`^@J~-5PWE^_BW29ViXdmnNk&tFTaS_)<^8ia~m+e z?L3FwWRWxXHN=^+0;gK)n&@B3s&>s}(FW~h-0ZB_S`ep!W1nudDHpINQ{{&x+0d?3dG=+?lSi$G*mcVBGJ z#YAg&$`Gi1-sWa(M|c16!kXR@FYIqk7G%i)esN*JAjW;gxQ1XKppXMEeF~utBS_1JQ6orIC#!T=O>bW}{ulyjVfBx**8}o)_oDt&tefs3N z7}=gs45-Y1S1HiJXPGDRxt#cPHO`XB$sOsaya`)pj2My_p_?^~D|qI$E$G7S&#a7$ z$^Jjqx$$tV%q=fpt!^gk7eg#!K#h5{oRC~CPT?MEMG>C_dwa8eirJ00h>2lL%)7Qr zbXa@WWBn#A&1E=Z8xg83vIkjOJr!3RC#}c|Y>UukWOTE+M*h2 zT$q@8qQ{F%78V^H#?$Nh*RshP6%}nt%j&2J+x=LBOiW9~#KaCB{Dfc+d=rDPs;XC@ z(Lp^Is_#5S+!X>A(z)R_`a03+Vp#}RT~ih&W;k=ReP_j`Y~;mZ5QG)p1O*8E$zB3# zA^y|D_iqU|DOe}*@j;%;Ue}E-*Kl>`J;T?i^j-aaY$RR^y5h;{d+VzjeBiU5UXGSH zU)asj%kCq4wm9NI=)UJbk9vIA>AWLX^XWTtRblDt@>DmG&9dCNXp zg0}7Yio*Bre&gv_izp8drEQBdj`kDnGt+)5pcLBtF=rD@(729sa2Ny_Or3D1i#iC5 zW6|v8oTX*xTqzbz{=9=&2+|bFp|o!sIMZ=rMzLtNDapu#ZVh%17A$y1C%{UPVZ#7c zjZb!B=iEs20!oqDc=5TOg(>lcAH*ukUh>(g=mk4l+X--Oph^RD>kvf@kJTo>drAG+ zSblxmy(Fxt;b!_Mf!jz}^jeu}x#vxK=UwZL@d)xHoT*KuVFu+4ZX&@OFmA@|1-f*g zL2w}&9UE&NebGwnPTRP4T( z%cIMFqHPCGaM*Kw@UnV6|KXQk`qDZD`u^9pF=NtBN2htGwyYiBT@|Q?Qd7Pb#9H z2^62AKDp}}EJVdI_!_V-*y%MEz`?Gu{em*=s+6K6tcPa}eak#Y?h4M(30^wFa8X1D zT>)WOgd=J!Z939bL1H90HaL->K`@D;$ckTlRmoiX8s(Y#7qp}n52Dk26~7$W3O~}(N3$zfM>ZidvBc6 z8^|+7&|qeQ!61ZxJ9<^XmuN+BITrWe&Tg;(3m3T5%+F!Puuh(@%L=xIzS=eonaqO`l}8kes)H| z`;(IoNrE0)65%MFH=TXtNn{|{3A8g$0yHY~EC+S-g{M#7vtyB`3VT3eeGNyg?&?Pv z2oLu6Z##R@YGBvy-C#Mr)l_V4vbT~W$(QV5d=zIa{qE?Nzn5b!f-=Xua~xn~Zc#92 z$UhKp66-f;Xa2)i6T8Wx$DXO={ur75;6s32i_~zKXd(b?f0-i*dQt+~?oMFMX`a}pl7nyU#SjTy@~ zAH%~pN@GGn!1fwZl_nON=mUr$F{EJKFs(loTOAmkRu;ij;pkO`?tcWU7i(6SNJxw7 z(jPj8JOd{OKWJ^J^H+Kh3y97{Y_Y!6?OINo++}q?2B-v=pG5?Z!f9P^eXmj5=U( zO~D}MSWt=GjUv~6p>)n0%J9>3nH$4UAA@Lh4GqhNWSOf6MoKvn9SKy2t^6xq3i2XR z7GtXF`EX-AwTr53q?vJ|IUzk!U{``@4|g}hsUSmzBGp*N7z5ITRnG*UV^0n6S=3L* zBOiIVyMwn_uunU37*kKQv7iShc>3_Lq$u{wv&tWp-I_oj$2?cLuRi66J@LiVK zY6)(dOi6mh_Jc==M~xpd#CrbR5=Mb~AfMt@hnq2V^&h4F%TlLD$#NV0)Ya z>L_h!L$Zk?N@20H?%-iE-WImopJdC%w3d4-TLmFsI{P4wm?&dORlw8^2Wi>JF;H~D zWiG@!5XM3m#3N&A@DP4r?vAz-CdCi|T)uo<*0|vG%tB>Lo?OwX=!y1)L7vkWylgma z?#s@vGzvLqIF_0uWOLi9@mu7}u+5P>qeu4$3dVFLd|-Zetu0|q?J6nPwr{CBqPL&u zy=)a&9QP%bRkbOzRW{B4U}m}ey=t9o>iH`acaJM>Z~gOOonte7s_IcNW|6?nko6+540 z?K&$KK&gIv$o7Cw&H5pEYFIX9E&Du>a{qx(`!9`@ZcMYHk5_KkGlE* zCV6`nm*VXnYiIKuh!H~FC?Z0)!40jo^MtL72EF(ijO_s=p(PQJHO8wJVw6%5y<1%M zsJ6$thAEi-@r@(bnMip1=u%QMP%SsU=DwD;Js&)tN!X-sy zPgUv_?&%vl;jyltOmXiW_@IBITf=_JTxLh0@Mu|{~p(7*4ZoUbpJzyMX}f9_5H zc=R*k_(qF0o&94j~?wuX37h3%P*XYcJ}1{p|)n^>vY8O#yGF#ByS&M^-3 zXp=PbSoJ^qQAU9nhDb3uNV(=FN^1D+p-w>AMij3J+gmXU+&yjAxMG^kDW=)N^8ERS zHbNX&WPe;$^;cJfCHFy&k>Er}69WV6l_Voer=9&)C3X-9pq#Ai`?dq3!`*woR9ByQ ztp&tmxOHL1B@gg0s9N%sufctv!3_`P(SPg$(6aVs!jmWRcZxqP_R3ZHcj@hVN8M%* zoMIxOD{S;6r(}L4Yn)1XNH?c$mQilqg&Iaz5@>p9vrj%CwRUzK^3n6sM*{}rOavIy zD32i9Q^o%}I?j3e&R$+xZEd{Kc3rd$mx3J04EFr}(q!5mHlB623ypFdRgf@P zD{EnHp4!xpTs5jKdte8-o8-#da3YzePHXDFB-nkH-tIfqX}(+tYC_9oo?jE8pN5Tq zISvr8e9$DHJv&|$ECc{ZGKHj_W)Y_=sgCcn{Z91G(N)!t72!?XGqq*is_qh*$^<~i zQ36OhK2fKMK%+J~2-6AlZli*a7@jXzs`wI zH0T^PDuh(7LyV8aihU|c#9Mm*Jijs3^MTKh`1P+C?Qif^kBao6df3>gHAQ~>_Ma!} z;^*cbnjLm$G^!l39bYk8OIg<}1XGfc#|G~xE+X#LD|Q{N+HJEqOJFp7cjDOFe~E+^ zNi3RY^SaTA36K0Xd1lFlSeGB~&){HHn9cxg=DxrRI%W5mJ>*5*8+-K4T;Nl5;zZ!* z^Dmw~YtJ--ei-=}`ZnX;S1`%osY=_+fynKh?@Qi%CGaK*ZRvSc_@jwz)>7N5k{T;( z+lo>uw< z95$0IN?!L3V7%p4`EnH%Eu+Ksxaajm(9{g{aZ#E1JmpH-OzBE`?*3mNokuU5ou^NYBShV9v|7$2 zP|Y%DEW~k*!JZet1BqM5UlA`GHPqDhT563<%}?Yd?p6jgx8~-%8#h)cm-wLHSrX1o zOh7jWB0yF%c}9p!1x5S;gjlG3VqCgQAb ze6O-$tVf8CFJDE4!hLw;<)cS8qtx-lqn-(giD{@7RHkk1ou5*HtXyFfUu|SzU~oM; zD$~ypMg3*Dg zDZa*TWm6O?=H@=Rw}HSvN#UvXZ7_cWAfQ--**L8UKwOXQ+G*wKcz%xjj?${fARz#) z1ce|`CnMQ2LCM~J8sq8*6{Sy1H<5`J9T@*}6ufy5q|Ze>Dab>2W5pi%C}{{^z&u!nfX-ZKVqL z-Eu7Snet+hi6{enQDGJ-Y;)B4uRYt(vH!m6t7w`&2}e&e6fCqc%*SM#vIO0~|6-Ri zIJ6NSfiXN#OU7CewQx_G4}iw0kX!Jb%imV;%5~mtLD4C?Qmz%x zjttgftnN;%X%ITdBZ$ryR&hmRF|VxHb9E{MFKz%S0QnD>6>-@`}VBB^TnxymM>i{>-~ z-sGOo35A(6S1Lu>68m=|qhkz{J6o^?RFI1D@}Ny-=3ic&fnm4vIy^MT@*^hkK%uLBVcA9%KhBEJgj)%QUlJ4{ksi*k9U85~#~&K9igJ32poh@+Pi^3+ z=7`nltDM;Csn%{AN7QjYXOxDcBj=@23bRT`yBEJXR`vM;ahzjW z&l{PjDaW6f|8!7GvE}wd3k6koz1hjlC#@rj&z31U{AD>T&LH#e*K&A{-y(9OS2M6{ z8Xmo%=&bdl8{Mt$vV9IoXSh4^2HxmUBCFi#)88(f8bpdb~R z(kYvonVFfJD{)Oy^_y?KapY~skRaV%RGFw7r(RCZH@VDMiiFm}%=ndSuJ{(OTatUH z_eb6IN+B(^4#?t>!FHHAgR=KsTd672=7Nd}CDA<`;BgjaR|{#7FcIX)_Z7i;U+EpC zK05nw?RHVRnXRKdqimxGzkBTTW#khQ%1EW6eY_Od<##*hEufnttVXjd%7X&~!FaC> z^D(RPEjh0?vc}{|Pt8QFFK^=}`%QtB+q>Hfy@?rS`&|FQIU%P^&%6hZMPs*_EaXm~ znzo&$p5la3vL?D{mhv#T$F}2rr#towqe5?dvAN?*KT&2m^4G%_DO1TPGe6)zj$U=< z;W<_#M=y=)rdcqz(>-Zyr``Hrq_y0h*tjceqQ#*zenop=*Y6iCq+>IqG}8J`KgZq% z{s;t|{(bcYF<={B0+HC<$n4aFjV4Z9F)nQl?2P{MAcR)_cod!1U=CYrzrmwVP)2Xv zu!(}AM!@&(-5T+X>Ee#kUvx@{8XpoCEj#^#p&vn~RiCIYM^sx|I^tJ~EA>2;sHCv( z9ZDyS%6Fcv!~CM}n%M?K*IU)mSEOY(1=nbumzJIA-kY4Xx@P&%{bes<-xYrL`zBK{ zyn=~rst`0M+mmir7kbm&=}0V)T6x-Qu#~G_Q4^ka;>AsvY=bPpbVhvX5oXNUj|74uR`Z z5P29||A*xcZ|c%&uNA^ zB4~r}^DU{)m3i zf!rJ|CE=mf)pj18a?rvam+faw%pR>zCV_l(UfmSS&W3F^CIM7_{`r~u!O%w`>j6J0 z)05vzAn)*aaC@Fd{Mfn$X8%LmhHVrjmYNX1gzi&pT|SBk1gNIB=g^c??gOIVO?fAV zcKXVcSH^aK`_l#cZ?%ZySGG7UVT99=DW#eN?)|XT72WJ>YR-%l9rQZ|aI&TlM{rJu z_hYng-C{Vf*Nf(S%xg34XVAnHZ%_lvB%qS~JI9`VJ%98zs z5 z5nuX%gos2ow`1;A>!7VL;eQV7;KP2`YOrJg`nY>|*irLsh^l0iPG3rM7Cioy3zAz$>*x9Sj4V& z(Dzm~c!z(CNo>Xnvsu42Ikc=TjC|25uFUa&)WQ-_LDtJTx8p zTqAKfRyi}lr`bZl)P!3<*L>c<22!pw!b%^>hODg41s0dACcAz}g`RxpY_Y+x+|J}i z(sC)p92Yh+ELZD3p-I~G!KFJfKqh>|+ zY94`YxA&Y7DDnzf4n>qsE1fDa{WMv*zS@}rxx6>EQY4GIErGnqDfKjMbY;9Lp)KOv z?#<6ZtT4r>XsX5S?Lj3J((WR=wgfQf@-H_&vBr_)W{4rf;X*L=5Vh$Inq{~dyuOrB z0OD{F^^v2gtJN3+yoQ)Ji=Ha0sAzM!zB*=?WgB*yzE@aRny~Xf!_5yY&{iCr7~NIq zy=GLA#z|T-#&7oE+v9$%oST-~CC{5>m(QDb!iN|mbAS2on1A{SJe!&w(_gSTckXGS zVUpGh+!kz({4p{%K3)^*v(r7Wt%9n5d!k;BFg$ex1?4YPX99X7dc6yU7t@+qn>+^- z=X(=BSzR!z6!Moc^G0HZc-|td$(;XVX;mWIdG#*Lpo>3#3`x}U1n*NTl#-eN-Q=~F zU&VK+M5STjhePd-wcEJX<#3iv$a2}COl|_7p;PV=c%Pj{)P@xMQ5yZ%ozYfIVBcy;oo;RNk!&+LE%z}{3h zV~BZ&vb#Xhr#sltTdM+fH*_*HbIura)YKTh*2){YV_9t4o;5e#L@dXVl||J3bg{aA zSm4Tl$6e2xf{lbtT$QOwH#@|zz`QTd&rT7$L5KS{-Z~eC#9PwS`J663#-tE28+igu{7UFyHOga-o@ zem>s?6qmD#VH|bWfPl7m!G-&2 zeu>!$QfB{URd?sh#>U22{|Hr3|JA1caWr{^ye>KJ7NB?hB{e2eCHRbPceJDGc|=Sf zek$@c0LO$69|i|_5gCh{IoKiK_Bz2ei;9)qV2&|9w(&!JL?5B}yED+)jXdL-DY5 zVvgytv9ZVmzx#f;@2&Z3g^ef8w50OOZdX#ajZG~OHY8jEzaKL=Ag^CjS7(~i0QyHQ zpgg0YxnCaQ-*qUQ)?XaRBrQ<=I5{~(ZERvD6&VaP^>IaY8>}hxGA?%xcb2J$js=Ck z*afpANYf&1Z(hAlal*C_DJt#uOT7!2bL=gtQVg=njaildg!AJD3M zhrV8H7xboez&YR&fq(-KBTRuX>;SyDi0~9AZJYiWwvYCGg!)ZRjYPfO3=Hwxu%!%h z6eu51UxS1KVHZ=A_n_~5x3A#6M-&E+9vg>obMT3XD2cZ=HT|5J!PG%pd)LM1xw%mk zu@4`*rjP&v0{0fP8#b1ebvHM?0fBk$kv$LSbM4o7M*ao-ep~!^kM`AjWU#etI z5gS7+)kYv7b^xIZAPv`c@6YEio;%mGnAzSL9H67PVv41LT8E!)uvFtuY*=x(r-~9Q z7yn&86W(vhCAYdg&NTxjXqNr#^6YdtHswt7PM>L1ImA)h(xU8vUP~1R=JaWWqEjbN z7Mu=8Q@FUQCFKaXlP)v;Y3FJ)1CM;?#FtOtT*5h|0(fPminCAOanl-j;A2Gru39+_ z%>dGOvh&uQ!V-S+5N38GrJOzNDOdjlc2#ZH%F7N%#4Xo4J0m|=vB(3ILo>*OhqeRV z85k}2uNaVCOf|adZ++{0yNEq7f`XF-`l=Vxm0~y2wYc1bsOu1Z>gv=(%Q`1!aDEy6 zi=i>Qx`Fu+4P!*Ts%?j?wR{A8z#9WG+=#9u9^%udliJ$E2`O{$n7JuFdGnHBf`wMZ z(Y=kE&ZUqrvP#WI$ApqcFR{MIy0QOiLlO~<;1 zRJ7yp`ir}z%7FF0SVpJiNuUKk%f2Xm@yja-F>PV*;vi15V4_5EHhX$TnpX3_`hY(V z^L5D@+AAKH@y&YmXAAXc_`s$3|gR!U8QFx zfrX^RrF=yl+tJSHg);f%n={uRkbh%QF2M~39D-@@I=W;`Gvtwe~ zFwafyzm+@FJh=0$evP}@I!ndSU>x+gZBj9+2XEs>CIkw#-Auq#eLVmNhgz6fLfIsFAYiw+< z8#Cvf-nlecIv^1CkfQy#mR2SjQaihQm1wwmbTi?`sg9YgzJ6sOH<}I_c$BtDD&b17d&=*W(<;`T_)(XySv6P7ub^N%# zy0TUl3>awhUEe)GJCoI%+5@H*{!61hmJFRW2{GQuIt)#G~nxD?8}QR6R}(O*s<7^Dg7}gdi<6CL(UrN0EG_95Z9mT|=cOe!CVJ3s75xGoQ)4T9EUZjpr_Q~1< z)#ny)#t)>T2~0TfJIdM-^+Pk`c_BvDvfV+v^9TGZLn@F?F+6##^uHhP^)bdBS3E3< z+ZR3G6J2^Ca6L%H#@Py?*FG{uS@&S#-1yz2Pl9fiFIywE9bB7&f>o8dV3Dx z+ch^O66>FT%r$1MO~J`cYuar&&e9NT`l$D+o#Sp{Ho96`Iy#JtaqTEx0Xau`oRJZJ zSL^Vm6KIixIW)L+Gch6HL5e7$=lqHnhI#nK#dukDqb!EU zZA6*QdCDo_gAIM+%9k_f}e)y)*C|f7gGt zc8E31eIE~xCCcsOwceK@Z~xMNm7EKZP1&*Ezj=3@j2`PjqEchv@kjZx*~sxbfau|d z;UoWdP`I$ogG-QtVDDU}D=tBCg80?Ny zr{W^qdurko-;XtKlP z;xsUj5t}l%`}*tw;UYR~_UW>mt3mkxu1Q|8T77V3qB(yQ^R&s0`jf8NT;UL3@f1W@ z@1vuDyMUR8rB~?D#V31cV_9&|34@$FXZ0JiY!mxVNTx=oYKY8i=|APF+b+(WZPVz| zxB~5=7<3G^6IB)%#;+xE6>KrKDCJvE4R^xLV23xuMyMvXPiuXgFq?=hR>oKQx@tKD z3=3WQc0F6x3^R+VYx@$=M`5fmd}XJim`70Eiw&h!>fhxa5w%IQ#L? zueq__d{4d0X(XaGNP~qMTs{q~XVB6*pQQOoAv9ZWFhD6YmNdZZ)c@_4s-s1~c7FYT~pgPW3azBN7#I34K2N?JHep)=AI&flR0 zTt6goIqghU?efe%Vzz{dRK(CkfjCq><2$>Mp}vP*YEbLL5JjksYWVl{rG)X^Fm3GC z|DA8^=s%u%(nd+o-f21CW%*sS+fOd0$Lxzix+cj%guefv5^xfc zP1KZJ`KQAJ*;HDbXZn++ypx^hronrq<>OsJ_O@nu5W&o1q;nI^u#8w#B}7(mELC`3 z5V6v1wJWIr8SZqhgo(u|)eqOgyuWZWulzqAZpYmdW=0IaEEYyp7MOVySdC3gaobDluB6jQF2`wYA^I)aMrwPmIP@9 zUTO4`(+p$mVSU1Ac+UNXbGBY-d5CmDVCT+^cU9SA?`Q05p*zAs9fWHT%R((3;{iY5Uo!M+~{zceI84iJUK;&-$ZFZM^|k+g7)oli%K{5qP_u6lpIP zS3eFq7#WDbs5I1{zXs;}=#fzgo9^+UOu8Vov-)7sqPDpdp^)F<84hwxcmj7vS&szUdG~IRoAqFaN2NE{Io5YJ%Je*2C1y$u% zFX_bu9q~IstMhiyJVVPngO}>0Cb4iCb~>eNuQU&1LSj{@IQ!M^$9)u!*B0g`dLrz^ zSnbz7a$!TOu-_>ao_zXH{y z#!;q4ilD*8Z(ml$vy0uK@Wk*g%X!Y;PLy;81Z7CKmhL!8vqk(8RG-?xiHWf>nGow5 zmTig3t@#Z>v?iNFi9ShZaV`m(AVG;UvTJjrF_xpA9}W_&ZMg9h=W;@W@*s5Fl>tv;<$paMtETAwH0Nf+McHWIJbGsGptV(LpR6e%fLKN z%n^6xKa2&F2;uo9W(WIDTay>|Sbr$@=X?)|?{`I`3^xg!AUj!Sd$G~EWC~`6e+K}k zW%Q$tOj*(K@#IBoibp6CSH~HHiZ?k_#DHz9&=hNEXb2oUnEK{TrVikrmn|(Vi$s9; zJ=D!XveM&5Nt24*8=)UNF@3qCPcfAZC^z0%TJzP2J`2KT5pM&8Q|+&_s(5&n$M=Mf zdxW%|3q#4>omw?uCqfT(D-7=WBR-#xI{`}3JE<}_RX(>0M|cNtR?N*^hvR01bm19b zuc}0WGrec~@^!haZLQAA#}}xl@m-r-9h%JUie4fef3}cxWnxUjmdC-s58I3&Gw`?B zGxhK6`}5HfBJiqF;ix1Zdl|@OpP?HHMYX(vz!AW5zjb5WR zI7fhE$$$M{=Ry6@db#prCAj^_a;4h-LT~|-gj8-3!+!ew`33NLEiFOIL7P8%5u{y= z(17HeA20@^%yAv!!?$mHP}T!3`1)1p@HoCmDLvaL9I8Nm^bHivlrS+4Wc{T_)xv9I zhV@hD8bzbry~h1MsvOucIx}aH7BLP=$)TYt64X@aR6_c?j}=!`#BIEljxHrEcDbNm zJ^GArUHEv|Q~^9DlwC)8G?KL(37FFhru)&3+lv_0c^^(Z$2IuiIN(7s1)KdYSDUjzkG?Z2mt1iG+h87fQA3-Ait#S2x`6d3tNb}XbH z(4w((a&j&z&J#dUYA|0MaiIAoLIk5f-T@{?D71lTU65jvzS{YCD6P7lki?~KYpjD> z^4G6R7{WJq_w|8Mipztn1J$_8{+at#usXb!cGkjh9o@X$`?FzH8c(IlejOxi4tuMx zOrpN?a&<#Tj0rwR>f)ujqTU79YD&>jzrOAYJM8URd4r57RuAwj-=;Nt;0nhH zb4YIPmrtI6#|r);9v`R+{y;;9+hdE#JjnAu-A(r{R4w&nOh^2B8X#1ZW zI*I1pduSD$-Y)0VIKh=McPs!#&JrGJ-%W}mAxng>?cWg;88Pk68{zxP(Umld=o6-- zM#=^S#u_2(oc1zMT=e9Z+ZA^VT3A@lP0cwsK3{C_wV=**$eVDuOtzjFqxJfz3D6F; zz4o+!Z^zaX@mi{^iWW@%{(*tIO^x#BYE0{wcuh?H*u|D7oT?-z=W*36 z97A*DP3*tyuOhavyG*uu5EF(xOGyL)90ethgji%_bp8v=fr5-o^VN(Ebw)E7A_H&$g8d9!rqDYc zGI{@QV@qaVX+XPWS4U<{dG0~{Q(@tqUefjs4o+hF4i1O=jls=UQ>z}F{Ww_c&kUGn zyQMT;L$Bno+qZIWO#~`$q~wx1>ou+}kcz`jiNCPDL7fy6bK~O`5M1$hIqdRG{9uBK zeGY_RrOvI95Gd8_Iox@cCWw#~*VKLJJIrYjg9lta^k>eSOO$ zO}GNiw_ZN59)-Ujg)y{4huJ?KqhFnS5wJmG!> zVe}T6;bAZkme7zJpYOV)V|wY5pKZXny69EbA~d2GZvG$lZujqdCnMPUc8dHE%a!h` zy>=@|KgOFZ7hu-0al?kAM~~v1A~FKy@4uQ=)(QBsx4$2#y@*lu@l6GW^p>uae!do$ zF9%$8zq)Vpx@#hE6hap#J2Oj|p_q2<*GjX{g;8EPk*&Pn&nR?1zh>F7iA&0%1-E%I zOB4MJ!bqD)D*62doJz1i`<0Zw!{-X8G{7ib2*hhRWJu|tFI|QU$jCPQs}S2ywnV>t z`)p5)d&a(SHau>meD&%$WDIzorSSyTpaLY*($>DO9AEikd5aH0N;2y-eT9%dF_W)AB!N{64^JYB%KxaW z_JGK@X%mWVfa+EWx84+HY-m~05Yt((>mk?h8H|vZW=@ogdydnaEf#GHe+Ip4jjE`<-{6?T>w(bFRIwv)A){pZj~? zpXt7)=VfNLjZ+npe z`{*Ug@&K2#+BY zRLH_X5aUTrt)Q9v3$`Z*Dqw_%5afSW4xGDX8qr2owE^B~>I`!alVCPu>&BPU9m99F zSHG&BpsaNDrtrHyKoB~he9D=r+HOP2sZ(bk9!_q{%?vFB841R=wA3WB&DzwuiZTV6 z0N~4fj&@ybef$vH##~x8C`fair7zIX=W-~`)+pbFKzsr;;?2Jg!q2zIX;&su*-GpxuU9hd{|HGRje>SWM_u}`n_-8 zS#M%yrcQSVAgraOmf6kg*A+P}gEFK&?XsTlzlfPN|JwO9-vHmlr)y&E4Vo_kFLC=l zVE$8OoRj+g>)TUojeA@>kU+$|A_b5d*^~h%G9p=S36R1YpiuzS47;Q>U+?qh+d@?! zB73$wRG3fM;hO2Hld;ihO^$>fd=MUmC$?R0KOvW)_s4TEYbGX$b~lV7XJN`V$~1CY z6jNNf5_szBOqUo%YpTBI&!(oPDMbWx%f3T1t#B>6SP9qMpnLvhOdEG#?>T0IG)*HT zyNEXVpG)%yZA!|vTn`lyz7RJ*jr~G8OlXN=1Y0J?|EWo7IWqJ2OVspQ-`%`=Lg=>X zTf+P0(^QHKCNHhL|8dXBa74lR_vj5MYIdez2ty&oC_en~Oq;P-pwvw+>37T<1j)!^c{tRLjF_Dv`cWjRXED$|KU^oCIIjL=YF zbzF&@$sJDF^ft@fuLV95BcocfsOzX00klHKVsEt`^x_*}Lah6Qm8mlr_Z)xAJ7{P& z|8GqW(VRc4`8C7ET-uo~0;C?7H^e+PuYGig&7Q)1_9ZVP1c;@6kXLoKw|j)BuqVcx zv$Uvo?WgM}^%KGHgx^rV|CJ)o(5xTc@}wf}4UFR#CQhAKkCMzvB$))wK4%_N(XtL= z3Jgx_?x^3q{t8~&FB+l?yIye16qz1_C$z~CmDS(jmGU@S%maJMDLfi>1zp2S=o9djl5;MPQe86G}r zqvd45vXg)I&u8Svms^P~@PBub`MocfMK(fP+Ys}zk1nGNUM*|kWYqmJj;CCO$9*(s zc|{a9_HRGZkwO-QG6zVptax;jvbuUQR_j%w6)6T9j$OyAZB!(Ly)8U}Q6OCAz~>i4 z3ZqwyHm{uAH`wy?jCH^1^p)hq?N~()~$@8fpp6H&%{Bnucu_w6b%qqtiKeZJ^ycSHMnXFWhFb@hq) zMKGo6>U1`DV1NbdSLN?!ori%0Wkrsq*Q?$Uj1dCC{`z#r_1dD!CK=W%9K2AUuKl-L zules=FED2VZoO+u)LnDu?JaRHAmeE?*TG-m$Xvd|+7Cfz1YLHyn&CoN7POxZa2;8+(32#q7)9hFquyY= zK)waSvYz+#neR;kXaFKQF|;iPW`zEvGsP(!(Mn9rG&FJlGSIZVdGq(VQ)H&=wqCnI zR!mazGdilawn$gJY(f;9paVb?9h|N%W4=Siav!p4CHfFzDt#dcMa7ZS;X_-s&MIN- zGQim!HrP#I8om#?D5s z2~ZPWKk8?ChvZ4?aj-*JAk>bYiuUk!M4M&#URi|f%P9F@KA|@QzkiCR{-rhE%De!u z@lVD|vG*c0>S>0Iy-rJ4d7(h6!R~qii03uA%vF=O@!oSTXZyf#ZEJrEEc*Qu7&f^~ zf|&9FdE-lfSug4%VTQ@LvN#ZjD#yJkOK8s1b9dP1z^JHEG2CyI2uft_um>Wmm!S-< z=-^RelMCfwk?Ec$M|6dzV#4tN>W^qYIC!>mBC?rRwIypMjbhwyK!=8A_x}&w%ANf+ zk?~Y&R@l005i>r}gyiRJz3Afov30~xfOO~iF&)CTBjjo<7V%kqKe@F0moRDKpd*x~ z*gW*k_bf91FRe*L{NZA}l~_SUSh=dpgX!+>s|94y?q}T%j+6bK)478O8y#RdG`0?kJz!ALk!^J_N&OaXrb>= zI{vzPvGxjmRRVyF%fft+rlcrAOLewkA~@K_kS=lEn#=M9I#4nw(GezD3L5Z`<9?~L z_gT3)hf@-Sg<+RbGCKi99nd6UJA5{;-u>C=IQfF5$+1}szd{b8L<={Y>Yo&zX;+h$ z6|~Tn{5Ht^V-Jx0@pm~giraXReA<5JGl9q z94E!Pp8(lFiN=*zI?+$81SmliI|6BlApd+@O>DCws3lh0H8eb_|90~YR{y^F{CCQ2 z?6@#fDhD5TIQ#r4LM|VqCPc8g#AIqKRG;-PMhyw98-^^8?#1iZ#Y}?8G$P6DTh=}K z8IbIqG$gBy{IXRl*?zv)#-t5`b$-1%l?tBtp#BOEZ!%C$_l|xyWM|-%#yoUwYNn&!5fY0`7B?O}kkHY{n#_wa9R9jn8EKAxAT``ai@!FQzlp@xgicKRw=&_M z55wT^!(gQq_A{-bE|Oge`T0nu+<8)no&u5LBW%ins7+w^?x6%7WJ*4BTgHGd8;e0Q z`S&DS6qUd*e9rVKFDG$K%3tX^U%z`dmM)Rt!FJ{!SAbO~H6_J>E^)Y|K0W@#8`)}h zl}dN!EHSi z_uqYqJEy>c`Y5M7hlZo$*o}Ovek3qmq2Jb*po2|;`3?vif+HW>0zmwTuyU}nnmY=R z8qewlUuQSrXAUKN%V_i0WyM=#EIIFy0I9!+n_E~-Oo>>FZ<3#Lh}Vj3Ta&Z+vm)DG z9KR3l50HSC-9&(fhxfmL zB|nk|e}S$QTXJgeXiEA6vc>0#6vyJ~+j|W#m_E5ow-1uEvDQR{si6tN=LYNt|02s7 zC-;}Js);4pqQr4$M;*3xVF1gYJJ%ZDz-`f@XPVLL+4gBG6E}y25s_H9WVp^dqqgC!>B5p2A># zHk77aky5)}>8-3jpi`NXHzI~64oDHCNo=9`eU;W6$*%Z_AUV5rEBk&f8Zn`8=_fmYLqr;Eh-S~bnU=}AJBh8295I$5EQo=P!UYJ=%4^IV-$Gsz)H6TnihQ^ zLqqn7xejZ&S6{P|txCDvT3UwhPEuACatz9A5SY93y%Y#?7^@AhO1;iFF6TOPSahtv zF{I6aHYFn?19JmVg?Mxy1(9uj4`1V0xXJrIcnGwsKMr9Oh~+Wgi<&p>uj6JNq;Yt> zCl}N5IF;HgU?qu866R>uce}XRxcOu2qTViu=PFi?jAtV0{vI1Kq@BCWm)c@QBh0)jvz(_=CC}BOB2h4 zvUOXU-HVb;R&di_bCA`MHJ7CVjz-YNMAofaZJ>l&kPeK9ksIXCgk^^S?ZRv$Fs90qi{>(06QZ zJt83sabUsqQ=d5uqhlgA$yubj7hb=9y`rMx_U-mxz`LX*#sIJ;cb>ljfcEAMcc{vr z8t4s%XHMtURU;{PSwaX3Z3cY`&qi$f1=!`A#9Ot(C7ZBO_jn^G8wli_Da#Jco;fX{~)a<## z_dI}xpl)Zx;VuPl2(=tu7Pu5(&&04Rj8PtIn?ZmOSKz|+g}~k?D7aWggea$P-=T4% zBtd}!BpAuS3JXKD^Y+*9QL1;a=eD{gd^c{FtgpmexbcLwlfQok8~RcML`GjxLUu-9 z3`S$D`7FD&JY4+=KwkDN;oVzI@e3fGunvN?4h#CEn7*F6 zAVK{Lzewqqitj(}%H}t%D-`DdD<-oO>UGDuSr|I1F%L! z#Bvu4?oUou7RIF_(_0O8c!VoFR)0 zJ)2h)Jc_^dvCCk0Z_pYfUj6*2sdCWd|0PlFxIm(#Y59P-jGF@$coH;iif$j$q-%jn z%8H84LP)G}SbZxWwg*B2|A+$*0@uZIqTD^)PK4MdH}~Pg!FRsjzW-Q;JVeCBbMhRJ zV{%^&ut#*1{trgSC|=oh#H^_Ydgat9sm$HK5OC)^c&HT>et>AbZcIRaT7`I+s{sOK z_ryRnb==omEoCSnOjMBN-Bw27SYt)MY9-|}R`y^wkh=mumu(OmwVJlwy29gVL!N`3 zobO-KaHGJc!YOcMAO9{TWjz*}$Nky=$TU&+4bku{;a@;yv0}3~5H_^W+DSm1hH*0>W}2pG~90F0o~v22e5nXS_aq`SPDz z`ZZfbWEJ`7XGxq3K90V;vVerMV>JTx43}|}oO#nDNA&aW;+A{!uK0Z{OQb$i#tS(_0H)u)h$X zB5wX8Yh`KCqEoyen^}1=plK8dwD~ONfWnhQJEx&5eAA*SHB3OC=Z1-(gwxYktzOzU z9KRL0B{|C!cQ>|uOpV)*tRR*Xl+v~%jiiyoR!x^E>az(t1diurR*z$L`1IJ8ek)mr znoBx*P1asDG&H8a#RLCA@y!2>|4CftGy!EQ>!;QWmwNXh|KhK~2WD<_;Rv32bAW{)fQ%(#S@lWjzwjM2)&Z5K`jrK8#C`aC}s!Gduz)^r% z1xLY!g$#qgv=_A*7O=6scdlb4bu~7bP%g~goj+~sOY_*Q=V_TEb7c};!&eK4Mw z$Gs11y)6{$s)`6%?s)eAl3V0OMV@gQG8n{Z8Zv*r0}}TJ5U{#+vyG)7 zW!s0r2Vbz4we%-t!5^$mW+nCG3YwhX2DAS--g1z3Y(YYO{{YkQ$Rssknx) zT+}*@X{WJ)!DHGM)_f}r*B2G9gJhH}(klm^hzp;GFMFge-}vAJwMs0!i%O+VPVUYu zuc=YMf%dBW%U3Sb%4cQXqwlXCCB8kXgcNclq@^VqvZ=Z`JFflkC~QNRB|sQy(K=6( zk3yawZM)yY!*0a@VDOtLH?g{?VE;S~d0wwY1uE>b2$bwdmuk~IV!NEj;|IB~=eQY~&Xo`o}WRlyH1-B~`i!0Fd+87xTZbX!5Ncr&JG2Td#2bp8- z&EppsWms`!0!vG*2svvNN_o*gYg zoIeeLSNvD#+5q%Anhu{hukuT6!`3`UYD07|BSCIU(Im$Z@dHSo1Y(U= z2lEXawROWoQ%OKYeR_rXG+LTPZ=diNT&V397_n`_G6o=dzAO1^ zF$l_<0rZ>9K-&U^;kn@m#jPZ;)0 zOg3-Z_UPx2Zx~U%Vs&01XK43k%OYgP(y>UKJ)rU-q@K2&kWSH%`zV*6*n(jPRX(UP zouHGEl9lIPW;wOQ&O(M1c9xk;M56zy6_DLfwFcIwOP*-$=-7`w0rb~37KH;kdZ`yP zENB9DUjN5F;qPVh{G5&mvgu%Ce2rT zJA~;UkjJdsI;1@e!A*_d>`1P5GED3@I5n^xwN*L>x}WI9siY8&4K6dO!}P5dB-vo1 zz0(37u{_gY_QgzNdh40p-Grp19#t92WQ?_lH^2#|{NBQc!qqn0zumQLHWWzsQ!1P( zm6e4o|Cj+kZ`Xh{AB%(+LgGS64+c9!Q@?&aqu1UwhL%$#HH8<+NiUE-4fe=7(aH^B z321FOVtKpvOxV zr)|N(yG7fAxAS&QT-Ld@SCpVekss^(BR} z&P)j!jAD~s_Jiw{l@_|~U4wVK>WKiT4II)jFg-r!Ux!Hi(V5}8lQoM@?V5O*t>)Am zTAIDI|Mo#DhQ*F}CnOYRAH*KHYQ7A|&@n32Wx}#`Sr6C4v=g>VR&SnEETGXTr_6&C z;LBrao?=A%y$qQlal4X8L45to^o){ZZLO2+3U0w`U55pB5f?Qa<*!kjc8s&J@L8B- z<=$s#=@PNRsWg-XtWvLi)#ZZ{qROW(O5!i-m+EyuMO>gwTNF)$;3`|zBm)g(PuL7y&u>8(YG-At5ti{$s{9P=JXs@X~Na0B@sOr&%eGjqj)i( z#hKZQDYhbhUq4Qvv(b2XW(xKeLa(;xBS$P?TSDKB7>9xa1G+d@JPoiN@-Yng!U_!( zZK;b-S&y8NjenlFE(P-$Q9_PGaxc3GVy{>g#0}71^SzYZ$ur;E9xb(PA29|RDspa~ zt=i2i#?Zeu(MtCKA4}#1x7U<)1)10qYkZj-9U%ut&S(AP%PeGIJD7ebHWd5zf)cSQ zW-_kZj1*0IQI-wl5{RVuHZ%$)5(}}w5Fo8N9#6k*;wUb3ig#~+MLmJba0RdZx7+*qny-Zg};0s%Wz8pZ3}P$E)62z&=(CD z1O#?GsgAW1k*{c+9VZ!jPjkTw-23{?8+|i4{Qx;4=n*}&CvwT+1fUUh>EImDEt3yd%xc`X> zYfAe_TwBuZf|4`99ilnq)PmK5pE?`q-3rQ>4WzDL0dDkHkmrAh=q^FWgg=@G!ybEU zelm}bK8@}tS%6y^!FXPabBQo3%*?Ecz$Z7-w!o$Z&6y%k7XT$DgzW}{f*)br zsZ1>}m_EE$;p_m{NL5*c#n7;prHH5o(oUE_3O-A zMf-GPCG&Xmp;ZCTH2&>3{-KoP#2(&vev38xedPV=UtPko5WF2>N9x#AIz39F@v6)u1)PU>-lilTiU1A|q zzTuul`wM|2Ar7ug4NiqMVl*_>j)`1isZ72Jbey0bans13U@3D}conE$6J?#UI_?%d zjljSE;QE}8X)&99vMb(O85wzDr6$e_Zqj zfPv;#K8DCXMiYx07Qa~3U#s$Efdvr`2zyf1c4+T}W12>@-ZohLrm7Lku(Y&9zfBmd zyoKfCmFT`hP4nNf?-Qjo)3;k;i^FHhtNTQizl5iyghHjk4UG_77 zHXFIBZuGVhEaV1ur=a&15~B8E;sp2lTw=B1hDz*gz_-mM=Ns`=M|NG{8D52-UZQrf z^!GRC2>e%G{&$ZUa?mYHTP3WN&AJQK1{d}?xSeDlOTKKP#ei_oNM1_C0TqZ4q~E#) z1(v;iwtI1|tqAM-D+sf|AHWDmkKC}cZWHzqu9wOGgR)TXr97h8`0=B-O*oXcP;>wI zalXnZBhl5}J@0L^1*xhgBXN;1{^%YZCKgRJvY(t(OXjWC7H!eHqvjQ8=q0>0E+y+5 zzAcU9l&rSr5MkA|OK0j`O$iN79S%*MOheb*rF)apDaifspa?lsnGE5K0%fub3)R5m z>^777G`m(DK8-Hyp2tp?)v`viLKObRu#J^U>srQiOnVk!H~5$CIiO5qI#OGG`qo{I z)7VZ0vI5IwE}X;XkEM(bXjYA$+Z@D2gZ={Y)-M%Cdcse)#d=C}AbVE(YXo-Vn7mHWhY_1YVDBf~-3HmV0e}!9V-|Rgs07{A%$DEN}9NiT<7T!SpDwI(g zu#;bRt8LjovrB6M#bQhs+*S5uQ6tvdFz4P)R=70py(Jdh``VMBKB>3_GE#~h-iOKy*}Nf)2aCRg(8#d zp%~?`xE)flDOqR3P(i{ALsR|g+AFMu--(c?2Xs(JDBIFEbZng3BtE&pY|NHC?wJx~ zK&Lk-eHK>2KG&-zeZ%vKk($Nd*T*@PZ_YVLyK}$I!>#mN_nQB4duIC}kx{OA6VV#P z(=gp4Fx$Xerb1ijCV06<<9kUC6-)2@4=RV{h6Qt-(U>k^BTyPgT{hehSSE?wp`6W+ z6Pcx3o<5D13X7234jGC(#!VN zB@UwmjuL)R<-Ym|N%1-svZtL|W{SXT5i-TI%$wYONRJ~eiyqCgb-{H>Mdo0qX7s$k z`R`u%`2#hehc79d@vaM9k?0iG0Q#4>%qpvEKa8eCXmYwbk88ZOmUbPZ(Nr|M({O1u zp3lHEB9P_DpP*K z#x$rnO%zWhZNiqwkZDvb8i5Sk{O(8EK^J`g8wbx&Hh8re&R#5_&X}&2$=NMqtE-@| z+rIIH9slckopnK}qMaS$Ctdho+md@c+f^_8z-)@890)AB`T`sL5Jk+Fyfv;aNyus; ztC3hcAaOc7vfpJ?qK9KNKIm9l>DhopNHOi6-~l9UIh-R$oDB_$UmuL(bgWm##e`3r ztyjXL_@5<2+xj8ee=l$EH)lWW7dWOK9AmhHkY<3Q0LcnQ8H&jrgu1QK(1BUqL7_oW zO!Kn7LiuUp7-**_PEAjTr6!`ozJA{mfo;G7wb?BNaONmx<6~pp#Wzoc&J2sl)IL*+ z64YWc7ky>bAtlNZ>@>niCZBXs<8&p`@!y|wqwQN~U}kXmFc(?8u9Ea#F@&-kQ7@QY zrBP9VeZg-@omL`HTUvFu5Vk^@Q|~i`^>=iLZ*}dMk3CCcO9C%x{)g?8OO98zO+^u4 ztr6p|o-sx&XDE+1QFit7c_a})2Z1F_)yLotF#%Mv0qh!95#;z6Rd94Pxj0)8)IK2N z<$D*&!=XEf^o!+K>NT5Ea~jMpepqR5>SSxn!^$vMA%;-`0sqz2)*Y<|$8eG~5b7mf zn3$NJuKg{0;K|oKRVt6!CK(Y%1-IH=2a{8}uQ>IgPhuLwUxIRP-OfxGIP8L1i0Cbp z$$jfQT=J@_`t9zfa32rS*hk)Wfr5#K`^QW$vCOf`XHTA+Hwg=eh51k32;n zUhC_AY+8SK@=Z-|zP@&<<&(1MJ>J1F1X~HZ3hgs`oe&+6HXw)89WVz(Y$7z)Xf%Gw ztO+UNVPtjZUb0dzRuSJ*w}PJd815j+r6ZtU8Dio=g+4uLT1X1Z=akzD2re0fo8Xs^ zmaa}-$JzXc0-w@`%Cuwj!&52sCU>x>Wj(ms9{_QpG6C)Oag~zA3omyhBqkPSrCu3# zT6^IPvXE4qO>d##6RY_EBIf7Mq@S$OEV@#~=3dp4FcBBTb!~v1CJ(B*|8gKAa_sVW zRqwlef8kW}5GXjYnJ(A7JPGa5>7PHoBak}Qvh)&tkC`1KZ+7RsKIAJc!&KPLU?ZH| zG-_d>5;VgXqkSpNNi0^I`M{n!ZxIlV@EpQnH8617$q|G|;S+!eoCW~jMUoC`NVv1sPa>zq^q@ydr_7BpH^!#<* zBm;EQk#t!YhT{pK0mdYB0i*N$bW_2JFdX5*GUrcz_I*S%5`sQvB9iQw^k9}Hq3=-Uap8ak4K zLU2uK8=X0Y4_EsQJ-%oq!NT$quN}?^X0q@O^#^BKJl$qUJgpCbCX!dN>J)E{AOukv~r}^k;m(S;FSl8;6F`u+#-_ zI7xH~Cyq5DHs(IoT|%^)DdVkX<~rUpmsq*T>O(vZ!FL6^_sL&bF(%yVhrCJfEA`2xa2GToD)4Y=<^)K zmx)srb;#9TC^fukc1{$x0%`&7f4M-Nc8jFi;TfdgH#di{#S&V5sqMS-TiZS z)9tK*%uD)FY-w40^q2#kCL6gihT*}pvE3*RkPQSB<+f$rn)Ghnp3VEDjA6m*CfT?L z4LDGOW}JcjXTU}&#B-;iAMkuO5Aq!sXNWHte8XR9@ISoNPt7+7<+c|Yy3#=1KR zu5bTKrSPEFkkRHnbO+c9(J(X|FM9>O0~l2732MP~??Ezmt2JB-wl?fEn-c{VMoFSz zn}J;+#5$FgFWt-E2E}xD-h-*KzGN?^_2-HH5t31g)b#>*M1nELwsy1<(l*MuDM2Vn z6NP1MzGGA|*sW4@DGlnpU1eK+*!bP_`icuKZc&5ZcVKfg*M4jk_I0h;^Y+KL5BU#s zX+{6*b=ZwpDb)XaT21(^}8eq*urRqjIX5@h_>-POL*mENaOT44b z>~zy}b8nQUGNek$Dp$PY<3Dg_aSn+bDx6b@Mfc_kbV8u6)fP03J#jn|NPQcFn^0EW zx!{@Sj$}1%KB>zW2W0*@bMDKBTRwbNzlu=Ye-t5e8Ke7QBO_bQs&Va>JXLs5)fA27 zNhmbm;t7II`ibbHYHSR*9!Rviv*xFaVVx+*sElXngs^Pg6lr=)dcQJbv`a5J@D=aqpVIplT^rE0 zp6B|6z0?K=mfoGbKy0k$$g6x?{2-_BU=M^d`NESx3W)6Q>X&KM^CB_nbf&S_GLLm9 z9{*Lh!i4l6TI~6c7XOk-!Dgcdqv;B;==f*f?r0amb{^*y|ikHveW zJ`@wa$6eFua&%6CZ=Y0o=!A;-LGO7Qv>3=e;5|?8|yL}eHmN%y0!pwqR5kqA+EXjmc5E%&Od;6#b z?+kZPn^#I1y53vw_5!gj*Yk+&cv6qW&f-)*Q@eHIu2=gp)@yW}3aToV4bB~EPU2Z4 zcji7`4|o12w&cFZ8C!BjdUvE$-MqNr93KVhRl(f<&+oM z*`9uNm?o0>YHGtnzTu=oK1PbdT<;np1zoY@>4nZg>Bak(oX;2y-V|t2bpC~s%P(J< z?$bRVv#Cib+U{H$p4^sIK8JoESGzW=Wb6NZP1uq&MFqp&9G{-qyW_Q{etd_*BO^h7!f2OXPn_NHy>l#S4h-E_>~ZbOaAY%a*_T1c_XB7o5)3P|e6TgHbAFWto+06WhmNpbdHK7rQv0c)#g-IFH?hU5q|R z;%?dR+lwAc0cbRj+uJew1pA;xC9=bPdQ(DD`-0O(6^sJ!zN|Kx2;XBE} z8CeS00b^atdd+er%V z)7Yk6qsp83YN3VIhsqkx9M#Rp1*X!j{1pT!kWgImkC1I(4vJY(S(=u@mcP9~)1dD9 zRwZ3Wz&WC`dN`(EyfbhmYnrjlQB_wU54tAsSxA-tv^D_VN zDnsXj7SA(5RdRYyUGh(CpAEV;%)scAr4rhufu||Jb}k~w%cs9W@^QavjKNLGSGp#MUpC`wlL-D9%b88yzcYPwG+SBk47 zXAQG5`jn_>cDEZ{692lBarAK7+2dQJPI9_Wg!6oPT*Px$C8X`5kzmB-3u@Y}S)LlJeT0SYX*C>T z3E{QA{;a`n?^gOuk_5^AP~IW8h$xQiAp6qGO$*-K|XP zlVh)Q8Xt?U#Y46P2H%(ESYT-Q*2vk;2r6C@i-d{W-9CzpsIsnQ2ZurW^B@MQX}8LH zs#C8tmQsFVK&R^UR@eZ!IM`FJ?M7{G-FqoRfHpUHqgJ_Sc&CUIYhJz6IMpdcQc9Vb zK_)xAb0$!?uVgk*SG1Qb|5;~*CQ?{AyK_V(VRJ_YE2Ck&xK3#A5j&&yAHo>&5Y~7CZg@ zSl4(z6^xa_*@a!;=>6!??2XP{HCY-TiB9Qbmnhs;=<8N1ta3A(%}60K?%vHy+C|pB zV}i$3#aWd5%yp1{07*E|_IOc5p1?{dUu4wo!LWe~n&bl_A{#?hq`AqEr1EepPcrXz zbQk#1vL!4oobFhV^@59OkjLc3G{!P+H&xL3P`&k4!8`2c2j;Jj>9iQX+YNc4C`b?Z zJMPjlad>nFe4wwfSm3{LHteKm)!@SWcy=QKKOt7OWmbE@hV-+Y@$mD`v6Lqq3a)DY zTBLH)jd~|Ls#9q<$<0tjj;eEMGD32HT{lT$e>VHspq*>GSjpmztdYW+_6)rue1 z*=oPbe0djf_H5(#M@(BB4z6~ z&Xj63dPKIsJzJQz@y;0%KL+4 zX)YMdBrNsX4Yc!!7oo?F7jbfZmHK3HmR!ht{+dc@lH!+4%SZWVjo&}hPA1}5fM~Tn ze5iO}u|>aP?AD2^(S}i^tszgZZn|cb*wYm9a!5y9Hv6OU*8zrdVP@~X)RZZb+j&$X zsm~1g&TBsXMfe`n_Mft zwj-x_Xy{qFaAnQ6FVCv(2`@uHl`Ug;ubC}?V@hPM& zw~aIQW%cQK7JYe7fJ|*c)11kZYt6n@{AjwHvR#)aXivCfw?&Lbu2a{xT2%vqFu@9g zR#oFhN0Y`YhlKBWJxL6|quXjAnh|>U)w_Okh`pvW(j$NfFs)h%uR)zCNH>J80y<@6 zEWF%A7&`Ry^mKJ?Z2T00niDTe=(7cSO?agb`_oG7ax;@>iI)_HKtLU@X?NKnSkraO zv$HR=k#}th4$#Y)m|FK9j7BI{|lNu4KFEJWapYWnxUb!K zJ-2gY5AS6B^w2FXs7|~uZr!J+{ql^4J0w)nZ}JX2WqJR3-GS96OD-ZKR&^oVqH6vu zuCt?|v$Wx}J0f_pyc4+lDUDeD>*xRv}PlK$zEpIqqa5(t3miu7f!Y-gJUl6C8 z5qxcNF8NW0(iG`Tu8iM|Euc;bNw?QMBU`+7xip_x78IejwJ`qrjLby@=maWE>l3>j zBb&jwe**Lktw3U{)n>Dy=0x+B6lT7y##=k;O$0Bd+??F35g49es{BH=HB0No70=29 zk537n`x8A*Cu$d+&|(WBkZiIj1P%70s7O#G$UEtXq(vb6p0?XHu`kwMnu9EQYKGNI z=*NVqn+X&Q3ug^8s|uoFb0GgS>>u}7bW+LNI1DY%a9o=T`|Eh z>3iMk^83wI$0nIZL{_M;nv5C^Qy7e}zM20mA$*oXKhK#71h68@F(%Q1h(D|&vS|L-Po~^s=BaAEkUt!@A)cMTB&}& zNamZNqIC(PI@!8CDNnm*-f=`Pb&a*5eLfGq#b~!|3F2`Bo$&05Kc*{wAx5?);*y+{7<-1{?%~u5ya9Y1CxU|P#Y?igT_@^awSoW#0kd^B;INk_!cAA|}n`Pu;`5C~LnU#MbPTd*Uo);**p9|4H zhxmnxI6{|2#{`UxoP6Tdq-=l2wL1AyMURDvNh$oDg=|8ZFd6{61K@LTz03OI8=k{L zM@TY3_lxP93R+Su9rJcdY|VDE`zuW#Mpk@B&Bk)xsoDw^!B0l3pBs?O4z1f}Q90Dw z@En3&2^QsAPdiZ+-9{bN{6pKx-gTmZdeYmdYmcnnZpNo2%o-rm<1YS1Vt5s;guI@h zL3&POOV%o;?H;Qx+SBzl%eXz}rL7WJkjy$8T(>HN>-yP9ciF0Muntb0&tdO%D)8}q&4e=Qc3gTDw=)mH-1=eyM1(Ep5^>TmsxUc$jO*h3t4pwqB$c?ETeQ=4Y$jd zELfXGcDFxh%m^XgDG+wtjQ4s}o&8C^?m_$;Bx+JGAqrlbB+izDMl_O6}7x zDGPLclkI;NS(U(4VXDs$JdRKbV&Iy(;bEWjIkIc{9e{egr}T?@9N#sTS-FW6-Bbc| zp8$(cEE3BgVL;}zMxxG>+yzW>{^c;XraCVgPhWLV2nr!NyII4bs`Eto`06 z#p&t}wY;BH(FiSYoN%0f%Y z?mjnR>U8YJH{^`;a`wM?;S$m2A(8q1JLHQe=f^vGgj`ddPuiHEw)NR%&_LKJq@HfW+oruJdcKD5itrVhFw(B4GUb^{8k`hd^P$EQg9}vzJS-q{j*kw+%p>;@m2qk}ga9bt8ws>x%|cu%Q% zQ|WOYZViG;)IX{RZW@l|cY^QkpP`%eZ1JoWYIweVMU8{(09#qYQv2TA=bHx%QhO@b zzdyO|)T0PFhrD`MJF4s2Q{xfoRbk)!8zT>Jop-3Oi%vvPG|$d+DD#tL*-^>cMg4Q zkIUw5x@9?eYz?`lg%8wdMO6e#z3oK<_dKwEJ4SA=NNS|AwexLTXIrRAZ>+%*aV>?n zue!4A7B6j$#6nV5dWidOy>(p=)xK~J22ghOeAoEm1aP=%6iEfZnJ~6a>g8KqeSdCx zRe{uX_u*qlzNJw};||Wwz0Z5}dYI-J`GNz_?y_hZ(+si7-c+tH^xh=2r=jx+qj@f+ z_@!2|bzNx9}uqgf1zJ+d(JvO}kO8GpU;IQdGaxkRWXXQfIhVvKQGmrY*k##nvK$lWj;Pt) zb&VA0{ZF0p7R%Eo2{|dUgpUH_hb&6)AS-9DabeDJwu{=&LY7tjP6H-Q$@_2d4QL{4{!AnKfx05( z(=0BGM#H$%eJI;^cgN=cd);mc{&j}idHK>{Yt`5}hrdrdb0Y7=o0{*SRg9X`ahgVHA{uy;cP9pmavWhz|pXTFF=ZhzMGc``}4PK?h!!G4v-8eDtC;7gN{a?&2QzwxdIxT8>`pbVs+Q)09*F za?U+%&>du`B)PM_(Gs1F*AC`BA$b1v-IorL{8n}7W%M)nxx*_`LqlCO3%$!AA)*0cMlb#!cu>fC)db zyG8|>t#tkJ>x{w@`CHe1R0APjRF9zKZ7C-Mq?sYAdXkNRRz|=3zge zBJS%<7fZzY3=N|1cHM5@aA85Y>aFWr|B0UBxz0AjC)2gtPI*@FrPoLLYtCfe?K9!Fz`|3gt$L0OZ2x6D-T9E}5g(%#RR6oXc0VvkQ&LD~l{%0A6J=#u{W=vJ6=b}Q+!O12)-~?(z`vyT@GMi? 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 z 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

PKMe1Kk@wN13uo3lir3_{iWn~6 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%0ANo`fgZtwcbFX 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 literal 57001 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

V8_R|Da3D>IM)oYCjYt-t& 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 diff --git a/docs/GalvanalyserStructure.pptx b/docs/GalvanalyserStructure.pptx deleted file mode 100644 index 51b7af9e530eb9bb113346dcb4e7187ad1ffe836..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52360 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 H$j$LTYLaQ+ diff --git a/docs/ProjectStructure.md b/docs/ProjectStructure.md deleted file mode 100644 index 0151a763..00000000 --- a/docs/ProjectStructure.md +++ /dev/null @@ -1,19 +0,0 @@ -# Galvanalyser project Folder Structure - -Below is a tree diagram of the folder structure of this project and a short description of what is in each folder. -``` -├── .env -- configuration environment variables for the server -├── docker-compose.yml -- docker-compose file for production -├── docker-compose.dev.yml -- docker-compose file for development -├── backend/ -- The flask backend and harvester code -│ ├── Dockerfile -- docker file for production and development -│ ├── galvanalyser/ -- Library files for interacting with the database -│ │ ├── database/ -- SQLAlchemy and psycopg2 code for interfacing with the database -│ │ ├── harvester/ -- harvester code for monitoring, parsing and uploading dataasets -│ └── test/ -- unit and integration tests for backend and harvester code -├── docs/ -- documentation -└── frontend/ -- The react frontend code - ├── Dockerfile -- docker file for production - ├── Dockerfile_dev -- docker file for development - └── src/ -- source code for react components and app -``` diff --git a/docs/UserGuide.md b/docs/UserGuide.md new file mode 100644 index 00000000..bcd1dd77 --- /dev/null +++ b/docs/UserGuide.md @@ -0,0 +1,222 @@ +# Galvalanyser User Guide + +For help on setting up the Galvanalyser server and Harvesters, see the +[First Time Quick Setup guide](FirstTimeQuickSetup.md) + +## Galvanalyser server + +Once set up, the Galvanalyser server instance should not need attending to. + +You may wish to provide a proxy server for it, especially if it is to be +open to the web. A proxy server such as [nginx](https://www.nginx.com/) +will provide simple proxy services, allowing you to abstract SSL and other +layers away from the Galvanalyser server instance. +If running a proxy, bear in mind that Galvanalyser requires the following +ports to be exposed: +- 80 HTTP web frontend +- 5000 HTTP REST API + +These ports can be changed in the `docker-compose.yml` file. + +### User accounts + +User accounts are created via the [web frontend](#web-frontend). +Each user account must be approved by an existing user before it can log on +to the system. +Once user accounts are created and approved, they can be assigned roles +on Harvesters and Paths. + +#### User roles + +Each [Harvester](#harvesters) requires at least one administrator, and may +have as many additional administrators as required. +Each Harvester administrator has the following rights: +- Edit Harvester details (name, sleep time) +- Appoint other users to administrator role +- Remove administrators (except the last administrator) +- Create new [Monitored paths](#monitored-paths) +- Perform any of the administrator actions for any of the Harvester's Paths + +Harvesters have [Paths](#monitored-paths) - directories which are monitored for data files. +Each Path may have any number of administrators and users. +The Path's Harvester administrators have the same rights as the Path's administrators. +Path administrators may: +- Edit Path details (path, stable time) +- Appoint other users to administrator and user roles +- Remove users from administrator and user roles +- Perform any of the Path user actions + +Path users may: +- View and edit details of datafiles found in the Path directory +- View and edit datasets produced when those datafiles are imported + +Additionally, any registered user may create, and view Cell and Equipment details. +They may also edit and delete those Cell and Equipment instances provided that no +datasets are using them. + +### REST API + +Endpoints are written as absolute paths starting from the Galvanalyser server +address, so to reach the `/harvesters/` endpoint for a Galvanalyser server +located at `http://localhost`, you would go to `http://localhost/harvesters/`. + +#### API Spec + +The REST API provides a browsable interface at `/spec/swagger-ui/`. +Its OpenAPI spec can be downloaded from `/spec/`. +Spec download defaults to `.yml` format, but `.json` is available from `/spec/?format=json`. + +#### Browsable API + +The browsable API provided by Django REST Framework is not fully functional, +but does provide a relatively useful way to browse the raw data on the REST API. +It is provided at the base address (endpoint `/`), and provides its own list of +available endpoints. + +### Web frontend + +The primary tool for interacting with the REST API is the web frontend. +This is designed to provide a user-friendly way to view and edit [Harvesters](#harvesters), +[Paths](#monitored-paths), [Datasets](#datasets) and their metadata. + +The web frontend is accessed via a [User account](#user-accounts), +and allows new user accounts to be created and approved by existing users. +Each user's view of the web frontend is customised to only include information +relevant to them. + +#### Datasets page + +When first successfully logging in with an active account, the user will land +on the Datasets page. +This page lists information about any [Datasets](#datasets) that have been +imported from files in a [Monitored path](#monitored-paths) that the user +has access to. + +The first time you log in, this is likely to be blank. +Once some datasets have been imported, you will see them listed here and +you will be able to edit their metadata. + +Each dataset can be described in terms of its name and type, +a purpose selected from a pre-populated list, and may be associated with +the particular [Cell](#cell-page) that generated it, as well as any +[Equipment](#equipment-page) that was used. + +##### Data view + +Clicking the magnifying glass icon for a dataset allows you to inspect the data. +This will bring up two buttons which provide boilerplate code for accessing the +data using the [Python client](#python-client) or MATLAB, as well as a plot of +the voltage and ampage of the cell over the duration of the test. + +Additional columns in the data can be added to the preview graph by clicking on their +names. + +#### Harvesters page + +The Harvesters page lists [Harvesters](#harvesters) that you have access to, +either because you are an administrator of that Harvester, or because you are +a user or administrator on one or more of the Harvester's [Paths](#monitored-paths). + +If you are an administrator on the Harvester, you will be able to modify the +Harvester properties, changing the Harvester name or the sleep time. +Sleep time governs how long the Harvester spends idle between harvest cycles. + +##### Monitored paths view + +Click on the magnifying glass icon to view the selected Harvester's Paths. +The Path view shows the [Monitored paths](#monitored-paths) on the Harvester +that you can access. +If you have sufficient permissions, you will be able to alter Path details, +including the directory path, the length of time files must be stable before +attempting import, and user permissions. + +###### File view + +Click on the magnifying glass icon to view the Files found in the Monitored path. +These are read-only because their properties are directly dependent on the actual +files in the monitored directory. +If any file has failed to import, the last error associated with that import will +appear when you mouse-over the IMPORT FAILED state. + +If for any reason you want to force the harvester to attempt to import a file +that has failed to import correctly, you can do so by clicking the refresh button +in the 'Force Re-import' column. + +Files that have been successfully imported will show at least one linked [Dataset](#datasets). +Once you have some, your initial [Dataset view](#datasets-page) will be populated +and you can add metadata to your dataset. + +#### Cell page + +Each dataset will be generated by a specific cell. +The Cell page is where you can provide information about cells, which you can +then link to their datasets in the [Datasets page](#datasets-page). + +The majority of cell properties are grouped together in a Cell family. +The family contains generic information about name, manufacturer, form factor, +chemistry, and capacity and weight statistics. +For any cell family that is not currently in use, you can edit its properties. +You can also create new cell families. + +Once you have a cell family that you would like to create a cell for, click on +the magnifying glass icon to view its cells. +A cell should have a unique identifier which should be a globally unique value +that specifically identifies that cell. +A good choice is to use the serial number of the physical cell you are describing. +Cells may also have display names so that they are easier to identify when adding +metadata to datasets. +Where cells are not in use by a dataset, +you can edit their unique identifiers and display names. + +#### Equipment page + +Equipment can be defined on the equipment page. +Equipment has a name and a type, and these can be edited for any equipment +that is not in use by a dataset. + +### Python client + +_TODO: The Python client should be autogenerated in response to updates to the API spec._ + +The best way to access the data is via the Python API client. +This provides read-only access to datasets and their metadata, +and allows you to write reproducible analysis scripts that do not require local +storage to run their analyses. + +## Harvesters + +Harvesters are standalone programs that run continually in Docker containers. +Each Harvester has a set of directories called [Monitored paths](#monitored-paths) +that it watches for changes. +When files appear in those paths, the Harvester reports the size to the +Galvanalyser server. +If the file size has been stable for long enough, the Harvester will attempt +to import the dataset, sending its metadata and parsed data to the Galvanalyser server. + +At the beginning of each cycle, the Harvester checks in with the Galvanalyser +server and updates its configuration if it has been changed. + +### Monitored paths + +Monitored paths are directory paths relative to the Harvester container. +It is a good idea to use [Docker's volume mounting](https://docs.docker.com/storage/) +to provide easily reachable paths to the Harvester which can then be +registered as Monitored paths. + +## Datasets + +Files that are stable for long enough are parsed by the Harvester. +If the file is suitable for parsing, its metadata will be sent to the +Galvanalyser server and a Dataset will be constructed to house the data. + +The file's data will then be extracted into Galvanalyser's column-value format +and sent to the server. +The column-value format means that column metadata is abstracted away, +allowing every column to be stored as a series of numbers. +Columns that contain strings generate an encoding map that is used to +restore the values on demand. +This method of storing data means that large quantities of data can be +stored in the database relatively rapidly. + +Datasets' metadata can be edited in the web frontend's [Dataset page](#datasets-page), +and the data downloaded directly using the [Python client](#python-client). diff --git a/frontend/.env b/frontend/.env new file mode 100644 index 00000000..462d2e30 --- /dev/null +++ b/frontend/.env @@ -0,0 +1,3 @@ +CHOKIDAR_USEPOLLING=true +FAST_REFRESH=false +SKIP_PREFLIGHT_CHECK=true \ No newline at end of file diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 00000000..5da4d64f --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + Galvanalyser + + + +

+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json deleted file mode 100644 index b905149e..00000000 --- a/frontend/package-lock.json +++ /dev/null @@ -1,46801 +0,0 @@ -{ - "name": "client", - "version": "0.1.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "client", - "version": "0.1.0", - "dependencies": { - "@material-ui/core": "^4.11.4", - "@material-ui/data-grid": "^4.0.0-alpha.28", - "@material-ui/icons": "^4.11.2", - "@material-ui/lab": "^4.0.0-alpha.58", - "@nivo/core": "^0.69.0", - "@nivo/line": "^0.69.1", - "@testing-library/jest-dom": "^5.11.4", - "@testing-library/react": "^11.1.0", - "@testing-library/user-event": "^12.1.10", - "react": "^17.0.2", - "react-dom": "^17.0.2", - "react-hook-form": "^7.6.3", - "react-router-dom": "^5.2.0", - "react-scripts": "4.0.3", - "react-syntax-highlighter": "^11.0.3", - "react-token-auth": "^1.1.8", - "web-vitals": "^1.0.1" - } - }, - "node_modules/@adobe/css-tools": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", - "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==" - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@ampproject/remapping/node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", - "dependencies": { - "@babel/types": "^7.20.2", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "dependencies": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", - "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", - "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "dependencies": { - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dependencies": { - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dependencies": { - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", - "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", - "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/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==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", - "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.18.6", - "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.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", - "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@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.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@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-decorators": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.2.tgz", - "integrity": "sha512-nkBH96IBmgKnbHQ5gXFrcmez+Z9S2EIDKDQGp005ROqBigc88Tky4rzCnlP/lnlj245dCEQl4/YyV0V1kYh5dw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/plugin-syntax-decorators": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@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-default-from": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz", - "integrity": "sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-default-from": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@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.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@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.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@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.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@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.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@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.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", - "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", - "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@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.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@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.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@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.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "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==", - "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==", - "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==", - "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==", - "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-decorators": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", - "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "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==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.18.6.tgz", - "integrity": "sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.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==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "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==", - "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==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.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==", - "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==", - "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==", - "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==", - "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==", - "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==", - "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==", - "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==", - "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-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", - "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", - "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "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.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", - "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", - "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-flow": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", - "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", - "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", - "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.19.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", - "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", - "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", - "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", - "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", - "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", - "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@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.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", - "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-flow-strip-types": "^7.18.6" - }, - "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==", - "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/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", - "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==", - "peer": true, - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "dependencies": { - "regenerator-runtime": "^0.13.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", - "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", - "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "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==" - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@csstools/normalize.css": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", - "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" - }, - "node_modules/@emotion/hash": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", - "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "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.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", - "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/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==", - "engines": { - "node": ">= 4" - } - }, - "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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" - }, - "node_modules/@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", - "deprecated": "Moved to 'npm install @sideway/address'" - }, - "node_modules/@hapi/bourne": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", - "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", - "deprecated": "This version has been deprecated and is no longer supported or maintained" - }, - "node_modules/@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", - "deprecated": "This version has been deprecated and is no longer supported or maintained" - }, - "node_modules/@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", - "deprecated": "Switch to 'npm install joi'", - "dependencies": { - "@hapi/address": "2.x.x", - "@hapi/bourne": "1.x.x", - "@hapi/hoek": "8.x.x", - "@hapi/topo": "3.x.x" - } - }, - "node_modules/@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", - "deprecated": "This version has been deprecated and is no longer supported or maintained", - "dependencies": { - "@hapi/hoek": "^8.3.0" - } - }, - "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==", - "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==" - }, - "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==", - "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/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "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==", - "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==", - "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/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/console/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/console/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==", - "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/console/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==", - "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/console/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==", - "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/@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/core/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/core/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/core/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==", - "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/core/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==", - "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/core/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==", - "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/core/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==", - "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/@jest/create-cache-key-function": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-27.5.1.tgz", - "integrity": "sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==", - "peer": true, - "dependencies": { - "@jest/types": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/create-cache-key-function/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "peer": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/create-cache-key-function/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "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/environment/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/environment/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.3.1.tgz", - "integrity": "sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g==", - "dependencies": { - "jest-get-type": "^29.2.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "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==", - "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/fake-timers/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/fake-timers/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/fake-timers/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==", - "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/fake-timers/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==", - "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/fake-timers/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==", - "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/@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/globals/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/globals/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/globals/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==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/globals/node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/globals/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==", - "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/globals/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==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/globals/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==", - "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/globals/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==", - "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/globals/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==", - "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/@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "node-notifier": "^8.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/reporters/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/reporters/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==", - "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/@jest/reporters/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==", - "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/reporters/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==", - "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/reporters/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==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/@jest/reporters/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@jest/schemas": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", - "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.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==", - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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==", - "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-result/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-result/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "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==", - "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==", - "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/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@jest/transform/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==", - "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/types": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", - "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "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==", - "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==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "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==" - }, - "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==", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@material-ui/core": { - "version": "4.12.4", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz", - "integrity": "sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ==", - "dependencies": { - "@babel/runtime": "^7.4.4", - "@material-ui/styles": "^4.11.5", - "@material-ui/system": "^4.12.2", - "@material-ui/types": "5.1.0", - "@material-ui/utils": "^4.11.3", - "@types/react-transition-group": "^4.2.0", - "clsx": "^1.0.4", - "hoist-non-react-statics": "^3.3.2", - "popper.js": "1.16.1-lts", - "prop-types": "^15.7.2", - "react-is": "^16.8.0 || ^17.0.0", - "react-transition-group": "^4.4.0" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/material-ui" - }, - "peerDependencies": { - "@types/react": "^16.8.6 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@material-ui/data-grid": { - "version": "4.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/@material-ui/data-grid/-/data-grid-4.0.0-alpha.37.tgz", - "integrity": "sha512-3T2AG31aad/lWLMLwn1XUP4mUf3H9YZES17dGuYByzkRLCXbBZHBTPEnCctWukajzwm+v0KGg3QpwitGoiDAjA==", - "deprecated": "The name of the package has changed, more details in https://github.com/mui-org/material-ui-x/releases/tag/v4.0.0", - "dependencies": { - "@material-ui/utils": "^5.0.0-alpha.14", - "clsx": "^1.0.4", - "prop-types": "^15.7.2", - "reselect": "^4.0.0" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@material-ui/core": "^4.12.0 || ^5.0.0-beta.0", - "@material-ui/styles": "^4.11.4 || ^5.0.0-beta.0", - "react": "^17.0.0" - } - }, - "node_modules/@material-ui/data-grid/node_modules/@material-ui/utils": { - "version": "5.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-5.0.0-beta.5.tgz", - "integrity": "sha512-wtJ3ovXWZdTAz5eLBqvMpYH/IBJb3qMQbGCyL1i00+sf7AUlAuv4QLx+QtX/siA6L7IpxUQVfqpoCpQH1eYRpQ==", - "dependencies": { - "@babel/runtime": "^7.14.8", - "@types/prop-types": "^15.7.4", - "@types/react-is": "^16.7.1 || ^17.0.0", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "react": "^17.0.2" - } - }, - "node_modules/@material-ui/icons": { - "version": "4.11.3", - "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.3.tgz", - "integrity": "sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA==", - "dependencies": { - "@babel/runtime": "^7.4.4" - }, - "engines": { - "node": ">=8.0.0" - }, - "peerDependencies": { - "@material-ui/core": "^4.0.0", - "@types/react": "^16.8.6 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@material-ui/lab": { - "version": "4.0.0-alpha.61", - "resolved": "https://registry.npmjs.org/@material-ui/lab/-/lab-4.0.0-alpha.61.tgz", - "integrity": "sha512-rSzm+XKiNUjKegj8bzt5+pygZeckNLOr+IjykH8sYdVk7dE9y2ZuUSofiMV2bJk3qU+JHwexmw+q0RyNZB9ugg==", - "dependencies": { - "@babel/runtime": "^7.4.4", - "@material-ui/utils": "^4.11.3", - "clsx": "^1.0.4", - "prop-types": "^15.7.2", - "react-is": "^16.8.0 || ^17.0.0" - }, - "engines": { - "node": ">=8.0.0" - }, - "peerDependencies": { - "@material-ui/core": "^4.12.1", - "@types/react": "^16.8.6 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@material-ui/styles": { - "version": "4.11.5", - "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.5.tgz", - "integrity": "sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA==", - "dependencies": { - "@babel/runtime": "^7.4.4", - "@emotion/hash": "^0.8.0", - "@material-ui/types": "5.1.0", - "@material-ui/utils": "^4.11.3", - "clsx": "^1.0.4", - "csstype": "^2.5.2", - "hoist-non-react-statics": "^3.3.2", - "jss": "^10.5.1", - "jss-plugin-camel-case": "^10.5.1", - "jss-plugin-default-unit": "^10.5.1", - "jss-plugin-global": "^10.5.1", - "jss-plugin-nested": "^10.5.1", - "jss-plugin-props-sort": "^10.5.1", - "jss-plugin-rule-value-function": "^10.5.1", - "jss-plugin-vendor-prefixer": "^10.5.1", - "prop-types": "^15.7.2" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/material-ui" - }, - "peerDependencies": { - "@types/react": "^16.8.6 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@material-ui/system": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.12.2.tgz", - "integrity": "sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw==", - "dependencies": { - "@babel/runtime": "^7.4.4", - "@material-ui/utils": "^4.11.3", - "csstype": "^2.5.2", - "prop-types": "^15.7.2" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/material-ui" - }, - "peerDependencies": { - "@types/react": "^16.8.6 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@material-ui/types": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz", - "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==", - "peerDependencies": { - "@types/react": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@material-ui/utils": { - "version": "4.11.3", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.3.tgz", - "integrity": "sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg==", - "dependencies": { - "@babel/runtime": "^7.4.4", - "prop-types": "^15.7.2", - "react-is": "^16.8.0 || ^17.0.0" - }, - "engines": { - "node": ">=8.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/@nivo/annotations": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/annotations/-/annotations-0.69.0.tgz", - "integrity": "sha512-GeO9lysWhX2FLAw6ePAgJSEkg9vcivueZSKBvxyiv4e05pYm4fnnYzAxq2tsTHCPoPyWbEbbiSpJEzsQY1dQMQ==", - "dependencies": { - "@nivo/colors": "0.69.0", - "lodash": "^4.17.11", - "react-spring": "9.1.2" - }, - "peerDependencies": { - "@nivo/core": "0.69.0", - "prop-types": ">= 15.5.10 < 16.0.0", - "react": ">= 16.8.4 < 18.0.0" - } - }, - "node_modules/@nivo/annotations/node_modules/@nivo/colors": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/colors/-/colors-0.69.0.tgz", - "integrity": "sha512-mfD/t7VcaOmD+dN8YiflqDeShz7F9tXpPfz772+xwxawu2FRYQ8ksYMC1LoS0zHvBgx/fd/I0U7Yg+OwavfC1g==", - "dependencies": { - "d3-color": "^2.0.0", - "d3-scale": "^3.2.3", - "d3-scale-chromatic": "^2.0.0", - "lodash": "^4.17.11", - "react-motion": "^0.5.2" - }, - "peerDependencies": { - "@nivo/core": "0.69.0", - "prop-types": ">= 15.5.10 < 16.0.0", - "react": ">= 16.8.4 <= 17.0.0" - } - }, - "node_modules/@nivo/annotations/node_modules/@nivo/colors/node_modules/react-motion": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz", - "integrity": "sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ==", - "dependencies": { - "performance-now": "^0.2.0", - "prop-types": "^15.5.8", - "raf": "^3.1.0" - }, - "peerDependencies": { - "react": "^0.14.9 || ^15.3.0 || ^16.0.0" - } - }, - "node_modules/@nivo/annotations/node_modules/performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg==" - }, - "node_modules/@nivo/axes": { - "version": "0.69.1", - "resolved": "https://registry.npmjs.org/@nivo/axes/-/axes-0.69.1.tgz", - "integrity": "sha512-jVWlhyC7qdMLvajgafSUxiDzbB3TRSTzzkbtpWf9D5EeZ6kc0FYBzoDJU4njkRpFh/JjSU8BaMh6aqpYIFfQ4g==", - "dependencies": { - "@nivo/scales": "0.69.0", - "d3-format": "^1.4.4", - "d3-time": "^1.0.11", - "d3-time-format": "^2.1.3", - "react-spring": "9.1.2" - }, - "peerDependencies": { - "@nivo/core": "0.69.0", - "prop-types": ">= 15.5.10 < 16.0.0", - "react": ">= 16.8.4 < 18.0.0" - } - }, - "node_modules/@nivo/core": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/core/-/core-0.69.0.tgz", - "integrity": "sha512-xo8dOcLaZe8DB5PJ5kBnvRwL9JYZKVicWiQ2HXBaEAhnTETT10rdUja9yTWGRhWgSXni0292L0jw2+SP4Wm3bA==", - "dependencies": { - "@nivo/recompose": "0.69.0", - "d3-color": "^2.0.0", - "d3-format": "^1.4.4", - "d3-hierarchy": "^1.1.8", - "d3-interpolate": "^2.0.1", - "d3-scale": "^3.2.3", - "d3-scale-chromatic": "^2.0.0", - "d3-shape": "^1.3.5", - "d3-time-format": "^2.1.3", - "lodash": "^4.17.11", - "react-spring": "9.1.2", - "resize-observer-polyfill": "^1.5.1" - }, - "peerDependencies": { - "@nivo/tooltip": "0.69.0", - "prop-types": ">= 15.5.10 < 16.0.0", - "react": ">= 16.8.4 < 18.0.0" - } - }, - "node_modules/@nivo/legends": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/legends/-/legends-0.69.0.tgz", - "integrity": "sha512-LDnEdr+M4rBtUXv+0EJ+hroOLTk64cOrYZuz3LXVYkVTTNlJ2o41ghdVFCsHeiE+0t8fuXO0oHNEoixQx7UKdg==", - "dependencies": { - "lodash": "^4.17.11" - }, - "peerDependencies": { - "@nivo/core": "0.69.0", - "prop-types": ">= 15.5.10 < 16.0.0", - "react": ">= 16.8.4 < 18.0.0" - } - }, - "node_modules/@nivo/line": { - "version": "0.69.1", - "resolved": "https://registry.npmjs.org/@nivo/line/-/line-0.69.1.tgz", - "integrity": "sha512-Q92S7tCJCKc+AJdc2PdYKQmzULNoExIJQ0IV6pgFf2rY2PiUUlI7rFb7Eu8xgpsHe0w4Xa/KxMLCLHWXNBGJQw==", - "dependencies": { - "@nivo/annotations": "0.69.0", - "@nivo/axes": "0.69.1", - "@nivo/colors": "0.69.0", - "@nivo/legends": "0.69.0", - "@nivo/scales": "0.69.0", - "@nivo/tooltip": "0.69.0", - "@nivo/voronoi": "0.69.0", - "d3-shape": "^1.3.5", - "react-spring": "9.1.2" - }, - "peerDependencies": { - "@nivo/core": "0.69.0", - "prop-types": ">= 15.5.10 < 16.0.0", - "react": ">= 16.8.4 < 18.0.0" - } - }, - "node_modules/@nivo/line/node_modules/@nivo/colors": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/colors/-/colors-0.69.0.tgz", - "integrity": "sha512-mfD/t7VcaOmD+dN8YiflqDeShz7F9tXpPfz772+xwxawu2FRYQ8ksYMC1LoS0zHvBgx/fd/I0U7Yg+OwavfC1g==", - "dependencies": { - "d3-color": "^2.0.0", - "d3-scale": "^3.2.3", - "d3-scale-chromatic": "^2.0.0", - "lodash": "^4.17.11", - "react-motion": "^0.5.2" - }, - "peerDependencies": { - "@nivo/core": "0.69.0", - "prop-types": ">= 15.5.10 < 16.0.0", - "react": ">= 16.8.4 <= 17.0.0" - } - }, - "node_modules/@nivo/line/node_modules/@nivo/colors/node_modules/react-motion": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz", - "integrity": "sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ==", - "dependencies": { - "performance-now": "^0.2.0", - "prop-types": "^15.5.8", - "raf": "^3.1.0" - }, - "peerDependencies": { - "react": "^0.14.9 || ^15.3.0 || ^16.0.0" - } - }, - "node_modules/@nivo/line/node_modules/performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg==" - }, - "node_modules/@nivo/recompose": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/recompose/-/recompose-0.69.0.tgz", - "integrity": "sha512-RtjJHDES1uvi6mlZvR/0p13fzNIJmm7ubE0Zly8p0gICGlurwWMyjwhTLGLNc5BYX/qXBlZsVuns5M5V40rzvg==", - "dependencies": { - "react-lifecycles-compat": "^3.0.4" - }, - "peerDependencies": { - "react": ">= 16.8.4 < 18.0.0" - } - }, - "node_modules/@nivo/scales": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/scales/-/scales-0.69.0.tgz", - "integrity": "sha512-o7BZOiFLDwt6zUXBFeRPtpAyFzyt4DPM+tiJD8+J6QzZOijXzZeUCjjv3lVL95UpmznQFKd6kehpTMyjq9/DyQ==", - "dependencies": { - "d3-scale": "^3.2.3", - "d3-time": "^1.0.11", - "d3-time-format": "^2.1.3", - "lodash": "^4.17.11" - }, - "peerDependencies": { - "prop-types": ">= 15.5.10 < 16.0.0" - } - }, - "node_modules/@nivo/tooltip": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/tooltip/-/tooltip-0.69.0.tgz", - "integrity": "sha512-thIObK1KajlZ7vVU5mgwEPRMBKLWh5a4u46i7qeg2nld5bRh54S//0M1U+PZS5t+xg1boE/iXWp2/MLXPxk2EQ==", - "dependencies": { - "react-spring": "9.1.2" - }, - "peerDependencies": { - "@nivo/core": "0.69.0" - } - }, - "node_modules/@nivo/voronoi": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/voronoi/-/voronoi-0.69.0.tgz", - "integrity": "sha512-z3qMtvVx7HVi/O1h5E+hEE7pCdt9ZUV6LxhiaNJ5f/XW+t41NyVbovgLj8Tl1ddtsum7De1BfHeLZA3GffjdKA==", - "dependencies": { - "d3-delaunay": "^5.3.0", - "d3-scale": "^3.2.3" - }, - "peerDependencies": { - "@nivo/core": "0.69.0", - "react": ">= 16.8.4 < 18.0.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz", - "integrity": "sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ==", - "dependencies": { - "ansi-html": "^0.0.7", - "error-stack-parser": "^2.0.6", - "html-entities": "^1.2.1", - "native-url": "^0.2.6", - "schema-utils": "^2.6.5", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">= 10.x" - }, - "peerDependencies": { - "@types/webpack": "4.x", - "react-refresh": ">=0.8.3 <0.10.0", - "sockjs-client": "^1.4.0", - "type-fest": "^0.13.1", - "webpack": ">=4.43.0 <6.0.0", - "webpack-dev-server": "3.x", - "webpack-hot-middleware": "2.x", - "webpack-plugin-serve": "0.x || 1.x" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - }, - "sockjs-client": { - "optional": true - }, - "type-fest": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - }, - "webpack-hot-middleware": { - "optional": true - }, - "webpack-plugin-serve": { - "optional": true - } - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@react-native-community/cli": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-9.3.2.tgz", - "integrity": "sha512-IAW4X0vmX/xozNpp/JVZaX7MrC85KV0OP2DF4o7lNGOfpUhzJAEWqTfkxFYS+VsRjZHDve4wSTiGIuXwE7FG1w==", - "peer": true, - "dependencies": { - "@react-native-community/cli-clean": "^9.2.1", - "@react-native-community/cli-config": "^9.2.1", - "@react-native-community/cli-debugger-ui": "^9.0.0", - "@react-native-community/cli-doctor": "^9.3.0", - "@react-native-community/cli-hermes": "^9.3.1", - "@react-native-community/cli-plugin-metro": "^9.2.1", - "@react-native-community/cli-server-api": "^9.2.1", - "@react-native-community/cli-tools": "^9.2.1", - "@react-native-community/cli-types": "^9.1.0", - "chalk": "^4.1.2", - "commander": "^9.4.0", - "execa": "^1.0.0", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0", - "graceful-fs": "^4.1.3", - "prompts": "^2.4.0", - "semver": "^6.3.0" - }, - "bin": { - "react-native": "build/bin.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@react-native-community/cli-clean": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-9.2.1.tgz", - "integrity": "sha512-dyNWFrqRe31UEvNO+OFWmQ4hmqA07bR9Ief/6NnGwx67IO9q83D5PEAf/o96ML6jhSbDwCmpPKhPwwBbsyM3mQ==", - "peer": true, - "dependencies": { - "@react-native-community/cli-tools": "^9.2.1", - "chalk": "^4.1.2", - "execa": "^1.0.0", - "prompts": "^2.4.0" - } - }, - "node_modules/@react-native-community/cli-clean/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==", - "peer": 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/@react-native-community/cli-clean/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "peer": 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/@react-native-community/cli-clean/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==", - "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-clean/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": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "peer": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "peer": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-clean/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/@react-native-community/cli-config": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-9.2.1.tgz", - "integrity": "sha512-gHJlBBXUgDN9vrr3aWkRqnYrPXZLztBDQoY97Mm5Yo6MidsEpYo2JIP6FH4N/N2p1TdjxJL4EFtdd/mBpiR2MQ==", - "peer": true, - "dependencies": { - "@react-native-community/cli-tools": "^9.2.1", - "cosmiconfig": "^5.1.0", - "deepmerge": "^3.2.0", - "glob": "^7.1.3", - "joi": "^17.2.1" - } - }, - "node_modules/@react-native-community/cli-config/node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "peer": true, - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-config/node_modules/deepmerge": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", - "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-config/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "peer": true, - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-config/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "peer": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-config/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-debugger-ui": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-9.0.0.tgz", - "integrity": "sha512-7hH05ZwU9Tp0yS6xJW0bqcZPVt0YCK7gwj7gnRu1jDNN2kughf6Lg0Ys29rAvtZ7VO1PK5c1O+zs7yFnylQDUA==", - "peer": true, - "dependencies": { - "serve-static": "^1.13.1" - } - }, - "node_modules/@react-native-community/cli-doctor": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-9.3.0.tgz", - "integrity": "sha512-/fiuG2eDGC2/OrXMOWI5ifq4X1gdYTQhvW2m0TT5Lk1LuFiZsbTCp1lR+XILKekuTvmYNjEGdVpeDpdIWlXdEA==", - "peer": true, - "dependencies": { - "@react-native-community/cli-config": "^9.2.1", - "@react-native-community/cli-platform-ios": "^9.3.0", - "@react-native-community/cli-tools": "^9.2.1", - "chalk": "^4.1.2", - "command-exists": "^1.2.8", - "envinfo": "^7.7.2", - "execa": "^1.0.0", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5", - "node-stream-zip": "^1.9.1", - "ora": "^5.4.1", - "prompts": "^2.4.0", - "semver": "^6.3.0", - "strip-ansi": "^5.2.0", - "sudo-prompt": "^9.0.0", - "wcwidth": "^1.0.1" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-doctor/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==", - "peer": 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/@react-native-community/cli-doctor/node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "peer": 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/@react-native-community/cli-doctor/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==", - "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-doctor/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": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "peer": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "peer": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "peer": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/@react-native-community/cli-hermes": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-9.3.1.tgz", - "integrity": "sha512-Mq4PK8m5YqIdaVq5IdRfp4qK09aVO+aiCtd6vjzjNUgk1+1X5cgUqV6L65h4N+TFJYJHcp2AnB+ik1FAYXvYPQ==", - "peer": true, - "dependencies": { - "@react-native-community/cli-platform-android": "^9.3.1", - "@react-native-community/cli-tools": "^9.2.1", - "chalk": "^4.1.2", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5" - } - }, - "node_modules/@react-native-community/cli-platform-android": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-9.3.1.tgz", - "integrity": "sha512-m0bQ6Twewl7OEZoVf79I2GZmsDqh+Gh0bxfxWgwxobsKDxLx8/RNItAo1lVtTCgzuCR75cX4EEO8idIF9jYhew==", - "peer": true, - "dependencies": { - "@react-native-community/cli-tools": "^9.2.1", - "chalk": "^4.1.2", - "execa": "^1.0.0", - "fs-extra": "^8.1.0", - "glob": "^7.1.3", - "logkitty": "^0.7.1", - "slash": "^3.0.0" - } - }, - "node_modules/@react-native-community/cli-platform-android/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==", - "peer": 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/@react-native-community/cli-platform-android/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "peer": 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/@react-native-community/cli-platform-android/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@react-native-community/cli-platform-android/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==", - "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@react-native-community/cli-platform-android/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": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "peer": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "peer": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-platform-android/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==", - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@react-native-community/cli-platform-android/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/@react-native-community/cli-platform-ios": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-9.3.0.tgz", - "integrity": "sha512-nihTX53BhF2Q8p4B67oG3RGe1XwggoGBrMb6vXdcu2aN0WeXJOXdBLgR900DAA1O8g7oy1Sudu6we+JsVTKnjw==", - "peer": true, - "dependencies": { - "@react-native-community/cli-tools": "^9.2.1", - "chalk": "^4.1.2", - "execa": "^1.0.0", - "glob": "^7.1.3", - "ora": "^5.4.1" - } - }, - "node_modules/@react-native-community/cli-platform-ios/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==", - "peer": 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/@react-native-community/cli-platform-ios/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "peer": 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/@react-native-community/cli-platform-ios/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==", - "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-platform-ios/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": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "peer": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "peer": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/@react-native-community/cli-plugin-metro": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-9.2.1.tgz", - "integrity": "sha512-byBGBH6jDfUvcHGFA45W/sDwMlliv7flJ8Ns9foCh3VsIeYYPoDjjK7SawE9cPqRdMAD4SY7EVwqJnOtRbwLiQ==", - "peer": true, - "dependencies": { - "@react-native-community/cli-server-api": "^9.2.1", - "@react-native-community/cli-tools": "^9.2.1", - "chalk": "^4.1.2", - "metro": "0.72.3", - "metro-config": "0.72.3", - "metro-core": "0.72.3", - "metro-react-native-babel-transformer": "0.72.3", - "metro-resolver": "0.72.3", - "metro-runtime": "0.72.3", - "readline": "^1.3.0" - } - }, - "node_modules/@react-native-community/cli-server-api": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-9.2.1.tgz", - "integrity": "sha512-EI+9MUxEbWBQhWw2PkhejXfkcRqPl+58+whlXJvKHiiUd7oVbewFs0uLW0yZffUutt4FGx6Uh88JWEgwOzAdkw==", - "peer": true, - "dependencies": { - "@react-native-community/cli-debugger-ui": "^9.0.0", - "@react-native-community/cli-tools": "^9.2.1", - "compression": "^1.7.1", - "connect": "^3.6.5", - "errorhandler": "^1.5.0", - "nocache": "^3.0.1", - "pretty-format": "^26.6.2", - "serve-static": "^1.13.1", - "ws": "^7.5.1" - } - }, - "node_modules/@react-native-community/cli-server-api/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "peer": 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/@react-native-community/cli-server-api/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@react-native-community/cli-server-api/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==", - "peer": 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/@react-native-community/cli-tools": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-9.2.1.tgz", - "integrity": "sha512-bHmL/wrKmBphz25eMtoJQgwwmeCylbPxqFJnFSbkqJPXQz3ManQ6q/gVVMqFyz7D3v+riaus/VXz3sEDa97uiQ==", - "peer": true, - "dependencies": { - "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", - "find-up": "^5.0.0", - "mime": "^2.4.1", - "node-fetch": "^2.6.0", - "open": "^6.2.0", - "ora": "^5.4.1", - "semver": "^6.3.0", - "shell-quote": "^1.7.3" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "peer": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "peer": true, - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "peer": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "peer": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@react-native-community/cli-types": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-9.1.0.tgz", - "integrity": "sha512-KDybF9XHvafLEILsbiKwz5Iobd+gxRaPyn4zSaAerBxedug4er5VUWa8Szy+2GeYKZzMh/gsb1o9lCToUwdT/g==", - "peer": true, - "dependencies": { - "joi": "^17.2.1" - } - }, - "node_modules/@react-native-community/cli/node_modules/commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", - "peer": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/@react-native-community/cli/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==", - "peer": 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/@react-native-community/cli/node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@react-native-community/cli/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "peer": 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/@react-native-community/cli/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@react-native-community/cli/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==", - "peer": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native-community/cli/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@react-native-community/cli/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": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "peer": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@react-native-community/cli/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@react-native-community/cli/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "peer": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@react-native-community/cli/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==", - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@react-native-community/cli/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/@react-native/assets": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz", - "integrity": "sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ==", - "peer": true - }, - "node_modules/@react-native/normalize-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.0.0.tgz", - "integrity": "sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw==", - "peer": true - }, - "node_modules/@react-native/polyfills": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-2.0.0.tgz", - "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==", - "peer": true - }, - "node_modules/@react-spring/animated": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.1.2.tgz", - "integrity": "sha512-nKOGk+3aWbNp46V/CB1J2vR3GJI/Vork8N1WTI5mt+32QekrSsBn5/YFt4/iPaDGhLjukFxF0IjLs6hRLqSObw==", - "dependencies": { - "@react-spring/shared": "~9.1.2", - "@react-spring/types": "~9.1.2" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/@react-spring/core": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.1.2.tgz", - "integrity": "sha512-rgobYPCcLdDwbHBVqAmvtXhhX92G7MoPltJlzUge843yp1dNr47tkagFdCtw9NMGp6eHu/CE5byh/imlhLLAxw==", - "hasInstallScript": true, - "dependencies": { - "@react-spring/animated": "~9.1.2", - "@react-spring/shared": "~9.1.2", - "@react-spring/types": "~9.1.2" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/@react-spring/shared": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.1.2.tgz", - "integrity": "sha512-sj/RrhFZAteCWAMk+W0t6Ku/skn/lbskCCs8B7ZnHNLMGPM+Zb3MOk+aVbX3T/D0iq/oTnKWyQYqrXDKiFcZ7g==", - "dependencies": { - "@react-spring/types": "~9.1.2", - "rafz": "^0.1.14" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/@react-spring/types": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.1.2.tgz", - "integrity": "sha512-NZNImL0ymRFbss1cGKX2qSEeFdFoOgnIJZEW4Uczt+wm04J7g0Zuf23Hf8hM35JtxDr8QO5okp8BBtCM5FzzMg==" - }, - "node_modules/@react-spring/web": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.1.2.tgz", - "integrity": "sha512-E5W9Hmi2bO6CPorCNV/2iv12ux9LxHJAbpXmrBPKWFRqZixysiHoNQKKPG0DmSvUU1uKkvCvMC4VoB6pj/2kxw==", - "dependencies": { - "@react-spring/animated": "~9.1.2", - "@react-spring/core": "~9.1.2", - "@react-spring/shared": "~9.1.2", - "@react-spring/types": "~9.1.2" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, - "node_modules/@react-spring/zdog": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/zdog/-/zdog-9.1.2.tgz", - "integrity": "sha512-t5RobDp12HGVh6XJ1BZ+dFdxRQ/goEapYvjH5eqQa1vC97bSqJGLiG+SM/E360DtDlh8GXAyGSesd2pXzBkpPg==", - "dependencies": { - "@react-spring/animated": "~9.1.2", - "@react-spring/core": "~9.1.2", - "@react-spring/shared": "~9.1.2", - "@react-spring/types": "~9.1.2" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8", - "react-zdog": ">=1.0", - "zdog": ">=1.0" - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", - "integrity": "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==", - "dependencies": { - "@rollup/pluginutils": "^3.0.8", - "@types/resolve": "0.0.8", - "builtin-modules": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.14.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "peer": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/address/node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "peer": true - }, - "node_modules/@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", - "peer": true - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "peer": true - }, - "node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz", - "integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==", - "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==", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@surma/rollup-plugin-off-main-thread": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz", - "integrity": "sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A==", - "dependencies": { - "ejs": "^2.6.1", - "magic-string": "^0.25.0" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "dependencies": { - "@babel/types": "^7.12.6" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@testing-library/dom": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz", - "integrity": "sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^4.2.0", - "aria-query": "^5.0.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@testing-library/jest-dom": { - "version": "5.16.5", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz", - "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==", - "dependencies": { - "@adobe/css-tools": "^4.0.1", - "@babel/runtime": "^7.9.2", - "@types/testing-library__jest-dom": "^5.9.1", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.5.6", - "lodash": "^4.17.15", - "redent": "^3.0.0" - }, - "engines": { - "node": ">=8", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/react": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-11.2.7.tgz", - "integrity": "sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^7.28.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@testing-library/react/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@testing-library/react/node_modules/@testing-library/dom": { - "version": "7.31.2", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.31.2.tgz", - "integrity": "sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^4.2.0", - "aria-query": "^4.2.2", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.6", - "lz-string": "^1.4.4", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@testing-library/react/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@testing-library/react/node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/@testing-library/react/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==", - "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/@testing-library/user-event": { - "version": "12.8.3", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-12.8.3.tgz", - "integrity": "sha512-IR0iWbFkgd56Bu5ZI/ej8yQwrkCv8Qydx6RzwbKz9faXazR/+5tvYKsZQgyXJiwgpcva127YO6JcWy7YlCfofQ==", - "dependencies": { - "@babel/runtime": "^7.12.5" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - }, - "peerDependencies": { - "@testing-library/dom": ">=7.21.4" - } - }, - "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==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==" - }, - "node_modules/@types/babel__core": { - "version": "7.1.20", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", - "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", - "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==", - "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==", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", - "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "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/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "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==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" - }, - "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==" - }, - "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==", - "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==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.2.3", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.3.tgz", - "integrity": "sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w==", - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/jest/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@types/jest/node_modules/pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@types/jest/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" - }, - "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" - }, - "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==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/@types/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==" - }, - "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/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" - }, - "node_modules/@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-is": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", - "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-reconciler": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.26.7.tgz", - "integrity": "sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==", - "peer": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react/node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "node_modules/@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "dependencies": { - "@types/node": "*" - } - }, - "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/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==" - }, - "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==" - }, - "node_modules/@types/tapable": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", - "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==" - }, - "node_modules/@types/testing-library__jest-dom": { - "version": "5.14.5", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", - "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", - "dependencies": { - "@types/jest": "*" - } - }, - "node_modules/@types/uglify-js": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", - "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==", - "dependencies": { - "source-map": "^0.6.1" - } - }, - "node_modules/@types/webpack": { - "version": "4.41.33", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz", - "integrity": "sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==", - "dependencies": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@types/webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", - "dependencies": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - } - }, - "node_modules/@types/webpack-sources/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", - "dependencies": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.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.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.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": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, - "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/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "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": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "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.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.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.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" - }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" - }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "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==" - }, - "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==" - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "peer": true, - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/absolute-path": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", - "integrity": "sha512-HQiug4c+/s3WOvEnDRxXVmNtSG5s2gJM9r19BTcqjp7BWcE48PB+Y2G6jE65kqI0LpsQeMZygt/b60Gi4KxGyA==", - "peer": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "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==", - "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==", - "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==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", - "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "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==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, - "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==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==" - }, - "node_modules/anser": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", - "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", - "peer": true - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "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==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-fragments": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", - "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", - "peer": true, - "dependencies": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" - } - }, - "node_modules/ansi-fragments/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-fragments/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==", - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-fragments/node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-fragments/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==", - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ansi-fragments/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "peer": true - }, - "node_modules/ansi-fragments/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-fragments/node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-fragments/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "peer": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha512-JoAxEa1DfP9m2xfB/y2r/aKcwXNlltr4+0QSBC4TrLfcxyvepX2Pv0t/xpgGV5bGsDzCYV8SzjWgyCW0T9yYbA==", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "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": "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/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/appdirsjs": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", - "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==", - "peer": true - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha512-fExL2kFDC1Q2DUOx3whE/9KoN66IzkY4b4zUHUBFM1ojEYjZZYDcUW3bek/ufGionX9giIKDC5redH2IlGqcQQ==" - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "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==", - "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": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "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": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "dependencies": { - "inherits": "2.0.1" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "peer": true, - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "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==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "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==", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", - "dependencies": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", - "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" - }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "peer": true, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "eslint": ">= 4.12.1" - } - }, - "node_modules/babel-eslint/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==", - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-extract-comments": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", - "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", - "dependencies": { - "babylon": "^6.18.0" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "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/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/babel-jest/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", - "dependencies": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 6.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/babel-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==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.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==", - "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-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==", - "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-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/babel-plugin-macros/node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/babel-plugin-named-asset-import": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "peerDependencies": { - "@babel/core": "^7.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha512-C4Aq+GaAj83pRQ0EFgTvw5YO6T3Qz2KGrNRwIj9mSoNHVvdZY4KO2uA6HNtNXCw993iSZnckY1aLW8nOi8i4+w==" - }, - "node_modules/babel-plugin-syntax-trailing-function-commas": { - "version": "7.0.0-beta.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", - "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", - "peer": true - }, - "node_modules/babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha512-ocgA9VJvyxwt+qJB0ncxV8kb/CjfTcECUY4tQ5VT7nP6Aohzobm8CDFaQ5FHdvZQzLmf0sgDxB8iRXZXxwZcyA==", - "dependencies": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" - } - }, - "node_modules/babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "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==", - "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-fbjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", - "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", - "peer": true, - "dependencies": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-class-properties": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-member-expression-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-property-literals": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" - }, - "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==", - "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/babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" - } - }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/babel-runtime/node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true - }, - "node_modules/babel-runtime/node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, - "node_modules/babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "bin": { - "babylon": "bin/babylon.js" - } - }, - "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==" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "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": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "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/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "node_modules/bfj": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", - "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", - "dependencies": { - "bluebird": "^3.5.5", - "check-types": "^11.1.1", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "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==", - "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==", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "peer": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/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" - } - ], - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bl/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==", - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==", - "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "node_modules/bonjour/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/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "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==", - "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==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "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==" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-sign/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==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "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==", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "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==" - }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "node_modules/buffer/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "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/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-callsite/node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001431", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", - "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "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==", - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz", - "integrity": "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/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==", - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/check-types": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", - "integrity": "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==" - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "optional": 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/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, - "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==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.1.tgz", - "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "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==" - }, - "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==", - "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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==", - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "peer": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", - "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", - "peer": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clipboard": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", - "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", - "optional": true, - "dependencies": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "peer": true, - "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==", - "peer": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/coa/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==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/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==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/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==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/coa/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/coa/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/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==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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==" - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "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/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/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color/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==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "peer": 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==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "peer": true - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "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==" - }, - "node_modules/compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg==", - "dependencies": { - "arity-n": "^1.0.4" - } - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/compression/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==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "peer": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "peer": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - }, - "node_modules/connect/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/connect/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", - "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", - "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", - "dependencies": { - "browserslist": "^4.21.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", - "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", - "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==" - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "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==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "dependencies": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - } - }, - "node_modules/css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", - "dependencies": { - "postcss": "^7.0.5" - }, - "bin": { - "css-blank-pseudo": "cli.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", - "engines": { - "node": "*" - } - }, - "node_modules/css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "dependencies": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - }, - "engines": { - "node": ">4" - } - }, - "node_modules/css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", - "dependencies": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^5.0.0-rc.4" - }, - "bin": { - "css-has-pseudo": "cli.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/css-has-pseudo/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.3.0.tgz", - "integrity": "sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg==", - "dependencies": { - "camelcase": "^6.0.0", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^2.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.3", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.1", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", - "dependencies": { - "postcss": "^7.0.5" - }, - "bin": { - "css-prefers-color-scheme": "cli.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-vendor": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz", - "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==", - "dependencies": { - "@babel/runtime": "^7.8.3", - "is-in-browser": "^1.0.2" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" - }, - "node_modules/cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" - }, - "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==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", - "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", - "dependencies": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.8", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-preset-default": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", - "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", - "dependencies": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.3", - "postcss-unique-selectors": "^4.0.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano/node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "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==" - }, - "node_modules/csstype": { - "version": "2.6.21", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", - "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" - }, - "node_modules/cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==" - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/d3-array": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", - "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", - "dependencies": { - "internmap": "^1.0.0" - } - }, - "node_modules/d3-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", - "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" - }, - "node_modules/d3-delaunay": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-5.3.0.tgz", - "integrity": "sha512-amALSrOllWVLaHTnDLHwMIiz0d1bBu9gZXd1FiLfXf8sHcX9jrcj81TVZOqD4UX7MgBZZ07c8GxzEgBpJqc74w==", - "dependencies": { - "delaunator": "4" - } - }, - "node_modules/d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" - }, - "node_modules/d3-hierarchy": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", - "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" - }, - "node_modules/d3-interpolate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz", - "integrity": "sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==", - "dependencies": { - "d3-color": "1 - 2" - } - }, - "node_modules/d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" - }, - "node_modules/d3-scale": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", - "integrity": "sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==", - "dependencies": { - "d3-array": "^2.3.0", - "d3-format": "1 - 2", - "d3-interpolate": "1.2.0 - 2", - "d3-time": "^2.1.1", - "d3-time-format": "2 - 3" - } - }, - "node_modules/d3-scale-chromatic": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz", - "integrity": "sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA==", - "dependencies": { - "d3-color": "1 - 2", - "d3-interpolate": "1 - 2" - } - }, - "node_modules/d3-scale/node_modules/d3-time": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", - "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", - "dependencies": { - "d3-array": "2" - } - }, - "node_modules/d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "dependencies": { - "d3-path": "1" - } - }, - "node_modules/d3-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", - "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" - }, - "node_modules/d3-time-format": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", - "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", - "dependencies": { - "d3-time": "1" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "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==", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/dayjs": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz", - "integrity": "sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==", - "peer": true - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "peer": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "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": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz", - "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==" - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" - }, - "node_modules/deep-equal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.1.0.tgz", - "integrity": "sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA==", - "dependencies": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.8" - }, - "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==" - }, - "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/default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/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==", - "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/default-gateway/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/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==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/default-gateway/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/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": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/default-gateway/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/default-gateway/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/default-gateway/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "peer": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dependencies": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/del/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/del/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/delaunator": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-4.0.1.tgz", - "integrity": "sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag==" - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "optional": true - }, - "node_modules/denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==", - "peer": true - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/diff-sequences": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz", - "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "node_modules/dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==", - "dependencies": { - "buffer-indexof": "^1.0.0" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-accessibility-api": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz", - "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==" - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "node_modules/dom-helpers/node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "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/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "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==", - "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==", - "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/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/ejs": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", - "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", - "hasInstallScript": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "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==", - "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==", - "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/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==", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "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==", - "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==", - "peer": 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==", - "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==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/errorhandler": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", - "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", - "peer": true, - "dependencies": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "node_modules/es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dependencies": { - "has": "^1.0.3" - } - }, - "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==", - "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/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "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-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "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/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "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/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "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==", - "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": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.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": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "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==", - "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-react-app": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz", - "integrity": "sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==", - "dependencies": { - "confusing-browser-globals": "^1.0.10" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.0", - "@typescript-eslint/parser": "^4.0.0", - "babel-eslint": "^10.0.0", - "eslint": "^7.5.0", - "eslint-plugin-flowtype": "^5.2.0", - "eslint-plugin-import": "^2.22.0", - "eslint-plugin-jest": "^24.0.0", - "eslint-plugin-jsx-a11y": "^6.3.1", - "eslint-plugin-react": "^7.20.3", - "eslint-plugin-react-hooks": "^4.0.8", - "eslint-plugin-testing-library": "^3.9.0" - }, - "peerDependenciesMeta": { - "eslint-plugin-jest": { - "optional": true - }, - "eslint-plugin-testing-library": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-flowtype": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.10.0.tgz", - "integrity": "sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw==", - "dependencies": { - "lodash": "^4.17.15", - "string-natural-compare": "^3.0.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "peerDependencies": { - "eslint": "^7.1.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/eslint-plugin-import/node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "24.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz", - "integrity": "sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA==", - "dependencies": { - "@typescript-eslint/experimental-utils": "^4.0.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": ">= 4", - "eslint": ">=5" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", - "dependencies": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.31.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", - "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", - "dependencies": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-testing-library": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz", - "integrity": "sha512-WAmOCt7EbF1XM8XfbCKAEzAPnShkNSwcIsAD2jHdsMUT9mZJPjLCG7pMzbcC8kK366NOuGip8HKLDC+Xk4yIdA==", - "dependencies": { - "@typescript-eslint/experimental-utils": "^3.10.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0", - "npm": ">=6" - }, - "peerDependencies": { - "eslint": "^5 || ^6 || ^7" - } - }, - "node_modules/eslint-plugin-testing-library/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==", - "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/eslint-plugin-testing-library/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==", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-testing-library/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==", - "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/eslint-plugin-testing-library/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==", - "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/eslint-plugin-testing-library/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==", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-plugin-testing-library/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==", - "engines": { - "node": ">=4" - } - }, - "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==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "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==", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-webpack-plugin": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-2.7.0.tgz", - "integrity": "sha512-bNaVVUvU4srexGhVcayn/F4pJAz19CWBkKoMx7aSQ4wtTbZQCnG5O9LHCE42mM+JSKOUp7n6vd5CIwzj7lOVGA==", - "dependencies": { - "@types/eslint": "^7.29.0", - "arrify": "^2.0.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^3.1.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/eslint-webpack-plugin/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==", - "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/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==", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/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==", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint/node_modules/eslint-utils/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==", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", - "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/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==", - "engines": { - "node": ">= 4" - } - }, - "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==", - "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==", - "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/espree/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==", - "engines": { - "node": ">=4" - } - }, - "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==", - "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==", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "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==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/eventsource": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", - "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "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==" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "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": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "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": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "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==", - "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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==", - "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": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "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==", - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/expect": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.3.1.tgz", - "integrity": "sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA==", - "dependencies": { - "@jest/expect-utils": "^29.3.1", - "jest-get-type": "^29.2.0", - "jest-matcher-utils": "^29.3.1", - "jest-message-util": "^29.3.1", - "jest-util": "^29.3.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "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==", - "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": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "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-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "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": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" - }, - "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==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.1.tgz", - "integrity": "sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==", - "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/file-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==", - "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/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, - "node_modules/filesize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", - "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==", - "engines": { - "node": ">= 0.4.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==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "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==", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - }, - "node_modules/flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", - "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash." - }, - "node_modules/flow-parser": { - "version": "0.121.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.121.0.tgz", - "integrity": "sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg==", - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", - "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", - "dependencies": { - "@babel/code-frame": "^7.5.5", - "chalk": "^2.4.1", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" - }, - "engines": { - "node": ">=6.11.5", - "yarn": ">=1.0.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/fork-ts-checker-webpack-plugin/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-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==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/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": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "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==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "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/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - }, - "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==", - "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.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "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==", - "engines": { - "node": ">=8.0.0" - } - }, - "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==", - "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==", - "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": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "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==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "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==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", - "optional": true, - "dependencies": { - "delegate": "^3.1.2" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "optional": true - }, - "node_modules/gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "dependencies": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "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==" - }, - "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.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "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": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "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": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "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": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/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==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", - "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", - "dependencies": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hermes-estree": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.8.0.tgz", - "integrity": "sha512-W6JDAOLZ5pMPMjEiQGLCXSSV7pIBEgRR5zGkxgmzGSXHOxqV5dC/M1Zevqpbm9TZDE5tu358qZf8Vkzmsc+u7Q==", - "peer": true - }, - "node_modules/hermes-parser": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.8.0.tgz", - "integrity": "sha512-yZKalg1fTYG5eOiToLUaw69rQfZq/fi+/NtEXRU7N87K/XobNRhRWorh80oSge2lWUiZfTgUvRJH+XgZWrhoqA==", - "peer": true, - "dependencies": { - "hermes-estree": "0.8.0" - } - }, - "node_modules/hermes-profile-transformer": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", - "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", - "peer": true, - "dependencies": { - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/hermes-profile-transformer/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "peer": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, - "node_modules/highlight.js": { - "version": "9.18.5", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz", - "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==", - "deprecated": "Support has ended for 9.x series. Upgrade to @latest", - "hasInstallScript": true, - "engines": { - "node": "*" - } - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/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/hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "engines": { - "node": ">= 6.0.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==" - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==" - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==" - }, - "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==", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" - }, - "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==" - }, - "node_modules/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dependencies": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/html-webpack-plugin": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz", - "integrity": "sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw==", - "dependencies": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.15", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "engines": { - "node": ">=6.9" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/html-webpack-plugin/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/html-webpack-plugin/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==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "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-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.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==", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dependencies": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/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": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" - }, - "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==", - "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==", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/hyphenate-style-name": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", - "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" - }, - "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==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "dependencies": { - "postcss": "^7.0.14" - }, - "engines": { - "node": ">= 6" - } - }, - "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": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "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" - } - ] - }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==" - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", - "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==", - "peer": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/immer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", - "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==", - "dependencies": { - "import-from": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/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==", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==", - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-from/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "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/import-local/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==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==" - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "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==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/internmap": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", - "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "peer": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "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==", - "optional": 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==", - "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==" - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "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==", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-ci/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==" - }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", - "dependencies": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "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==", - "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-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "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-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", - "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==", - "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==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "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": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "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==", - "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==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-in-browser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==" - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" - }, - "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==", - "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==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "dependencies": { - "is-path-inside": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "dependencies": { - "path-is-inside": "^1.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dependencies": { - "isobject": "^3.0.1" - }, - "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==" - }, - "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-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "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==", - "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==", - "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==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "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": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "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==", - "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==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "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==", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/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==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "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==", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "26.6.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.0.tgz", - "integrity": "sha512-jxTmrvuecVISvKFFhOkjsWRZV7sFqdSUAd1ajOKY+/QE/aLBVstsJ/dX8GczLzwiT6ZEwwmZqtCUHLHHQVzcfA==", - "dependencies": { - "@jest/core": "^26.6.0", - "import-local": "^3.0.2", - "jest-cli": "^26.6.0" - }, - "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==", - "dependencies": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-circus": { - "version": "26.6.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-26.6.0.tgz", - "integrity": "sha512-L2/Y9szN6FJPWFK8kzWXwfp+FOR7xq0cUL4lIsdbIdwz3Vh6P1nrpcqOleSzr28zOtSHQNV9Z7Tl+KkuK7t5Ng==", - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.0", - "@jest/test-result": "^26.6.0", - "@jest/types": "^26.6.0", - "@types/babel__traverse": "^7.0.4", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^26.6.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.0", - "jest-matcher-utils": "^26.6.0", - "jest-message-util": "^26.6.0", - "jest-runner": "^26.6.0", - "jest-runtime": "^26.6.0", - "jest-snapshot": "^26.6.0", - "jest-util": "^26.6.0", - "pretty-format": "^26.6.0", - "stack-utils": "^2.0.2", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-circus/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-circus/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-circus/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==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-circus/node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-circus/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==", - "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-circus/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==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-circus/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==", - "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-circus/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==", - "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-circus/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==", - "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-circus/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==", - "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/jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dependencies": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-cli/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-cli/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-cli/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==", - "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-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-config/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-config/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==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-config/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==", - "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-config/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==", - "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-config/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==", - "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/jest-diff": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.3.1.tgz", - "integrity": "sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.3.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-diff/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "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==", - "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==", - "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/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-each/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==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each/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==", - "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-each/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==", - "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/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==", - "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-jsdom/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-environment-jsdom/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-environment-jsdom/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==", - "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-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==", - "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-environment-node/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-environment-node/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-environment-node/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==", - "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-get-type": { - "version": "29.2.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", - "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "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==", - "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-haste-map/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-haste-map/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-haste-map/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==", - "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-haste-map/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==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "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==", - "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/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-jasmine2/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-jasmine2/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==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-jasmine2/node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-jasmine2/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==", - "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-jasmine2/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==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-jasmine2/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==", - "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-jasmine2/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==", - "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-jasmine2/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==", - "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-jasmine2/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==", - "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/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==", - "dependencies": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-leak-detector/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-leak-detector/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-leak-detector/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==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-leak-detector/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==", - "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/jest-matcher-utils": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz", - "integrity": "sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ==", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.3.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "node_modules/jest-message-util": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.3.1.tgz", - "integrity": "sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.3.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.3.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "dependencies": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "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==", - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-mock/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-mock/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "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==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve": { - "version": "26.6.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.0.tgz", - "integrity": "sha512-tRAz2bwraHufNp+CCmAD8ciyCpXCs1NQxB5EJAmtCFy6BN81loFEGWKzYu26Y62lAJJe4X4jg36Kf+NsQyiStQ==", - "dependencies": { - "@jest/types": "^26.6.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.0", - "read-pkg-up": "^7.0.1", - "resolve": "^1.17.0", - "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==", - "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-dependencies/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-resolve/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-resolve/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==", - "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-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runner/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runner/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-runner/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==", - "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-runner/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==", - "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-runner/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==", - "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-runner/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==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-runner/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==", - "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/jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runtime/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runtime/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-runtime/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==", - "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-runtime/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==", - "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-runtime/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==", - "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-runtime/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==", - "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/jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "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==", - "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/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-snapshot/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==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot/node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot/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==", - "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-snapshot/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==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot/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==", - "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-snapshot/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==", - "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-snapshot/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==", - "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-snapshot/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==", - "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-snapshot/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==", - "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/jest-util": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", - "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", - "dependencies": { - "@jest/types": "^29.3.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "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==", - "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/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-validate/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-validate/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==", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-validate/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==", - "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/jest-watch-typeahead": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.6.1.tgz", - "integrity": "sha512-ITVnHhj3Jd/QkqQcTqZfRgjfyRhDFM/auzgVo2RKvSwi18YMvh0WvXDJFoFED6c7jd/5jxtu4kSOb9PTu2cPVg==", - "dependencies": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^26.0.0", - "jest-watcher": "^26.3.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "jest": "^26.0.0" - } - }, - "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==", - "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/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-watcher/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-watcher/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==", - "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-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==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/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==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/joi": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", - "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", - "peer": true, - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/joi/node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "peer": true - }, - "node_modules/joi/node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "peer": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "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==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsc-android": { - "version": "250230.2.1", - "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250230.2.1.tgz", - "integrity": "sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q==", - "peer": true - }, - "node_modules/jscodeshift": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz", - "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==", - "peer": true, - "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^3.1.10", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.20.4", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/jscodeshift/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "peer": 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/jscodeshift/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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "peer": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "peer": 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/jscodeshift/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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "peer": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "peer": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "peer": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "peer": 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/jscodeshift/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/jscodeshift/node_modules/temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "peer": true, - "dependencies": { - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/jscodeshift/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": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "peer": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jscodeshift/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "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==", - "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.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "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==", - "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==" - }, - "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==" - }, - "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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jss": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.9.2.tgz", - "integrity": "sha512-b8G6rWpYLR4teTUbGd4I4EsnWjg7MN0Q5bSsjKhVkJVjhQDy2KzkbD2AW3TuT0RYZVmZZHKIrXDn6kjU14qkUg==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "csstype": "^3.0.2", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/jss" - } - }, - "node_modules/jss-plugin-camel-case": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.2.tgz", - "integrity": "sha512-wgBPlL3WS0WDJ1lPJcgjux/SHnDuu7opmgQKSraKs4z8dCCyYMx9IDPFKBXQ8Q5dVYij1FFV0WdxyhuOOAXuTg==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "hyphenate-style-name": "^1.0.3", - "jss": "10.9.2" - } - }, - "node_modules/jss-plugin-default-unit": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.2.tgz", - "integrity": "sha512-pYg0QX3bBEFtTnmeSI3l7ad1vtHU42YEEpgW7pmIh+9pkWNWb5dwS/4onSfAaI0kq+dOZHzz4dWe+8vWnanoSg==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.9.2" - } - }, - "node_modules/jss-plugin-global": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.9.2.tgz", - "integrity": "sha512-GcX0aE8Ef6AtlasVrafg1DItlL/tWHoC4cGir4r3gegbWwF5ZOBYhx04gurPvWHC8F873aEGqge7C17xpwmp2g==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.9.2" - } - }, - "node_modules/jss-plugin-nested": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.9.2.tgz", - "integrity": "sha512-VgiOWIC6bvgDaAL97XCxGD0BxOKM0K0zeB/ECyNaVF6FqvdGB9KBBWRdy2STYAss4VVA7i5TbxFZN+WSX1kfQA==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.9.2", - "tiny-warning": "^1.0.2" - } - }, - "node_modules/jss-plugin-props-sort": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.2.tgz", - "integrity": "sha512-AP1AyUTbi2szylgr+O0OB7gkIxEGzySLITZ2GpsaoX72YMCGI2jYAc+WUhPfvUnZYiauF4zTnN4V4TGuvFjJlw==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.9.2" - } - }, - "node_modules/jss-plugin-rule-value-function": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.2.tgz", - "integrity": "sha512-vf5ms8zvLFMub6swbNxvzsurHfUZ5Shy5aJB2gIpY6WNA3uLinEcxYyraQXItRHi5ivXGqYciFDRM2ZoVoRZ4Q==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.9.2", - "tiny-warning": "^1.0.2" - } - }, - "node_modules/jss-plugin-vendor-prefixer": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.2.tgz", - "integrity": "sha512-SxcEoH+Rttf9fEv6KkiPzLdXRmI6waOTcMkbbEFgdZLDYNIP9UKNHFy6thhbRKqv0XMQZdrEsbDyV464zE/dUA==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "css-vendor": "^2.0.8", - "jss": "10.9.2" - } - }, - "node_modules/jss/node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/konva": { - "version": "8.3.14", - "resolved": "https://registry.npmjs.org/konva/-/konva-8.3.14.tgz", - "integrity": "sha512-6I/TZppgY3Frs//AvZ87YVQLFxLywitb8wLS3qMM+Ih9e4QcB5Yy8br6eq7DdUzxPdbsYTz1FQBHzNxs08M1Tw==", - "funding": [ - { - "type": "patreon", - "url": "https://www.patreon.com/lavrton" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/konva" - }, - { - "type": "github", - "url": "https://github.com/sponsors/lavrton" - } - ], - "peer": true - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "dependencies": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" - } - }, - "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==", - "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==", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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==" - }, - "node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "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==", - "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==", - "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-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "peer": true - }, - "node_modules/lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "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==" - }, - "node_modules/lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dependencies": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "node_modules/lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dependencies": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", - "peer": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "peer": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/logkitty": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", - "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", - "peer": true, - "dependencies": { - "ansi-fragments": "^0.2.1", - "dayjs": "^1.8.15", - "yargs": "^15.1.0" - }, - "bin": { - "logkitty": "bin/logkitty.js" - } - }, - "node_modules/loglevel": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", - "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "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/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowlight": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.11.0.tgz", - "integrity": "sha512-xrGGN6XLL7MbTMdPD6NfWPwY43SNkjf/d0mecSx/CW36fUZTjRHEq0/Cdug3TWKtRXLWi7iMl1eP0olYxj/a4A==", - "dependencies": { - "fault": "^1.0.2", - "highlight.js": "~9.13.0" - } - }, - "node_modules/lowlight/node_modules/highlight.js": { - "version": "9.13.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", - "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==", - "deprecated": "Version no longer supported. Upgrade to @latest", - "engines": { - "node": "*" - } - }, - "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==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", - "bin": { - "lz-string": "bin/bin.js" - } - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "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": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "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": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", - "peer": true - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "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==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/metro": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.72.3.tgz", - "integrity": "sha512-Hb3xTvPqex8kJ1hutQNZhQadUKUwmns/Du9GikmWKBFrkiG3k3xstGAyO5t5rN9JSUEzQT6y9SWzSSOGogUKIg==", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@babel/core": "^7.14.0", - "@babel/generator": "^7.14.0", - "@babel/parser": "^7.14.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.0.0", - "absolute-path": "^0.0.0", - "accepts": "^1.3.7", - "async": "^3.2.2", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "denodeify": "^1.2.1", - "error-stack-parser": "^2.0.6", - "fs-extra": "^1.0.0", - "graceful-fs": "^4.2.4", - "hermes-parser": "0.8.0", - "image-size": "^0.6.0", - "invariant": "^2.2.4", - "jest-worker": "^27.2.0", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.72.3", - "metro-cache": "0.72.3", - "metro-cache-key": "0.72.3", - "metro-config": "0.72.3", - "metro-core": "0.72.3", - "metro-file-map": "0.72.3", - "metro-hermes-compiler": "0.72.3", - "metro-inspector-proxy": "0.72.3", - "metro-minify-uglify": "0.72.3", - "metro-react-native-babel-preset": "0.72.3", - "metro-resolver": "0.72.3", - "metro-runtime": "0.72.3", - "metro-source-map": "0.72.3", - "metro-symbolicate": "0.72.3", - "metro-transform-plugins": "0.72.3", - "metro-transform-worker": "0.72.3", - "mime-types": "^2.1.27", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.1", - "rimraf": "^2.5.4", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "strip-ansi": "^6.0.0", - "temp": "0.8.3", - "throat": "^5.0.0", - "ws": "^7.5.1", - "yargs": "^15.3.1" - }, - "bin": { - "metro": "src/cli.js" - } - }, - "node_modules/metro-babel-transformer": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.72.3.tgz", - "integrity": "sha512-PTOR2zww0vJbWeeM3qN90WKENxCLzv9xrwWaNtwVlhcV8/diNdNe82sE1xIxLFI6OQuAVwNMv1Y7VsO2I7Ejrw==", - "peer": true, - "dependencies": { - "@babel/core": "^7.14.0", - "hermes-parser": "0.8.0", - "metro-source-map": "0.72.3", - "nullthrows": "^1.1.1" - } - }, - "node_modules/metro-cache": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.72.3.tgz", - "integrity": "sha512-++eyZzwkXvijWRV3CkDbueaXXGlVzH9GA52QWqTgAOgSHYp5jWaDwLQ8qpsMkQzpwSyIF4LLK9aI3eA7Xa132A==", - "peer": true, - "dependencies": { - "metro-core": "0.72.3", - "rimraf": "^2.5.4" - } - }, - "node_modules/metro-cache-key": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.72.3.tgz", - "integrity": "sha512-kQzmF5s3qMlzqkQcDwDxrOaVxJ2Bh6WRXWdzPnnhsq9LcD3B3cYqQbRBS+3tSuXmathb4gsOdhWslOuIsYS8Rg==", - "peer": true - }, - "node_modules/metro-cache/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/metro-config": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.72.3.tgz", - "integrity": "sha512-VEsAIVDkrIhgCByq8HKTWMBjJG6RlYwWSu1Gnv3PpHa0IyTjKJtB7wC02rbTjSaemcr82scldf2R+h6ygMEvsw==", - "peer": true, - "dependencies": { - "cosmiconfig": "^5.0.5", - "jest-validate": "^26.5.2", - "metro": "0.72.3", - "metro-cache": "0.72.3", - "metro-core": "0.72.3", - "metro-runtime": "0.72.3" - } - }, - "node_modules/metro-config/node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "peer": true, - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/metro-config/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "peer": true, - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/metro-config/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "peer": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/metro-config/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/metro-core": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.72.3.tgz", - "integrity": "sha512-KuYWBMmLB4+LxSMcZ1dmWabVExNCjZe3KysgoECAIV+wyIc2r4xANq15GhS94xYvX1+RqZrxU1pa0jQ5OK+/6A==", - "peer": true, - "dependencies": { - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.72.3" - } - }, - "node_modules/metro-file-map": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.72.3.tgz", - "integrity": "sha512-LhuRnuZ2i2uxkpFsz1XCDIQSixxBkBG7oICAFyLyEMDGbcfeY6/NexphfLdJLTghkaoJR5ARFMiIxUg9fIY/pA==", - "peer": true, - "dependencies": { - "abort-controller": "^3.0.0", - "anymatch": "^3.0.3", - "debug": "^2.2.0", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-regex-util": "^27.0.6", - "jest-serializer": "^27.0.6", - "jest-util": "^27.2.0", - "jest-worker": "^27.2.0", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/metro-file-map/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "peer": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro-file-map/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/metro-file-map/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro-file-map/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "peer": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro-file-map/node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "peer": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro-file-map/node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "peer": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/metro-file-map/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - }, - "node_modules/metro-hermes-compiler": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.72.3.tgz", - "integrity": "sha512-QWDQASMiXNW3j8uIQbzIzCdGYv5PpAX/ZiF4/lTWqKRWuhlkP4auhVY4eqdAKj5syPx45ggpjkVE0p8hAPDZYg==", - "peer": true - }, - "node_modules/metro-inspector-proxy": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.72.3.tgz", - "integrity": "sha512-UPFkaq2k93RaOi+eqqt7UUmqy2ywCkuxJLasQ55+xavTUS+TQSyeTnTczaYn+YKw+izLTLllGcvqnQcZiWYhGw==", - "peer": true, - "dependencies": { - "connect": "^3.6.5", - "debug": "^2.2.0", - "ws": "^7.5.1", - "yargs": "^15.3.1" - }, - "bin": { - "metro-inspector-proxy": "src/cli.js" - } - }, - "node_modules/metro-inspector-proxy/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro-inspector-proxy/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - }, - "node_modules/metro-minify-uglify": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.72.3.tgz", - "integrity": "sha512-dPXqtMI8TQcj0g7ZrdhC8X3mx3m3rtjtMuHKGIiEXH9CMBvrET8IwrgujQw2rkPcXiSiX8vFDbGMIlfxefDsKA==", - "peer": true, - "dependencies": { - "uglify-es": "^3.1.9" - } - }, - "node_modules/metro-react-native-babel-preset": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.72.3.tgz", - "integrity": "sha512-uJx9y/1NIqoYTp6ZW1osJ7U5ZrXGAJbOQ/Qzl05BdGYvN1S7Qmbzid6xOirgK0EIT0pJKEEh1s8qbassYZe4cw==", - "peer": true, - "dependencies": { - "@babel/core": "^7.14.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/metro-react-native-babel-preset/node_modules/react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro-react-native-babel-transformer": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.72.3.tgz", - "integrity": "sha512-Ogst/M6ujYrl/+9mpEWqE3zF7l2mTuftDTy3L8wZYwX1pWUQWQpfU1aJBeWiLxt1XlIq+uriRjKzKoRoIK57EA==", - "peer": true, - "dependencies": { - "@babel/core": "^7.14.0", - "babel-preset-fbjs": "^3.4.0", - "hermes-parser": "0.8.0", - "metro-babel-transformer": "0.72.3", - "metro-react-native-babel-preset": "0.72.3", - "metro-source-map": "0.72.3", - "nullthrows": "^1.1.1" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/metro-resolver": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.72.3.tgz", - "integrity": "sha512-wu9zSMGdxpKmfECE7FtCdpfC+vrWGTdVr57lDA0piKhZV6VN6acZIvqQ1yZKtS2WfKsngncv5VbB8Y5eHRQP3w==", - "peer": true, - "dependencies": { - "absolute-path": "^0.0.0" - } - }, - "node_modules/metro-runtime": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.72.3.tgz", - "integrity": "sha512-3MhvDKfxMg2u7dmTdpFOfdR71NgNNo4tzAyJumDVQKwnHYHN44f2QFZQqpPBEmqhWlojNeOxsqFsjYgeyMx6VA==", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.0.0", - "react-refresh": "^0.4.0" - } - }, - "node_modules/metro-runtime/node_modules/react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro-source-map": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.72.3.tgz", - "integrity": "sha512-eNtpjbjxSheXu/jYCIDrbNEKzMGOvYW6/ePYpRM7gDdEagUOqKOCsi3St8NJIQJzZCsxD2JZ2pYOiomUSkT1yQ==", - "peer": true, - "dependencies": { - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.0.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.72.3", - "nullthrows": "^1.1.1", - "ob1": "0.72.3", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - } - }, - "node_modules/metro-source-map/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro-symbolicate": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.72.3.tgz", - "integrity": "sha512-eXG0NX2PJzJ/jTG4q5yyYeN2dr1cUqUaY7worBB0SP5bRWRc3besfb+rXwfh49wTFiL5qR0oOawkU4ZiD4eHXw==", - "peer": true, - "dependencies": { - "invariant": "^2.2.4", - "metro-source-map": "0.72.3", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, - "engines": { - "node": ">=8.3" - } - }, - "node_modules/metro-symbolicate/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro-transform-plugins": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.72.3.tgz", - "integrity": "sha512-D+TcUvCKZbRua1+qujE0wV1onZvslW6cVTs7dLCyC2pv20lNHjFr1GtW01jN2fyKR2PcRyMjDCppFd9VwDKnSg==", - "peer": true, - "dependencies": { - "@babel/core": "^7.14.0", - "@babel/generator": "^7.14.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.14.0", - "nullthrows": "^1.1.1" - } - }, - "node_modules/metro-transform-worker": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.72.3.tgz", - "integrity": "sha512-WsuWj9H7i6cHuJuy+BgbWht9DK5FOgJxHLGAyULD5FJdTG9rSMFaHDO5WfC0OwQU5h4w6cPT40iDuEGksM7+YQ==", - "peer": true, - "dependencies": { - "@babel/core": "^7.14.0", - "@babel/generator": "^7.14.0", - "@babel/parser": "^7.14.0", - "@babel/types": "^7.0.0", - "babel-preset-fbjs": "^3.4.0", - "metro": "0.72.3", - "metro-babel-transformer": "0.72.3", - "metro-cache": "0.72.3", - "metro-cache-key": "0.72.3", - "metro-hermes-compiler": "0.72.3", - "metro-source-map": "0.72.3", - "metro-transform-plugins": "0.72.3", - "nullthrows": "^1.1.1" - } - }, - "node_modules/metro/node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "peer": true - }, - "node_modules/metro/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==", - "peer": true - }, - "node_modules/metro/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro/node_modules/fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==", - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" - } - }, - "node_modules/metro/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/metro/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - }, - "node_modules/metro/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/metro/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.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==", - "engines": { - "node": ">=6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz", - "integrity": "sha512-n9BA8LonkOkW1/zn+IbLPQmovsL0wMb9yx75fMJQZf2X1Zoec9yTZtyMePcyu19wPkmFbzZZA6fLTotpFhQsOA==", - "dependencies": { - "loader-utils": "^1.1.0", - "normalize-url": "1.9.1", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/mini-css-extract-plugin/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==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "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==", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "node_modules/move-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "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==" - }, - "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dependencies": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==" - }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "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==", - "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/native-url": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.2.6.tgz", - "integrity": "sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA==", - "dependencies": { - "querystring": "^0.2.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "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==" - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/nocache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", - "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", - "peer": true, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "peer": true, - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, - "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==", - "peer": true, - "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": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "peer": true - }, - "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": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "peer": true - }, - "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": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "peer": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - }, - "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==", - "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-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" - }, - "node_modules/node-stream-zip": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", - "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", - "peer": true, - "engines": { - "node": ">=0.12.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/antelle" - } - }, - "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==", - "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==", - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", - "dependencies": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "peer": true - }, - "node_modules/num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==" - }, - "node_modules/nwsapi": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", - "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==" - }, - "node_modules/ob1": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.72.3.tgz", - "integrity": "sha512-OnVto25Sj7Ghp0vVm2THsngdze3tVq0LOg9LUHsAVXMecpqOP0Y8zaATW8M9gEgs2lNEAcCqV0P/hlmOPhVRvg==", - "peer": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "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": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "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==", - "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==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "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": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "dependencies": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.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": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "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==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/opn/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/optimize-css-assets-webpack-plugin": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz", - "integrity": "sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A==", - "dependencies": { - "cssnano": "^4.1.10", - "last-call-webpack-plugin": "^3.0.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "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/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "peer": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "peer": true, - "engines": { - "node": ">=0.10.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==", - "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": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "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==", - "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==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dependencies": { - "retry": "^0.12.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "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==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", - "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "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==", - "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/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" - }, - "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==", - "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "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==", - "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==" - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-to-regexp/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "dependencies": { - "ts-pnp": "^1.1.6" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pointer-events-polyfill": { - "version": "0.4.4-pre", - "resolved": "https://registry.npmjs.org/pointer-events-polyfill/-/pointer-events-polyfill-0.4.4-pre.tgz", - "integrity": "sha512-t7iitVY5jW9mGOFZEHphJOzB8eMhoYaE6I5HqsUX14rjsPa9F6OlMOCj3EpqDzNb/8XtMk2BxMpOyePPyuefHw==", - "peer": true - }, - "node_modules/popper.js": { - "version": "1.16.1-lts", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz", - "integrity": "sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==" - }, - "node_modules/portfinder": { - "version": "1.0.32", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", - "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", - "dependencies": { - "async": "^2.6.4", - "debug": "^3.2.7", - "mkdirp": "^0.5.6" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "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": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^6.0.2" - } - }, - "node_modules/postcss-browser-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz", - "integrity": "sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig==", - "dependencies": { - "postcss": "^7" - }, - "engines": { - "node": ">=8.0.0" - }, - "peerDependencies": { - "browserslist": "^4" - } - }, - "node_modules/postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", - "dependencies": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", - "dependencies": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", - "dependencies": { - "postcss": "^7.0.14", - "postcss-values-parser": "^2.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", - "dependencies": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dependencies": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-colormin/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", - "dependencies": { - "postcss": "^7.0.14" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", - "dependencies": { - "postcss": "^7.0.17", - "postcss-values-parser": "^2.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-custom-selectors/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", - "dependencies": { - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-flexbugs-fixes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", - "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", - "dependencies": { - "postcss": "^7.0.26" - } - }, - "node_modules/postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-font-variant": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", - "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", - "dependencies": { - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-initial": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", - "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", - "dependencies": { - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", - "dependencies": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", - "dependencies": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-load-config/node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-load-config/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-load-config/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-load-config/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", - "dependencies": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/postcss-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==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-loader/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "dependencies": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "dependencies": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dependencies": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "dependencies": { - "postcss": "^7.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "dependencies": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "dependencies": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "dependencies": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "node_modules/postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-normalize": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-8.0.1.tgz", - "integrity": "sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ==", - "dependencies": { - "@csstools/normalize.css": "^10.1.0", - "browserslist": "^4.6.2", - "postcss": "^7.0.17", - "postcss-browser-comments": "^3.0.0", - "sanitize.css": "^10.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "dependencies": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "dependencies": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-url/node_modules/normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "dependencies": { - "postcss": "^7.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", - "dependencies": { - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "dependencies": { - "autoprefixer": "^9.6.1", - "browserslist": "^4.6.4", - "caniuse-lite": "^1.0.30000981", - "css-blank-pseudo": "^0.1.4", - "css-has-pseudo": "^0.10.0", - "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.4.0", - "postcss": "^7.0.17", - "postcss-attribute-case-insensitive": "^4.0.1", - "postcss-color-functional-notation": "^2.0.1", - "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.3", - "postcss-color-mod-function": "^3.0.3", - "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.8", - "postcss-custom-properties": "^8.0.11", - "postcss-custom-selectors": "^5.1.2", - "postcss-dir-pseudo-class": "^5.0.0", - "postcss-double-position-gradients": "^1.0.0", - "postcss-env-function": "^2.0.2", - "postcss-focus-visible": "^4.0.0", - "postcss-focus-within": "^3.0.0", - "postcss-font-variant": "^4.0.0", - "postcss-gap-properties": "^2.0.0", - "postcss-image-set-function": "^3.0.1", - "postcss-initial": "^3.0.0", - "postcss-lab-function": "^2.0.1", - "postcss-logical": "^3.0.0", - "postcss-media-minmax": "^4.0.0", - "postcss-nesting": "^7.0.0", - "postcss-overflow-shorthand": "^2.0.0", - "postcss-page-break": "^2.0.0", - "postcss-place": "^4.0.1", - "postcss-pseudo-class-any-link": "^6.0.0", - "postcss-replace-overflow-wrap": "^3.0.0", - "postcss-selector-matches": "^4.0.0", - "postcss-selector-not": "^4.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", - "dependencies": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "dependencies": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", - "dependencies": { - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-safe-parser": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-5.0.2.tgz", - "integrity": "sha512-jDUfCPJbKOABhwpUKcqCVbbXiloe/QXMcbJ6Iipf3sDIihEzTqRCeMBfRaOHxhBuTYqtASrI1KJWxzztZU4qUQ==", - "dependencies": { - "postcss": "^8.1.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-safe-parser/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/postcss-safe-parser/node_modules/postcss": { - "version": "8.4.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", - "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", - "dependencies": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-selector-not": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", - "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", - "dependencies": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", - "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-svgo/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "node_modules/postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "dependencies": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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==" - }, - "node_modules/postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", - "dependencies": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=6.14.4" - } - }, - "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==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "peer": true, - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "engines": { - "node": ">=6" - } - }, - "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==", - "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==" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - }, - "node_modules/prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "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/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "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==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "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/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", - "dependencies": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/querystring": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", - "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "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/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "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/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/rafz": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/rafz/-/rafz-0.1.14.tgz", - "integrity": "sha512-YiQkedSt1urYtYbvHhTQR3l67M8SZbUvga5eJFM/v4vx/GmDdtXlE2hjJIyRjhhO/PjcdGC+CXCYOUA4onit8w==" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "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-app-polyfill": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-2.0.0.tgz", - "integrity": "sha512-0sF4ny9v/B7s6aoehwze9vJNWcmCemAUYBVasscVr92+UYiEqDXOxfKjXN685mDaMRNF3WdhHQs76oTODMocFA==", - "dependencies": { - "core-js": "^3.6.5", - "object-assign": "^4.1.1", - "promise": "^8.1.0", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.7", - "whatwg-fetch": "^3.4.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-dev-utils": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", - "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", - "dependencies": { - "@babel/code-frame": "7.10.4", - "address": "1.1.2", - "browserslist": "4.14.2", - "chalk": "2.4.2", - "cross-spawn": "7.0.3", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.1.0", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "4.1.6", - "global-modules": "2.0.0", - "globby": "11.0.1", - "gzip-size": "5.1.1", - "immer": "8.0.1", - "is-root": "2.1.0", - "loader-utils": "2.0.0", - "open": "^7.0.2", - "pkg-up": "3.1.0", - "prompts": "2.4.0", - "react-error-overlay": "^6.0.9", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-dev-utils/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/react-dev-utils/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==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/react-dev-utils/node_modules/browserslist": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", - "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", - "dependencies": { - "caniuse-lite": "^1.0.30001125", - "electron-to-chromium": "^1.3.564", - "escalade": "^3.0.2", - "node-releases": "^1.1.61" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - }, - "node_modules/react-dev-utils/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==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/react-dev-utils/node_modules/chalk/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/react-dev-utils/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==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/react-dev-utils/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/react-dev-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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/react-dev-utils/node_modules/node-releases": { - "version": "1.1.77", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", - "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==" - }, - "node_modules/react-dev-utils/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/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==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/react-devtools-core": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.24.0.tgz", - "integrity": "sha512-Rw7FzYOOzcfyUPaAm9P3g0tFdGqGq2LLiAI+wjYcp6CsF3DeeMrRS3HZAho4s273C29G/DJhx0e8BpRE/QZNGg==", - "peer": true, - "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "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-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "node_modules/react-hook-form": { - "version": "7.39.4", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.39.4.tgz", - "integrity": "sha512-B0e78r9kR9L2M4A4AXGbHoA/vyv34sB/n8QWJAw33TFz8f5t9helBbYAeqnbvcQf1EYzJxKX/bGQQh9K+evCyQ==", - "engines": { - "node": ">=12.22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/react-hook-form" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18" - } - }, - "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==" - }, - "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-native-codegen": { - "version": "0.70.6", - "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.70.6.tgz", - "integrity": "sha512-kdwIhH2hi+cFnG5Nb8Ji2JwmcCxnaOOo9440ov7XDzSvGfmUStnCzl+MCW8jLjqHcE4icT7N9y+xx4f50vfBTw==", - "peer": true, - "dependencies": { - "@babel/parser": "^7.14.0", - "flow-parser": "^0.121.0", - "jscodeshift": "^0.13.1", - "nullthrows": "^1.1.1" - } - }, - "node_modules/react-native-gradle-plugin": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.70.3.tgz", - "integrity": "sha512-oOanj84fJEXUg9FoEAQomA8ISG+DVIrTZ3qF7m69VQUJyOGYyDZmPqKcjvRku4KXlEH6hWO9i4ACLzNBh8gC0A==", - "peer": true - }, - "node_modules/react-refresh": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", - "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router/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/react-scripts": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-4.0.3.tgz", - "integrity": "sha512-S5eO4vjUzUisvkIPB7jVsKtuH2HhWcASREYWHAQ1FP5HyCv3xgn+wpILAEWkmy+A+tTNbSZClhxjT3qz6g4L1A==", - "dependencies": { - "@babel/core": "7.12.3", - "@pmmmwh/react-refresh-webpack-plugin": "0.4.3", - "@svgr/webpack": "5.5.0", - "@typescript-eslint/eslint-plugin": "^4.5.0", - "@typescript-eslint/parser": "^4.5.0", - "babel-eslint": "^10.1.0", - "babel-jest": "^26.6.0", - "babel-loader": "8.1.0", - "babel-plugin-named-asset-import": "^0.3.7", - "babel-preset-react-app": "^10.0.0", - "bfj": "^7.0.2", - "camelcase": "^6.1.0", - "case-sensitive-paths-webpack-plugin": "2.3.0", - "css-loader": "4.3.0", - "dotenv": "8.2.0", - "dotenv-expand": "5.1.0", - "eslint": "^7.11.0", - "eslint-config-react-app": "^6.0.0", - "eslint-plugin-flowtype": "^5.2.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jest": "^24.1.0", - "eslint-plugin-jsx-a11y": "^6.3.1", - "eslint-plugin-react": "^7.21.5", - "eslint-plugin-react-hooks": "^4.2.0", - "eslint-plugin-testing-library": "^3.9.2", - "eslint-webpack-plugin": "^2.5.2", - "file-loader": "6.1.1", - "fs-extra": "^9.0.1", - "html-webpack-plugin": "4.5.0", - "identity-obj-proxy": "3.0.0", - "jest": "26.6.0", - "jest-circus": "26.6.0", - "jest-resolve": "26.6.0", - "jest-watch-typeahead": "0.6.1", - "mini-css-extract-plugin": "0.11.3", - "optimize-css-assets-webpack-plugin": "5.0.4", - "pnp-webpack-plugin": "1.6.4", - "postcss-flexbugs-fixes": "4.2.1", - "postcss-loader": "3.0.0", - "postcss-normalize": "8.0.1", - "postcss-preset-env": "6.7.0", - "postcss-safe-parser": "5.0.2", - "prompts": "2.4.0", - "react-app-polyfill": "^2.0.0", - "react-dev-utils": "^11.0.3", - "react-refresh": "^0.8.3", - "resolve": "1.18.1", - "resolve-url-loader": "^3.1.2", - "sass-loader": "^10.0.5", - "semver": "7.3.2", - "style-loader": "1.3.0", - "terser-webpack-plugin": "4.2.3", - "ts-pnp": "1.2.0", - "url-loader": "4.1.1", - "webpack": "4.44.2", - "webpack-dev-server": "3.11.1", - "webpack-manifest-plugin": "2.2.0", - "workbox-webpack-plugin": "5.1.4" - }, - "bin": { - "react-scripts": "bin/react-scripts.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.1.3" - }, - "peerDependencies": { - "react": ">= 16", - "typescript": "^3.2.1 || ^4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/react-scripts/node_modules/@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.3", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/react-scripts/node_modules/@babel/core/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/react-scripts/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-shallow-renderer": { - "version": "16.15.0", - "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", - "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", - "peer": true, - "dependencies": { - "object-assign": "^4.1.1", - "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-spring": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/react-spring/-/react-spring-9.1.2.tgz", - "integrity": "sha512-xLmkierisElCQShCqAH3PpepjHhCyOK1wGSTdpvG7GGD+SbfG4Sac7wj6wrKTT5A5NUFM5OnVQUXZLe5HScIfA==", - "dependencies": { - "@react-spring/core": "~9.1.2", - "@react-spring/konva": "~9.1.2", - "@react-spring/native": "~9.1.2", - "@react-spring/three": "~9.1.2", - "@react-spring/web": "~9.1.2", - "@react-spring/zdog": "~9.1.2" - } - }, - "node_modules/react-spring/node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "peer": 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/react-spring/node_modules/@react-spring/konva": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/konva/-/konva-9.1.2.tgz", - "integrity": "sha512-P60mhUHRYgPPhoTBQWzuzD3hfeCFWC0BQ7N0iHzpMTzDIrAvutyg+iAX59jSXo3yatrcx60NmlCsiG8tRxbw6w==", - "dependencies": { - "@react-spring/animated": "~9.1.2", - "@react-spring/core": "~9.1.2", - "@react-spring/shared": "~9.1.2", - "@react-spring/types": "~9.1.2" - }, - "peerDependencies": { - "konva": ">=2.6", - "react": ">=16.8", - "react-konva": ">=16.8" - } - }, - "node_modules/react-spring/node_modules/@react-spring/native": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/native/-/native-9.1.2.tgz", - "integrity": "sha512-d7+tCoKAnDPSoVtpyFFm4BWQhn1h833ocdP0d2POZzKTcR1iQ8YI7EQ22iKGLvwH+0vjymde039CgYy31INqWQ==", - "dependencies": { - "@react-spring/animated": "~9.1.2", - "@react-spring/core": "~9.1.2", - "@react-spring/shared": "~9.1.2", - "@react-spring/types": "~9.1.2" - }, - "peerDependencies": { - "react": ">=16.8", - "react-native": ">=0.58" - } - }, - "node_modules/react-spring/node_modules/@react-spring/three": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/three/-/three-9.1.2.tgz", - "integrity": "sha512-d/v94ykmfJGLTJxJ+jxlTAJSfFdD+SSf+yvXReS81hc7+9VYeEwIHVIEKOzckYnPy/MEOSVhIVKF/9wdFIIo6g==", - "dependencies": { - "@react-spring/animated": "~9.1.2", - "@react-spring/core": "~9.1.2", - "@react-spring/shared": "~9.1.2", - "@react-spring/types": "~9.1.2" - }, - "peerDependencies": { - "@react-three/fiber": ">=6.0", - "react": ">=16.11", - "three": ">=0.126" - } - }, - "node_modules/react-spring/node_modules/@react-three/fiber": { - "version": "8.9.1", - "resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-8.9.1.tgz", - "integrity": "sha512-xRMO9RGp0DkxSFu5BmmkjCxJ4r0dEpLobtxXdZwI0h2rZZaCnkPM5zThRN8xaZNbZhzRSVICeNOFaZltr9xFyQ==", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.17.8", - "@types/react-reconciler": "^0.26.7", - "its-fine": "^1.0.6", - "react-reconciler": "^0.27.0", - "react-use-measure": "^2.1.1", - "scheduler": "^0.21.0", - "suspend-react": "^0.0.8", - "zustand": "^3.7.1" - }, - "peerDependencies": { - "expo": ">=43.0", - "expo-asset": ">=8.4", - "expo-gl": ">=11.0", - "react": ">=18.0", - "react-dom": ">=18.0", - "react-native": ">=0.64", - "three": ">=0.133" - }, - "peerDependenciesMeta": { - "expo": { - "optional": true - }, - "expo-asset": { - "optional": true - }, - "expo-gl": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, - "node_modules/react-spring/node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "peer": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/react-spring/node_modules/its-fine": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-1.0.6.tgz", - "integrity": "sha512-VZJZPwVT2kxe5KQv+TxCjojfLiUIut8zXDNLTxcM7gJ/xQ/bSPk5M0neZ+j3myy45KKkltY1mm1jyJgx3Fxsdg==", - "peer": true, - "dependencies": { - "@types/react-reconciler": "^0.28.0" - }, - "peerDependencies": { - "react": ">=18.0" - } - }, - "node_modules/react-spring/node_modules/its-fine/node_modules/@types/react-reconciler": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.0.tgz", - "integrity": "sha512-5cjk9ottZAj7eaTsqzPUIlrVbh3hBAO2YaEL1rkjHKB3xNAId7oU8GhzvAX+gfmlfoxTwJnBjPxEHyxkEA1Ffg==", - "peer": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/react-spring/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==", - "peer": 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/react-spring/node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-spring/node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-spring/node_modules/react-dom/node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/react-spring/node_modules/react-konva": { - "version": "18.2.3", - "resolved": "https://registry.npmjs.org/react-konva/-/react-konva-18.2.3.tgz", - "integrity": "sha512-OPxjBTgaEGU9pt/VJSVM7QNXYHEZ5CkulX+4fTTvbaH+Wh+vMLbXmH3yjWw4kT/5Qi6t0UQKHPPmirCv8/9sdg==", - "funding": [ - { - "type": "patreon", - "url": "https://www.patreon.com/lavrton" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/konva" - }, - { - "type": "github", - "url": "https://github.com/sponsors/lavrton" - } - ], - "peer": true, - "dependencies": { - "its-fine": "^1.0.6", - "react-reconciler": "~0.29.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "konva": "^8.0.1 || ^7.2.5", - "react": ">=18.0.0", - "react-dom": ">=18.0.0" - } - }, - "node_modules/react-spring/node_modules/react-konva/node_modules/react-reconciler": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.29.0.tgz", - "integrity": "sha512-wa0fGj7Zht1EYMRhKWwoo1H9GApxYLBuhoAuXN0TlltESAjDssB+Apf0T/DngVqaMyPypDmabL37vw/2aRM98Q==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-spring/node_modules/react-konva/node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/react-spring/node_modules/react-native": { - "version": "0.70.6", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.70.6.tgz", - "integrity": "sha512-xtQdImPHnwgraEx3HIZFOF+D1hJ9bC5mfpIdUGoMHRws6OmvHAjmFpO6qfdnaQ29vwbmZRq7yf14sbury74R/w==", - "peer": true, - "dependencies": { - "@jest/create-cache-key-function": "^27.0.1", - "@react-native-community/cli": "9.3.2", - "@react-native-community/cli-platform-android": "9.3.1", - "@react-native-community/cli-platform-ios": "9.3.0", - "@react-native/assets": "1.0.0", - "@react-native/normalize-color": "2.0.0", - "@react-native/polyfills": "2.0.0", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "base64-js": "^1.1.2", - "event-target-shim": "^5.0.1", - "invariant": "^2.2.4", - "jsc-android": "^250230.2.1", - "memoize-one": "^5.0.0", - "metro-react-native-babel-transformer": "0.72.3", - "metro-runtime": "0.72.3", - "metro-source-map": "0.72.3", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1", - "pretty-format": "^26.5.2", - "promise": "^8.3.0", - "react-devtools-core": "4.24.0", - "react-native-codegen": "^0.70.6", - "react-native-gradle-plugin": "^0.70.3", - "react-refresh": "^0.4.0", - "react-shallow-renderer": "^16.15.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "^0.22.0", - "stacktrace-parser": "^0.1.3", - "use-sync-external-store": "^1.0.0", - "whatwg-fetch": "^3.0.0", - "ws": "^6.1.4" - }, - "bin": { - "react-native": "cli.js" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "18.1.0" - } - }, - "node_modules/react-spring/node_modules/react-native/node_modules/scheduler": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz", - "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/react-spring/node_modules/react-reconciler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.27.0.tgz", - "integrity": "sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.21.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "react": "^18.0.0" - } - }, - "node_modules/react-spring/node_modules/react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-spring/node_modules/scheduler": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz", - "integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/react-spring/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "peer": true, - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/react-syntax-highlighter": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-11.0.3.tgz", - "integrity": "sha512-0v0ET2qn9oAam4K/Te9Q/2jtS4R2d6wUFqgk5VcxrCBm+4MB5BE+oQf2CA0RanUHbYaYFuagt/AugICU87ufxQ==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "highlight.js": "~9.18.2", - "lowlight": "~1.11.0", - "prismjs": "^1.8.4", - "refractor": "^2.4.1" - }, - "peerDependencies": { - "react": ">= 0.14.0" - } - }, - "node_modules/react-token-auth": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/react-token-auth/-/react-token-auth-1.1.9.tgz", - "integrity": "sha512-AtC87tdURl7+o3j3GYS9hYho9PEAG9KjctQ3FPkgiSftGl4qC3AK+jYYByKxphGbBJaV3eOt7rAbR3ApWVQXVg==" - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/react-use-measure": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.1.tgz", - "integrity": "sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==", - "peer": true, - "dependencies": { - "debounce": "^1.2.1" - }, - "peerDependencies": { - "react": ">=16.13", - "react-dom": ">=16.13" - } - }, - "node_modules/react-zdog": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/react-zdog/-/react-zdog-1.0.11.tgz", - "integrity": "sha512-L6/8Zi+Nf+faNMsSZ31HLmLlu6jcbs/jqqFvme7CFnYjAeYfhJ4HyuHKd7Pu/zk9tegv6FaJj1v+hmUwUpKLQw==", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.4.4", - "lodash-es": "^4.17.11", - "pointer-events-polyfill": "^0.4.4-pre", - "react-reconciler": "^0.20.4", - "resize-observer-polyfill": "^1.5.1", - "scheduler": "0.13.3" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8", - "zdog": ">=1.1" - } - }, - "node_modules/react-zdog/node_modules/react-reconciler": { - "version": "0.20.4", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.20.4.tgz", - "integrity": "sha512-kxERc4H32zV2lXMg/iMiwQHOtyqf15qojvkcZ5Ja2CPkjVohHw9k70pdDBwrnQhLVetUJBSYyqU3yqrlVTOajA==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "react": "^16.0.0" - } - }, - "node_modules/react-zdog/node_modules/react-reconciler/node_modules/scheduler": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", - "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/react-zdog/node_modules/scheduler": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.3.tgz", - "integrity": "sha512-UxN5QRYWtpR1egNWzJcVLk8jlegxAugswQc984lD3kU7NuobsO37/sRfbpTdBjtnD5TBNFA2Q2oLV5+UmPSmEQ==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "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==", - "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": { - "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==", - "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/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "engines": { - "node": ">=8" - } - }, - "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==", - "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==", - "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/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/readable-stream/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==" - }, - "node_modules/readable-stream/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==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "optional": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readline": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", - "peer": true - }, - "node_modules/recast": { - "version": "0.20.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", - "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", - "peer": true, - "dependencies": { - "ast-types": "0.14.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "dependencies": { - "minimatch": "3.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/recursive-readdir/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/refractor": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/refractor/-/refractor-2.10.1.tgz", - "integrity": "sha512-Xh9o7hQiQlDbxo5/XkOX6H+x/q8rmlmZKr97Ie1Q8ZM32IRRd3B/UxuA/yXDW79DBSXGWxm2yRTbcTVmAciJRw==", - "dependencies": { - "hastscript": "^5.0.0", - "parse-entities": "^1.1.2", - "prismjs": "~1.17.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/node_modules/prismjs": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.17.1.tgz", - "integrity": "sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q==", - "optionalDependencies": { - "clipboard": "^2.0.0" - } - }, - "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==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "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==", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" - }, - "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==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "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": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "engines": { - "node": ">= 0.10" - } - }, - "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": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" - }, - "node_modules/renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - } - }, - "node_modules/renderkid/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/renderkid/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "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": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "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": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "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==", - "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==" - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/reselect": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", - "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==" - }, - "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.18.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", - "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", - "dependencies": { - "is-core-module": "^2.0.0", - "path-parse": "^1.0.6" - }, - "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==", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" - }, - "node_modules/resolve-url-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.4.tgz", - "integrity": "sha512-D3sQ04o0eeQEySLrcz4DsX3saHfsr8/N6tfhblxgZKXxMT2Louargg12oGNfoTRLV09GXhVUe5/qgA5vdgNigg==", - "dependencies": { - "adjust-sourcemap-loader": "3.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.36", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/resolve-url-loader/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==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/resolve-url-loader/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==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader/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==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader/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==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/resolve-url-loader/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/resolve-url-loader/node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/resolve-url-loader/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve-url-loader/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/resolve-url-loader/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/resolve-url-loader/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==" - }, - "node_modules/resolve-url-loader/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "peer": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha512-eEjL8FdkdsxApd0yWVZgBGzfCQiT8yqSc2H1p4jpZpQdtz7ohETiDMoje5PlM8I9WgkqkreVxFUKYOiJdVWDXw==", - "dependencies": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" - } - }, - "node_modules/rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha512-W6V2fix7nCLUYX1v6eGPrBOZlc03/faqzP4sUxMAJMBMOPYhfV/RyLegTufn5gJKaOITyi+gvf0LXDZ9NzkHnQ==" - }, - "node_modules/rework/node_modules/convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha512-+4nRk0k3oEpwUB7/CalD7xE2z4VmtEnnq0GO2IPTkrooTrAhEsWvuLF5iWP1dXrwluki/azwXV1ve7gtYuPldg==" - }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==" - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rollup": { - "version": "1.32.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", - "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", - "dependencies": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - }, - "bin": { - "rollup": "dist/bin/rollup" - } - }, - "node_modules/rollup-plugin-babel": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", - "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-babel.", - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "rollup-pluginutils": "^2.8.1" - }, - "peerDependencies": { - "@babel/core": "7 || ^7.0.0-rc.2", - "rollup": ">=0.60.0 <3" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz", - "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==", - "dependencies": { - "@babel/code-frame": "^7.5.5", - "jest-worker": "^24.9.0", - "rollup-pluginutils": "^2.8.2", - "serialize-javascript": "^4.0.0", - "terser": "^4.6.2" - }, - "peerDependencies": { - "rollup": ">=0.66.0 <3" - } - }, - "node_modules/rollup-plugin-terser/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dependencies": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/rollup-pluginutils/node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "dependencies": { - "aproba": "^1.1.1" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "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/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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", - "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==", - "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==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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==", - "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==", - "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": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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==", - "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": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "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": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "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==", - "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": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "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": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "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": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "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==", - "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": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "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": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "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": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "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==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/sanitize.css": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-10.0.0.tgz", - "integrity": "sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg==" - }, - "node_modules/sass-loader": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.4.1.tgz", - "integrity": "sha512-aX/iJZTTpNUNx/OSYzo2KsjIUQHqvWsAhhUijFjAPdZTEhstjZI9zTNvkTTwsx+uNUJqUwOw5gacxQMx4hJxGQ==", - "dependencies": { - "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "sass": "^1.3.0", - "webpack": "^4.36.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/sass-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==", - "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/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "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==", - "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/select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==", - "optional": true - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "node_modules/selfsigned": { - "version": "1.10.14", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", - "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", - "dependencies": { - "node-forge": "^0.10.0" - } - }, - "node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serialize-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", - "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "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==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "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==", - "peer": 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==", - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "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==", - "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.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "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==", - "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/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "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==", - "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": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "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==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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==", - "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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==", - "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": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "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==", - "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs-client": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.6.1.tgz", - "integrity": "sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==", - "dependencies": { - "debug": "^3.2.7", - "eventsource": "^2.0.2", - "faye-websocket": "^0.11.4", - "inherits": "^2.0.4", - "url-parse": "^1.5.10" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://tidelift.com/funding/github/npm/sockjs-client" - } - }, - "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==" - }, - "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==", - "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-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", - "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==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.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" - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "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==" - }, - "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==", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/spdy-transport/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==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "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==", - "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": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "peer": true, - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "peer": 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": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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==", - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.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==", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" - }, - "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-width/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/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-comments": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", - "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", - "dependencies": { - "babel-extract-comments": "^1.0.0", - "babel-plugin-transform-object-rest-spread": "^6.26.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "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==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "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==", - "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/stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/stylehacks/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sudo-prompt": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", - "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", - "peer": true - }, - "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==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "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==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/suspend-react": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/suspend-react/-/suspend-react-0.0.8.tgz", - "integrity": "sha512-ZC3r8Hu1y0dIThzsGw0RLZplnX9yXwfItcvaIzJc2VQVi8TGyGDlu92syMB5ulybfvGLHAI5Ghzlk23UBPF8xg==", - "peer": true, - "peerDependencies": { - "react": ">=17.0" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/svgo/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==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/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==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/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==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/svgo/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/svgo/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==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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==" - }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "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==" - }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.1.12", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", - "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/temp": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", - "integrity": "sha512-jtnWJs6B1cZlHs9wPG7BrowKxZw/rf6+UpGAkr8AaYmiTyTO7zQlLoST8zx/8TcUPnZmeBoB+H8ARuHZaSijVw==", - "engines": [ - "node >=0.8.0" - ], - "peer": true, - "dependencies": { - "os-tmpdir": "^1.0.0", - "rimraf": "~2.2.6" - } - }, - "node_modules/temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha512-R5KMKHnPAQaZMqLOsyuyUmcIjSeDm+73eoqQpaXA7AZ22BL+6C+1mcUscgOsNd8WVlJuvlgAPsegcx7pjlV0Dg==", - "peer": true, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/tempy": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", - "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", - "dependencies": { - "temp-dir": "^1.0.0", - "type-fest": "^0.3.1", - "unique-string": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "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==", - "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": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", - "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", - "dependencies": { - "cacache": "^15.0.5", - "find-cache-dir": "^3.3.1", - "jest-worker": "^26.5.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.3.4", - "webpack-sources": "^1.4.3" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/terser-webpack-plugin/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/terser-webpack-plugin/node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/terser-webpack-plugin/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==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/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==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser-webpack-plugin/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser-webpack-plugin/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==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/terser-webpack-plugin/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==", - "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/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "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==" - }, - "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==", - "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": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/three": { - "version": "0.146.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.146.0.tgz", - "integrity": "sha512-1lvNfLezN6OJ9NaFAhfX4sm5e9YCzHtaRgZ1+B4C+Hv6TibRMsuBAM5/wVKzxjpYIlMymvgsHEFrrigEfXnb2A==", - "peer": true - }, - "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==" - }, - "node_modules/tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "optional": true - }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==" - }, - "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": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "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": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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==", - "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==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" - }, - "node_modules/ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", - "engines": { - "node": ">=6" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "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/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "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==", - "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==", - "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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "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==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "deprecated": "support for ECMAScript is superseded by `uglify-js` as of v3.13.0", - "peer": true, - "dependencies": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uglify-es/node_modules/commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "peer": true - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "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==", - "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.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "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==", - "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": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==" - }, - "node_modules/uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==" - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", - "dependencies": { - "crypto-random-string": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "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": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "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": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "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": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-browserslist-db/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/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": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated" - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-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==", - "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/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": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" - }, - "node_modules/url/node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "peer": true, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dependencies": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "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==", - "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==" - }, - "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==", - "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.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "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==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/vlq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", - "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", - "peer": true - }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "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==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "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==", - "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==", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" - } - }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "optional": true, - "dependencies": { - "chokidar": "^2.1.8" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "optional": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "optional": 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/watchpack-chokidar2/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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "optional": 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/watchpack-chokidar2/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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "optional": 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/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/watchpack-chokidar2/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": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "peer": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web-vitals": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-1.1.2.tgz", - "integrity": "sha512-PFMKIY+bRSXlMxVAQ+m2aw9c/ioUYfDgrYot0YUa+/xa0sakubWhSDyxAKwzymvXVdF4CZI71g06W+mqhzu6ig==" - }, - "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==", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - }, - "webpack-command": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "dependencies": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack-dev-server": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz", - "integrity": "sha512-u4R3mRzZkbxQVa+MBWi2uVpB5W59H3ekZAJsQlKUTdl7Elcah2EhygTPLmeFXybQkf9i2+L0kn7ik9SnXa6ihQ==", - "dependencies": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 6.11.5" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/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==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/webpack-dev-server/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/webpack-dev-server/node_modules/cliui/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/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==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/webpack-dev-server/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/webpack-dev-server/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "node_modules/webpack-dev-server/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dependencies": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/webpack-dev-server/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/webpack-dev-server/node_modules/resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==", - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack-dev-server/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/webpack-dev-server/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/string-width/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/string-width/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/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": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/webpack-dev-server/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dependencies": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-log/node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-log/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/webpack-manifest-plugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz", - "integrity": "sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ==", - "dependencies": { - "fs-extra": "^7.0.0", - "lodash": ">=3.5 <5", - "object.entries": "^1.1.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.11.5" - }, - "peerDependencies": { - "webpack": "2 || 3 || 4" - } - }, - "node_modules/webpack-manifest-plugin/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==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/webpack-manifest-plugin/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/webpack-manifest-plugin/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==", - "engines": { - "node": ">= 4.0.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==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "node_modules/webpack/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/webpack/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/webpack/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==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/webpack/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/webpack/node_modules/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dependencies": { - "figgy-pudding": "^3.5.1" - } - }, - "node_modules/webpack/node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/webpack/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": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.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==", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, - "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==" - }, - "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==", - "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==", - "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==", - "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-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "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": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workbox-background-sync": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz", - "integrity": "sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA==", - "dependencies": { - "workbox-core": "^5.1.4" - } - }, - "node_modules/workbox-broadcast-update": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-5.1.4.tgz", - "integrity": "sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA==", - "dependencies": { - "workbox-core": "^5.1.4" - } - }, - "node_modules/workbox-build": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-5.1.4.tgz", - "integrity": "sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow==", - "dependencies": { - "@babel/core": "^7.8.4", - "@babel/preset-env": "^7.8.4", - "@babel/runtime": "^7.8.4", - "@hapi/joi": "^15.1.0", - "@rollup/plugin-node-resolve": "^7.1.1", - "@rollup/plugin-replace": "^2.3.1", - "@surma/rollup-plugin-off-main-thread": "^1.1.1", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^8.1.0", - "glob": "^7.1.6", - "lodash.template": "^4.5.0", - "pretty-bytes": "^5.3.0", - "rollup": "^1.31.1", - "rollup-plugin-babel": "^4.3.3", - "rollup-plugin-terser": "^5.3.1", - "source-map": "^0.7.3", - "source-map-url": "^0.4.0", - "stringify-object": "^3.3.0", - "strip-comments": "^1.0.2", - "tempy": "^0.3.0", - "upath": "^1.2.0", - "workbox-background-sync": "^5.1.4", - "workbox-broadcast-update": "^5.1.4", - "workbox-cacheable-response": "^5.1.4", - "workbox-core": "^5.1.4", - "workbox-expiration": "^5.1.4", - "workbox-google-analytics": "^5.1.4", - "workbox-navigation-preload": "^5.1.4", - "workbox-precaching": "^5.1.4", - "workbox-range-requests": "^5.1.4", - "workbox-routing": "^5.1.4", - "workbox-strategies": "^5.1.4", - "workbox-streams": "^5.1.4", - "workbox-sw": "^5.1.4", - "workbox-window": "^5.1.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/workbox-build/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/workbox-build/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/workbox-build/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/workbox-build/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==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/workbox-cacheable-response": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-5.1.4.tgz", - "integrity": "sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA==", - "dependencies": { - "workbox-core": "^5.1.4" - } - }, - "node_modules/workbox-core": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-5.1.4.tgz", - "integrity": "sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg==" - }, - "node_modules/workbox-expiration": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-5.1.4.tgz", - "integrity": "sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ==", - "dependencies": { - "workbox-core": "^5.1.4" - } - }, - "node_modules/workbox-google-analytics": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-5.1.4.tgz", - "integrity": "sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA==", - "dependencies": { - "workbox-background-sync": "^5.1.4", - "workbox-core": "^5.1.4", - "workbox-routing": "^5.1.4", - "workbox-strategies": "^5.1.4" - } - }, - "node_modules/workbox-navigation-preload": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-5.1.4.tgz", - "integrity": "sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ==", - "dependencies": { - "workbox-core": "^5.1.4" - } - }, - "node_modules/workbox-precaching": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-5.1.4.tgz", - "integrity": "sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA==", - "dependencies": { - "workbox-core": "^5.1.4" - } - }, - "node_modules/workbox-range-requests": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-5.1.4.tgz", - "integrity": "sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw==", - "dependencies": { - "workbox-core": "^5.1.4" - } - }, - "node_modules/workbox-routing": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-5.1.4.tgz", - "integrity": "sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw==", - "dependencies": { - "workbox-core": "^5.1.4" - } - }, - "node_modules/workbox-strategies": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-5.1.4.tgz", - "integrity": "sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA==", - "dependencies": { - "workbox-core": "^5.1.4", - "workbox-routing": "^5.1.4" - } - }, - "node_modules/workbox-streams": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-5.1.4.tgz", - "integrity": "sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw==", - "dependencies": { - "workbox-core": "^5.1.4", - "workbox-routing": "^5.1.4" - } - }, - "node_modules/workbox-sw": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-5.1.4.tgz", - "integrity": "sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA==" - }, - "node_modules/workbox-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-PZafF4HpugZndqISi3rZ4ZK4A4DxO8rAqt2FwRptgsDx7NF8TVKP86/huHquUsRjMGQllsNdn4FNl8CD/UvKmQ==", - "dependencies": { - "@babel/runtime": "^7.5.5", - "fast-json-stable-stringify": "^2.0.0", - "source-map-url": "^0.4.0", - "upath": "^1.1.2", - "webpack-sources": "^1.3.0", - "workbox-build": "^5.1.4" - }, - "engines": { - "node": ">=8.0.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/workbox-window": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-5.1.4.tgz", - "integrity": "sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw==", - "dependencies": { - "workbox-core": "^5.1.4" - } - }, - "node_modules/worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dependencies": { - "errno": "~0.1.7" - } - }, - "node_modules/worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", - "dependencies": { - "microevent.ts": "~0.1.1" - } - }, - "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==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "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==", - "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.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "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==" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "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==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "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==", - "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": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-parser/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zdog": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/zdog/-/zdog-1.1.3.tgz", - "integrity": "sha512-raRj6r0gPzopFm5XWBJZr/NuV4EEnT4iE+U3dp5FV5pCb588Gmm3zLIp/j9yqqcMiHH8VNQlerLTgOqL7krh6w==", - "peer": true - }, - "node_modules/zustand": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz", - "integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==", - "peer": true, - "engines": { - "node": ">=12.7.0" - }, - "peerDependencies": { - "react": ">=16.8" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - } - } - } - }, - "dependencies": { - "@adobe/css-tools": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.0.1.tgz", - "integrity": "sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==" - }, - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==" - }, - "@babel/core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", - "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.2", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.1", - "@babel/parser": "^7.20.2", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/generator": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", - "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", - "requires": { - "@babel/types": "^7.20.2", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "requires": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", - "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", - "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "requires": { - "@babel/types": "^7.20.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" - }, - "@babel/helper-wrap-function": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", - "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - } - }, - "@babel/helpers": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", - "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.0" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "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==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.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==", - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "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.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", - "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.2.tgz", - "integrity": "sha512-nkBH96IBmgKnbHQ5gXFrcmez+Z9S2EIDKDQGp005ROqBigc88Tky4rzCnlP/lnlj245dCEQl4/YyV0V1kYh5dw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/plugin-syntax-decorators": "^7.19.0" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-default-from": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz", - "integrity": "sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-default-from": "^7.18.6" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", - "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.1" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@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==", - "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==", - "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==", - "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==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", - "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@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==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-default-from": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.18.6.tgz", - "integrity": "sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@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==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@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==", - "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==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@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==", - "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==", - "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==", - "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==", - "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==", - "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==", - "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==", - "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==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", - "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", - "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", - "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", - "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-flow": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", - "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", - "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", - "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", - "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", - "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", - "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", - "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", - "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", - "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", - "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@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.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/preset-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", - "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-flow-strip-types": "^7.18.6" - } - }, - "@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==", - "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/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - } - }, - "@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - } - }, - "@babel/register": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", - "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==", - "peer": true, - "requires": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - } - }, - "@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "requires": { - "regenerator-runtime": "^0.13.10" - } - }, - "@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", - "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", - "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.1", - "@babel/types": "^7.20.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", - "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "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==" - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" - }, - "@csstools/normalize.css": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", - "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" - }, - "@emotion/hash": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", - "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "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.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", - "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" - }, - "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==" - } - } - }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" - }, - "@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" - }, - "@hapi/bourne": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", - "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" - }, - "@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" - }, - "@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", - "requires": { - "@hapi/address": "2.x.x", - "@hapi/bourne": "1.x.x", - "@hapi/hoek": "8.x.x", - "@hapi/topo": "3.x.x" - } - }, - "@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", - "requires": { - "@hapi/hoek": "^8.3.0" - } - }, - "@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==", - "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==" - }, - "@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==", - "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": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - } - } - }, - "@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==" - }, - "@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "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": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "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==", - "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" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - }, - "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==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "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": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "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==", - "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" - } - }, - "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==", - "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" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - }, - "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==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "@jest/create-cache-key-function": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-27.5.1.tgz", - "integrity": "sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==", - "peer": true, - "requires": { - "@jest/types": "^27.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "peer": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "peer": true, - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "requires": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@jest/expect-utils": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.3.1.tgz", - "integrity": "sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g==", - "requires": { - "jest-get-type": "^29.2.0" - } - }, - "@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==", - "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" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "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==", - "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" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - }, - "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==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "requires": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "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==" - }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "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" - } - }, - "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==", - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^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==" - }, - "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==", - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "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==", - "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" - } - }, - "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==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "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": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "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==", - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - } - }, - "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==", - "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" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - }, - "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==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@jest/schemas": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", - "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@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==", - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@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==", - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "@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==", - "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==", - "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": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - } - } - }, - "@jest/types": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", - "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "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==" - }, - "@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==" - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "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==" - }, - "@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==", - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@material-ui/core": { - "version": "4.12.4", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz", - "integrity": "sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ==", - "requires": { - "@babel/runtime": "^7.4.4", - "@material-ui/styles": "^4.11.5", - "@material-ui/system": "^4.12.2", - "@material-ui/types": "5.1.0", - "@material-ui/utils": "^4.11.3", - "@types/react-transition-group": "^4.2.0", - "clsx": "^1.0.4", - "hoist-non-react-statics": "^3.3.2", - "popper.js": "1.16.1-lts", - "prop-types": "^15.7.2", - "react-is": "^16.8.0 || ^17.0.0", - "react-transition-group": "^4.4.0" - } - }, - "@material-ui/data-grid": { - "version": "4.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/@material-ui/data-grid/-/data-grid-4.0.0-alpha.37.tgz", - "integrity": "sha512-3T2AG31aad/lWLMLwn1XUP4mUf3H9YZES17dGuYByzkRLCXbBZHBTPEnCctWukajzwm+v0KGg3QpwitGoiDAjA==", - "requires": { - "@material-ui/utils": "^5.0.0-alpha.14", - "clsx": "^1.0.4", - "prop-types": "^15.7.2", - "reselect": "^4.0.0" - }, - "dependencies": { - "@material-ui/utils": { - "version": "5.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-5.0.0-beta.5.tgz", - "integrity": "sha512-wtJ3ovXWZdTAz5eLBqvMpYH/IBJb3qMQbGCyL1i00+sf7AUlAuv4QLx+QtX/siA6L7IpxUQVfqpoCpQH1eYRpQ==", - "requires": { - "@babel/runtime": "^7.14.8", - "@types/prop-types": "^15.7.4", - "@types/react-is": "^16.7.1 || ^17.0.0", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" - } - } - } - }, - "@material-ui/icons": { - "version": "4.11.3", - "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.3.tgz", - "integrity": "sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA==", - "requires": { - "@babel/runtime": "^7.4.4" - } - }, - "@material-ui/lab": { - "version": "4.0.0-alpha.61", - "resolved": "https://registry.npmjs.org/@material-ui/lab/-/lab-4.0.0-alpha.61.tgz", - "integrity": "sha512-rSzm+XKiNUjKegj8bzt5+pygZeckNLOr+IjykH8sYdVk7dE9y2ZuUSofiMV2bJk3qU+JHwexmw+q0RyNZB9ugg==", - "requires": { - "@babel/runtime": "^7.4.4", - "@material-ui/utils": "^4.11.3", - "clsx": "^1.0.4", - "prop-types": "^15.7.2", - "react-is": "^16.8.0 || ^17.0.0" - } - }, - "@material-ui/styles": { - "version": "4.11.5", - "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.5.tgz", - "integrity": "sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA==", - "requires": { - "@babel/runtime": "^7.4.4", - "@emotion/hash": "^0.8.0", - "@material-ui/types": "5.1.0", - "@material-ui/utils": "^4.11.3", - "clsx": "^1.0.4", - "csstype": "^2.5.2", - "hoist-non-react-statics": "^3.3.2", - "jss": "^10.5.1", - "jss-plugin-camel-case": "^10.5.1", - "jss-plugin-default-unit": "^10.5.1", - "jss-plugin-global": "^10.5.1", - "jss-plugin-nested": "^10.5.1", - "jss-plugin-props-sort": "^10.5.1", - "jss-plugin-rule-value-function": "^10.5.1", - "jss-plugin-vendor-prefixer": "^10.5.1", - "prop-types": "^15.7.2" - } - }, - "@material-ui/system": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.12.2.tgz", - "integrity": "sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw==", - "requires": { - "@babel/runtime": "^7.4.4", - "@material-ui/utils": "^4.11.3", - "csstype": "^2.5.2", - "prop-types": "^15.7.2" - } - }, - "@material-ui/types": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz", - "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==", - "requires": {} - }, - "@material-ui/utils": { - "version": "4.11.3", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.3.tgz", - "integrity": "sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg==", - "requires": { - "@babel/runtime": "^7.4.4", - "prop-types": "^15.7.2", - "react-is": "^16.8.0 || ^17.0.0" - } - }, - "@nivo/annotations": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/annotations/-/annotations-0.69.0.tgz", - "integrity": "sha512-GeO9lysWhX2FLAw6ePAgJSEkg9vcivueZSKBvxyiv4e05pYm4fnnYzAxq2tsTHCPoPyWbEbbiSpJEzsQY1dQMQ==", - "requires": { - "@nivo/colors": "0.69.0", - "lodash": "^4.17.11", - "react-spring": "9.1.2" - }, - "dependencies": { - "@nivo/colors": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/colors/-/colors-0.69.0.tgz", - "integrity": "sha512-mfD/t7VcaOmD+dN8YiflqDeShz7F9tXpPfz772+xwxawu2FRYQ8ksYMC1LoS0zHvBgx/fd/I0U7Yg+OwavfC1g==", - "requires": { - "d3-color": "^2.0.0", - "d3-scale": "^3.2.3", - "d3-scale-chromatic": "^2.0.0", - "lodash": "^4.17.11", - "react-motion": "^0.5.2" - }, - "dependencies": { - "react-motion": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz", - "integrity": "sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ==", - "requires": { - "performance-now": "^0.2.0", - "prop-types": "^15.5.8", - "raf": "^3.1.0" - } - } - } - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg==" - } - } - }, - "@nivo/axes": { - "version": "0.69.1", - "resolved": "https://registry.npmjs.org/@nivo/axes/-/axes-0.69.1.tgz", - "integrity": "sha512-jVWlhyC7qdMLvajgafSUxiDzbB3TRSTzzkbtpWf9D5EeZ6kc0FYBzoDJU4njkRpFh/JjSU8BaMh6aqpYIFfQ4g==", - "requires": { - "@nivo/scales": "0.69.0", - "d3-format": "^1.4.4", - "d3-time": "^1.0.11", - "d3-time-format": "^2.1.3", - "react-spring": "9.1.2" - } - }, - "@nivo/core": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/core/-/core-0.69.0.tgz", - "integrity": "sha512-xo8dOcLaZe8DB5PJ5kBnvRwL9JYZKVicWiQ2HXBaEAhnTETT10rdUja9yTWGRhWgSXni0292L0jw2+SP4Wm3bA==", - "requires": { - "@nivo/recompose": "0.69.0", - "d3-color": "^2.0.0", - "d3-format": "^1.4.4", - "d3-hierarchy": "^1.1.8", - "d3-interpolate": "^2.0.1", - "d3-scale": "^3.2.3", - "d3-scale-chromatic": "^2.0.0", - "d3-shape": "^1.3.5", - "d3-time-format": "^2.1.3", - "lodash": "^4.17.11", - "react-spring": "9.1.2", - "resize-observer-polyfill": "^1.5.1" - } - }, - "@nivo/legends": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/legends/-/legends-0.69.0.tgz", - "integrity": "sha512-LDnEdr+M4rBtUXv+0EJ+hroOLTk64cOrYZuz3LXVYkVTTNlJ2o41ghdVFCsHeiE+0t8fuXO0oHNEoixQx7UKdg==", - "requires": { - "lodash": "^4.17.11" - } - }, - "@nivo/line": { - "version": "0.69.1", - "resolved": "https://registry.npmjs.org/@nivo/line/-/line-0.69.1.tgz", - "integrity": "sha512-Q92S7tCJCKc+AJdc2PdYKQmzULNoExIJQ0IV6pgFf2rY2PiUUlI7rFb7Eu8xgpsHe0w4Xa/KxMLCLHWXNBGJQw==", - "requires": { - "@nivo/annotations": "0.69.0", - "@nivo/axes": "0.69.1", - "@nivo/colors": "0.69.0", - "@nivo/legends": "0.69.0", - "@nivo/scales": "0.69.0", - "@nivo/tooltip": "0.69.0", - "@nivo/voronoi": "0.69.0", - "d3-shape": "^1.3.5", - "react-spring": "9.1.2" - }, - "dependencies": { - "@nivo/colors": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/colors/-/colors-0.69.0.tgz", - "integrity": "sha512-mfD/t7VcaOmD+dN8YiflqDeShz7F9tXpPfz772+xwxawu2FRYQ8ksYMC1LoS0zHvBgx/fd/I0U7Yg+OwavfC1g==", - "requires": { - "d3-color": "^2.0.0", - "d3-scale": "^3.2.3", - "d3-scale-chromatic": "^2.0.0", - "lodash": "^4.17.11", - "react-motion": "^0.5.2" - }, - "dependencies": { - "react-motion": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz", - "integrity": "sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ==", - "requires": { - "performance-now": "^0.2.0", - "prop-types": "^15.5.8", - "raf": "^3.1.0" - } - } - } - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg==" - } - } - }, - "@nivo/recompose": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/recompose/-/recompose-0.69.0.tgz", - "integrity": "sha512-RtjJHDES1uvi6mlZvR/0p13fzNIJmm7ubE0Zly8p0gICGlurwWMyjwhTLGLNc5BYX/qXBlZsVuns5M5V40rzvg==", - "requires": { - "react-lifecycles-compat": "^3.0.4" - } - }, - "@nivo/scales": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/scales/-/scales-0.69.0.tgz", - "integrity": "sha512-o7BZOiFLDwt6zUXBFeRPtpAyFzyt4DPM+tiJD8+J6QzZOijXzZeUCjjv3lVL95UpmznQFKd6kehpTMyjq9/DyQ==", - "requires": { - "d3-scale": "^3.2.3", - "d3-time": "^1.0.11", - "d3-time-format": "^2.1.3", - "lodash": "^4.17.11" - } - }, - "@nivo/tooltip": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/tooltip/-/tooltip-0.69.0.tgz", - "integrity": "sha512-thIObK1KajlZ7vVU5mgwEPRMBKLWh5a4u46i7qeg2nld5bRh54S//0M1U+PZS5t+xg1boE/iXWp2/MLXPxk2EQ==", - "requires": { - "react-spring": "9.1.2" - } - }, - "@nivo/voronoi": { - "version": "0.69.0", - "resolved": "https://registry.npmjs.org/@nivo/voronoi/-/voronoi-0.69.0.tgz", - "integrity": "sha512-z3qMtvVx7HVi/O1h5E+hEE7pCdt9ZUV6LxhiaNJ5f/XW+t41NyVbovgLj8Tl1ddtsum7De1BfHeLZA3GffjdKA==", - "requires": { - "d3-delaunay": "^5.3.0", - "d3-scale": "^3.2.3" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } - } - }, - "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz", - "integrity": "sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ==", - "requires": { - "ansi-html": "^0.0.7", - "error-stack-parser": "^2.0.6", - "html-entities": "^1.2.1", - "native-url": "^0.2.6", - "schema-utils": "^2.6.5", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" - } - } - }, - "@react-native-community/cli": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-9.3.2.tgz", - "integrity": "sha512-IAW4X0vmX/xozNpp/JVZaX7MrC85KV0OP2DF4o7lNGOfpUhzJAEWqTfkxFYS+VsRjZHDve4wSTiGIuXwE7FG1w==", - "peer": true, - "requires": { - "@react-native-community/cli-clean": "^9.2.1", - "@react-native-community/cli-config": "^9.2.1", - "@react-native-community/cli-debugger-ui": "^9.0.0", - "@react-native-community/cli-doctor": "^9.3.0", - "@react-native-community/cli-hermes": "^9.3.1", - "@react-native-community/cli-plugin-metro": "^9.2.1", - "@react-native-community/cli-server-api": "^9.2.1", - "@react-native-community/cli-tools": "^9.2.1", - "@react-native-community/cli-types": "^9.1.0", - "chalk": "^4.1.2", - "commander": "^9.4.0", - "execa": "^1.0.0", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0", - "graceful-fs": "^4.1.3", - "prompts": "^2.4.0", - "semver": "^6.3.0" - }, - "dependencies": { - "commander": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.4.1.tgz", - "integrity": "sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==", - "peer": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "peer": 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" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "peer": true - } - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "peer": 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" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "peer": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^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==", - "peer": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "peer": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "peer": 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": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "peer": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "peer": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "peer": 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": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "peer": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "peer": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@react-native-community/cli-clean": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-clean/-/cli-clean-9.2.1.tgz", - "integrity": "sha512-dyNWFrqRe31UEvNO+OFWmQ4hmqA07bR9Ief/6NnGwx67IO9q83D5PEAf/o96ML6jhSbDwCmpPKhPwwBbsyM3mQ==", - "peer": true, - "requires": { - "@react-native-community/cli-tools": "^9.2.1", - "chalk": "^4.1.2", - "execa": "^1.0.0", - "prompts": "^2.4.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==", - "peer": 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==", - "peer": 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" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "peer": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "peer": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "peer": 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": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "peer": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "peer": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "peer": 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": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "peer": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@react-native-community/cli-config": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-config/-/cli-config-9.2.1.tgz", - "integrity": "sha512-gHJlBBXUgDN9vrr3aWkRqnYrPXZLztBDQoY97Mm5Yo6MidsEpYo2JIP6FH4N/N2p1TdjxJL4EFtdd/mBpiR2MQ==", - "peer": true, - "requires": { - "@react-native-community/cli-tools": "^9.2.1", - "cosmiconfig": "^5.1.0", - "deepmerge": "^3.2.0", - "glob": "^7.1.3", - "joi": "^17.2.1" - }, - "dependencies": { - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "peer": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "deepmerge": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", - "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==", - "peer": true - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "peer": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "peer": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "peer": true - } - } - }, - "@react-native-community/cli-debugger-ui": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-9.0.0.tgz", - "integrity": "sha512-7hH05ZwU9Tp0yS6xJW0bqcZPVt0YCK7gwj7gnRu1jDNN2kughf6Lg0Ys29rAvtZ7VO1PK5c1O+zs7yFnylQDUA==", - "peer": true, - "requires": { - "serve-static": "^1.13.1" - } - }, - "@react-native-community/cli-doctor": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-9.3.0.tgz", - "integrity": "sha512-/fiuG2eDGC2/OrXMOWI5ifq4X1gdYTQhvW2m0TT5Lk1LuFiZsbTCp1lR+XILKekuTvmYNjEGdVpeDpdIWlXdEA==", - "peer": true, - "requires": { - "@react-native-community/cli-config": "^9.2.1", - "@react-native-community/cli-platform-ios": "^9.3.0", - "@react-native-community/cli-tools": "^9.2.1", - "chalk": "^4.1.2", - "command-exists": "^1.2.8", - "envinfo": "^7.7.2", - "execa": "^1.0.0", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5", - "node-stream-zip": "^1.9.1", - "ora": "^5.4.1", - "prompts": "^2.4.0", - "semver": "^6.3.0", - "strip-ansi": "^5.2.0", - "sudo-prompt": "^9.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "peer": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "peer": 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" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "peer": true - } - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "peer": 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" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "peer": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "peer": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "peer": 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": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "peer": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "peer": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "peer": 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": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "peer": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "peer": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@react-native-community/cli-hermes": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-9.3.1.tgz", - "integrity": "sha512-Mq4PK8m5YqIdaVq5IdRfp4qK09aVO+aiCtd6vjzjNUgk1+1X5cgUqV6L65h4N+TFJYJHcp2AnB+ik1FAYXvYPQ==", - "peer": true, - "requires": { - "@react-native-community/cli-platform-android": "^9.3.1", - "@react-native-community/cli-tools": "^9.2.1", - "chalk": "^4.1.2", - "hermes-profile-transformer": "^0.0.6", - "ip": "^1.1.5" - } - }, - "@react-native-community/cli-platform-android": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-9.3.1.tgz", - "integrity": "sha512-m0bQ6Twewl7OEZoVf79I2GZmsDqh+Gh0bxfxWgwxobsKDxLx8/RNItAo1lVtTCgzuCR75cX4EEO8idIF9jYhew==", - "peer": true, - "requires": { - "@react-native-community/cli-tools": "^9.2.1", - "chalk": "^4.1.2", - "execa": "^1.0.0", - "fs-extra": "^8.1.0", - "glob": "^7.1.3", - "logkitty": "^0.7.1", - "slash": "^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==", - "peer": 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==", - "peer": 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" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "peer": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^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==", - "peer": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "peer": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "peer": 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": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "peer": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "peer": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "peer": 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": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "peer": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "peer": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@react-native-community/cli-platform-ios": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-9.3.0.tgz", - "integrity": "sha512-nihTX53BhF2Q8p4B67oG3RGe1XwggoGBrMb6vXdcu2aN0WeXJOXdBLgR900DAA1O8g7oy1Sudu6we+JsVTKnjw==", - "peer": true, - "requires": { - "@react-native-community/cli-tools": "^9.2.1", - "chalk": "^4.1.2", - "execa": "^1.0.0", - "glob": "^7.1.3", - "ora": "^5.4.1" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "peer": 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==", - "peer": 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" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "peer": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "peer": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "peer": 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": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "peer": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "peer": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "peer": 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": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "peer": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@react-native-community/cli-plugin-metro": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-9.2.1.tgz", - "integrity": "sha512-byBGBH6jDfUvcHGFA45W/sDwMlliv7flJ8Ns9foCh3VsIeYYPoDjjK7SawE9cPqRdMAD4SY7EVwqJnOtRbwLiQ==", - "peer": true, - "requires": { - "@react-native-community/cli-server-api": "^9.2.1", - "@react-native-community/cli-tools": "^9.2.1", - "chalk": "^4.1.2", - "metro": "0.72.3", - "metro-config": "0.72.3", - "metro-core": "0.72.3", - "metro-react-native-babel-transformer": "0.72.3", - "metro-resolver": "0.72.3", - "metro-runtime": "0.72.3", - "readline": "^1.3.0" - } - }, - "@react-native-community/cli-server-api": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-9.2.1.tgz", - "integrity": "sha512-EI+9MUxEbWBQhWw2PkhejXfkcRqPl+58+whlXJvKHiiUd7oVbewFs0uLW0yZffUutt4FGx6Uh88JWEgwOzAdkw==", - "peer": true, - "requires": { - "@react-native-community/cli-debugger-ui": "^9.0.0", - "@react-native-community/cli-tools": "^9.2.1", - "compression": "^1.7.1", - "connect": "^3.6.5", - "errorhandler": "^1.5.0", - "nocache": "^3.0.1", - "pretty-format": "^26.6.2", - "serve-static": "^1.13.1", - "ws": "^7.5.1" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "peer": 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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "peer": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "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==", - "peer": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "@react-native-community/cli-tools": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-9.2.1.tgz", - "integrity": "sha512-bHmL/wrKmBphz25eMtoJQgwwmeCylbPxqFJnFSbkqJPXQz3ManQ6q/gVVMqFyz7D3v+riaus/VXz3sEDa97uiQ==", - "peer": true, - "requires": { - "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", - "find-up": "^5.0.0", - "mime": "^2.4.1", - "node-fetch": "^2.6.0", - "open": "^6.2.0", - "ora": "^5.4.1", - "semver": "^6.3.0", - "shell-quote": "^1.7.3" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "peer": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "peer": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "peer": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "peer": true - }, - "open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "peer": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "peer": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "peer": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "peer": true - }, - "shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", - "peer": true - } - } - }, - "@react-native-community/cli-types": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-9.1.0.tgz", - "integrity": "sha512-KDybF9XHvafLEILsbiKwz5Iobd+gxRaPyn4zSaAerBxedug4er5VUWa8Szy+2GeYKZzMh/gsb1o9lCToUwdT/g==", - "peer": true, - "requires": { - "joi": "^17.2.1" - } - }, - "@react-native/assets": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz", - "integrity": "sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ==", - "peer": true - }, - "@react-native/normalize-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@react-native/normalize-color/-/normalize-color-2.0.0.tgz", - "integrity": "sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw==", - "peer": true - }, - "@react-native/polyfills": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-2.0.0.tgz", - "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==", - "peer": true - }, - "@react-spring/animated": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.1.2.tgz", - "integrity": "sha512-nKOGk+3aWbNp46V/CB1J2vR3GJI/Vork8N1WTI5mt+32QekrSsBn5/YFt4/iPaDGhLjukFxF0IjLs6hRLqSObw==", - "requires": { - "@react-spring/shared": "~9.1.2", - "@react-spring/types": "~9.1.2" - } - }, - "@react-spring/core": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.1.2.tgz", - "integrity": "sha512-rgobYPCcLdDwbHBVqAmvtXhhX92G7MoPltJlzUge843yp1dNr47tkagFdCtw9NMGp6eHu/CE5byh/imlhLLAxw==", - "requires": { - "@react-spring/animated": "~9.1.2", - "@react-spring/shared": "~9.1.2", - "@react-spring/types": "~9.1.2" - } - }, - "@react-spring/shared": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.1.2.tgz", - "integrity": "sha512-sj/RrhFZAteCWAMk+W0t6Ku/skn/lbskCCs8B7ZnHNLMGPM+Zb3MOk+aVbX3T/D0iq/oTnKWyQYqrXDKiFcZ7g==", - "requires": { - "@react-spring/types": "~9.1.2", - "rafz": "^0.1.14" - } - }, - "@react-spring/types": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.1.2.tgz", - "integrity": "sha512-NZNImL0ymRFbss1cGKX2qSEeFdFoOgnIJZEW4Uczt+wm04J7g0Zuf23Hf8hM35JtxDr8QO5okp8BBtCM5FzzMg==" - }, - "@react-spring/web": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.1.2.tgz", - "integrity": "sha512-E5W9Hmi2bO6CPorCNV/2iv12ux9LxHJAbpXmrBPKWFRqZixysiHoNQKKPG0DmSvUU1uKkvCvMC4VoB6pj/2kxw==", - "requires": { - "@react-spring/animated": "~9.1.2", - "@react-spring/core": "~9.1.2", - "@react-spring/shared": "~9.1.2", - "@react-spring/types": "~9.1.2" - } - }, - "@react-spring/zdog": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/zdog/-/zdog-9.1.2.tgz", - "integrity": "sha512-t5RobDp12HGVh6XJ1BZ+dFdxRQ/goEapYvjH5eqQa1vC97bSqJGLiG+SM/E360DtDlh8GXAyGSesd2pXzBkpPg==", - "requires": { - "@react-spring/animated": "~9.1.2", - "@react-spring/core": "~9.1.2", - "@react-spring/shared": "~9.1.2", - "@react-spring/types": "~9.1.2" - } - }, - "@rollup/plugin-node-resolve": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", - "integrity": "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==", - "requires": { - "@rollup/pluginutils": "^3.0.8", - "@types/resolve": "0.0.8", - "builtin-modules": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.14.2" - } - }, - "@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - } - } - }, - "@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "peer": true, - "requires": { - "@hapi/hoek": "^9.0.0" - }, - "dependencies": { - "@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "peer": true - } - } - }, - "@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", - "peer": true - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "peer": true - }, - "@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" - }, - "@sinonjs/commons": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz", - "integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==", - "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==", - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@surma/rollup-plugin-off-main-thread": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz", - "integrity": "sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A==", - "requires": { - "ejs": "^2.6.1", - "magic-string": "^0.25.0" - } - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==" - }, - "@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - } - }, - "@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "requires": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "requires": { - "@babel/types": "^7.12.6" - } - }, - "@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "requires": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - } - }, - "@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "requires": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - } - }, - "@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "requires": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - } - }, - "@testing-library/dom": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.19.0.tgz", - "integrity": "sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==", - "peer": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^4.2.0", - "aria-query": "^5.0.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", - "pretty-format": "^27.0.2" - } - }, - "@testing-library/jest-dom": { - "version": "5.16.5", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz", - "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==", - "requires": { - "@adobe/css-tools": "^4.0.1", - "@babel/runtime": "^7.9.2", - "@types/testing-library__jest-dom": "^5.9.1", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.5.6", - "lodash": "^4.17.15", - "redent": "^3.0.0" - }, - "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "@testing-library/react": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-11.2.7.tgz", - "integrity": "sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA==", - "requires": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^7.28.1" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@testing-library/dom": { - "version": "7.31.2", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.31.2.tgz", - "integrity": "sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^4.2.0", - "aria-query": "^4.2.2", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.6", - "lz-string": "^1.4.4", - "pretty-format": "^26.6.2" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.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==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "@testing-library/user-event": { - "version": "12.8.3", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-12.8.3.tgz", - "integrity": "sha512-IR0iWbFkgd56Bu5ZI/ej8yQwrkCv8Qydx6RzwbKz9faXazR/+5tvYKsZQgyXJiwgpcva127YO6JcWy7YlCfofQ==", - "requires": { - "@babel/runtime": "^7.12.5" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" - }, - "@types/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==" - }, - "@types/babel__core": { - "version": "7.1.20", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.20.tgz", - "integrity": "sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==", - "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==", - "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==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz", - "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==", - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@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==", - "requires": { - "@types/node": "*" - } - }, - "@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" - }, - "@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==" - }, - "@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==", - "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==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "29.2.3", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.3.tgz", - "integrity": "sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w==", - "requires": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - }, - "pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - } - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" - }, - "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" - }, - "@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==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==" - }, - "@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/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" - }, - "@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - }, - "dependencies": { - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - } - } - }, - "@types/react-is": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", - "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", - "requires": { - "@types/react": "*" - } - }, - "@types/react-reconciler": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.26.7.tgz", - "integrity": "sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ==", - "peer": true, - "requires": { - "@types/react": "*" - } - }, - "@types/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", - "requires": { - "@types/react": "*" - } - }, - "@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "requires": { - "@types/node": "*" - } - }, - "@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/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==" - }, - "@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==" - }, - "@types/tapable": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", - "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==" - }, - "@types/testing-library__jest-dom": { - "version": "5.14.5", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", - "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", - "requires": { - "@types/jest": "*" - } - }, - "@types/uglify-js": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", - "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==", - "requires": { - "source-map": "^0.6.1" - } - }, - "@types/webpack": { - "version": "4.41.33", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz", - "integrity": "sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==", - "requires": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "@types/webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" - } - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", - "requires": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - } - }, - "@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==" - }, - "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@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==" - }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "peer": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "absolute-path": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", - "integrity": "sha512-HQiug4c+/s3WOvEnDRxXVmNtSG5s2gJM9r19BTcqjp7BWcE48PB+Y2G6jE65kqI0LpsQeMZygt/b60Gi4KxGyA==", - "peer": true - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - }, - "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==", - "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==", - "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==" - }, - "address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" - }, - "adjust-sourcemap-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", - "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - } - }, - "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==", - "requires": { - "debug": "4" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "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-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "requires": {} - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==" - }, - "anser": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", - "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", - "peer": true - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" - }, - "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==", - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-fragments": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", - "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", - "peer": true, - "requires": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "peer": true - }, - "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==", - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "peer": true - }, - "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==", - "peer": 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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "peer": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "peer": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "peer": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "peer": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha512-JoAxEa1DfP9m2xfB/y2r/aKcwXNlltr4+0QSBC4TrLfcxyvepX2Pv0t/xpgGV5bGsDzCYV8SzjWgyCW0T9yYbA==" - }, - "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": "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" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "appdirsjs": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/appdirsjs/-/appdirsjs-1.2.7.tgz", - "integrity": "sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==", - "peer": true - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "requires": { - "deep-equal": "^2.0.5" - } - }, - "arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha512-fExL2kFDC1Q2DUOx3whE/9KoN66IzkY4b4zUHUBFM1ojEYjZZYDcUW3bek/ufGionX9giIKDC5redH2IlGqcQQ==" - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==" - }, - "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==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==" - }, - "array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==" - }, - "ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "peer": true, - "requires": { - "tslib": "^2.0.1" - } - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "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==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "autoprefixer": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", - "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "picocolors": "^0.2.1", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "axe-core": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.2.tgz", - "integrity": "sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==" - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" - }, - "babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "peer": true, - "requires": {} - }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "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==" - } - } - }, - "babel-extract-comments": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", - "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", - "requires": { - "babylon": "^6.18.0" - } - }, - "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==", - "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": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", - "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "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==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "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==", - "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" - } - }, - "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==", - "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-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "requires": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "dependencies": { - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } - } - }, - "babel-plugin-named-asset-import": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "requires": {} - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha512-C4Aq+GaAj83pRQ0EFgTvw5YO6T3Qz2KGrNRwIj9mSoNHVvdZY4KO2uA6HNtNXCw993iSZnckY1aLW8nOi8i4+w==" - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "7.0.0-beta.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", - "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", - "peer": true - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha512-ocgA9VJvyxwt+qJB0ncxV8kb/CjfTcECUY4tQ5VT7nP6Aohzobm8CDFaQ5FHdvZQzLmf0sgDxB8iRXZXxwZcyA==", - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" - } - }, - "babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "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==", - "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-fbjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", - "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", - "peer": true, - "requires": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-class-properties": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-member-expression-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-property-literals": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" - } - }, - "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==", - "requires": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", - "requires": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "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": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "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==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "bfj": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", - "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", - "requires": { - "bluebird": "^3.5.5", - "check-types": "^11.1.1", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "optional": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "peer": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "peer": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "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==", - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==", - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - }, - "dependencies": { - "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" - } - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "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==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "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==" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "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==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - } - } - }, - "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==" - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "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" - } - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==" - } - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001431", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", - "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==" - }, - "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==", - "requires": { - "rsvp": "^4.8.4" - } - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz", - "integrity": "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.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==" - }, - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" - }, - "check-types": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", - "integrity": "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==" - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "optional": 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" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - }, - "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==" - }, - "ci-info": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.1.tgz", - "integrity": "sha512-up5ggbaDqOqJ4UqLKZ2naVkyqSJQgJi5lwD6b6mM748ysrghDBX0bx/qJTUHzw7zu6Mq4gycviSF5hJnwceD8w==" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "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==" - }, - "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==", - "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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==", - "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==" - } - } - }, - "clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "peer": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", - "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", - "peer": true - }, - "clipboard": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", - "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", - "optional": true, - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "peer": true - }, - "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==", - "peer": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "dependencies": { - "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==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.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==", - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "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==" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - }, - "dependencies": { - "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==", - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - } - } - }, - "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==" - }, - "color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", - "peer": 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==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "peer": true - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "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==" - }, - "compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg==", - "requires": { - "arity-n": "^1.0.4" - } - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "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==" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "peer": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "peer": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "peer": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "peer": true - } - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==" - }, - "core-js": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", - "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==" - }, - "core-js-compat": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", - "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", - "requires": { - "browserslist": "^4.21.4" - } - }, - "core-js-pure": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", - "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==" - }, - "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==" - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==" - }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - } - }, - "css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", - "requires": { - "postcss": "^7.0.5" - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==" - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - } - }, - "css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^5.0.0-rc.4" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "css-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-4.3.0.tgz", - "integrity": "sha512-rdezjCjScIrsL8BSYszgT4s476IcNKt6yX69t0pHjJVnPUTDpn4WfIpDQTN3wCJvUvfsz/mFjuGOekf3PY3NUg==", - "requires": { - "camelcase": "^6.0.0", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^2.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.3", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.1", - "semver": "^7.3.2" - } - }, - "css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", - "requires": { - "postcss": "^7.0.5" - } - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - } - }, - "css-vendor": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz", - "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==", - "requires": { - "@babel/runtime": "^7.8.3", - "is-in-browser": "^1.0.2" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" - }, - "css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" - }, - "cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", - "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.8", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==" - } - } - }, - "cssnano-preset-default": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", - "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.3", - "postcss-unique-selectors": "^4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==" - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==" - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "requires": { - "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - } - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "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==" - } - } - }, - "csstype": { - "version": "2.6.21", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", - "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==" - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "d3-array": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", - "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", - "requires": { - "internmap": "^1.0.0" - } - }, - "d3-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", - "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" - }, - "d3-delaunay": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-5.3.0.tgz", - "integrity": "sha512-amALSrOllWVLaHTnDLHwMIiz0d1bBu9gZXd1FiLfXf8sHcX9jrcj81TVZOqD4UX7MgBZZ07c8GxzEgBpJqc74w==", - "requires": { - "delaunator": "4" - } - }, - "d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" - }, - "d3-hierarchy": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", - "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" - }, - "d3-interpolate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz", - "integrity": "sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==", - "requires": { - "d3-color": "1 - 2" - } - }, - "d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" - }, - "d3-scale": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", - "integrity": "sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==", - "requires": { - "d3-array": "^2.3.0", - "d3-format": "1 - 2", - "d3-interpolate": "1.2.0 - 2", - "d3-time": "^2.1.1", - "d3-time-format": "2 - 3" - }, - "dependencies": { - "d3-time": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", - "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", - "requires": { - "d3-array": "2" - } - } - } - }, - "d3-scale-chromatic": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz", - "integrity": "sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA==", - "requires": { - "d3-color": "1 - 2", - "d3-interpolate": "1 - 2" - } - }, - "d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "requires": { - "d3-path": "1" - } - }, - "d3-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", - "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" - }, - "d3-time-format": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", - "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", - "requires": { - "d3-time": "1" - } - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "dayjs": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz", - "integrity": "sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==", - "peer": true - }, - "debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "peer": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" - }, - "decimal.js": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz", - "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" - }, - "deep-equal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.1.0.tgz", - "integrity": "sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA==", - "requires": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.8" - } - }, - "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==" - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.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==", - "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==", - "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" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "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": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "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": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "peer": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - } - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "delaunator": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-4.0.1.tgz", - "integrity": "sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag==" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "optional": true - }, - "denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==", - "peer": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "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==" - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "diff-sequences": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz", - "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==" - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==", - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-accessibility-api": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz", - "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==" - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "requires": { - "utila": "~0.4" - } - }, - "dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "requires": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - }, - "dependencies": { - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - } - } - }, - "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" - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - }, - "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==", - "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==" - } - } - }, - "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" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - }, - "dependencies": { - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - } - } - }, - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "ejs": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", - "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" - }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "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==", - "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==", - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "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==", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "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==", - "peer": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "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==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "requires": { - "stackframe": "^1.3.4" - } - }, - "errorhandler": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", - "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", - "peer": true, - "requires": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" - } - }, - "es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "requires": { - "has": "^1.0.3" - } - }, - "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==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "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==" - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "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==", - "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": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "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==", - "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==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "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==" - } - } - }, - "globals": { - "version": "13.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", - "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" - }, - "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==" - } - } - }, - "eslint-config-react-app": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz", - "integrity": "sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==", - "requires": { - "confusing-browser-globals": "^1.0.10" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-flowtype": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.10.0.tgz", - "integrity": "sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw==", - "requires": { - "lodash": "^4.17.15", - "string-natural-compare": "^3.0.1" - } - }, - "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } - } - }, - "eslint-plugin-jest": { - "version": "24.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz", - "integrity": "sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA==", - "requires": { - "@typescript-eslint/experimental-utils": "^4.0.1" - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", - "requires": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" - }, - "dependencies": { - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "eslint-plugin-react": { - "version": "7.31.10", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz", - "integrity": "sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==", - "requires": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "requires": {} - }, - "eslint-plugin-testing-library": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-3.10.2.tgz", - "integrity": "sha512-WAmOCt7EbF1XM8XfbCKAEzAPnShkNSwcIsAD2jHdsMUT9mZJPjLCG7pMzbcC8kK366NOuGip8HKLDC+Xk4yIdA==", - "requires": { - "@typescript-eslint/experimental-utils": "^3.10.1" - }, - "dependencies": { - "@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==", - "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/types": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-3.10.1.tgz", - "integrity": "sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==" - }, - "@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==", - "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" - } - }, - "@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==", - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "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==" - } - } - }, - "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==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - } - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "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==" - }, - "eslint-webpack-plugin": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-2.7.0.tgz", - "integrity": "sha512-bNaVVUvU4srexGhVcayn/F4pJAz19CWBkKoMx7aSQ4wtTbZQCnG5O9LHCE42mM+JSKOUp7n6vd5CIwzj7lOVGA==", - "requires": { - "@types/eslint": "^7.29.0", - "arrify": "^2.0.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^3.1.1" - }, - "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==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "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==" - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "peer": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "eventsource": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", - "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "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==" - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "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": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "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==", - "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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==", - "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": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "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==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "expect": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.3.1.tgz", - "integrity": "sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA==", - "requires": { - "@jest/expect-utils": "^29.3.1", - "jest-get-type": "^29.2.0", - "jest-matcher-utils": "^29.3.1", - "jest-message-util": "^29.3.1", - "jest-util": "^29.3.1" - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - } - } - }, - "ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "requires": { - "type": "^2.7.2" - }, - "dependencies": { - "type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "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==", - "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": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - } - } - }, - "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-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "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": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", - "requires": { - "format": "^0.2.0" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "requires": { - "bser": "2.1.1" - } - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" - }, - "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==", - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-loader": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.1.tgz", - "integrity": "sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==", - "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==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, - "filesize": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", - "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==" - }, - "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==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "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==", - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - }, - "flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" - }, - "flow-parser": { - "version": "0.121.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.121.0.tgz", - "integrity": "sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg==", - "peer": true - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" - }, - "fork-ts-checker-webpack-plugin": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", - "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==", - "requires": { - "@babel/code-frame": "^7.5.5", - "chalk": "^2.4.1", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" - }, - "dependencies": { - "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==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.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==", - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "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" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==" - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "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": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - }, - "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==" - }, - "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.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "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==" - }, - "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==", - "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==", - "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": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==" - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", - "optional": true, - "requires": { - "delegate": "^3.1.2" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==", - "optional": true - }, - "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" - }, - "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.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "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": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "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": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "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": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "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==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" - }, - "hastscript": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", - "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", - "requires": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "hermes-estree": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.8.0.tgz", - "integrity": "sha512-W6JDAOLZ5pMPMjEiQGLCXSSV7pIBEgRR5zGkxgmzGSXHOxqV5dC/M1Zevqpbm9TZDE5tu358qZf8Vkzmsc+u7Q==", - "peer": true - }, - "hermes-parser": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.8.0.tgz", - "integrity": "sha512-yZKalg1fTYG5eOiToLUaw69rQfZq/fi+/NtEXRU7N87K/XobNRhRWorh80oSge2lWUiZfTgUvRJH+XgZWrhoqA==", - "peer": true, - "requires": { - "hermes-estree": "0.8.0" - } - }, - "hermes-profile-transformer": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", - "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", - "peer": true, - "requires": { - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "peer": true - } - } - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, - "highlight.js": { - "version": "9.18.5", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz", - "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==" - }, - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.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==" - } - } - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" - }, - "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==" - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==" - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==" - }, - "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==", - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - } - }, - "html-webpack-plugin": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz", - "integrity": "sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw==", - "requires": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.15", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "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==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "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-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.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==", - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "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" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" - }, - "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==", - "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==" - }, - "hyphenate-style-name": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", - "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "requires": { - "postcss": "^7.0.14" - } - }, - "identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "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==" - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==" - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - }, - "image-size": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", - "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==", - "peer": true - }, - "immer": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", - "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" - }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==", - "requires": { - "import-from": "^2.1.0" - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "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==" - } - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==", - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==" - } - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "dependencies": { - "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==", - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==" - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "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==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "internmap": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", - "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "peer": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==" - }, - "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==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.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": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "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==", - "optional": 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==", - "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==" - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - }, - "dependencies": { - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - } - } - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "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==", - "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-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==" - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - }, - "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==", - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "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==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" - }, - "is-in-browser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==" - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "peer": true - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==" - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" - }, - "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==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" - }, - "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==", - "requires": { - "isobject": "^3.0.1" - } - }, - "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==" - }, - "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-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==" - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "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==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "peer": true - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==" - }, - "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==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "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==" - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - }, - "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==" - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "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" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "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==", - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "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==", - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "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==", - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "26.6.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.0.tgz", - "integrity": "sha512-jxTmrvuecVISvKFFhOkjsWRZV7sFqdSUAd1ajOKY+/QE/aLBVstsJ/dX8GczLzwiT6ZEwwmZqtCUHLHHQVzcfA==", - "requires": { - "@jest/core": "^26.6.0", - "import-local": "^3.0.2", - "jest-cli": "^26.6.0" - } - }, - "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==", - "requires": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-circus": { - "version": "26.6.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-26.6.0.tgz", - "integrity": "sha512-L2/Y9szN6FJPWFK8kzWXwfp+FOR7xq0cUL4lIsdbIdwz3Vh6P1nrpcqOleSzr28zOtSHQNV9Z7Tl+KkuK7t5Ng==", - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.0", - "@jest/test-result": "^26.6.0", - "@jest/types": "^26.6.0", - "@types/babel__traverse": "^7.0.4", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^26.6.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.0", - "jest-matcher-utils": "^26.6.0", - "jest-message-util": "^26.6.0", - "jest-runner": "^26.6.0", - "jest-runtime": "^26.6.0", - "jest-snapshot": "^26.6.0", - "jest-util": "^26.6.0", - "pretty-format": "^26.6.0", - "stack-utils": "^2.0.2", - "throat": "^5.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "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==" - }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "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" - } - }, - "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==", - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^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==" - }, - "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==", - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "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==", - "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" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - }, - "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==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "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": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - } - } - }, - "jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "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": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "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==" - }, - "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==", - "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" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - }, - "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==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-diff": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.3.1.tgz", - "integrity": "sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==", - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.3.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - }, - "pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - } - } - }, - "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==", - "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==", - "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": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "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==" - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - }, - "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==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "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==", - "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" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - } - } - }, - "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==", - "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" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - } - } - }, - "jest-get-type": { - "version": "29.2.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz", - "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==" - }, - "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==", - "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" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - }, - "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==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - } - } - }, - "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==", - "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": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "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==" - }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "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" - } - }, - "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==", - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^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==" - }, - "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==", - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "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==", - "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" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - }, - "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==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "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==", - "requires": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "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==" - }, - "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==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-matcher-utils": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.3.1.tgz", - "integrity": "sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ==", - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^29.3.1", - "jest-get-type": "^29.2.0", - "pretty-format": "^29.3.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - }, - "pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - } - } - }, - "jest-message-util": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.3.1.tgz", - "integrity": "sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.3.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.3.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - }, - "pretty-format": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz", - "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==", - "requires": { - "@jest/schemas": "^29.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - } - } - }, - "jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "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==" - }, - "jest-resolve": { - "version": "26.6.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.0.tgz", - "integrity": "sha512-tRAz2bwraHufNp+CCmAD8ciyCpXCs1NQxB5EJAmtCFy6BN81loFEGWKzYu26Y62lAJJe4X4jg36Kf+NsQyiStQ==", - "requires": { - "@jest/types": "^26.6.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.0", - "read-pkg-up": "^7.0.1", - "resolve": "^1.17.0", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - } - } - }, - "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==", - "requires": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - } - } - }, - "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==", - "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": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "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==", - "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" - } - }, - "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==", - "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" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - }, - "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==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "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==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "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": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "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==", - "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" - } - }, - "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==", - "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" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - }, - "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==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "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==", - "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": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "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==" - }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "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" - } - }, - "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==", - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^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==" - }, - "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==", - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "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==", - "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" - } - }, - "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==", - "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" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - }, - "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==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-util": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", - "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", - "requires": { - "@jest/types": "^29.3.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "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==", - "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": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "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==" - }, - "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==", - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - } - } - }, - "jest-watch-typeahead": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.6.1.tgz", - "integrity": "sha512-ITVnHhj3Jd/QkqQcTqZfRgjfyRhDFM/auzgVo2RKvSwi18YMvh0WvXDJFoFED6c7jd/5jxtu4kSOb9PTu2cPVg==", - "requires": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^26.0.0", - "jest-watcher": "^26.3.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0" - } - }, - "jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "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": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "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" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "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" - } - } - } - }, - "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==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "joi": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", - "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", - "peer": true, - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - }, - "dependencies": { - "@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "peer": true - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "peer": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - } - } - }, - "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==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsc-android": { - "version": "250230.2.1", - "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250230.2.1.tgz", - "integrity": "sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q==", - "peer": true - }, - "jscodeshift": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.13.1.tgz", - "integrity": "sha512-lGyiEbGOvmMRKgWk4vf+lUrCWO/8YR8sUR3FKF1Cq5fovjZDlIcw3Hu5ppLHAnEXshVffvaM0eyuY/AbOeYpnQ==", - "peer": true, - "requires": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^3.1.10", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.20.4", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "peer": 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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "peer": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "peer": 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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "peer": 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": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "peer": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "peer": 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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "peer": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "peer": 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" - } - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "peer": true, - "requires": { - "rimraf": "~2.6.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "peer": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "peer": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - } - } - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "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.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "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==" - }, - "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==" - }, - "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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jss": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.9.2.tgz", - "integrity": "sha512-b8G6rWpYLR4teTUbGd4I4EsnWjg7MN0Q5bSsjKhVkJVjhQDy2KzkbD2AW3TuT0RYZVmZZHKIrXDn6kjU14qkUg==", - "requires": { - "@babel/runtime": "^7.3.1", - "csstype": "^3.0.2", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - }, - "dependencies": { - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - } - } - }, - "jss-plugin-camel-case": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.2.tgz", - "integrity": "sha512-wgBPlL3WS0WDJ1lPJcgjux/SHnDuu7opmgQKSraKs4z8dCCyYMx9IDPFKBXQ8Q5dVYij1FFV0WdxyhuOOAXuTg==", - "requires": { - "@babel/runtime": "^7.3.1", - "hyphenate-style-name": "^1.0.3", - "jss": "10.9.2" - } - }, - "jss-plugin-default-unit": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.2.tgz", - "integrity": "sha512-pYg0QX3bBEFtTnmeSI3l7ad1vtHU42YEEpgW7pmIh+9pkWNWb5dwS/4onSfAaI0kq+dOZHzz4dWe+8vWnanoSg==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.9.2" - } - }, - "jss-plugin-global": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.9.2.tgz", - "integrity": "sha512-GcX0aE8Ef6AtlasVrafg1DItlL/tWHoC4cGir4r3gegbWwF5ZOBYhx04gurPvWHC8F873aEGqge7C17xpwmp2g==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.9.2" - } - }, - "jss-plugin-nested": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.9.2.tgz", - "integrity": "sha512-VgiOWIC6bvgDaAL97XCxGD0BxOKM0K0zeB/ECyNaVF6FqvdGB9KBBWRdy2STYAss4VVA7i5TbxFZN+WSX1kfQA==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.9.2", - "tiny-warning": "^1.0.2" - } - }, - "jss-plugin-props-sort": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.2.tgz", - "integrity": "sha512-AP1AyUTbi2szylgr+O0OB7gkIxEGzySLITZ2GpsaoX72YMCGI2jYAc+WUhPfvUnZYiauF4zTnN4V4TGuvFjJlw==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.9.2" - } - }, - "jss-plugin-rule-value-function": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.2.tgz", - "integrity": "sha512-vf5ms8zvLFMub6swbNxvzsurHfUZ5Shy5aJB2gIpY6WNA3uLinEcxYyraQXItRHi5ivXGqYciFDRM2ZoVoRZ4Q==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.9.2", - "tiny-warning": "^1.0.2" - } - }, - "jss-plugin-vendor-prefixer": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.2.tgz", - "integrity": "sha512-SxcEoH+Rttf9fEv6KkiPzLdXRmI6waOTcMkbbEFgdZLDYNIP9UKNHFy6thhbRKqv0XMQZdrEsbDyV464zE/dUA==", - "requires": { - "@babel/runtime": "^7.3.1", - "css-vendor": "^2.0.8", - "jss": "10.9.2" - } - }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" - }, - "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==" - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "peer": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" - }, - "konva": { - "version": "8.3.14", - "resolved": "https://registry.npmjs.org/konva/-/konva-8.3.14.tgz", - "integrity": "sha512-6I/TZppgY3Frs//AvZ87YVQLFxLywitb8wLS3qMM+Ih9e4QcB5Yy8br6eq7DdUzxPdbsYTz1FQBHzNxs08M1Tw==", - "peer": true - }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "requires": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.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==" - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.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==" - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" - }, - "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==", - "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==", - "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-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "peer": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "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==" - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", - "peer": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "peer": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "logkitty": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", - "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", - "peer": true, - "requires": { - "ansi-fragments": "^0.2.1", - "dayjs": "^1.8.15", - "yargs": "^15.1.0" - } - }, - "loglevel": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", - "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==" - }, - "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" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "requires": { - "tslib": "^2.0.3" - } - }, - "lowlight": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.11.0.tgz", - "integrity": "sha512-xrGGN6XLL7MbTMdPD6NfWPwY43SNkjf/d0mecSx/CW36fUZTjRHEq0/Cdug3TWKtRXLWi7iMl1eP0olYxj/a4A==", - "requires": { - "fault": "^1.0.2", - "highlight.js": "~9.13.0" - }, - "dependencies": { - "highlight.js": { - "version": "9.13.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.13.1.tgz", - "integrity": "sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==" - } - } - }, - "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==", - "requires": { - "yallist": "^4.0.0" - } - }, - "lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==" - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "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": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", - "peer": true - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "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==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "metro": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.72.3.tgz", - "integrity": "sha512-Hb3xTvPqex8kJ1hutQNZhQadUKUwmns/Du9GikmWKBFrkiG3k3xstGAyO5t5rN9JSUEzQT6y9SWzSSOGogUKIg==", - "peer": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/core": "^7.14.0", - "@babel/generator": "^7.14.0", - "@babel/parser": "^7.14.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.0.0", - "absolute-path": "^0.0.0", - "accepts": "^1.3.7", - "async": "^3.2.2", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "denodeify": "^1.2.1", - "error-stack-parser": "^2.0.6", - "fs-extra": "^1.0.0", - "graceful-fs": "^4.2.4", - "hermes-parser": "0.8.0", - "image-size": "^0.6.0", - "invariant": "^2.2.4", - "jest-worker": "^27.2.0", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.72.3", - "metro-cache": "0.72.3", - "metro-cache-key": "0.72.3", - "metro-config": "0.72.3", - "metro-core": "0.72.3", - "metro-file-map": "0.72.3", - "metro-hermes-compiler": "0.72.3", - "metro-inspector-proxy": "0.72.3", - "metro-minify-uglify": "0.72.3", - "metro-react-native-babel-preset": "0.72.3", - "metro-resolver": "0.72.3", - "metro-runtime": "0.72.3", - "metro-source-map": "0.72.3", - "metro-symbolicate": "0.72.3", - "metro-transform-plugins": "0.72.3", - "metro-transform-worker": "0.72.3", - "mime-types": "^2.1.27", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.1", - "rimraf": "^2.5.4", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "strip-ansi": "^6.0.0", - "temp": "0.8.3", - "throat": "^5.0.0", - "ws": "^7.5.1", - "yargs": "^15.3.1" - }, - "dependencies": { - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "peer": 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==", - "peer": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==", - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "peer": true, - "requires": { - "glob": "^7.1.3" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "peer": true - } - } - }, - "metro-babel-transformer": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.72.3.tgz", - "integrity": "sha512-PTOR2zww0vJbWeeM3qN90WKENxCLzv9xrwWaNtwVlhcV8/diNdNe82sE1xIxLFI6OQuAVwNMv1Y7VsO2I7Ejrw==", - "peer": true, - "requires": { - "@babel/core": "^7.14.0", - "hermes-parser": "0.8.0", - "metro-source-map": "0.72.3", - "nullthrows": "^1.1.1" - } - }, - "metro-cache": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.72.3.tgz", - "integrity": "sha512-++eyZzwkXvijWRV3CkDbueaXXGlVzH9GA52QWqTgAOgSHYp5jWaDwLQ8qpsMkQzpwSyIF4LLK9aI3eA7Xa132A==", - "peer": true, - "requires": { - "metro-core": "0.72.3", - "rimraf": "^2.5.4" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "peer": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "metro-cache-key": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.72.3.tgz", - "integrity": "sha512-kQzmF5s3qMlzqkQcDwDxrOaVxJ2Bh6WRXWdzPnnhsq9LcD3B3cYqQbRBS+3tSuXmathb4gsOdhWslOuIsYS8Rg==", - "peer": true - }, - "metro-config": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.72.3.tgz", - "integrity": "sha512-VEsAIVDkrIhgCByq8HKTWMBjJG6RlYwWSu1Gnv3PpHa0IyTjKJtB7wC02rbTjSaemcr82scldf2R+h6ygMEvsw==", - "peer": true, - "requires": { - "cosmiconfig": "^5.0.5", - "jest-validate": "^26.5.2", - "metro": "0.72.3", - "metro-cache": "0.72.3", - "metro-core": "0.72.3", - "metro-runtime": "0.72.3" - }, - "dependencies": { - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "peer": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "peer": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "peer": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "peer": true - } - } - }, - "metro-core": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.72.3.tgz", - "integrity": "sha512-KuYWBMmLB4+LxSMcZ1dmWabVExNCjZe3KysgoECAIV+wyIc2r4xANq15GhS94xYvX1+RqZrxU1pa0jQ5OK+/6A==", - "peer": true, - "requires": { - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.72.3" - } - }, - "metro-file-map": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.72.3.tgz", - "integrity": "sha512-LhuRnuZ2i2uxkpFsz1XCDIQSixxBkBG7oICAFyLyEMDGbcfeY6/NexphfLdJLTghkaoJR5ARFMiIxUg9fIY/pA==", - "peer": true, - "requires": { - "abort-controller": "^3.0.0", - "anymatch": "^3.0.3", - "debug": "^2.2.0", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-regex-util": "^27.0.6", - "jest-serializer": "^27.0.6", - "jest-util": "^27.2.0", - "jest-worker": "^27.2.0", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "dependencies": { - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "peer": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "peer": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "peer": true - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "peer": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "peer": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - } - } - }, - "metro-hermes-compiler": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.72.3.tgz", - "integrity": "sha512-QWDQASMiXNW3j8uIQbzIzCdGYv5PpAX/ZiF4/lTWqKRWuhlkP4auhVY4eqdAKj5syPx45ggpjkVE0p8hAPDZYg==", - "peer": true - }, - "metro-inspector-proxy": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.72.3.tgz", - "integrity": "sha512-UPFkaq2k93RaOi+eqqt7UUmqy2ywCkuxJLasQ55+xavTUS+TQSyeTnTczaYn+YKw+izLTLllGcvqnQcZiWYhGw==", - "peer": true, - "requires": { - "connect": "^3.6.5", - "debug": "^2.2.0", - "ws": "^7.5.1", - "yargs": "^15.3.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "peer": true - } - } - }, - "metro-minify-uglify": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.72.3.tgz", - "integrity": "sha512-dPXqtMI8TQcj0g7ZrdhC8X3mx3m3rtjtMuHKGIiEXH9CMBvrET8IwrgujQw2rkPcXiSiX8vFDbGMIlfxefDsKA==", - "peer": true, - "requires": { - "uglify-es": "^3.1.9" - } - }, - "metro-react-native-babel-preset": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.72.3.tgz", - "integrity": "sha512-uJx9y/1NIqoYTp6ZW1osJ7U5ZrXGAJbOQ/Qzl05BdGYvN1S7Qmbzid6xOirgK0EIT0pJKEEh1s8qbassYZe4cw==", - "peer": true, - "requires": { - "@babel/core": "^7.14.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "dependencies": { - "react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", - "peer": true - } - } - }, - "metro-react-native-babel-transformer": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.72.3.tgz", - "integrity": "sha512-Ogst/M6ujYrl/+9mpEWqE3zF7l2mTuftDTy3L8wZYwX1pWUQWQpfU1aJBeWiLxt1XlIq+uriRjKzKoRoIK57EA==", - "peer": true, - "requires": { - "@babel/core": "^7.14.0", - "babel-preset-fbjs": "^3.4.0", - "hermes-parser": "0.8.0", - "metro-babel-transformer": "0.72.3", - "metro-react-native-babel-preset": "0.72.3", - "metro-source-map": "0.72.3", - "nullthrows": "^1.1.1" - } - }, - "metro-resolver": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.72.3.tgz", - "integrity": "sha512-wu9zSMGdxpKmfECE7FtCdpfC+vrWGTdVr57lDA0piKhZV6VN6acZIvqQ1yZKtS2WfKsngncv5VbB8Y5eHRQP3w==", - "peer": true, - "requires": { - "absolute-path": "^0.0.0" - } - }, - "metro-runtime": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.72.3.tgz", - "integrity": "sha512-3MhvDKfxMg2u7dmTdpFOfdR71NgNNo4tzAyJumDVQKwnHYHN44f2QFZQqpPBEmqhWlojNeOxsqFsjYgeyMx6VA==", - "peer": true, - "requires": { - "@babel/runtime": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "dependencies": { - "react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", - "peer": true - } - } - }, - "metro-source-map": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.72.3.tgz", - "integrity": "sha512-eNtpjbjxSheXu/jYCIDrbNEKzMGOvYW6/ePYpRM7gDdEagUOqKOCsi3St8NJIQJzZCsxD2JZ2pYOiomUSkT1yQ==", - "peer": true, - "requires": { - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.0.0", - "invariant": "^2.2.4", - "metro-symbolicate": "0.72.3", - "nullthrows": "^1.1.1", - "ob1": "0.72.3", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "peer": true - } - } - }, - "metro-symbolicate": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.72.3.tgz", - "integrity": "sha512-eXG0NX2PJzJ/jTG4q5yyYeN2dr1cUqUaY7worBB0SP5bRWRc3besfb+rXwfh49wTFiL5qR0oOawkU4ZiD4eHXw==", - "peer": true, - "requires": { - "invariant": "^2.2.4", - "metro-source-map": "0.72.3", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "peer": true - } - } - }, - "metro-transform-plugins": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.72.3.tgz", - "integrity": "sha512-D+TcUvCKZbRua1+qujE0wV1onZvslW6cVTs7dLCyC2pv20lNHjFr1GtW01jN2fyKR2PcRyMjDCppFd9VwDKnSg==", - "peer": true, - "requires": { - "@babel/core": "^7.14.0", - "@babel/generator": "^7.14.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.14.0", - "nullthrows": "^1.1.1" - } - }, - "metro-transform-worker": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.72.3.tgz", - "integrity": "sha512-WsuWj9H7i6cHuJuy+BgbWht9DK5FOgJxHLGAyULD5FJdTG9rSMFaHDO5WfC0OwQU5h4w6cPT40iDuEGksM7+YQ==", - "peer": true, - "requires": { - "@babel/core": "^7.14.0", - "@babel/generator": "^7.14.0", - "@babel/parser": "^7.14.0", - "@babel/types": "^7.0.0", - "babel-preset-fbjs": "^3.4.0", - "metro": "0.72.3", - "metro-babel-transformer": "0.72.3", - "metro-cache": "0.72.3", - "metro-cache-key": "0.72.3", - "metro-hermes-compiler": "0.72.3", - "metro-source-map": "0.72.3", - "metro-transform-plugins": "0.72.3", - "nullthrows": "^1.1.1" - } - }, - "microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" - }, - "mini-css-extract-plugin": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz", - "integrity": "sha512-n9BA8LonkOkW1/zn+IbLPQmovsL0wMb9yx75fMJQZf2X1Zoec9yTZtyMePcyu19wPkmFbzZZA6fLTotpFhQsOA==", - "requires": { - "loader-utils": "^1.1.0", - "normalize-url": "1.9.1", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "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==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" - }, - "minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==" - }, - "nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "optional": true - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "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" - } - }, - "native-url": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/native-url/-/native-url-0.2.6.tgz", - "integrity": "sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA==", - "requires": { - "querystring": "^0.2.0" - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "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==" - }, - "next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "nocache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-3.0.4.tgz", - "integrity": "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==", - "peer": true - }, - "node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "peer": true, - "requires": { - "minimatch": "^3.0.2" - } - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "peer": true, - "requires": { - "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "peer": true - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "peer": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "peer": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - } - } - }, - "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==", - "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" - } - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" - }, - "node-stream-zip": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", - "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", - "peer": 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==", - "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==" - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" - }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.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==", - "requires": { - "path-key": "^3.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "requires": { - "boolbase": "^1.0.0" - } - }, - "nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "peer": true - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==" - }, - "nwsapi": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", - "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==" - }, - "ob1": { - "version": "0.72.3", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.72.3.tgz", - "integrity": "sha512-OnVto25Sj7Ghp0vVm2THsngdze3tVq0LOg9LUHsAVXMecpqOP0Y8zaATW8M9gEgs2lNEAcCqV0P/hlmOPhVRvg==", - "peer": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "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==", - "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==" - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "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": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "requires": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "requires": { - "is-wsl": "^1.1.0" - }, - "dependencies": { - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==" - } - } - }, - "optimize-css-assets-webpack-plugin": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz", - "integrity": "sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A==", - "requires": { - "cssnano": "^4.1.10", - "last-call-webpack-plugin": "^3.0.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "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" - } - }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "peer": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "peer": true - }, - "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==" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "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==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "requires": { - "retry": "^0.12.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==" - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "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==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", - "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "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" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==" - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" - }, - "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==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "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==" - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - } - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - } - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - } - } - }, - "pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "requires": { - "ts-pnp": "^1.1.6" - } - }, - "pointer-events-polyfill": { - "version": "0.4.4-pre", - "resolved": "https://registry.npmjs.org/pointer-events-polyfill/-/pointer-events-polyfill-0.4.4-pre.tgz", - "integrity": "sha512-t7iitVY5jW9mGOFZEHphJOzB8eMhoYaE6I5HqsUX14rjsPa9F6OlMOCj3EpqDzNb/8XtMk2BxMpOyePPyuefHw==", - "peer": true - }, - "popper.js": { - "version": "1.16.1-lts", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz", - "integrity": "sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==" - }, - "portfinder": { - "version": "1.0.32", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", - "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", - "requires": { - "async": "^2.6.4", - "debug": "^3.2.7", - "mkdirp": "^0.5.6" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==" - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^6.0.2" - } - }, - "postcss-browser-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz", - "integrity": "sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig==", - "requires": { - "postcss": "^7" - } - }, - "postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", - "requires": { - "postcss": "^7.0.14", - "postcss-values-parser": "^2.0.1" - } - }, - "postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", - "requires": { - "postcss": "^7.0.14" - } - }, - "postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", - "requires": { - "postcss": "^7.0.17", - "postcss-values-parser": "^2.0.1" - } - }, - "postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", - "requires": { - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-flexbugs-fixes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz", - "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==", - "requires": { - "postcss": "^7.0.26" - } - }, - "postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-font-variant": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", - "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-initial": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", - "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", - "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==" - } - } - }, - "postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", - "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "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==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - } - }, - "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-normalize": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-8.0.1.tgz", - "integrity": "sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ==", - "requires": { - "@csstools/normalize.css": "^10.1.0", - "browserslist": "^4.6.2", - "postcss": "^7.0.17", - "postcss-browser-comments": "^3.0.0", - "sanitize.css": "^10.0.0" - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "requires": { - "autoprefixer": "^9.6.1", - "browserslist": "^4.6.4", - "caniuse-lite": "^1.0.30000981", - "css-blank-pseudo": "^0.1.4", - "css-has-pseudo": "^0.10.0", - "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.4.0", - "postcss": "^7.0.17", - "postcss-attribute-case-insensitive": "^4.0.1", - "postcss-color-functional-notation": "^2.0.1", - "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.3", - "postcss-color-mod-function": "^3.0.3", - "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.8", - "postcss-custom-properties": "^8.0.11", - "postcss-custom-selectors": "^5.1.2", - "postcss-dir-pseudo-class": "^5.0.0", - "postcss-double-position-gradients": "^1.0.0", - "postcss-env-function": "^2.0.2", - "postcss-focus-visible": "^4.0.0", - "postcss-focus-within": "^3.0.0", - "postcss-font-variant": "^4.0.0", - "postcss-gap-properties": "^2.0.0", - "postcss-image-set-function": "^3.0.1", - "postcss-initial": "^3.0.0", - "postcss-lab-function": "^2.0.1", - "postcss-logical": "^3.0.0", - "postcss-media-minmax": "^4.0.0", - "postcss-nesting": "^7.0.0", - "postcss-overflow-shorthand": "^2.0.0", - "postcss-page-break": "^2.0.0", - "postcss-place": "^4.0.1", - "postcss-pseudo-class-any-link": "^6.0.0", - "postcss-replace-overflow-wrap": "^3.0.0", - "postcss-selector-matches": "^4.0.0", - "postcss-selector-not": "^4.0.0" - } - }, - "postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-safe-parser": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-5.0.2.tgz", - "integrity": "sha512-jDUfCPJbKOABhwpUKcqCVbbXiloe/QXMcbJ6Iipf3sDIihEzTqRCeMBfRaOHxhBuTYqtASrI1KJWxzztZU4qUQ==", - "requires": { - "postcss": "^8.1.0" - }, - "dependencies": { - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "postcss": { - "version": "8.4.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", - "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - } - } - }, - "postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "postcss-selector-not": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", - "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-svgo": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", - "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - } - }, - "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==" - }, - "postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", - "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==" - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" - }, - "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "requires": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "peer": true, - "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "peer": true - } - } - }, - "prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" - }, - "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==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "requires": { - "asap": "~2.0.6" - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" - }, - "prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "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==" - } - } - }, - "property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "requires": { - "xtend": "^4.0.0" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "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==" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", - "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==" - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "requires": { - "performance-now": "^2.1.0" - } - }, - "rafz": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/rafz/-/rafz-0.1.14.tgz", - "integrity": "sha512-YiQkedSt1urYtYbvHhTQR3l67M8SZbUvga5eJFM/v4vx/GmDdtXlE2hjJIyRjhhO/PjcdGC+CXCYOUA4onit8w==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - } - } - }, - "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-app-polyfill": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-2.0.0.tgz", - "integrity": "sha512-0sF4ny9v/B7s6aoehwze9vJNWcmCemAUYBVasscVr92+UYiEqDXOxfKjXN685mDaMRNF3WdhHQs76oTODMocFA==", - "requires": { - "core-js": "^3.6.5", - "object-assign": "^4.1.1", - "promise": "^8.1.0", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.7", - "whatwg-fetch": "^3.4.1" - } - }, - "react-dev-utils": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", - "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", - "requires": { - "@babel/code-frame": "7.10.4", - "address": "1.1.2", - "browserslist": "4.14.2", - "chalk": "2.4.2", - "cross-spawn": "7.0.3", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.1.0", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "4.1.6", - "global-modules": "2.0.0", - "globby": "11.0.1", - "gzip-size": "5.1.1", - "immer": "8.0.1", - "is-root": "2.1.0", - "loader-utils": "2.0.0", - "open": "^7.0.2", - "pkg-up": "3.1.0", - "prompts": "2.4.0", - "react-error-overlay": "^6.0.9", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "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==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "browserslist": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz", - "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==", - "requires": { - "caniuse-lite": "^1.0.30001125", - "electron-to-chromium": "^1.3.564", - "escalade": "^3.0.2", - "node-releases": "^1.1.61" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - } - } - }, - "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==", - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "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==" - }, - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "node-releases": { - "version": "1.1.77", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", - "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "react-devtools-core": { - "version": "4.24.0", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.24.0.tgz", - "integrity": "sha512-Rw7FzYOOzcfyUPaAm9P3g0tFdGqGq2LLiAI+wjYcp6CsF3DeeMrRS3HZAho4s273C29G/DJhx0e8BpRE/QZNGg==", - "peer": true, - "requires": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "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-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "react-hook-form": { - "version": "7.39.4", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.39.4.tgz", - "integrity": "sha512-B0e78r9kR9L2M4A4AXGbHoA/vyv34sB/n8QWJAw33TFz8f5t9helBbYAeqnbvcQf1EYzJxKX/bGQQh9K+evCyQ==", - "requires": {} - }, - "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==" - }, - "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-native-codegen": { - "version": "0.70.6", - "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.70.6.tgz", - "integrity": "sha512-kdwIhH2hi+cFnG5Nb8Ji2JwmcCxnaOOo9440ov7XDzSvGfmUStnCzl+MCW8jLjqHcE4icT7N9y+xx4f50vfBTw==", - "peer": true, - "requires": { - "@babel/parser": "^7.14.0", - "flow-parser": "^0.121.0", - "jscodeshift": "^0.13.1", - "nullthrows": "^1.1.1" - } - }, - "react-native-gradle-plugin": { - "version": "0.70.3", - "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.70.3.tgz", - "integrity": "sha512-oOanj84fJEXUg9FoEAQomA8ISG+DVIrTZ3qF7m69VQUJyOGYyDZmPqKcjvRku4KXlEH6hWO9i4ACLzNBh8gC0A==", - "peer": true - }, - "react-refresh": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", - "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==" - }, - "react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "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==" - } - } - }, - "react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-scripts": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-4.0.3.tgz", - "integrity": "sha512-S5eO4vjUzUisvkIPB7jVsKtuH2HhWcASREYWHAQ1FP5HyCv3xgn+wpILAEWkmy+A+tTNbSZClhxjT3qz6g4L1A==", - "requires": { - "@babel/core": "7.12.3", - "@pmmmwh/react-refresh-webpack-plugin": "0.4.3", - "@svgr/webpack": "5.5.0", - "@typescript-eslint/eslint-plugin": "^4.5.0", - "@typescript-eslint/parser": "^4.5.0", - "babel-eslint": "^10.1.0", - "babel-jest": "^26.6.0", - "babel-loader": "8.1.0", - "babel-plugin-named-asset-import": "^0.3.7", - "babel-preset-react-app": "^10.0.0", - "bfj": "^7.0.2", - "camelcase": "^6.1.0", - "case-sensitive-paths-webpack-plugin": "2.3.0", - "css-loader": "4.3.0", - "dotenv": "8.2.0", - "dotenv-expand": "5.1.0", - "eslint": "^7.11.0", - "eslint-config-react-app": "^6.0.0", - "eslint-plugin-flowtype": "^5.2.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jest": "^24.1.0", - "eslint-plugin-jsx-a11y": "^6.3.1", - "eslint-plugin-react": "^7.21.5", - "eslint-plugin-react-hooks": "^4.2.0", - "eslint-plugin-testing-library": "^3.9.2", - "eslint-webpack-plugin": "^2.5.2", - "file-loader": "6.1.1", - "fs-extra": "^9.0.1", - "fsevents": "^2.1.3", - "html-webpack-plugin": "4.5.0", - "identity-obj-proxy": "3.0.0", - "jest": "26.6.0", - "jest-circus": "26.6.0", - "jest-resolve": "26.6.0", - "jest-watch-typeahead": "0.6.1", - "mini-css-extract-plugin": "0.11.3", - "optimize-css-assets-webpack-plugin": "5.0.4", - "pnp-webpack-plugin": "1.6.4", - "postcss-flexbugs-fixes": "4.2.1", - "postcss-loader": "3.0.0", - "postcss-normalize": "8.0.1", - "postcss-preset-env": "6.7.0", - "postcss-safe-parser": "5.0.2", - "prompts": "2.4.0", - "react-app-polyfill": "^2.0.0", - "react-dev-utils": "^11.0.3", - "react-refresh": "^0.8.3", - "resolve": "1.18.1", - "resolve-url-loader": "^3.1.2", - "sass-loader": "^10.0.5", - "semver": "7.3.2", - "style-loader": "1.3.0", - "terser-webpack-plugin": "4.2.3", - "ts-pnp": "1.2.0", - "url-loader": "4.1.1", - "webpack": "4.44.2", - "webpack-dev-server": "3.11.1", - "webpack-manifest-plugin": "2.2.0", - "workbox-webpack-plugin": "5.1.4" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.3", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - } - } - }, - "react-shallow-renderer": { - "version": "16.15.0", - "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", - "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", - "peer": true, - "requires": { - "object-assign": "^4.1.1", - "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" - } - }, - "react-spring": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/react-spring/-/react-spring-9.1.2.tgz", - "integrity": "sha512-xLmkierisElCQShCqAH3PpepjHhCyOK1wGSTdpvG7GGD+SbfG4Sac7wj6wrKTT5A5NUFM5OnVQUXZLe5HScIfA==", - "requires": { - "@react-spring/core": "~9.1.2", - "@react-spring/konva": "~9.1.2", - "@react-spring/native": "~9.1.2", - "@react-spring/three": "~9.1.2", - "@react-spring/web": "~9.1.2", - "@react-spring/zdog": "~9.1.2" - }, - "dependencies": { - "@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "peer": 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" - } - }, - "@react-spring/konva": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/konva/-/konva-9.1.2.tgz", - "integrity": "sha512-P60mhUHRYgPPhoTBQWzuzD3hfeCFWC0BQ7N0iHzpMTzDIrAvutyg+iAX59jSXo3yatrcx60NmlCsiG8tRxbw6w==", - "requires": { - "@react-spring/animated": "~9.1.2", - "@react-spring/core": "~9.1.2", - "@react-spring/shared": "~9.1.2", - "@react-spring/types": "~9.1.2" - } - }, - "@react-spring/native": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/native/-/native-9.1.2.tgz", - "integrity": "sha512-d7+tCoKAnDPSoVtpyFFm4BWQhn1h833ocdP0d2POZzKTcR1iQ8YI7EQ22iKGLvwH+0vjymde039CgYy31INqWQ==", - "requires": { - "@react-spring/animated": "~9.1.2", - "@react-spring/core": "~9.1.2", - "@react-spring/shared": "~9.1.2", - "@react-spring/types": "~9.1.2" - } - }, - "@react-spring/three": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@react-spring/three/-/three-9.1.2.tgz", - "integrity": "sha512-d/v94ykmfJGLTJxJ+jxlTAJSfFdD+SSf+yvXReS81hc7+9VYeEwIHVIEKOzckYnPy/MEOSVhIVKF/9wdFIIo6g==", - "requires": { - "@react-spring/animated": "~9.1.2", - "@react-spring/core": "~9.1.2", - "@react-spring/shared": "~9.1.2", - "@react-spring/types": "~9.1.2" - } - }, - "@react-three/fiber": { - "version": "8.9.1", - "resolved": "https://registry.npmjs.org/@react-three/fiber/-/fiber-8.9.1.tgz", - "integrity": "sha512-xRMO9RGp0DkxSFu5BmmkjCxJ4r0dEpLobtxXdZwI0h2rZZaCnkPM5zThRN8xaZNbZhzRSVICeNOFaZltr9xFyQ==", - "peer": true, - "requires": { - "@babel/runtime": "^7.17.8", - "@types/react-reconciler": "^0.26.7", - "its-fine": "^1.0.6", - "react-reconciler": "^0.27.0", - "react-use-measure": "^2.1.1", - "scheduler": "^0.21.0", - "suspend-react": "^0.0.8", - "zustand": "^3.7.1" - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "peer": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "its-fine": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-1.0.6.tgz", - "integrity": "sha512-VZJZPwVT2kxe5KQv+TxCjojfLiUIut8zXDNLTxcM7gJ/xQ/bSPk5M0neZ+j3myy45KKkltY1mm1jyJgx3Fxsdg==", - "peer": true, - "requires": { - "@types/react-reconciler": "^0.28.0" - }, - "dependencies": { - "@types/react-reconciler": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.0.tgz", - "integrity": "sha512-5cjk9ottZAj7eaTsqzPUIlrVbh3hBAO2YaEL1rkjHKB3xNAId7oU8GhzvAX+gfmlfoxTwJnBjPxEHyxkEA1Ffg==", - "peer": true, - "requires": { - "@types/react": "*" - } - } - } - }, - "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==", - "peer": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - } - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "dependencies": { - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0" - } - } - } - }, - "react-konva": { - "version": "18.2.3", - "resolved": "https://registry.npmjs.org/react-konva/-/react-konva-18.2.3.tgz", - "integrity": "sha512-OPxjBTgaEGU9pt/VJSVM7QNXYHEZ5CkulX+4fTTvbaH+Wh+vMLbXmH3yjWw4kT/5Qi6t0UQKHPPmirCv8/9sdg==", - "peer": true, - "requires": { - "its-fine": "^1.0.6", - "react-reconciler": "~0.29.0", - "scheduler": "^0.23.0" - }, - "dependencies": { - "react-reconciler": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.29.0.tgz", - "integrity": "sha512-wa0fGj7Zht1EYMRhKWwoo1H9GApxYLBuhoAuXN0TlltESAjDssB+Apf0T/DngVqaMyPypDmabL37vw/2aRM98Q==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0" - } - } - } - }, - "react-native": { - "version": "0.70.6", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.70.6.tgz", - "integrity": "sha512-xtQdImPHnwgraEx3HIZFOF+D1hJ9bC5mfpIdUGoMHRws6OmvHAjmFpO6qfdnaQ29vwbmZRq7yf14sbury74R/w==", - "peer": true, - "requires": { - "@jest/create-cache-key-function": "^27.0.1", - "@react-native-community/cli": "9.3.2", - "@react-native-community/cli-platform-android": "9.3.1", - "@react-native-community/cli-platform-ios": "9.3.0", - "@react-native/assets": "1.0.0", - "@react-native/normalize-color": "2.0.0", - "@react-native/polyfills": "2.0.0", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "base64-js": "^1.1.2", - "event-target-shim": "^5.0.1", - "invariant": "^2.2.4", - "jsc-android": "^250230.2.1", - "memoize-one": "^5.0.0", - "metro-react-native-babel-transformer": "0.72.3", - "metro-runtime": "0.72.3", - "metro-source-map": "0.72.3", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1", - "pretty-format": "^26.5.2", - "promise": "^8.3.0", - "react-devtools-core": "4.24.0", - "react-native-codegen": "^0.70.6", - "react-native-gradle-plugin": "^0.70.3", - "react-refresh": "^0.4.0", - "react-shallow-renderer": "^16.15.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "^0.22.0", - "stacktrace-parser": "^0.1.3", - "use-sync-external-store": "^1.0.0", - "whatwg-fetch": "^3.0.0", - "ws": "^6.1.4" - }, - "dependencies": { - "scheduler": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz", - "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0" - } - } - } - }, - "react-reconciler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.27.0.tgz", - "integrity": "sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.21.0" - } - }, - "react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", - "peer": true - }, - "scheduler": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz", - "integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0" - } - }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "peer": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "react-syntax-highlighter": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-11.0.3.tgz", - "integrity": "sha512-0v0ET2qn9oAam4K/Te9Q/2jtS4R2d6wUFqgk5VcxrCBm+4MB5BE+oQf2CA0RanUHbYaYFuagt/AugICU87ufxQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "highlight.js": "~9.18.2", - "lowlight": "~1.11.0", - "prismjs": "^1.8.4", - "refractor": "^2.4.1" - } - }, - "react-token-auth": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/react-token-auth/-/react-token-auth-1.1.9.tgz", - "integrity": "sha512-AtC87tdURl7+o3j3GYS9hYho9PEAG9KjctQ3FPkgiSftGl4qC3AK+jYYByKxphGbBJaV3eOt7rAbR3ApWVQXVg==" - }, - "react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "requires": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - } - }, - "react-use-measure": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/react-use-measure/-/react-use-measure-2.1.1.tgz", - "integrity": "sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig==", - "peer": true, - "requires": { - "debounce": "^1.2.1" - } - }, - "react-zdog": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/react-zdog/-/react-zdog-1.0.11.tgz", - "integrity": "sha512-L6/8Zi+Nf+faNMsSZ31HLmLlu6jcbs/jqqFvme7CFnYjAeYfhJ4HyuHKd7Pu/zk9tegv6FaJj1v+hmUwUpKLQw==", - "peer": true, - "requires": { - "@babel/runtime": "^7.4.4", - "lodash-es": "^4.17.11", - "pointer-events-polyfill": "^0.4.4-pre", - "react-reconciler": "^0.20.4", - "resize-observer-polyfill": "^1.5.1", - "scheduler": "0.13.3" - }, - "dependencies": { - "react-reconciler": { - "version": "0.20.4", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.20.4.tgz", - "integrity": "sha512-kxERc4H32zV2lXMg/iMiwQHOtyqf15qojvkcZ5Ja2CPkjVohHw9k70pdDBwrnQhLVetUJBSYyqU3yqrlVTOajA==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" - }, - "dependencies": { - "scheduler": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", - "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - } - } - }, - "scheduler": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.3.tgz", - "integrity": "sha512-UxN5QRYWtpR1egNWzJcVLk8jlegxAugswQc984lD3kU7NuobsO37/sRfbpTdBjtnD5TBNFA2Q2oLV5+UmPSmEQ==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - } - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "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==" - } - } - }, - "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==", - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - } - } - }, - "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==", - "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" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "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==" - }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "optional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "readline": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", - "peer": true - }, - "recast": { - "version": "0.20.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", - "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", - "peer": true, - "requires": { - "ast-types": "0.14.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - } - }, - "recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "requires": { - "minimatch": "3.0.4" - }, - "dependencies": { - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "refractor": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/refractor/-/refractor-2.10.1.tgz", - "integrity": "sha512-Xh9o7hQiQlDbxo5/XkOX6H+x/q8rmlmZKr97Ie1Q8ZM32IRRd3B/UxuA/yXDW79DBSXGWxm2yRTbcTVmAciJRw==", - "requires": { - "hastscript": "^5.0.0", - "parse-entities": "^1.1.2", - "prismjs": "~1.17.0" - }, - "dependencies": { - "prismjs": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.17.1.tgz", - "integrity": "sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q==", - "requires": { - "clipboard": "^2.0.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==" - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "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==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" - }, - "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==" - }, - "regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" - }, - "renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "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==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" - }, - "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==" - }, - "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==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "reselect": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", - "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==" - }, - "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.18.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", - "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", - "requires": { - "is-core-module": "^2.0.0", - "path-parse": "^1.0.6" - } - }, - "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==", - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - }, - "resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==" - }, - "resolve-url-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.4.tgz", - "integrity": "sha512-D3sQ04o0eeQEySLrcz4DsX3saHfsr8/N6tfhblxgZKXxMT2Louargg12oGNfoTRLV09GXhVUe5/qgA5vdgNigg==", - "requires": { - "adjust-sourcemap-loader": "3.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.36", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" - }, - "dependencies": { - "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==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.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==", - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "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==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "peer": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha512-eEjL8FdkdsxApd0yWVZgBGzfCQiT8yqSc2H1p4jpZpQdtz7ohETiDMoje5PlM8I9WgkqkreVxFUKYOiJdVWDXw==", - "requires": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" - }, - "dependencies": { - "convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha512-+4nRk0k3oEpwUB7/CalD7xE2z4VmtEnnq0GO2IPTkrooTrAhEsWvuLF5iWP1dXrwluki/azwXV1ve7gtYuPldg==" - } - } - }, - "rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha512-W6V2fix7nCLUYX1v6eGPrBOZlc03/faqzP4sUxMAJMBMOPYhfV/RyLegTufn5gJKaOITyi+gvf0LXDZ9NzkHnQ==" - }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==" - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rollup": { - "version": "1.32.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", - "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", - "requires": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - } - }, - "rollup-plugin-babel": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", - "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "rollup-pluginutils": "^2.8.1" - } - }, - "rollup-plugin-terser": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz", - "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==", - "requires": { - "@babel/code-frame": "^7.5.5", - "jest-worker": "^24.9.0", - "rollup-pluginutils": "^2.8.2", - "serialize-javascript": "^4.0.0", - "terser": "^4.6.2" - }, - "dependencies": { - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "requires": { - "estree-walker": "^0.6.1" - }, - "dependencies": { - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" - } - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "requires": { - "aproba": "^1.1.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "requires": { - "ret": "~0.1.10" - } - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "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==", - "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==", - "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==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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==", - "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==", - "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": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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==", - "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": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "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": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "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": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "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": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "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": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "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==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "sanitize.css": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-10.0.0.tgz", - "integrity": "sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg==" - }, - "sass-loader": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.4.1.tgz", - "integrity": "sha512-aX/iJZTTpNUNx/OSYzo2KsjIUQHqvWsAhhUijFjAPdZTEhstjZI9zTNvkTTwsx+uNUJqUwOw5gacxQMx4hJxGQ==", - "requires": { - "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", - "semver": "^7.3.2" - }, - "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==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "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==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==", - "optional": true - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "selfsigned": { - "version": "1.10.14", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", - "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", - "requires": { - "node-forge": "^0.10.0" - } - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "serialize-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", - "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", - "peer": true - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, - "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==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.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==", - "peer": 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==", - "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==" - }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "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==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - } - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "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==", - "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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==", - "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": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "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==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - } - } - }, - "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==", - "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": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "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==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "sockjs-client": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.6.1.tgz", - "integrity": "sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==", - "requires": { - "debug": "^3.2.7", - "eventsource": "^2.0.2", - "faye-websocket": "^0.11.4", - "inherits": "^2.0.4", - "url-parse": "^1.5.10" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "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==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "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-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==", - "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==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "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==" - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - }, - "space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "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==" - }, - "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==", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "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==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "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==", - "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": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "requires": { - "minipass": "^3.1.1" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "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==" - } - } - }, - "stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" - }, - "stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "peer": true, - "requires": { - "type-fest": "^0.7.1" - }, - "dependencies": { - "type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "peer": true - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "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": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "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": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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==", - "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==" - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.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==", - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" - }, - "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" - }, - "dependencies": { - "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==" - } - } - }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "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==" - }, - "strip-comments": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", - "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", - "requires": { - "babel-extract-comments": "^1.0.0", - "babel-plugin-transform-object-rest-spread": "^6.26.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==" - }, - "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==" - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "requires": { - "min-indent": "^1.0.0" - } - }, - "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==" - }, - "style-loader": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", - "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0" - } - }, - "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "sudo-prompt": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", - "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", - "peer": true - }, - "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==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "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==" - }, - "suspend-react": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/suspend-react/-/suspend-react-0.0.8.tgz", - "integrity": "sha512-ZC3r8Hu1y0dIThzsGw0RLZplnX9yXwfItcvaIzJc2VQVi8TGyGDlu92syMB5ulybfvGLHAI5Ghzlk23UBPF8xg==", - "peer": true, - "requires": {} - }, - "svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "dependencies": { - "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==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.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==", - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - }, - "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - } - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "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==" - }, - "table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "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.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "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==" - } - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - }, - "tar": { - "version": "6.1.12", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", - "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } - } - }, - "temp": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", - "integrity": "sha512-jtnWJs6B1cZlHs9wPG7BrowKxZw/rf6+UpGAkr8AaYmiTyTO7zQlLoST8zx/8TcUPnZmeBoB+H8ARuHZaSijVw==", - "peer": true, - "requires": { - "os-tmpdir": "^1.0.0", - "rimraf": "~2.2.6" - }, - "dependencies": { - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha512-R5KMKHnPAQaZMqLOsyuyUmcIjSeDm+73eoqQpaXA7AZ22BL+6C+1mcUscgOsNd8WVlJuvlgAPsegcx7pjlV0Dg==", - "peer": true - } - } - }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==" - }, - "tempy": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", - "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", - "requires": { - "temp-dir": "^1.0.0", - "type-fest": "^0.3.1", - "unique-string": "^1.0.0" - }, - "dependencies": { - "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" - } - } - }, - "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==", - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "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==" - } - } - }, - "terser-webpack-plugin": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", - "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", - "requires": { - "cacache": "^15.0.5", - "find-cache-dir": "^3.3.1", - "jest-worker": "^26.5.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.3.4", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" - }, - "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==" - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "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==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "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==", - "requires": { - "semver": "^6.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "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==", - "requires": { - "find-up": "^4.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==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "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==" - }, - "terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } - } - } - }, - "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==", - "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": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "three": { - "version": "0.146.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.146.0.tgz", - "integrity": "sha512-1lvNfLezN6OJ9NaFAhfX4sm5e9YCzHtaRgZ1+B4C+Hv6TibRMsuBAM5/wVKzxjpYIlMymvgsHEFrrigEfXnb2A==", - "peer": true - }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "requires": { - "setimmediate": "^1.0.4" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==" - }, - "tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "optional": true - }, - "tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "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==", - "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==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "dependencies": { - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" - } - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "requires": { - "punycode": "^2.1.1" - } - }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" - }, - "ts-pnp": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", - "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" - }, - "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" - } - } - }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "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==" - }, - "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==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "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==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", - "peer": true - }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "peer": true, - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "peer": true - } - } - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unicode-canonical-property-names-ecmascript": { - "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==" - }, - "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==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" - }, - "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==", - "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": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - } - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==" - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==" - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "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": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "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": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "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": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "dependencies": { - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - } - } - }, - "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": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==" - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "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": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==" - } - } - }, - "url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "requires": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "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==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "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==" - }, - "use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "peer": true, - "requires": {} - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "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==" - }, - "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==", - "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.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" - } - } - }, - "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==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" - }, - "vlq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", - "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", - "peer": true - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "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==", - "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==", - "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==", - "requires": { - "makeerror": "1.0.12" - } - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "optional": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "optional": 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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "optional": 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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "optional": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "optional": 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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "optional": 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" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "optional": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "peer": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "web-vitals": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-1.1.2.tgz", - "integrity": "sha512-PFMKIY+bRSXlMxVAQ+m2aw9c/ioUYfDgrYot0YUa+/xa0sakubWhSDyxAKwzymvXVdF4CZI71g06W+mqhzu6ig==" - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" - }, - "webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "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": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "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==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "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" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" - } - } - }, - "webpack-dev-server": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz", - "integrity": "sha512-u4R3mRzZkbxQVa+MBWi2uVpB5W59H3ekZAJsQlKUTdl7Elcah2EhygTPLmeFXybQkf9i2+L0kn7ik9SnXa6ihQ==", - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "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==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.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==", - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "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": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "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": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "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" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==", - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==" - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, - "webpack-manifest-plugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz", - "integrity": "sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ==", - "requires": { - "fs-extra": "^7.0.0", - "lodash": ">=3.5 <5", - "object.entries": "^1.1.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - } - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" - }, - "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==", - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, - "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==" - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "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==", - "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==", - "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-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" - }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "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==" - }, - "workbox-background-sync": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz", - "integrity": "sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA==", - "requires": { - "workbox-core": "^5.1.4" - } - }, - "workbox-broadcast-update": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-5.1.4.tgz", - "integrity": "sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA==", - "requires": { - "workbox-core": "^5.1.4" - } - }, - "workbox-build": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-5.1.4.tgz", - "integrity": "sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow==", - "requires": { - "@babel/core": "^7.8.4", - "@babel/preset-env": "^7.8.4", - "@babel/runtime": "^7.8.4", - "@hapi/joi": "^15.1.0", - "@rollup/plugin-node-resolve": "^7.1.1", - "@rollup/plugin-replace": "^2.3.1", - "@surma/rollup-plugin-off-main-thread": "^1.1.1", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^8.1.0", - "glob": "^7.1.6", - "lodash.template": "^4.5.0", - "pretty-bytes": "^5.3.0", - "rollup": "^1.31.1", - "rollup-plugin-babel": "^4.3.3", - "rollup-plugin-terser": "^5.3.1", - "source-map": "^0.7.3", - "source-map-url": "^0.4.0", - "stringify-object": "^3.3.0", - "strip-comments": "^1.0.2", - "tempy": "^0.3.0", - "upath": "^1.2.0", - "workbox-background-sync": "^5.1.4", - "workbox-broadcast-update": "^5.1.4", - "workbox-cacheable-response": "^5.1.4", - "workbox-core": "^5.1.4", - "workbox-expiration": "^5.1.4", - "workbox-google-analytics": "^5.1.4", - "workbox-navigation-preload": "^5.1.4", - "workbox-precaching": "^5.1.4", - "workbox-range-requests": "^5.1.4", - "workbox-routing": "^5.1.4", - "workbox-strategies": "^5.1.4", - "workbox-streams": "^5.1.4", - "workbox-sw": "^5.1.4", - "workbox-window": "^5.1.4" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - } - } - }, - "workbox-cacheable-response": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-5.1.4.tgz", - "integrity": "sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA==", - "requires": { - "workbox-core": "^5.1.4" - } - }, - "workbox-core": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-5.1.4.tgz", - "integrity": "sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg==" - }, - "workbox-expiration": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-5.1.4.tgz", - "integrity": "sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ==", - "requires": { - "workbox-core": "^5.1.4" - } - }, - "workbox-google-analytics": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-5.1.4.tgz", - "integrity": "sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA==", - "requires": { - "workbox-background-sync": "^5.1.4", - "workbox-core": "^5.1.4", - "workbox-routing": "^5.1.4", - "workbox-strategies": "^5.1.4" - } - }, - "workbox-navigation-preload": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-5.1.4.tgz", - "integrity": "sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ==", - "requires": { - "workbox-core": "^5.1.4" - } - }, - "workbox-precaching": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-5.1.4.tgz", - "integrity": "sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA==", - "requires": { - "workbox-core": "^5.1.4" - } - }, - "workbox-range-requests": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-5.1.4.tgz", - "integrity": "sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw==", - "requires": { - "workbox-core": "^5.1.4" - } - }, - "workbox-routing": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-5.1.4.tgz", - "integrity": "sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw==", - "requires": { - "workbox-core": "^5.1.4" - } - }, - "workbox-strategies": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-5.1.4.tgz", - "integrity": "sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA==", - "requires": { - "workbox-core": "^5.1.4", - "workbox-routing": "^5.1.4" - } - }, - "workbox-streams": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-5.1.4.tgz", - "integrity": "sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw==", - "requires": { - "workbox-core": "^5.1.4", - "workbox-routing": "^5.1.4" - } - }, - "workbox-sw": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-5.1.4.tgz", - "integrity": "sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA==" - }, - "workbox-webpack-plugin": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-5.1.4.tgz", - "integrity": "sha512-PZafF4HpugZndqISi3rZ4ZK4A4DxO8rAqt2FwRptgsDx7NF8TVKP86/huHquUsRjMGQllsNdn4FNl8CD/UvKmQ==", - "requires": { - "@babel/runtime": "^7.5.5", - "fast-json-stable-stringify": "^2.0.0", - "source-map-url": "^0.4.0", - "upath": "^1.1.2", - "webpack-sources": "^1.3.0", - "workbox-build": "^5.1.4" - } - }, - "workbox-window": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-5.1.4.tgz", - "integrity": "sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw==", - "requires": { - "workbox-core": "^5.1.4" - } - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "requires": { - "errno": "~0.1.7" - } - }, - "worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", - "requires": { - "microevent.ts": "~0.1.1" - } - }, - "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==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "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==", - "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.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "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==" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "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" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - } - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - }, - "zdog": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/zdog/-/zdog-1.1.3.tgz", - "integrity": "sha512-raRj6r0gPzopFm5XWBJZr/NuV4EEnT4iE+U3dp5FV5pCb588Gmm3zLIp/j9yqqcMiHH8VNQlerLTgOqL7krh6w==", - "peer": true - }, - "zustand": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.7.2.tgz", - "integrity": "sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==", - "peer": true, - "requires": {} - } - } -} diff --git a/frontend/package.json b/frontend/package.json index 7a642bea..60d7616b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -4,29 +4,43 @@ "private": true, "proxy": "http://app:5000", "dependencies": { - "@material-ui/core": "^4.11.4", - "@material-ui/data-grid": "^4.0.0-alpha.28", - "@material-ui/icons": "^4.11.2", - "@material-ui/lab": "^4.0.0-alpha.58", - "@nivo/core": "^0.69.0", - "@nivo/line": "^0.69.1", + "@emotion/react": "^11.10.5", + "@emotion/styled": "^11.10.5", + "@mui/icons-material": "^5.10.15", + "@mui/lab": "^5.0.0-alpha.109", + "@mui/material": "^5.10.15", + "@mui/styles": "^5.10.15", + "@mui/x-data-grid": "^5.17.12", + "@nivo/core": "^0.80.0", + "@nivo/line": "^0.80.0", "@testing-library/jest-dom": "^5.11.4", "@testing-library/react": "^11.1.0", "@testing-library/user-event": "^12.1.10", - "react": "^17.0.2", - "react-dom": "^17.0.2", + "@types/jest": "^29.2.5", + "@types/node": "^18.11.18", + "@types/react": "^18.0.26", + "@types/react-dom": "^18.0.10", + "classnames": "^2.3.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-hook-form": "^7.6.3", - "react-router-dom": "^5.2.0", + "react-router-dom": "^6.4.3", "react-scripts": "4.0.3", - "react-syntax-highlighter": "^11.0.3", - "react-token-auth": "^1.1.8", - "web-vitals": "^1.0.1" + "react-syntax-highlighter": "^15.5.0", + "react-token-auth": "^2.3.8", + "typescript": "^4.9.4", + "web-vitals": "^3.1.0" + }, + "devDependencies": { + "react-styleguidist": "^13.0.0" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", - "eject": "react-scripts eject" + "eject": "react-scripts eject", + "styleguide": "styleguidist server", + "styleguide:build": "styleguidist build" }, "eslintConfig": { "extends": [ diff --git a/frontend/src/APIConnection.ts b/frontend/src/APIConnection.ts new file mode 100644 index 00000000..1891aac6 --- /dev/null +++ b/frontend/src/APIConnection.ts @@ -0,0 +1,252 @@ +export type User = { + url: string, + id: number, + username: string, + first_name: string, + last_name: string, + is_staff: boolean, + is_superuser: boolean, + token: string, +} + +export interface APIObject { + id: number; + url: string; +} +export type SingleAPIResponse = APIObject & {[prop: string]: any} +export type MultipleAPIResponse = SingleAPIResponse[] +export type PaginatedAPIResponse = { + count: number, previous?: string, next?: string, results: SingleAPIResponse[] +} +export type ErrorCode = number + +export type APIResponse = SingleAPIResponse | + MultipleAPIResponse | + PaginatedAPIResponse | + ErrorCode + +export type CachedAPIResponse = { + url: string; + time: Date; + content: T; + loading: boolean; + parents: string[]; +} + +function clean_url(url: string, baseURL: string): string { + url = url.toLowerCase(); + if (!url.startsWith(baseURL)) + url = `${baseURL}${url}` + return url +} + +class ResponseCache { + results: CachedAPIResponse[] + url: string + + constructor(url: string) { + this.url = url + this.results = [] + } + + add(item: T | T[], parent: string = "") { + if (item instanceof Array) + item.forEach(i => this.add(i, parent)) + else + try { + const i = this.results.find(i => i.url === item.url) + const parents = i? i.parents.filter(p => p !== parent) : [] + this.results = [ + ...this.results.filter(i => i.url !== item.url), + { + url: item.url, + time: new Date(), + content: item, + loading: false, + parents: parent? [...parents, parent] : parents + } + ] + } catch (e) { + console.error(e) + } + } + + remove(url: string) { + url = clean_url(url, this.url) + this.results = this.results.filter(i => i.url !== url) + } + + purge(parent: string) { + if (parent === '') + throw new Error(`You have passed an empty string to ResponseCache.remove. + This is likely a mistake and results will not be removed.`) + this.results = this.results.filter(r => !r.parents.includes(parent)) + } + + get(url: string, include_children: boolean = true): CachedAPIResponse[] { + url = clean_url(url, this.url) + return this.results.filter(i => i.url === url || (include_children && i.parents.includes(url))) + } + + get_contents(url: string, include_children: boolean = true) { + url = clean_url(url, this.url) + return this.get(url, include_children).map(r => r.content) + } +} + +export class APIConnection { + url: string = 'http://localhost:5000/'.toLowerCase() + user: User | null = null + cache_expiry_time = 60_000 // 1 minute + results: ResponseCache + cookies: any + + constructor() { + console.info("Spawn API connection") + const local_user = window.localStorage.getItem('user') + if (local_user) + this.user = JSON.parse(local_user) + this.results = new ResponseCache(this.url) + } + + create_user(username: string, email: string, password: string): Promise { + return fetch( + this.url + 'users/', + { + method: 'POST', + headers: {accept: 'application/json', 'content-type': 'application/json'}, + body: JSON.stringify({username, email, password}) + } + ) + .then(r => { + if (r.status !== 200) + return r.json().then(json => {throw new Error(json.error)}) + return r.json() + }) + } + + login(username: string, password: string) { + let headers = new Headers(); + headers.set('Authorization', 'Basic ' + btoa(username + ":" + password)); + headers.set('Accept', 'application/json'); + return fetch(this.url + 'login/', {method: 'POST', headers: headers}) + .then(r => r.json()) + .then(r => { + this.user = { + ...r.user, + token: r.token + } + window.localStorage.setItem('user', JSON.stringify(this.user)) + console.info(`Logged in as ${this.user?.username}`) + return true + }) + .catch(e => { + console.error("Login failure", e) + return false + }) + } + + logout() { + this.user = null + window.localStorage.removeItem('user') + return fetch(this.url + "logout/", {method: 'POST'}) + } + + get_cookie(name: string) { + const value = `; ${document.cookie}`; + const parts = value.split(`; ${name}=`); + if (parts.length === 2) return parts?.pop()?.split(';').shift(); + return null + } + + get is_logged_in() { + return !!this.user?.token + } + + async get_is_logged_in(skip: boolean = true): Promise { + await this.login('admin', 'admin') + const cookie = this.get_cookie('csrf_access_token'); + if (cookie === undefined || !this.user) + if (!skip) + return this.get_is_logged_in(false); + return cookie !== undefined && this.user !== null; + } + + _prepare_fetch_headers(url: string, options?: any) { + if (!this.is_logged_in) + throw new Error(`Cannot fetch ${url}: not logged on.`) + console.info(`Fetch ${url} for ${this.user?.username}`, options) + // console.info('fetch options', options) + const token = this.user?.token; + let newOptions = {...options}; + newOptions.headers = {...newOptions.headers}; + newOptions.headers['Content-Type'] = "application/json"; + newOptions.headers['Accept'] = "application/json"; + newOptions.headers['Authorization'] = `Bearer ${token}`; + return newOptions; + } + + _fetch(url: string, options: object, parent: string = "", void_cache: boolean = false): Promise { + return fetch(url, options) + .then((response) => { + if (response.status >= 400) { + console.error(response) + if (response.status === 401) + return this.logout().then(() => { + throw new Error(`Logged out: not authorized to access ${url}`) + }) + if (response.status === 404) + this.results.remove(url) + throw new Error(`Fetch failed for ${url}: ${response.status}`) + } + return response.json() as Promise; + }) + .then(json => { + if (void_cache) + this.results.purge(parent) + this.results.add(json, parent) + }) + } + + async fetchMany(url: string, options?: any, ignore_cache: boolean = true): Promise[]> { + url = clean_url(url, this.url) + const newOptions = this._prepare_fetch_headers(url, options); + if (newOptions.method && newOptions.method.toLowerCase() !== 'get') + ignore_cache = true; + // Check cache + if (!ignore_cache) { + const results = this.results.get(url) + if (!results.length) + return this.fetchMany(url, options, true) + const now = new Date() + let fetch = results.filter(r => now.valueOf() - r.time.valueOf() > this.cache_expiry_time) + fetch.forEach(r => r.loading = true) + await Promise.all(fetch.map(r => this.fetch(r.url, options, ignore_cache = true))) + return this.results.get(url) + } + return this._fetch(url, newOptions, url, ignore_cache) + .then(() => this.results.get(url)) + } + + async fetch(url: string, options?: any, ignore_cache = false): Promise> { + url = clean_url(url, this.url) + const newOptions = this._prepare_fetch_headers(url, options); + if (newOptions.method && newOptions.method.toLowerCase() !== 'get') + ignore_cache = true; + // Check cache + if (!ignore_cache) { + const results = this.results.get(url) + if (!results.length || new Date().valueOf() - results[0].time.valueOf() > this.cache_expiry_time) { + if (results.length) + results[0].loading = true + return this.fetch(url, options, true) + } + return results[0] + } + return this._fetch(url, newOptions) + .then(() => this.results.get(url)[0]) + } +} + +const Connection = new APIConnection(); +export default Connection; \ No newline at end of file diff --git a/frontend/src/ActionButtons.tsx b/frontend/src/ActionButtons.tsx new file mode 100644 index 00000000..aea0d14c --- /dev/null +++ b/frontend/src/ActionButtons.tsx @@ -0,0 +1,87 @@ +import React, {Component} from "react"; +import Stack, {StackProps} from "@mui/material/Stack"; +import IconButton, {IconButtonProps} from "@mui/material/IconButton"; +import Icon from "@mui/material/Icon"; +import SearchIcon from "@mui/icons-material/Search"; +import SaveIcon from "@mui/icons-material/Save"; +import DeleteIcon from "@mui/icons-material/Delete"; +import {SvgIconProps} from "@mui/material/SvgIcon" +import useStyles from "./UseStyles"; + +export type ActionButtonsProps = { + classes: ReturnType; + onInspect?: () => void; + onSave?: () => void; + onDelete?: () => void; + inspectButtonProps?: IconButtonProps; + saveButtonProps?: IconButtonProps; + deleteButtonProps?: IconButtonProps; + inspectIconProps?: SvgIconProps & {component?: any}; + saveIconProps?: SvgIconProps & {component?: any}; + deleteIconProps?: SvgIconProps & {component?: any}; + wrapperElementProps?: StackProps; +} + +/** + * Group together commonly displayed action buttons. + * + * Buttons included are: + * - Inspect + * - Save + * - Delete + * + * Buttons are included where the on[ButtonName] property is specified. + * Their properties can be customised with [buttonName]ButtonProps, + * and the properties of the child SvgIcon by [buttonName]IconProps. + * + * The wrapper element is a element and + * can be customised with the wrapperElementProps prop. + */ +export default class ActionButtons extends Component { + render() { + return ( + + { + this.props.onInspect !== undefined && + + + + } + { + this.props.onSave !== undefined && + + + + } + { + this.props.onDelete !== undefined && + + + + } + + ) + } +} \ No newline at end of file diff --git a/frontend/src/ActivateUsers.tsx b/frontend/src/ActivateUsers.tsx new file mode 100644 index 00000000..959100a3 --- /dev/null +++ b/frontend/src/ActivateUsers.tsx @@ -0,0 +1,46 @@ +import React, { Fragment } from 'react'; +import Paper from '@mui/material/Paper'; +import Container from '@mui/material/Container'; +import HowToRegIcon from '@mui/icons-material/HowToReg'; +import AsyncTable from './AsyncTable'; +import Connection, {User} from "./APIConnection"; +import useStyles from "./UseStyles"; +import Typography from '@mui/material/Typography'; +import IconButton from "@mui/material/IconButton"; + +const columns = [ + {label: 'Username'}, + {label: 'Activate', help: 'Authorize a user to access Galvanalyser'} +] + +export default function ActivateUsers() { + const classes = useStyles(); + + const activateUser = (user: User) => Connection.fetch(`${user.url}vouch_for/`); + + return ( + + + + classes={classes} + columns={columns} + row_generator={(user, context) => [ + + {user.username} + , + + activateUser(user).then(() => context.refresh_all_rows(false))} + > + + + + ]} + url={`inactive_users/`} + styles={classes} + /> + + + ); +} diff --git a/frontend/src/Api.js b/frontend/src/Api.js index fa2d0f06..0fe3d5bd 100644 --- a/frontend/src/Api.js +++ b/frontend/src/Api.js @@ -1,5 +1,5 @@ -const url = '/api/'; +export const url = 'http://localhost:5000/'; const headers = { 'Accept': 'application/json', 'Content-Type': 'application/json' @@ -7,34 +7,31 @@ const headers = { let user = null; -export function getUser() { - return authFetch(url + 'user/current').then(response => { - if (!response.ok) { - return Promise.reject() - } - return response.json() - }).then(data => { - console.log('setUser ', data) - user = data - return data - }); +export function handleLogin(data) { + user = {...data.user, token: data.token}; } +export function getUser() {return user;} + export function isAdmin() { - if (!user) { - return false; - } - return user.groups.find(g => g.groupname === 'admin') + return user !== null; + // if (!user) { + // return false; + // } + // return user.groups.find(g => g.groupname === 'admin') } export async function login(username, password) { let headers = new Headers(); headers.set('Authorization', 'Basic ' + btoa(username + ":" + password)); - return fetch(url + '/login', {method: 'POST', headers: headers}) + headers.set('Accept', 'application/json'); + return fetch(url + 'login/', {method: 'POST', headers: headers}) } export async function logout() { - return fetch(url + '/logout', {method: 'POST'}); + let headers = new Headers(); + headers.set('Accept', 'application/json'); + return fetch(url + 'logout/', {method: 'POST'}); } export function getCookie(name) { @@ -43,29 +40,48 @@ export function getCookie(name) { if (parts.length === 2) return parts.pop().split(';').shift(); } -export function loggedIn() { +export async function loggedIn(skip = true) { + await login('admin', 'admin').then(r => r.json()).then(data => handleLogin(data)) const cookie = getCookie('csrf_access_token'); - return cookie !== undefined; + if (cookie === undefined || !user) + if (!skip) + return loggedIn(false); + return cookie !== undefined && user; } -async function authFetch(url, options) { +export async function authFetch(url, options) { + const token = user?.token; let newOptions = {...options}; newOptions.credentials = 'same-origin'; newOptions.headers = {...newOptions.headers}; + newOptions.headers['Content-Type'] = "application/json"; + newOptions.headers['Accept'] = "application/json"; + newOptions.headers['Authorization'] = `Token ${token}`; newOptions.headers['X-CSRF-TOKEN'] = getCookie('csrf_access_token'); + url = /\/$/.test(url) ? url : `${url}/`; return fetch(url, newOptions).then((response) => { if (response.status === 401) { - return logout().then(() => { - return response; - }); + throw new Error(`Server said 'unauthorised'`) + // return logout().then(() => { + // return response; + // }); } return response; - });; + }).catch(e => { + // console.error(e); + return { + count: 0, + previous: null, + next: null, + results: [], + error: "Unauthorised" + }; + }); } export async function run_harvester(id) { return authFetch( - url + `harvester/${id}/run`, + url + `harvesters/${id}/run`, { method: 'PUT', headers: headers, @@ -78,19 +94,19 @@ export async function getToken() { } export async function env_harvester(id) { - return authFetch(url + `harvester/${id}/env`); + return authFetch(url + `harvesters/${id}/env`); } export async function harvesters(id) { if (id) { - return authFetch(url + `harvester/${id}`); + return authFetch(url + `harvesters/${id}`); } - return authFetch(url + 'harvester'); + return authFetch(url + 'harvesters/'); } export async function delete_harvester(id) { return authFetch( - url + `harvester/${id}`, + url + `harvesters/${id}`, { method: 'DELETE', } @@ -102,7 +118,7 @@ export async function delete_harvester(id) { // { machine_id: ? } export async function add_harvester(harvester) { return authFetch( - url + `harvester`, + url + `harvesters/`, { method: 'POST', headers: headers, @@ -116,7 +132,7 @@ export async function add_harvester(harvester) { // { machine_id: ? } export async function update_harvester(id, harvester) { return authFetch( - url + `harvester/${id}`, + url + `harvesters/${id}`, { method: 'PUT', headers: headers, @@ -130,7 +146,7 @@ export async function update_harvester(id, harvester) { // { path: ?, monitored_for: ?, harvester_id: ? } export async function update_monitored_path(id, path) { return authFetch( - url + `monitored_path/${id}`, + url + `monitored_paths/${id}`, { method: 'PUT', headers: headers, @@ -144,7 +160,7 @@ export async function update_monitored_path(id, path) { // { path: ?, monitored_for: ?, harvester_id: ? } export async function add_monitored_path(path) { return authFetch( - url + `monitored_path`, + url + `monitored_paths`, { method: 'POST', headers: headers, @@ -155,7 +171,7 @@ export async function add_monitored_path(path) { export async function delete_monitored_path(id) { return authFetch( - url + `monitored_path/${id}`, + url + `monitored_paths/${id}`, { method: 'DELETE', } @@ -164,23 +180,23 @@ export async function delete_monitored_path(id) { export async function monitored_paths(harvester_id) { return authFetch( - url + `monitored_path?harvester_id=${harvester_id}` + url + `monitored_paths?harvester_id=${harvester_id}` ); } export async function users() { - return authFetch(url + 'user'); + return authFetch(url + 'users/'); } export async function files(path_id) { - return authFetch(url + `file?path_id=${path_id}`); + return authFetch(url + `files?path_id=${path_id}`); } export async function datasets(id) { if (id) { - return authFetch(url + `dataset/${id}`); + return authFetch(url + `datasets/${id}`); } - return authFetch(url + 'dataset'); + return authFetch(url + 'datasets/'); } @@ -191,7 +207,7 @@ export async function datasets(id) { // purpose: ? } export async function update_dataset(id, dataset) { return authFetch( - url + `dataset/${id}`, + url + `datasets/${id}`, { method: 'PUT', headers: headers, @@ -208,7 +224,7 @@ export async function equipment(id) { if (id) { return authFetch(url + `equipment/${id}`); } - return authFetch(url + `equipment`); + return authFetch(url + `equipment/`); } //// equipment is object with fields: @@ -216,7 +232,7 @@ export async function equipment(id) { // { name: ?, type: ?, } export async function add_equipment(equipment) { return authFetch( - url + `equipment`, + url + `equipment/`, { method: 'POST', headers: headers, @@ -250,9 +266,9 @@ export async function delete_equipment(id) { export async function cells(id) { if (id) { - return authFetch(url + `cell/${id}`); + return authFetch(url + `cells/${id}`); } - return authFetch(url + `cell`); + return authFetch(url + `cells/`); } //// cell is object with fields: @@ -262,7 +278,7 @@ export async function cells(id) { // nominal_capacity: ?, nominal_cell_weight: ? } export async function add_cell(cell) { return authFetch( - url + `cell`, + url + `cells/`, { method: 'POST', headers: headers, @@ -278,7 +294,7 @@ export async function add_cell(cell) { // nominal_capacity: ?, nominal_cell_weight: ? } export async function update_cell(id, cell) { return authFetch( - url + `cell/${id}`, + url + `cells/${id}`, { method: 'PUT', headers: headers, @@ -289,7 +305,7 @@ export async function update_cell(id, cell) { export async function delete_cell(id) { return authFetch( - url + `cell/${id}`, + url + `cells/${id}`, { method: 'DELETE', } @@ -298,14 +314,14 @@ export async function delete_cell(id) { export async function manufacturers(id) { if (id) { - return authFetch(url + `manufacturer/${id}`); + return authFetch(url + `manufacturers/${id}`); } - return authFetch(url + `manufacturer`); + return authFetch(url + `manufacturers/`); } export async function delete_manufacturer(id) { return authFetch( - url + `manufacturer/${id}`, + url + `manufacturers/${id}`, { method: 'DELETE', } @@ -317,7 +333,7 @@ export async function delete_manufacturer(id) { // { name: ? } export async function add_manufacturer(manufacturer) { return authFetch( - url + `manufacturer`, + url + `manufacturers/`, { method: 'POST', headers: headers, @@ -331,7 +347,7 @@ export async function add_manufacturer(manufacturer) { // { path: ?, monitored_for: ?, harvester_id: ? } export async function update_manufacturer(id, manufacturer) { return authFetch( - url + `manufacturer/${id}`, + url + `manufacturers/${id}`, { method: 'PUT', headers: headers, @@ -342,14 +358,14 @@ export async function update_manufacturer(id, manufacturer) { export async function institutions(id) { if (id) { - return authFetch(url + `institution/${id}`); + return authFetch(url + `institutions/${id}`); } - return authFetch(url + `institution`); + return authFetch(url + `institutions/`); } export async function delete_institution(id) { return authFetch( - url + `institution/${id}`, + url + `institutions/${id}`, { method: 'DELETE', } @@ -361,7 +377,7 @@ export async function delete_institution(id) { // { name: ? } export async function add_institution(institution) { return authFetch( - url + `institution`, + url + `institutions/`, { method: 'POST', headers: headers, @@ -375,7 +391,7 @@ export async function add_institution(institution) { // { path: ?, monitored_for: ?, harvester_id: ? } export async function update_institution(id, institution) { return authFetch( - url + `institution/${id}`, + url + `institutions/${id}`, { method: 'PUT', headers: headers, @@ -407,7 +423,7 @@ export async function update_metadata(dataset_id, metadata) { } export async function timeseries_column(dataset_id, col_id) { - return authFetch(url + `dataset/${dataset_id}/${col_id}`, + return authFetch(url + `datasets/${dataset_id}/${col_id}`, { responseType: 'arraybuffer', headers: { diff --git a/frontend/src/App.css b/frontend/src/App.css index 74b5e053..e70a402e 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -35,4 +35,4 @@ to { transform: rotate(360deg); } -} +} \ No newline at end of file diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx new file mode 100644 index 00000000..ca65e9d3 --- /dev/null +++ b/frontend/src/App.jsx @@ -0,0 +1,22 @@ +/* +* Theme wrapper for the app. Body in Core.tsx +*/ + +import React from "react"; +import { createTheme, StyledEngineProvider } from '@mui/material/styles'; +import { ThemeProvider } from "@mui/styles"; +import Core from "./Core.tsx" + +const theme = createTheme(); + +export default function App() { + return ( + + + + + + ); +} + + diff --git a/frontend/src/App.test.js b/frontend/src/App.test.js index 1f03afee..89bdec4f 100644 --- a/frontend/src/App.test.js +++ b/frontend/src/App.test.js @@ -1,6 +1,8 @@ import { render, screen } from '@testing-library/react'; import App from './App'; +globalThis.IS_REACT_ACT_ENVIRONMENT = true; + test('renders learn react link', () => { render(); const linkElement = screen.getByText(/learn react/i); diff --git a/frontend/src/AsyncTable.tsx b/frontend/src/AsyncTable.tsx new file mode 100644 index 00000000..24106b2f --- /dev/null +++ b/frontend/src/AsyncTable.tsx @@ -0,0 +1,317 @@ +import React, {Component, ReactElement, BaseSyntheticEvent, ReactEventHandler} from "react"; +import TableContainer from "@mui/material/TableContainer"; +import Table from "@mui/material/Table"; +import TableBody from "@mui/material/TableBody"; +import Connection, {APIObject, SingleAPIResponse} from "./APIConnection"; +import TableRow from "@mui/material/TableRow"; +import TableCell, {TableCellProps} from "@mui/material/TableCell"; +import CircularProgress from "@mui/material/CircularProgress"; +import Tooltip, {TooltipProps} from "@mui/material/Tooltip"; +import Typography, {TypographyProps} from "@mui/material/Typography"; +import TableHead from "@mui/material/TableHead"; +import useStyles from "./UseStyles"; + +export type Column = { + label: string; + help?: string; + headerTableCellProps?: Partial; + headerTooltipProps?: Partial; + headerTypographyProps?: Partial; + contentTableCellProps?: Partial; +} + +export type RowGeneratorContext = { + columns: Column[]; + update: ReactEventHandler; + update_direct: (field_name: K, new_value: T[K]) => void; + mark_loading: (state?: boolean) => void; + refresh: (row_data: any) => void; + refresh_from_api: () => void; + refresh_all_rows: (use_cache?: boolean) => void; + is_new_row: boolean; + value_changed: boolean; +} + +export type RowGenerator = + ((row_data: T) => ReactElement[]|null) | + ((row_data: T, context: RowGeneratorContext) => ReactElement[]|null) + +type CompleteHeading = { + label: string; + help: string; + tableCellProps: Partial; + tooltipProps: Partial; + typographyProps: Partial; +} + +export type AsyncTableProps = { + classes: ReturnType; + columns: Column[]; + row_generator: RowGenerator; + url: string; + new_row_values?: Partial; + styles?: any; +} + +type AsyncTableState = { + row_data: any[]; + new_row: any; + loading: boolean; + loading_rows: number[]; + changed_rows: number[]; +} + +export const NEW_ROW_ID = -1 + +/** + * AsyncTable is designed to present data fetched from an API and allow + * individual entries (rows) to be updated in isolation. + * + * AsyncTable takes an array of columns that define the headers and the + * common row properties, and a functions that resolve into the an array of + * contents of the TableCell elements in each TableRow in the body. + * + * The function that generates cell contents is passed the row data + * and the context. `context` is a CellContext object that exposes + * the column properties, and functions for updating local content + * and for refreshing local content from the remote API. + * + * If `new_row_values` is specified, the row generator will be called + * with those values to generate an extra row for adding new items. + * + * Data fetching is the responsibility of the AsyncTable via the + * APIConnection class. It determines where to fetch data from + * using the `initial_url` parameter. + * - Updates to individual rows are the responsibility of the calling + * code. + * - Refreshing a row uses the row's `url` property to know where to look + * + * This class abstracts away a lot of repetitive table-building code. + */ +export default class AsyncTable extends Component, AsyncTableState> { + state: AsyncTableState = { + row_data: [], + new_row: null, + loading: true, + loading_rows: [], + changed_rows: [] + } + + constructor(props: AsyncTableProps) { + super(props) + if (props.new_row_values !== undefined) + this.state.new_row = this.new_row_template + } + + get new_row_template() { + return {id: -1, url: "", ...this.props.new_row_values} + } + + componentDidMount() { + this.get_data(this.props.url) + console.log("Mounted AsyncTable", this) + } + + componentDidUpdate(prevProps: AsyncTableProps) { + console.log("Updating AsyncTable...", this, prevProps) + // Typical usage (don't forget to compare props): + if (this.props.url !== prevProps.url) + this.get_data(this.props.url) + if (this.props.new_row_values !== prevProps.new_row_values) + this.reset_new_row() + console.log("Updated AsyncTable", this) + } + + reset_new_row = () => this.setState({new_row: this.props.new_row_values? this.new_row_template : null}) + + mark_row_loading = (row_id: number, status: boolean = true) => { + const rows = this.state.loading_rows.filter(i => i !== row_id) + if (status) + rows.push(row_id) + this.setState({loading_rows: rows}) + } + + mark_row_changed = (row_id: number, status: boolean = true) => { + const rows = this.state.changed_rows.filter(i => i !== row_id) + if (status) + rows.push(row_id) + this.setState({changed_rows: rows}) + } + + get_data: (url?: string, use_cache?: boolean) => void = (url, use_cache = true) => { + this.setState({loading: true, row_data: []}) + if (!url) + url = this.props.url; + Connection.fetchMany(url, {}, !use_cache) + .then((res) => { + console.log(res) + this.setState({ + row_data: res.map(r => r.content), + loading: false, + loading_rows: [], + changed_rows: [] + }) + }) + .catch(e => { + console.error('Async Table error', e) + this.setState({loading: false, loading_rows: []}) + }) + } + + refresh_row = (row: SingleAPIResponse, is_result: boolean = true) => { + this.mark_row_loading(row.id) + + const _update = (row_data: SingleAPIResponse) => { + this.setState({ + row_data: this.state.row_data.map(r => r.id === row.id ? row_data : r) + }) + this.mark_row_changed(row.id, false) + this.mark_row_loading(row.id, false) + } + + if (is_result) + return _update(row) + + Connection.fetch(row.url) + .then(row_data => _update(row_data.content)) + .catch(e => { + // If we deleted the row, delete it in state + if (e.message === `Fetch failed for ${row.url}: 404`) + this.setState({row_data: this.state.row_data.filter(r => r.id !== row.id)}) + else + console.error('AsyncTable.update_single_row error', e, row) + }) + .finally( + () => this.mark_row_loading(row.id, false) + ) + } + + update_all = async (use_cache: boolean = true) => { + this.reset_new_row() + return this.get_data(this.props.url, use_cache) + } + + get header_row() { + const column_headings: CompleteHeading[] = this.props.columns.map( + (heading: Column) => ({ + label: heading.label, + help: heading.help || "", + tableCellProps: heading.headerTableCellProps || {}, + tooltipProps: heading.headerTooltipProps || {}, + typographyProps: heading.headerTypographyProps || {}, + }) + ) + + return ( + + + {column_headings.map((heading, i) => + + { + + + {heading.label} + + + } + + )} + + ) + } + + loading_row(id: number) { + return + + + + + } + + row_conversion_context = (row: any, is_new_row: boolean) => { + let update_fun: RowGeneratorContext["update_direct"] = (name, value) => { + this.setState({ + // Amend row_data to include new value for [name] + row_data: this.state.row_data.map(r => r.id === row.id ? {...row, [name]: value} : r) + }) + this.mark_row_changed(row.id) + } + if (is_new_row) { + update_fun = (name, value) => { + this.setState({new_row: {...this.state.new_row, [name]: value}}) + this.mark_row_changed(row.id) + } + } + + return { + columns: this.props.columns, + update: (event: BaseSyntheticEvent) => update_fun(event.target.name, event.target.value), + update_direct: update_fun, + mark_loading: (state: boolean = true) => this.mark_row_loading(row.id, state), + refresh: (r: any) => this.refresh_row(r, true), + refresh_from_api: () => this.refresh_row(row, false), + refresh_all_rows: this.update_all, + is_new_row, + value_changed: this.state.changed_rows.includes(row.id) + } + } + + wrap_cells_in_row = (contents: ReactElement[], row_index: number) => { + const cells = contents.map((cell: any, i: number) => + n !== undefined).join(' ')} + key={`cell-${i}`} + >{cell} + ) + return {cells} + } + + row_data_to_tablerow = (row: T, row_index: number) => { + try { + if (!row) + return null + const is_new_row = row_index === NEW_ROW_ID + if (is_new_row) + row_index = -1 + + if (this.state.loading_rows.includes(row.id)) + return this.loading_row(row.id) + + const row_contents = this.props.row_generator(row, this.row_conversion_context(row, is_new_row)) + if(!row_contents) + return null + return this.wrap_cells_in_row(row_contents, row_index) + } catch(e) { + console.info('Error constructing table row:', e) + return null + } + } + + render() { + return ( + + + {this.header_row} + { + + {this.state.loading && this.loading_row(-2)} + {!this.state.loading && this.state.row_data.map(this.row_data_to_tablerow)} + { + !this.state.loading && + this.props.new_row_values !== undefined && + this.row_data_to_tablerow(this.state.new_row, NEW_ROW_ID) + } + + } +
+
+ ) + } +} \ No newline at end of file diff --git a/frontend/src/CellList.tsx b/frontend/src/CellList.tsx new file mode 100644 index 00000000..10901b34 --- /dev/null +++ b/frontend/src/CellList.tsx @@ -0,0 +1,119 @@ +import React, {Fragment} from 'react'; +import TextField from '@mui/material/TextField'; +import Paper from '@mui/material/Paper'; +import AddIcon from '@mui/icons-material/Add'; +import Container from '@mui/material/Container'; +import SaveIcon from '@mui/icons-material/Save'; +import Connection from "./APIConnection"; +import AsyncTable, {RowGeneratorContext} from "./AsyncTable"; +import Typography from "@mui/material/Typography"; +import {CellFamilyFields} from "./Cells"; +import useStyles from "./UseStyles"; +import ActionButtons from "./ActionButtons"; + +export type CellFields = { + id: number; + url: string; + uid: string; + display_name: string; + family: string; + datasets: string[]; +} +type CellDetailProps = { + family: CellFamilyFields, + [key: string]: any +} + +const columns = [ + {label: 'UID', help: 'Unique identifier for the cell. This should be a serial number or similar unique to the specific cell.'}, + {label: 'Display Name', help: 'Human-friendly name for the cell'}, + {label: 'Linked Datasets', help: 'Number of datasets linked to this cell'}, + {label: 'Actions', help: 'Save / Delete a cell. Edits are disabled for cells that are in use'} +] + +export default function CellList(props: CellDetailProps) { + const classes = useStyles(); + + const addNewCell = (data: CellFields, context: RowGeneratorContext) => { + context.mark_loading(true) + const insert_data = {uid: data.uid, display_name: data.display_name, family: props.family.url} + return Connection.fetch('cells/', {body: JSON.stringify(insert_data), method: 'POST'}) + }; + + const updateCell = (data: CellFields, context: RowGeneratorContext) => { + context.mark_loading(true) + const insert_data = {uid: data.uid, display_name: data.display_name, family: props.family.url} + return Connection.fetch(data.url, {body: JSON.stringify(insert_data), method: 'PATCH'}) + .then(r => r.content) + }; + + const deleteCell = (data: CellFields) => Connection.fetch(data.url, {method: 'DELETE'}) + + return ( + + + + classes={classes} + columns={columns} + row_generator={(cell, context) => + cell.family !== props.family.url ? null : [ + + 0} + placeholder={`Serial number or other unique identifer`} + InputProps={{ + classes: { + input: classes.resize, + }, + }} + onChange={context.update} + /> + , + + 0} + placeholder={`${props.family.name}_#`} + InputProps={{ + classes: { + input: classes.resize, + }, + }} + onChange={context.update} + /> + , + context.is_new_row? : + {cell.datasets.length} + , + + addNewCell(cell, context).then(() => context.refresh_all_rows()) : + () => updateCell(cell, context).then(context.refresh) + } + saveButtonProps={{disabled: !context.value_changed || cell.datasets.length > 0}} + saveIconProps={{component: context.is_new_row? AddIcon : SaveIcon}} + onDelete={ + () => + window.confirm(`Delete cell ${cell.display_name}?`) && + deleteCell(cell).then(context.refresh) + } + deleteButtonProps={{disabled: context.is_new_row || cell.datasets.length > 0}} + /> + + ]} + new_row_values={{uid: '', display_name: '', family: props.family.url, datasets: []}} + url={`cells/`} + /> + + Note: Cells assigned to existing datasets cannot be changed. + + + + ); +} diff --git a/frontend/src/Cells.js b/frontend/src/Cells.js deleted file mode 100644 index bb795180..00000000 --- a/frontend/src/Cells.js +++ /dev/null @@ -1,271 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import Typography from '@material-ui/core/Typography'; -import TextField from '@material-ui/core/TextField'; -import { makeStyles } from '@material-ui/core/styles'; -import Table from '@material-ui/core/Table'; -import TableBody from '@material-ui/core/TableBody'; -import Paper from '@material-ui/core/Paper'; -import Tooltip from '@material-ui/core/Tooltip'; -import AddIcon from '@material-ui/icons/Add'; -import IconButton from '@material-ui/core/IconButton'; -import TableCell from '@material-ui/core/TableCell'; -import Container from '@material-ui/core/Container'; -import SaveIcon from '@material-ui/icons/Save'; -import TableContainer from '@material-ui/core/TableContainer'; -import TableHead from '@material-ui/core/TableHead'; -import DeleteIcon from '@material-ui/icons/Delete'; -import TableRow from '@material-ui/core/TableRow'; -import { - cells, add_cell, - update_cell, delete_cell -} from './Api' - -const useStyles = makeStyles((theme) => ({ - container: { - paddingTop: theme.spacing(4), - paddingBottom: theme.spacing(4), - }, - table: { - minWidth: 650, - }, - resize: { - fontSize: '10pt', - }, - input: { - marginLeft: theme.spacing(1), - flex: 1, - }, - iconButton: { - padding: 10, - }, -})); - -function MyTableRow({savedRow, onRowSave, selected, onSelectRow}) { - const classes = useStyles(); - const [row, setRow] = useState([]) - - useEffect(() => { - setRow(savedRow); - }, [savedRow]); - - const rowUnchanged = Object.keys(row).reduce((a, k) => { - return a && row[k] === savedRow[k]; - }, true); - - let useRow = row; - if (useRow.id === undefined) { - useRow = savedRow; - } - Object.keys(useRow).map((k) => { - useRow[k] = useRow[k] === null ? '' : useRow[k]; - return null - }); - - const setValue = (key) => (e) => { - setRow({...useRow, [key]: e.target.value}); - }; - - return ( - - {onSelectRow(savedRow);}} - hover - selected={selected} - > - - - - - - - - - - - - - - - - - - - - - - - - - - - - {onRowSave(row);}} - > - - - - - - - - ) -} - -export default function Cells() { - const classes = useStyles(); - - const [cellData, setCellData] = useState([]) - const [selected, setSelected] = useState({id: null}) - - - useEffect(() => { - refreshCells(); - }, []); - - const refreshCells = () => { - cells().then((response) => { - if (response.ok) { - return response.json().then((result) => { - setCellData(result.sort((arg1, arg2) => arg1.id - arg2.id)); - }); - } - }); - }; - - const addNewCell = () => { - add_cell({name: 'Edit me'}).then(refreshCells); - }; - const deleteCell = () => { - delete_cell(selected.id).then(refreshCells); - }; - const updateCell = (value) => { - Object.keys(value).map((k) => { - value[k] = value[k] === '' ? null : value[k]; - return null - }); - update_cell(value.id, value).then(refreshCells); - }; - - -const column_headings = [ - {label: 'Name', help: 'Cell Name'}, - {label: 'Manufacturer', help: 'Cell Manufacturer'}, - {label: 'Form Factor', help: 'Form Factor'}, - {label: 'Datasheet', help: 'URL to datasheet'}, - {label: 'Anode Chemistry', help: 'Anode Chemistry'}, - {label: 'Cathode Chemistry', help: 'Cathode Chemistry'}, - {label: 'Nominal Capacity', help: 'Nominal Capacity'}, - {label: 'Nominal Cell Weight', help: 'Nominal Cell Weight'}, - {label: 'Save', help: 'Click to save edits to a row'}, - ] - - return ( - - - - - - - {column_headings.map(heading => ( - - - - {heading.label} - - - - )) - } - - - - {cellData.map((row) => ( - - ))} - -
-
- - - - - - - - - - - - -
-
- ); -} diff --git a/frontend/src/Cells.tsx b/frontend/src/Cells.tsx new file mode 100644 index 00000000..de1be82f --- /dev/null +++ b/frontend/src/Cells.tsx @@ -0,0 +1,210 @@ +import React, {Fragment, useState} from 'react'; +import TextField from '@mui/material/TextField'; +import Paper from '@mui/material/Paper'; +import Tooltip from '@mui/material/Tooltip'; +import AddIcon from '@mui/icons-material/Add'; +import Container from '@mui/material/Container'; +import SaveIcon from '@mui/icons-material/Save'; +import Connection from "./APIConnection"; +import AsyncTable, {RowGeneratorContext} from "./AsyncTable"; +import Typography from "@mui/material/Typography"; +import CellList, {CellFields} from "./CellList"; +import Stack from "@mui/material/Stack"; +import useStyles from "./UseStyles"; +import ActionButtons from "./ActionButtons"; + +export type CellFamilyFields = { + url: string; + id: number; + name: string; + form_factor: string; + link_to_datasheet: string; + anode_chemistry: string; + cathode_chemistry: string; + nominal_capacity: number; + nominal_cell_weight: number; + manufacturer: string; + cells: CellFields[]; +} + +const columns = [ + {label: 'Source', help: ''}, + {label: 'Type', help: ''}, + {label: 'Chemistry', help: ''}, + {label: 'Statistics', help: 'Nominal values for cell'}, + {label: 'Actions', help: 'View Cells / Save / Delete cell families'}, +] + +export default function Cells() { + const classes = useStyles(); + const [selected, setSelected] = useState(null) + + const get_write_data: (data: CellFamilyFields) => Partial = (data) => { + return { + name: data.name, + form_factor: data.form_factor, + link_to_datasheet: data.link_to_datasheet, + manufacturer: data.manufacturer, + anode_chemistry: data.anode_chemistry, + cathode_chemistry: data.cathode_chemistry, + nominal_capacity: data.nominal_capacity, + nominal_cell_weight: data.nominal_cell_weight + } + } + + const addNewCell = (data: CellFamilyFields, context: RowGeneratorContext) => { + context.mark_loading(true) + const insert_data = get_write_data(data) + return Connection.fetch('cell_families/', {body: JSON.stringify(insert_data), method: 'POST'}) + }; + + const updateCell = (data: CellFamilyFields, context: RowGeneratorContext) => { + context.mark_loading(true) + const insert_data = get_write_data(data) + return Connection.fetch(data.url, {body: JSON.stringify(insert_data), method: 'PATCH'}) + .then(r => r.content) + }; + + const deleteCell = (data: CellFamilyFields) => Connection.fetch(data.url, {method: 'DELETE'}) + + return ( + + + + classes={classes} + columns={columns} + row_generator={(family, context) => [ + + + + + + + + + + , + + + + + + + + + + , + + + + + + + + + + , + + + + + + + + + + , + + selected?.id === family.id? setSelected(null) : setSelected(family)} + inspectButtonProps={{disabled: context.is_new_row}} + inspectIconProps={selected?.id === family.id ? {color: 'info'} : {}} + onSave={ + context.is_new_row? + () => addNewCell(family, context).then(() => context.refresh_all_rows()) : + () => updateCell(family, context).then(context.refresh) + } + saveButtonProps={{disabled: !context.value_changed || family.cells.length > 0}} + saveIconProps={{component: context.is_new_row? AddIcon : SaveIcon}} + onDelete={ + () => + window.confirm(`Delete cell family ${family.name}?`) && + deleteCell(family).then(context.refresh) + } + deleteButtonProps={{disabled: context.is_new_row || family.cells.length > 0}} + /> + + ]} + new_row_values={{ + name: '', manufacturer: '', form_factor: '', link_to_datasheet: '', anode_chemistry: '', cathode_chemistry: '', + nominal_capacity: 0, nominal_cell_weight: 0, cells: [] + }} + url="cell_families/" + /> + + Note: Cell families with cells cannot be changed. + + + {selected !== null && } + + ); +} diff --git a/frontend/src/App.js b/frontend/src/Core.tsx similarity index 63% rename from frontend/src/App.js rename to frontend/src/Core.tsx index 686e4a5e..628a6b1b 100644 --- a/frontend/src/App.js +++ b/frontend/src/Core.tsx @@ -1,57 +1,56 @@ -import React, {useEffect} from "react"; +import React from "react"; import { - Switch, + Routes, Route, - Redirect, + Outlet, + Navigate, Link, - useHistory, + useNavigate, useLocation, matchPath, } from "react-router-dom"; import Login from "./Login" +import ActivateUsers from "./ActivateUsers" import Harvesters from "./Harvesters" -import DatasetDetail from "./DatasetDetail" import Cells from "./Cells" -import SpeedIcon from '@material-ui/icons/Speed'; +import SpeedIcon from '@mui/icons-material/Speed'; +import GroupAddIcon from '@mui/icons-material/GroupAdd'; import Equipment from "./Equipment" import Datasets from "./Datasets" -import TableChartIcon from '@material-ui/icons/TableChart'; -import Dialog from '@material-ui/core/Dialog'; -import DialogActions from '@material-ui/core/DialogActions'; -import DialogContent from '@material-ui/core/DialogContent'; -import DialogContentText from '@material-ui/core/DialogContentText'; -import DialogTitle from '@material-ui/core/DialogTitle'; -import BatteryUnknownIcon from '@material-ui/icons/BatteryUnknown'; -import BackupIcon from '@material-ui/icons/Backup'; -import {loggedIn, logout, getToken, getUser, isAdmin} from "./Api" -import { makeStyles } from '@material-ui/core/styles'; -import CssBaseline from '@material-ui/core/CssBaseline'; +import TableChartIcon from '@mui/icons-material/TableChart'; +import Dialog from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; +import DialogContent from '@mui/material/DialogContent'; +import DialogContentText from '@mui/material/DialogContentText'; +import DialogTitle from '@mui/material/DialogTitle'; +import BatteryUnknownIcon from '@mui/icons-material/BatteryUnknown'; +import BackupIcon from '@mui/icons-material/Backup'; +import { makeStyles} from "@mui/styles"; +import CssBaseline from '@mui/material/CssBaseline'; import clsx from 'clsx'; -import Drawer from '@material-ui/core/Drawer'; -import AppBar from '@material-ui/core/AppBar'; -import Toolbar from '@material-ui/core/Toolbar'; -import List from '@material-ui/core/List'; -import Typography from '@material-ui/core/Typography'; -import Divider from '@material-ui/core/Divider'; -import IconButton from '@material-ui/core/IconButton'; -import Button from '@material-ui/core/Button'; -import MenuIcon from '@material-ui/icons/Menu'; -import ChevronLeftIcon from '@material-ui/icons/ChevronLeft'; +import Drawer from '@mui/material/Drawer'; +import AppBar from '@mui/material/AppBar'; +import Toolbar from '@mui/material/Toolbar'; +import List from '@mui/material/List'; +import Typography from '@mui/material/Typography'; +import Divider from '@mui/material/Divider'; +import IconButton from '@mui/material/IconButton'; +import Button from '@mui/material/Button'; +import MenuIcon from '@mui/icons-material/Menu'; +import ChevronLeftIcon from '@mui/icons-material/ChevronLeft'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemIcon from '@material-ui/core/ListItemIcon'; -import ListItemText from '@material-ui/core/ListItemText'; +import ListItem from '@mui/material/ListItem'; +import ListItemIcon from '@mui/material/ListItemIcon'; +import ListItemText from '@mui/material/ListItemText'; import { ReactComponent as GalvanalyserLogo } from './Galvanalyser-logo.svg'; +import Connection from "./APIConnection"; +import Stack from "@mui/material/Stack"; -const PrivateRoute = ({ component: Component, ...rest }) => { - const logged = loggedIn(); +const PrivateRoute = (component: JSX.Element) => { + const logged = Connection.is_logged_in; - return ( - logged - ? - : - )} /> + return logged? component : ; } const drawerWidth = 240; @@ -139,48 +138,22 @@ const useStyles = makeStyles((theme) => ({ }, })); - - -export default function App() { +export default function Core() { const { pathname } = useLocation(); const classes = useStyles(); - const [user, setUser] = React.useState(null); - - useEffect(() => { - getUser().then(setUser) - }, []); - - const handleLogin = () => { - getUser().then(setUser) - } - - const userIsAdmin = isAdmin() - let userDisplayName = '' - if (user) { - userDisplayName = userIsAdmin ? - user.username + " (Admin)" : - user.username - } + const userDisplayName = Connection.is_logged_in? Connection.user?.username : '' const datasetsPath = "/" - const isDatasetPath = matchPath(pathname, - {path: datasetsPath, exact:true} - ) + const isDatasetPath = matchPath({path: datasetsPath, end: true}, pathname) !== null const harvestersPath = "/harvesters" - const isHarvestersPath = matchPath(pathname, - {path: harvestersPath, exact:true} - ) + const isHarvestersPath = matchPath({path: harvestersPath, end: true}, pathname) !== null const cellsPath = "/cells" - const isCellsPath = matchPath(pathname, - {path: cellsPath, exact:true} - ) + const isCellsPath = matchPath({path: cellsPath, end: true}, pathname) !== null const equipmentPath = "/equipment" - const isEquipmentPath = matchPath(pathname, - {path: equipmentPath, exact:true} - ) - console.log('paths:', isDatasetPath, isHarvestersPath) - + const isEquipmentPath = matchPath({path: equipmentPath, end: true}, pathname) !== null + const userPath = "/users" + const isUsersPath = matchPath({path: userPath, end: true}, pathname) !== null const [open, setOpen] = React.useState(false); const handleDrawerOpen = () => { @@ -191,13 +164,11 @@ export default function App() { }; const [tokenOpen, setTokenOpen] = React.useState(false); - const [token, setToken] = React.useState(); + const [token, setToken] = React.useState(); const handleTokenOpen = () => { - getToken().then(response => response.json()).then(data => { - setToken(data.access_token) - setTokenOpen(true); - }); + setToken(Connection.user?.token) + setTokenOpen(true); }; const handleTokenClose = () => { @@ -207,7 +178,7 @@ export default function App() { const tokenGenerator = ( + @@ -264,14 +235,21 @@ export default function App() { - - - + + + + + + + + ); - let history = useHistory(); + let navigate = useNavigate(); - const logged_in = ( + const Layout = (
@@ -294,7 +272,7 @@ export default function App() { {tokenGenerator} @@ -317,29 +295,23 @@ export default function App() {
- {/* A looks through its children s and - renders the first one that matches the current URL. */} - - - - - - - +
); - + /* A looks through its children s and renders the first one that matches the current URL. */ return ( - - - - - - {logged_in} + + }/> + + + + + + - + ); } diff --git a/frontend/src/DatasetChart.js b/frontend/src/DatasetChart.js deleted file mode 100644 index 48f8d3e1..00000000 --- a/frontend/src/DatasetChart.js +++ /dev/null @@ -1,182 +0,0 @@ -import React, { useEffect, useState } from "react"; -import { ResponsiveLine } from '@nivo/line' -import { timeseries_column } from './Api' - -const TEST_TIME_COLUMN_ID = 1 -const VOLTAGE_COLUMN_ID = 2 -const AMPS_COLUMN_ID = 3 - - -export default function DatasetChart({ dataset }) { - - const [timeseries, setTimeseries] = useState({}) - - - const cols = dataset.columns.sort((arg1, arg2) => { - let type1 = arg1.type_id - let type2 = arg2.type_id - - // priorities volts or amps - if (type1 === 2 || type1 === 3) { - type1 += 1000; - } - if (type2 === 2 || type2 === 3) { - type2 += 1000; - } - return type2 - type1 - }) - - const time_col = cols.find(c => c.type_id === TEST_TIME_COLUMN_ID) - const volts_col = cols.find(c => c.type_id === VOLTAGE_COLUMN_ID) - const amps_col = cols.find(c => c.type_id === AMPS_COLUMN_ID) - - const [selectedColumns, setSelectedColumns] = useState([ - volts_col.id, amps_col.id - ]) - - const handleLegendClick = (d) => { - if (cols.length === 0) { - return; - } - const col = cols.filter((c) => c.name === d.id)[0]; - if (!(col.id in timeseries)) { - timeseries_column(dataset.id, col.id).then( - (array) => { - setTimeseries(prevState => { - let newTimeseries = {...prevState}; - newTimeseries[col.id] = array; - return newTimeseries; - }); - setSelectedColumns(prevState => { - return [...prevState, col.id]; - }); - } - ); - } else { - setSelectedColumns(prevState => { - const filt = prevState.filter((id) => id !== col.id); - if (filt.length < prevState.length) { - return filt; - } else { - return [...prevState, col.id]; - } - }); - } - }; - - useEffect(() => { - const dlColumns = [ - time_col, volts_col, amps_col - ]; - let new_timeseries = {}; - dlColumns.reduce( async (previousPromise, nextCol) => { - await previousPromise; - return timeseries_column(dataset.id, nextCol.id).then( - (array) => { - new_timeseries[nextCol.id] = array; - } - ); - }, Promise.resolve()).then(() => { - setTimeseries(new_timeseries); - }); - }, [dataset, cols, time_col, volts_col, amps_col]); - - let renderChart = false; - const chart_data = cols.map((col) => { - if (col.id === time_col.id) { - return null; - } - const defaultData = { - id: col.name, - data: [{ - x: 0, - y: 0, - }] - }; - if (!timeseries[time_col.id]) { - return defaultData; - } - if (!timeseries[col.id]) { - return defaultData; - } - if (!selectedColumns.includes(col.id)) { - return defaultData; - } - renderChart = true; - let data = [] - let subsample = timeseries[col.id].length / 1000.0; - if (subsample < 1) { - subsample = 1.0; - } - const int_subsample = Math.round(subsample); - for(let i = 0; i < timeseries[col.id].length; i += int_subsample) { - data.push({ - x: timeseries[time_col.id][i], - y: timeseries[col.id][i], - }); - } - return { - id: col.name, - data: data, - }; - }).filter((obj) => obj); - - return ( -
- {renderChart && - - } -
- ) - -} diff --git a/frontend/src/DatasetChart.tsx b/frontend/src/DatasetChart.tsx new file mode 100644 index 00000000..2c5c3d23 --- /dev/null +++ b/frontend/src/DatasetChart.tsx @@ -0,0 +1,245 @@ +import React, { useEffect, useState, Fragment } from "react"; +import { ResponsiveLine, Datum } from '@nivo/line' +import {DatasetFields} from "./Datasets"; +import Connection from "./APIConnection"; +import CircularProgress from "@mui/material/CircularProgress"; +import Grid from "@mui/material/Grid"; +import Typography from "@mui/material/Typography"; +import Stack from "@mui/material/Stack"; + +export type UnitFields = { + name: string; + symbol: string; + description: string; +} + +export type ColumnFields = { + id: number; + url: string; + name: string; + dataset: string; + is_numeric: boolean; + type_name: string; + description: string; + unit: UnitFields; + data: string; + data_list: string; +} + +export type DatasetChartProps = { + dataset: DatasetFields +} + +export type ColumnDataFields = { + id: number; + url: string; + observations: T[]; +} + +type keyColumnMap = { + [column_name in "time" | "volts" | "amps"]: ColumnFields | undefined; +}; + +// These values come from the fixtures injected into Galvanalyser's backend +const TEST_TIME_COLUMN = "Time" +const VOLTAGE_COLUMN = "Volts" +const AMPS_COLUMN = "Amps" + + +export default function DatasetChart(props: DatasetChartProps) { + const [columns, setColumns] = useState([]) + const [keyColumns, setKeyColumns] = + useState({time: undefined, amps: undefined, volts: undefined}) + const [timeseries, setTimeseries] = useState<{[id: number]: number[]}>({}) + const [loadingColumnData, setLoadingColumnData] = useState([]) + const [textHeader, setTextHeader] = useState() + let renderChart = false; + + useEffect(() => { + Promise.all(props.dataset.columns.map(c => Connection.fetch(c))) + .then(columns => { + const cols = columns + .map(c => c.content) + .filter(c => c.is_numeric) + .sort((arg1, arg2) => { + const priority_cols = [VOLTAGE_COLUMN, AMPS_COLUMN] + const args = [arg1, arg2].map(a => priority_cols.includes(a.type_name)? a.id + 1000 : a.id) + + return args[1] - args[0] + }) + const time = cols.find(c => c.type_name === TEST_TIME_COLUMN) + const volts = cols.find(c => c.type_name === VOLTAGE_COLUMN) + const amps = cols.find(c => c.type_name === AMPS_COLUMN) + setColumns(cols) + setKeyColumns({time, volts, amps}) + if (time) + fetchColumnData(time) + if (volts) + fetchColumnData(volts) + .then(() => setSelectedColumns(prevState => [...prevState.filter(c => c.id !== volts.id), volts])) + if (amps) + fetchColumnData(amps) + .then(() => setSelectedColumns(prevState => [...prevState.filter(c => c.id !== amps.id), amps])) + }) + .then(() => { + }) + }, [props.dataset]) + + useEffect(() => { + if (loadingColumnData.length) + setTextHeader( + + + {`Loading column data for ${loadingColumnData.length} columns...`} + + ) + else if (!renderChart) + setTextHeader() + else + setTextHeader(Click a column in the legend to add its data to the graph) + }, [loadingColumnData, renderChart]) + + const [selectedColumns, setSelectedColumns] = useState([]) + + const fetchColumnData = (col: ColumnFields) => { + setLoadingColumnData(prevState => [...prevState.filter(i => i !== col.id), col.id]) + return Connection.fetch>(col.data_list) + .then(r => {console.log(r); return r}) + .then(response => response.content) + .then(data => { + setTimeseries(prevState => ({...prevState, [col.id]: data.observations})) + setLoadingColumnData(prevState => prevState.filter(i => i !== col.id)) + } + ) + } + + const handleLegendClick = (datum: Datum) => { + const col = columns.find(c => get_series_name(c) === datum.id) + if (!col) { + return; + } + if (!(col.id in timeseries)) { + fetchColumnData(col) + .then(() => setSelectedColumns(prevState => [...prevState, col])) + } else { + if (selectedColumns.map(c => c.id).includes(col.id)) + setSelectedColumns(prevState => prevState.filter(c => c.id !== col.id)) + else + setSelectedColumns(prevState => [...prevState, col]) + } + }; + + const get_series_name = (col: ColumnFields) => `${col.name} [${col.id}]` + + const chart_data = columns.filter(c => c.id !== keyColumns.time?.id).map((col: ColumnFields) => { + const defaultData = { + id: get_series_name(col), + data: [{ + x: 0, + y: 0, + }] + }; + if (keyColumns.time === undefined || !timeseries[keyColumns.time.id]) { + return defaultData; + } + if (!timeseries[col.id]) { + return defaultData; + } + if (!selectedColumns.map(c => c.id).includes(col.id)) { + return defaultData; + } + renderChart = true; + let data = [] + let subsample = timeseries[col.id].length / 1000.0; + if (subsample < 1) { + subsample = 1.0; + } + const int_subsample = Math.round(subsample); + for(let i = 0; i < timeseries[col.id].length; i += int_subsample) { + data.push({ + x: timeseries[keyColumns.time.id][i], + y: timeseries[col.id][i], + }); + } + return { + id: get_series_name(col), + data: data, + }; + }) + + return ( + + + + {textHeader} + + + {renderChart && + + + + } + + ) + +} diff --git a/frontend/src/DatasetDetail.js b/frontend/src/DatasetDetail.js index d623b5b0..80f6fb3f 100644 --- a/frontend/src/DatasetDetail.js +++ b/frontend/src/DatasetDetail.js @@ -1,14 +1,14 @@ import React, { useEffect, useState } from "react"; -import Typography from '@material-ui/core/Typography'; +import Typography from '@mui/material/Typography'; import { useForm } from "react-hook-form"; -import Card from "@material-ui/core/Card"; -import CardActions from "@material-ui/core/CardActions"; -import CardContent from "@material-ui/core/CardContent"; -import { makeStyles } from '@material-ui/core/styles'; -import SaveIcon from '@material-ui/icons/Save'; -import IconButton from '@material-ui/core/IconButton'; -import Alert from '@material-ui/lab/Alert'; -import Container from '@material-ui/core/Container'; +import Card from "@mui/material/Card"; +import CardActions from "@mui/material/CardActions"; +import CardContent from "@mui/material/CardContent"; +import { makeStyles } from '@mui/styles' +import SaveIcon from '@mui/icons-material/Save'; +import IconButton from '@mui/material/IconButton'; +import Alert from '@mui/lab/Alert'; +import Container from '@mui/material/Container'; import { useParams } from "react-router-dom"; import { FormTextField, FormSelectField, @@ -132,7 +132,7 @@ export default function DatasetDetail() { const { id } = useParams(); const classes = useStyles(); - const [cellData, setCellData] = useState([]) + const [cellData, setCellFamily] = useState([]) const [equipmentData, setEquipmentData] = useState(null) const [dataset, setDataset] = useState(null) const [userData, setUserData] = useState([]) @@ -146,7 +146,7 @@ export default function DatasetDetail() { }); cells().then((response) => { if (response.ok) { - return response.json().then(setCellData); + return response.json().then(setCellFamily); } }); datasets(id).then((response) => { @@ -154,7 +154,7 @@ export default function DatasetDetail() { response.json().then((d) => { d['cell_id'] = d.cell ? d.cell.id : null d['owner_id'] = d.owner ? d.owner.id : null - d['equipment'] = d.equipment.map(x => x.id) + d['equipment'] = d.equipment? d.equipment.map(x => x.id) : [] setDataset(d); }); } diff --git a/frontend/src/Datasets.js b/frontend/src/Datasets.js deleted file mode 100644 index 1978d8b8..00000000 --- a/frontend/src/Datasets.js +++ /dev/null @@ -1,208 +0,0 @@ - -import React, {useEffect, useState} from "react"; -import { DataGrid, GridRowsProp, GridColDef } from '@material-ui/data-grid'; -import Container from '@material-ui/core/Container'; -import { datasets } from './Api'; -import { makeStyles } from '@material-ui/core/styles'; -import Button from '@material-ui/core/Button'; -import { useHistory } from "react-router-dom"; -import GetDatasetPython from "./GetDatasetPython" -import GetDatasetMatlab from "./GetDatasetMatlab" -import Dialog from '@material-ui/core/Dialog'; -import DialogActions from '@material-ui/core/DialogActions'; -import DialogContent from '@material-ui/core/DialogContent'; -import DialogTitle from '@material-ui/core/DialogTitle'; - - -const useStyles = makeStyles((theme) => ({ - container: { - paddingTop: theme.spacing(4), - paddingBottom: theme.spacing(4), - height: '100%', - }, - button: { - margin: theme.spacing(1), - } -})); - - - -export default function Datasets() { - const [data, setData] = useState(null) - const classes = useStyles(); - const history = useHistory(); - - const [select, setSelect] = useState(null) - - // TODO: use controlled selectionModel, cause this api is changin... - const handleSelectionChange = (e) => { - if (e.selectionModel) { - if (e.selectionModel.length > 0) { - setSelect(e.selectionModel[0]); - } - } else { - if (e.length > 0) { - setSelect(e[0]); - } - } - }; - - useEffect(() => { - datasets().then((response) => { - if (response.ok) { - return response.json().then(data => { - setData(data.sort((a, b) => { - if (a.date > b.date) { - return -1; - } - if (a.date < b.date) { - return 1; - } - return 0; - })); - }); - } - }); - }, []) - - const [codeOpen, setCodeOpen] = React.useState(false); - - const handleCodeOpen = () => { - setCodeOpen(true); - }; - - const handleCodeClose = () => { - setCodeOpen(false); - }; - - const [codeMatlabOpen, setMatlabCodeOpen] = React.useState(false); - - const handleMatlabCodeOpen = () => { - setMatlabCodeOpen(true); - }; - - const handleMatlabCodeClose = () => { - setMatlabCodeOpen(false); - }; - - - - const columns: GridColDef[] = [ - { field: 'dataset_id', headerName: 'ID', width: 70}, - { field: 'name', headerName: 'Name', flex: true}, - { - field: 'date', headerName: 'Date', width: 110, - valueFormatter: (params: GridValueFormatterParams) => { - return Intl.DateTimeFormat('en-GB').format(params.value); - } - }, - { field: 'type', headerName: 'Type', width: 90 }, - { field: 'cell', headerName: 'Cell', width: 100 }, - { field: 'owner', headerName: 'Owner', width: 120 }, - { field: 'purpose', headerName: 'Purpose', width: 250 }, - { field: 'metadata', headerName: 'Metadata', type: 'boolean', width: 120 }, - ]; - - let rows: GridRowsProp = [] - if ( data ) { - rows = data.map((d, i) => { - return { - id: i, - dataset_id: d.id, - name: d.name, - type: d.type, - date: Date.parse(d.date), - cell: d.cell ? d.cell.name : '', - owner: d.owner ? d.owner.username : '', - purpose: d.purpose, - metadata: !(!d.cell || !d.owner || !d.purpose || d.equipment.length === 0) - }; - }); - } - - - let autoHeight = true; - let divStyle = { width: '100%' }; - console.log('datasets', rows) - - - return ( - -
- -
- {data && data[select] && - - } - {data && data[select] && - - - - - {`API Code (Python) for dataset "${data[select].name}"`} - - - - - - - - - - } - {data && data[select] && - - - - - {`API Code (MATLAB) for dataset "${data[select].name}"`} - - - - - - - - - - } -
- ); -} diff --git a/frontend/src/Datasets.tsx b/frontend/src/Datasets.tsx new file mode 100644 index 00000000..192210c7 --- /dev/null +++ b/frontend/src/Datasets.tsx @@ -0,0 +1,330 @@ +import React, {useState, Fragment, ReactElement, useEffect} from "react"; +import Container from '@mui/material/Container'; +import Button from '@mui/material/Button'; +import { useNavigate } from "react-router-dom"; +import GetDatasetPython from "./GetDatasetPython" +import GetDatasetMatlab from "./GetDatasetMatlab" +import Dialog from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; +import DialogContent from '@mui/material/DialogContent'; +import DialogTitle from '@mui/material/DialogTitle'; +import Connection from "./APIConnection" +import AsyncTable, {RowGeneratorContext} from "./AsyncTable" +import Paper from "@mui/material/Paper"; +import FormControl from "@mui/material/FormControl"; +import Select from "@mui/material/Select"; +import TextField from "@mui/material/TextField"; +import {UserSet} from "./UserRoleSet"; +import {CellFields} from "./CellList"; +import MenuItem from "@mui/material/MenuItem"; +import {EquipmentFields} from "./Equipment"; +import OutlinedInput from "@mui/material/OutlinedInput"; +import Box from "@mui/material/Box"; +import ListItem from "@mui/material/ListItem"; +import Tooltip from "@mui/material/Tooltip"; +import Grid from "@mui/material/Grid"; +import InputLabel from "@mui/material/InputLabel"; +import useStyles from "./UseStyles"; +import ActionButtons from "./ActionButtons"; +import Stack from "@mui/material/Stack"; +import DatasetChart from "./DatasetChart"; + +export type DatasetFields = { + url: string; + id: number; + name: string; + type: string; + date: string; + cell: string | null; + equipment: string[]; + columns: string[]; + purpose: string; + user_sets: UserSet[]; +} + +export default function Datasets() { + const classes = useStyles(); + const [selected, setSelected] = useState(null) + + useEffect(() => { + console.log(`Dataset useEffect`) + Connection.fetchMany('datasets/').catch(e => console.warn) + Connection.fetchMany('cells/').catch(e => console.warn) + Connection.fetchMany('equipment/').catch(e => console.warn) + }, [Connection.user]) + + const updateRow = (data: DatasetFields, context: RowGeneratorContext) => { + context.mark_loading(true) + const insert_data: any = { + name: data.name, + type: data.type, + cell: data.cell || null, + equipment: data.equipment + } + if (data.purpose) insert_data.purpose = data.purpose + return Connection.fetch(data.url, {body: JSON.stringify(insert_data), method: 'PATCH'}) + .then(r => r.content) + } + + const columns = [ + {label: 'Date', help: 'Date of Test'}, + {label: 'Properties', help: ''}, + {label: 'Equipment', help: 'Equipment used to generate the dataset'}, + {label: 'Actions', help: 'Inspect / Save dataset'} + ] + + const navigate = useNavigate(); + + const [codeOpen, setCodeOpen] = React.useState(false); + + const handleCodeOpen = () => { + setCodeOpen(true); + }; + + const handleCodeClose = () => { + setCodeOpen(false); + }; + + const [codeMatlabOpen, setMatlabCodeOpen] = React.useState(false); + + const handleMatlabCodeOpen = () => { + setMatlabCodeOpen(true); + }; + + const handleMatlabCodeClose = () => { + setMatlabCodeOpen(false); + }; + + const get_cell_items = (dataset: DatasetFields) => { + const cellList = Connection.results.get_contents('cells/') + const menuItem = (cell: CellFields) => {cell.uid}{cell.display_name? ` (${cell.display_name})` : ''} + const items: ReactElement[] = [] + if (dataset?.cell) { + const cell = cellList.find(c => c.url === dataset.cell) + if (cell !== undefined) + items.push(menuItem(cell)) + } + items.push(None) + if (cellList.length) + items.push(...cellList.filter(c => c.url !== dataset.cell).map(menuItem)) + if (!items.length) + items.push(No cells defined) + return items + } + + const get_equipment_items = (dataset: DatasetFields) => { + const equipmentList = Connection.results.get_contents('equipment/') + const menuItem = (equipment: EquipmentFields) => + {equipment.name} + const items: ReactElement[] = [] + if (dataset?.equipment) { + dataset.equipment.map(e => equipmentList.find(eq => eq.url === e)) + .forEach(e => { + if (e !== undefined) + items.push(menuItem(e)) + }) + } + if (equipmentList.length) + items.push(...equipmentList.filter(e => !dataset?.equipment.includes(e.url)).map(menuItem)) + if (!items.length) + items.push(No equipment defined) + return items + } + + const purposeOptions = [ + 'Ageing', + 'Real world/drive cycling', + 'Characterisation/check-up', + 'Thermal performance', + 'Pulse', + 'Charge', + 'Discharge', + 'EIS', + 'GITT', + 'Pseudo-OCV', + ] + + return ( + + + + classes={classes} + columns={columns} + row_generator={(dataset, context) => [ + + { + Intl.DateTimeFormat( + 'en-GB', + {dateStyle: 'short'}) + .format(Date.parse(dataset.date)) + } + , + + + + + + + + + + + Purpose + + + + + + + + + + + + + Cell + + + + + + , + + + , + + selected?.id === dataset.id? setSelected(null) : setSelected(dataset)} + inspectIconProps={selected?.id === dataset.id ? {color: 'info'} : {}} + onSave={() => updateRow(dataset, context).then(context.refresh)} + saveButtonProps={{disabled: !context.value_changed}} + /> + + ]} + url={`datasets/`} + styles={classes} + /> + + {selected !== null && + + + + + {`API Code (Python) for dataset "${selected.name}"`} + + + + + + + + + + } + {selected !== null && + + + + + {`API Code (MATLAB) for dataset "${selected.name}"`} + + + + + + + + + + } + { + selected !== null && + } + + ); +} diff --git a/frontend/src/Equipment.js b/frontend/src/Equipment.js deleted file mode 100644 index 8d29684c..00000000 --- a/frontend/src/Equipment.js +++ /dev/null @@ -1,200 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import Typography from '@material-ui/core/Typography'; -import TextField from '@material-ui/core/TextField'; -import { makeStyles } from '@material-ui/core/styles'; -import Table from '@material-ui/core/Table'; -import TableBody from '@material-ui/core/TableBody'; -import Paper from '@material-ui/core/Paper'; -import Tooltip from '@material-ui/core/Tooltip'; -import AddIcon from '@material-ui/icons/Add'; -import IconButton from '@material-ui/core/IconButton'; -import TableCell from '@material-ui/core/TableCell'; -import Container from '@material-ui/core/Container'; -import SaveIcon from '@material-ui/icons/Save'; -import TableContainer from '@material-ui/core/TableContainer'; -import TableHead from '@material-ui/core/TableHead'; -import DeleteIcon from '@material-ui/icons/Delete'; -import TableRow from '@material-ui/core/TableRow'; -import { - equipment, add_equipment, - update_equipment, delete_equipment -} from './Api' - -const useStyles = makeStyles((theme) => ({ - container: { - paddingTop: theme.spacing(4), - paddingBottom: theme.spacing(4), - }, - table: { - minWidth: 650, - }, - resize: { - fontSize: '10pt', - }, - input: { - marginLeft: theme.spacing(1), - flex: 1, - }, - iconButton: { - padding: 10, - }, -})); - -function MyTableRow({savedRow, onRowSave, selected, onSelectRow}) { - const classes = useStyles(); - const [row, setRow] = useState([]) - - useEffect(() => { - setRow(savedRow); - }, [savedRow]); - - const rowUnchanged = Object.keys(row).reduce((a, k) => { - return a && row[k] === savedRow[k]; - }, true); - - let useRow = row; - if (useRow.id === undefined) { - useRow = savedRow; - } - Object.keys(useRow).map((k) => { - useRow[k] = useRow[k] === null ? '' : useRow[k]; - return null - }); - - const setValue = (key) => (e) => { - setRow({...useRow, [key]: e.target.value}); - }; - - return ( - - {onSelectRow(savedRow);}} - hover - selected={selected} - > - - - - - - - - - - {onRowSave(row);}} - > - - - - - - - - ) -} - -export default function Equipment() { - const classes = useStyles(); - - const [equipData, setEquipData] = useState([]) - const [selected, setSelected] = useState({id: null}) - - - useEffect(() => { - refreshEquip(); - }, []); - - const refreshEquip = () => { - equipment().then((response) => { - if (response.ok) { - return response.json().then((result) => { - setEquipData(result.sort((arg1, arg2) => arg1.id - arg2.id)); - }); - } - }); - }; - - const addNewEquip = () => { - add_equipment({name: 'Edit me'}).then(refreshEquip); - }; - const deleteEquip = () => { - delete_equipment(selected.id).then(refreshEquip); - }; - const updateEquip = (value) => { - Object.keys(value).map((k) => { - value[k] = value[k] === '' ? null : value[k]; - return null - }); - update_equipment(value.id, value).then(refreshEquip); - }; - - const column_headings = [ - {label: 'Name', help: 'Equipment Name'}, - {label: 'Type', help: 'Equipment Type'}, - {label: 'Save', help: 'Click to save edits to a row'}, - ] - - return ( - - - - - - - {column_headings.map(heading => ( - - - - {heading.label} - - - - )) - } - - - - {equipData.map((row) => ( - - ))} - -
-
- - - - - - - - - - - - -
-
- ); -} diff --git a/frontend/src/Equipment.tsx b/frontend/src/Equipment.tsx new file mode 100644 index 00000000..a47f22b9 --- /dev/null +++ b/frontend/src/Equipment.tsx @@ -0,0 +1,95 @@ +import React, { Fragment } from 'react'; +import TextField from '@mui/material/TextField'; +import Paper from '@mui/material/Paper'; +import AddIcon from '@mui/icons-material/Add'; +import Container from '@mui/material/Container'; +import SaveIcon from '@mui/icons-material/Save'; +import AsyncTable from './AsyncTable'; +import Connection from "./APIConnection"; +import ActionButtons from "./ActionButtons"; +import useStyles from "./UseStyles"; + +export type EquipmentFields = { + url: string; + id: number; + name: string; + type: string; + in_use: boolean; +} + +const columns = [ + {label: 'Name', help: 'Equipment Name'}, + {label: 'Type', help: 'Equipment Type'}, + {label: 'Save', help: 'Save / Delete equipment. Edits are disabled for equipment that is in use'}, +] + +const string_fields = ['name', 'type'] as const + +export default function Equipment() { + const classes = useStyles(); + + const get_write_data: (data: EquipmentFields) => Partial = (data) => { + return { name: data.name, type: data.type } + } + + const addNewEquipment = (data: EquipmentFields) => { + const insert_data = get_write_data(data) + return Connection.fetch('equipment/', {body: JSON.stringify(insert_data), method: 'POST'}) + }; + + const updateEquipment = (data: EquipmentFields) => { + const insert_data = get_write_data(data) + return Connection.fetch(data.url, {body: JSON.stringify(insert_data), method: 'PATCH'}) + .then(r => r.content) + }; + + const deleteEquipment = (data: EquipmentFields) => Connection.fetch(data.url, {method: 'DELETE'}) + + return ( + + + + classes={classes} + columns={columns} + row_generator={(equipment, context) => [ + ...string_fields.map(n => + { + equipment.in_use ? equipment[n] : + } + ), + + addNewEquipment(equipment).then(() => context.refresh_all_rows()) : + () => updateEquipment(equipment).then(context.refresh) + } + saveButtonProps={{disabled: !context.value_changed || equipment.in_use}} + saveIconProps={{component: context.is_new_row? AddIcon : SaveIcon}} + onDelete={ + () => + window.confirm(`Delete equipment ${equipment.name}?`) && + deleteEquipment(equipment).then(context.refresh) + } + deleteButtonProps={{disabled: context.is_new_row || equipment.in_use}} + /> + + ]} + new_row_values={{name: '', type: ''}} + url={`equipment/`} + styles={classes} + /> + + + ); +} diff --git a/frontend/src/Files.js b/frontend/src/Files.js deleted file mode 100644 index 68367235..00000000 --- a/frontend/src/Files.js +++ /dev/null @@ -1,90 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import { makeStyles } from '@material-ui/core/styles'; -import Table from '@material-ui/core/Table'; -import TableBody from '@material-ui/core/TableBody'; -import Container from '@material-ui/core/Container'; -import TableCell from '@material-ui/core/TableCell'; -import TableContainer from '@material-ui/core/TableContainer'; -import TableHead from '@material-ui/core/TableHead'; -import TableRow from '@material-ui/core/TableRow'; -import Paper from '@material-ui/core/Paper'; -import { files } from './Api' - - -const useStyles = makeStyles((theme) => ({ - head: { - backgroundColor: theme.palette.primary.light, - }, - headCell: { - color: theme.palette.common.white, - }, - container: { - paddingTop: theme.spacing(4), - paddingBottom: theme.spacing(4), - }, - table: { - minWidth: 650, - }, -})); - -export default function Files({ path }) { - const classes = useStyles(); - - const [fileData, setFileData] = useState([]) - - useEffect(() => { - files(path.id).then((response) => { - if (response.ok) { - response.json().then((result) => { - setFileData(result.sort((arg1, arg2) => arg1.id - arg2.id)); - }); - } - }); - }, [path]); - - const datetimeOptions = { - year: 'numeric', month: 'numeric', day: 'numeric', - hour: 'numeric', minute: 'numeric', second: 'numeric', - }; - - return ( - - - - - - - Observed File - Last Observed Size - Last Observed Time - State - - - - {fileData.map((row) => ( - - - {row.path} - - - {row.last_observed_size} - - - { - Intl.DateTimeFormat('en-GB', datetimeOptions).format( - Date.parse(row.last_observed_time) - ) - } - - - {row.file_state} - - - ))} - -
-
-
-
- ); -} diff --git a/frontend/src/Files.tsx b/frontend/src/Files.tsx new file mode 100644 index 00000000..35818205 --- /dev/null +++ b/frontend/src/Files.tsx @@ -0,0 +1,87 @@ +import React, { Fragment } from 'react'; +import Container from '@mui/material/Container'; +import Tooltip from "@mui/material/Tooltip"; +import Typography from "@mui/material/Typography"; +import Paper from '@mui/material/Paper'; +import AsyncTable from './AsyncTable'; +import Connection from "./APIConnection"; +import {MonitoredPathFields} from "./HarvesterDetail"; +import IconButton from "@mui/material/IconButton"; +import RefreshIcon from "@mui/icons-material/Refresh"; +import useStyles from "./UseStyles"; + +export type FileFields = { + url: string; + id: number; + monitored_path: string; + relative_path: string; + state: string; + last_observed_time: string; + last_observed_size: number; + errors: { + error: string; + timestamp: string; + [key: string]: any; + } + datasets: string[]; +} + +export type FilesProps = { path: MonitoredPathFields } + +export default function Files(props: FilesProps) { + const classes = useStyles(); + + const forceReimport = (file: FileFields) => Connection.fetch(`${file.url}reimport/`) + + const datetimeOptions: Intl.DateTimeFormatOptions = { + year: 'numeric', month: 'numeric', day: 'numeric', + hour: 'numeric', minute: 'numeric', second: 'numeric', + }; + + const columns = [ + {label: props.path.path, help: 'File path'}, + {label: 'Last Observed Size', help: 'Size of the file in bytes'}, + {label: 'Last Observed Time', help: 'Time file was last scanned'}, + {label: 'State', help: 'File state'}, + {label: 'Datasets', help: 'View datasets linked to this file'}, + {label: 'Force Re-import', help: 'Retry the import operation next time the file is scanned'} + ] + + const file_state = (file: FileFields) => { + let state = file.state === 'IMPORT FAILED' ? + {file.state} : {file.state} + if (file.errors.length) + state = {state} + return state + } + + return ( + + + + classes={classes} + key="files" + columns={columns} + row_generator={(file, context) => [ + {file.relative_path}, + {file.last_observed_size}, + { + Intl.DateTimeFormat('en-GB', datetimeOptions).format( + Date.parse(file.last_observed_time) + )} + , + {file_state(file)}, + {file.datasets.length}, + + forceReimport(file).then(context.refresh)}> + + + + ]} + url={`files/?monitored_path__id=${props.path.id}&all=true`} + styles={classes} + /> + + + ); +} diff --git a/frontend/src/FormComponents.js b/frontend/src/FormComponents.js index b4cd46cc..1cc66f15 100644 --- a/frontend/src/FormComponents.js +++ b/frontend/src/FormComponents.js @@ -1,15 +1,15 @@ import React from "react"; -import TextField from '@material-ui/core/TextField'; -import { makeStyles } from '@material-ui/core/styles'; -import InputLabel from '@material-ui/core/InputLabel'; -import MenuItem from '@material-ui/core/MenuItem'; -import Autocomplete from '@material-ui/lab/Autocomplete'; -import FormControl from '@material-ui/core/FormControl'; -import Select from '@material-ui/core/Select'; +import TextField from '@mui/material/TextField'; +import { makeStyles } from '@mui/styles' +import InputLabel from '@mui/material/InputLabel'; +import MenuItem from '@mui/material/MenuItem'; +import Autocomplete from '@mui/lab/Autocomplete'; +import FormControl from '@mui/material/FormControl'; +import Select from '@mui/material/Select'; import { Controller } from "react-hook-form"; //import DateFnsUtils from '@date-io/date-fns'; // choose your lib -//import { DateTimePicker } from '@material-ui/pickers'; -import Chip from '@material-ui/core/Chip'; +//import { DateTimePicker } from '@mui/pickers'; +import Chip from '@mui/material/Chip'; const useStyles = makeStyles((theme) => ({ container: { diff --git a/frontend/src/GetDatasetMatlab.js b/frontend/src/GetDatasetMatlab.js index e933f5c8..7b81c1e2 100644 --- a/frontend/src/GetDatasetMatlab.js +++ b/frontend/src/GetDatasetMatlab.js @@ -1,23 +1,17 @@ -import React, {useEffect, useState} from "react"; +import React, {useState} from "react"; import SyntaxHighlighter from 'react-syntax-highlighter'; import { docco } from 'react-syntax-highlighter/dist/esm/styles/hljs'; -import {getToken} from "./Api" -import Typography from '@material-ui/core/Typography'; +import Typography from '@mui/material/Typography'; +import Connection from "./APIConnection"; export default function GetDatasetMatlab({dataset}) { - const [token, setToken] = useState('API_TOKEN'); - useEffect(() => { - getToken().then(response => response.json()).then(data => { - setToken(data.access_token) - }) - - }, []) - + const [token, setToken] = useState(Connection.user?.token || 'API_TOKEN'); + let domain = window.location.href.split('/')[2]; domain = domain.split(':')[0] - const host = `http://${domain}:5001` + const host = `http://${domain}:5000` const codeString = `%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % galvanalyser REST API access @@ -33,7 +27,7 @@ export default function GetDatasetMatlab({dataset}) { % login to galvanalyser > Generate API Token token = '${token}'; -apiURL = '${host}/api/dataset'; +apiURL = '${host}/Dataset'; options = weboptions('HeaderFields', {'Authorization' ['Bearer ' token]}); % Datasets can be referenced by name or by id. @@ -60,7 +54,7 @@ for i = 1:length(dataset_ids) d = dataset_ids(i); % get data - dsURL = strcat(apiURL, '/', d); + dsURL = strcat(apiURL, '/', d, '/'); meta = webread(dsURL, options); % append column data in columns diff --git a/frontend/src/GetDatasetPython.js b/frontend/src/GetDatasetPython.js index 79738061..a93597f5 100644 --- a/frontend/src/GetDatasetPython.js +++ b/frontend/src/GetDatasetPython.js @@ -1,30 +1,38 @@ -import React, {useEffect, useState} from "react"; +import React, {useState, useEffect} from "react"; import SyntaxHighlighter from 'react-syntax-highlighter'; import { docco } from 'react-syntax-highlighter/dist/esm/styles/hljs'; -import {getToken} from "./Api" -import Typography from '@material-ui/core/Typography'; +import Typography from '@mui/material/Typography'; +import Connection from "./APIConnection"; +import {CircularProgress} from "@mui/material"; export default function GetDatasetPython({dataset}) { - const [token, setToken] = useState('API_TOKEN'); - useEffect(() => { - getToken().then(response => response.json()).then(data => { - setToken(data.access_token) - }) - - }, []) - + const [token, setToken] = useState(Connection.user?.token || 'API_TOKEN'); + const [columns, setColumns] = useState("") + const [code, setCode] = useState() + let domain = window.location.href.split('/')[2]; domain = domain.split(':')[0] - const host = `http://${domain}:5001` - const column_ids = dataset.columns.map(column => { - return ` '${column.name}': ${column.id},` - }) - const column_ids_str = column_ids.join('\n') + const host = `http://${domain}:5000` const setupEnvString = `pip install batteryclient numpy` - const codeString = `import batteryclient + useEffect(() => { + Promise.all(dataset.columns.map(column => + Connection.fetch(column) + .then(r => r.content) + .then(col => ` '${col.name}': ${col.id},`) + )) + .then(cols => setColumns(cols.join('\n'))) + }, [dataset]) + + useEffect(() => { + if (!columns) + setCode() + else + setCode( + { + `import batteryclient from batteryclient.api import users_api import numpy as np @@ -48,7 +56,7 @@ with batteryclient.ApiClient(configuration) as api_client: # get the data columns (delete those you don't need) column_ids = { -${column_ids_str} +${columns} } # download column data @@ -58,25 +66,25 @@ ${column_ids_str} dtype=np.float32 ) for column_name, column_id in column_ids.items() }` + } + ) + }, [columns]) return ( - - - Setup Dependencies - - - - {setupEnvString} - + + + Setup Dependencies + - - Python Code - + + {setupEnvString} + + + Python Code + - - {codeString} - - + {code} + ) } diff --git a/frontend/src/HarvesterDetail.js b/frontend/src/HarvesterDetail.js deleted file mode 100644 index 670ae70e..00000000 --- a/frontend/src/HarvesterDetail.js +++ /dev/null @@ -1,283 +0,0 @@ -import React, { useEffect, useState, useCallback } from 'react'; -import TextField from '@material-ui/core/TextField'; -import Typography from '@material-ui/core/Typography'; -import Input from '@material-ui/core/Input'; -import InputAdornment from '@material-ui/core/InputAdornment'; -import { makeStyles } from '@material-ui/core/styles'; -import Table from '@material-ui/core/Table'; -import TableBody from '@material-ui/core/TableBody'; -import Paper from '@material-ui/core/Paper'; -import Tooltip from '@material-ui/core/Tooltip'; -import AddIcon from '@material-ui/icons/Add'; -import IconButton from '@material-ui/core/IconButton'; -import TableCell from '@material-ui/core/TableCell'; -import MenuItem from '@material-ui/core/MenuItem'; -import Select from '@material-ui/core/Select'; -import Chip from '@material-ui/core/Chip'; -import SaveIcon from '@material-ui/icons/Save'; -import TableContainer from '@material-ui/core/TableContainer'; -import TableHead from '@material-ui/core/TableHead'; -import DeleteIcon from '@material-ui/icons/Delete'; -import TableRow from '@material-ui/core/TableRow'; -import Files from './Files' - -import { - monitored_paths, add_monitored_path, users, env_harvester, - update_monitored_path, delete_monitored_path, isAdmin, -} from './Api' - -const useStyles = makeStyles((theme) => ({ - paper: { - marginTop: theme.spacing(4), - }, - table: { - minWidth: 650, - }, - resize: { - fontSize: '11pt', - }, - input: { - marginLeft: theme.spacing(1), - flex: 1, - }, - inputAdornment: { - color: theme.palette.text.disabled, - }, - iconButton: { - padding: 10, - }, - chips: { - display: 'flex', - flexWrap: 'wrap', - }, - chip: { - margin: 2, - }, -})); - -function MyTableRow({env, userData, savedRow, onRowSave, selected, onSelectRow, disableSave}) { - const classes = useStyles(); - const [row, setRow] = useState([]) - const [dirty, setDirty] = useState(false) - - const rowUnchanged = Object.keys(row).reduce((a, k) => { - return a && row[k] === savedRow[k]; - }, true); - - useEffect(() => { - if (!dirty) { - setRow(savedRow); - } - }, [dirty, savedRow]); - - - - let useRow = row; - if (useRow.id === undefined) { - useRow = savedRow; - } - - const setValue = (key) => (e) => { - setDirty(true); - setRow({...useRow, [key]: e.target.value}); - }; - - const ITEM_HEIGHT = 48; - const ITEM_PADDING_TOP = 8; - const MenuProps = { - PaperProps: { - style: { - maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP, - width: 250, - }, - }, - }; - - const idToName = (id) => { - const user = userData.find((x) => x.id === id); - return user ? user.username : 'Not Found'; - }; - - return ( - - {onSelectRow(savedRow);}} - hover - selected={selected} - > - - {useRow.id} - - - - {env.GALVANALYSER_HARVESTER_BASE_PATH}/ - , - }} - value={useRow.path} - onChange={setValue('path')} /> - - - - - - - - { - setDirty(false); - onRowSave(row); - }} - > - - - - - - - - ) -} - -export default function HarvesterDetail({harvester}) { - const classes = useStyles(); - - const [userData, setUserData] = useState([]) - const [paths, setPaths] = useState([]) - const [selected, setSelected] = useState({id: null}) - const [envData, setEnvData] = useState([]) - - const userIsAdmin = isAdmin(); - - useEffect(() => { - env_harvester(harvester.id).then((response) => { - if (response.ok) { - return response.json().then(setEnvData); - } - }); - }, [harvester.id]); - - useEffect(() => { - users().then((response) => { - if (response.ok) { - response.json().then(setUserData); - } - }); - }, []); - - const refreshPaths = useCallback( - () => { - monitored_paths(harvester.id).then((response) => { - if (response.ok) { - return response.json().then((result) => { - setPaths(result.sort((arg1, arg2) => arg1.id - arg2.id)); - setSelected(oldSelected => { - const newSelected = result.find(x => x.id === oldSelected.id); - return newSelected || {id: null}; - }); - }); - } - }); - }, - [harvester.id], - ); - - useEffect(() => { - refreshPaths(); - }, [harvester, refreshPaths]); - - const addNewPath= () => { - add_monitored_path({harvester_id: harvester.id, path: 'Edit me'}).then(refreshPaths); - }; - const deletePath = () => { - delete_monitored_path(selected.id).then(refreshPaths); - }; - const updatePath = (value) => { - update_monitored_path(value.id, value).then(refreshPaths); - }; - - const isSelected = selected.id !== null; - - return ( - - - Harvester "{harvester.machine_id}" monitored paths - - - - - - ID - Path - Users - - - - {paths.map((row) => ( - - ))} - -
-
- - - - - - - - - - - - - {isSelected && - - } -
- - ); -} diff --git a/frontend/src/HarvesterDetail.tsx b/frontend/src/HarvesterDetail.tsx new file mode 100644 index 00000000..3cc5310f --- /dev/null +++ b/frontend/src/HarvesterDetail.tsx @@ -0,0 +1,123 @@ +import React, {useState, Fragment} from 'react'; +import TextField from '@mui/material/TextField'; +import Typography from '@mui/material/Typography'; +import Paper from '@mui/material/Paper'; +import AddIcon from '@mui/icons-material/Add'; +import SaveIcon from '@mui/icons-material/Save'; +import Connection from "./APIConnection"; +import Files from './Files' +import {HarvesterFields} from "./Harvesters"; +import UserRoleSet, {UserSet} from "./UserRoleSet"; +import AsyncTable from "./AsyncTable"; +import useStyles from "./UseStyles"; +import ActionButtons from "./ActionButtons"; + +export type MonitoredPathFields = { + url: string; + id: number; + harvester: number; + stable_time: number; + path: string; + user_sets: UserSet[]; +} +type HarvesterDetailProps = { + harvester: HarvesterFields, + [key: string]: any +} + +export default function HarvesterDetail(props: HarvesterDetailProps) { + const harvester = props.harvester + const classes = useStyles(); + + const [selected, setSelected] = useState(null) + + const addNewPath = (data: MonitoredPathFields) => { + const insert_data = {harvester: harvester.id, path: data.path, stable_time: data.stable_time} + return Connection.fetch('monitored_paths/', {body: JSON.stringify(insert_data), method: 'POST'}) + }; + const deletePath = (data: MonitoredPathFields) => Connection.fetch(data.url, {method: 'DELETE'}) + + const updatePath = (data: MonitoredPathFields) => { + const insert_data = {path: data.path, stable_time: data.stable_time} + return Connection.fetch(data.url, {body: JSON.stringify(insert_data), method: 'PATCH'}) + .then(r => r.content) + }; + + const columns = [ + {label: 'Path', help: 'Directory to watch'}, + {label: 'Stable Time (s)', help: 'Seconds files must remain unchanged to be considered stable and imported'}, + {label: 'Users', help: 'Users with access to this path\'s datasets'}, + {label: 'Actions', help: 'Inspect / Save / Delete monitored path (imported datasets will remain)'}, + ] + + return ( + + + {harvester.name} - monitored paths + + + classes={classes} + key={`${harvester.id}_paths`} + columns={columns} + row_generator={(row, context) => [ + + + , + + + + , + context.is_new_row? : + context.refresh_all_rows(false)} + /> + , + + selected?.id === row.id? setSelected(null) : setSelected(row)} + inspectButtonProps={{disabled: context.is_new_row}} + inspectIconProps={selected?.id === row.id ? {color: 'info'} : {}} + onSave={ + context.is_new_row? + () => addNewPath(row).then(() => context.refresh_all_rows()) : + () => updatePath(row).then(context.refresh) + } + saveButtonProps={{disabled: !context.value_changed}} + saveIconProps={{component: context.is_new_row? AddIcon : SaveIcon}} + onDelete={() => window.confirm(`Delete ${row.path}?`) && deletePath(row).then(context.refresh)} + deleteButtonProps={{disabled: context.is_new_row}} + /> + + ]} + url={`monitored_paths/?harvester__id=${harvester.id}&all=true`} + new_row_values={{path: "", stable_time: 60}} + styles={classes} + /> + {selected !== null && } + + ); +} diff --git a/frontend/src/Harvesters.js b/frontend/src/Harvesters.js deleted file mode 100644 index 76fcdaed..00000000 --- a/frontend/src/Harvesters.js +++ /dev/null @@ -1,265 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import TextField from '@material-ui/core/TextField'; -import { makeStyles } from '@material-ui/core/styles'; -import Table from '@material-ui/core/Table'; -import TableBody from '@material-ui/core/TableBody'; -import Paper from '@material-ui/core/Paper'; -import Typography from '@material-ui/core/Typography'; -import PlayArrowIcon from '@material-ui/icons/PlayArrow'; -import Tooltip from '@material-ui/core/Tooltip'; -import AddIcon from '@material-ui/icons/Add'; -import IconButton from '@material-ui/core/IconButton'; -import TableCell from '@material-ui/core/TableCell'; -import Container from '@material-ui/core/Container'; -import SaveIcon from '@material-ui/icons/Save'; -import TableContainer from '@material-ui/core/TableContainer'; -import TableHead from '@material-ui/core/TableHead'; -import DeleteIcon from '@material-ui/icons/Delete'; -import TableRow from '@material-ui/core/TableRow'; - -import HarvesterDetail from './HarvesterDetail'; -import { - run_harvester, harvesters, add_harvester, - update_harvester, delete_harvester, isAdmin -} from './Api' - -const useStyles = makeStyles((theme) => ({ - container: { - paddingTop: theme.spacing(4), - paddingBottom: theme.spacing(4), - }, - table: { - minWidth: 650, - }, - resize: { - fontSize: '11pt', - }, - input: { - marginLeft: theme.spacing(1), - flex: 1, - }, - iconButton: { - padding: 10, - }, -})); - -function MyTableRow({savedRow, onRowSave, selected, onSelectRow, disableSave}) { - const classes = useStyles(); - const [row, setRow] = useState([]) - const [dirty, setDirty] = useState(false) - - useEffect(() => { - if (!dirty) { - setRow(savedRow); - } - }, [dirty, savedRow]); - - - let useRow = row; - if (useRow.id === undefined) { - useRow = savedRow; - } - - return ( - - {onSelectRow(savedRow);}} - hover - selected={selected} - > - - {savedRow.id} - - - - { - setDirty(true); - setRow({...row, machine_id: e.target.value}); - }} - > - - - - {savedRow.harvester_name} - - - {savedRow.is_running && - (True) - } - - - {savedRow.last_successful_run && - Intl.DateTimeFormat('en-GB', - { dateStyle: 'long', timeStyle: 'long' }).format( - Date.parse(savedRow.last_successful_run) - )} - - - { - setDirty(true); - setRow({...row, periodic_hour: e.target.value}); - }} - > - - - - - - { - onRowSave(row); - setDirty(false); - }} - > - - - - - - - - ) -} - -export default function Harvesters() { - const classes = useStyles(); - - const [harvesterData, setHarvesterData] = useState([]) - const [selected, setSelected] = useState({id: null}) - const userIsAdmin = isAdmin() - - useEffect(() => { - refreshHarvesters(); - const interval = setInterval(() => { - refreshHarvesters(); - }, 5000); - return () => clearInterval(interval); - }, []); - - const refreshHarvesters= () => { - harvesters().then((response) => { - if (response.ok) { - return response.json().then((result) => { - setHarvesterData(result.sort((arg1, arg2) => arg1.id - arg2.id)); - setSelected(oldSelected => { - const newSelected = result.find(x => x.id === oldSelected.id) - return newSelected || {id: null}; - }); - }); - } - }); - }; - - const addNewHarvester = () => { - add_harvester({machine_id: 'Edit me'}).then(refreshHarvesters); - }; - const deleteHarvester= () => { - delete_harvester(selected.id).then(refreshHarvesters); - }; - const updateHarvester= (value) => { - update_harvester(value.id, value).then(refreshHarvesters); - }; - - const runSelectedHarvester = () => { - run_harvester(selected.id).then(refreshHarvesters); - }; - - - const isSelected = selected.id !== null; - - const column_headings = [ - {label: 'ID', help: 'Harvester id in database'}, - {label: 'Name', help: 'Harvester name'}, - {label: 'Harvester', help: 'Username for harvester database account'}, - {label: 'Is Running', help: 'Displays "True" if harvester is currently running'}, - {label: 'Last Completed Run', help: 'Datetime of last harvester run that successfully ran until completion'}, - {label: 'Periodic Hour', help: 'If set, harvester is run every day on this hour'}, - {label: 'Save', help: 'Click to save edits to a row'}, - ] - - return ( - - - - - - - {column_headings.map(heading => ( - - - - {heading.label} - - - - )) - } - - - - {harvesterData.map((row) => ( - - ))} - -
-
- - - - - - - - - - - - - - - - - - - -
- {isSelected && - - } -
- ); -} diff --git a/frontend/src/Harvesters.tsx b/frontend/src/Harvesters.tsx new file mode 100644 index 00000000..b1e3e40f --- /dev/null +++ b/frontend/src/Harvesters.tsx @@ -0,0 +1,119 @@ +import React, { useState, Fragment } from 'react'; +import TextField from '@mui/material/TextField'; +import Paper from '@mui/material/Paper'; +import Typography from '@mui/material/Typography'; +import Container from '@mui/material/Container'; +import HarvesterDetail from './HarvesterDetail'; +import Connection from "./APIConnection"; +import {UserSet} from "./UserRoleSet"; +import AsyncTable, {Column} from "./AsyncTable"; +import useStyles from "./UseStyles"; +import ActionButtons from "./ActionButtons"; + +export type HarvesterWriteableFields = { + name: string; + sleep_time: number; +} + +export type HarvesterFields = HarvesterWriteableFields & { + url: string; + id: number; + last_check_in: string | null; + user_sets: UserSet[]; +} + +export default function Harvesters() { + const classes = useStyles(); + + const [selected, setSelected] = useState(null) + const userIsAdmin = (harvester: HarvesterFields) => + Connection.user !== null && + harvester?.user_sets?.find(u => u.name.toLowerCase() === 'admins')?.users + .map(usr => usr.username) + .includes(Connection.user.username) + + const updateHarvester = (data: HarvesterFields) => { + console.log('updateHarvester', data) + const insert_data: HarvesterWriteableFields = { + name: data.name, + sleep_time: data.sleep_time + } + return Connection.fetch(data.url, {body: JSON.stringify(insert_data), method: 'PATCH'}) + .then(r => r.content) + }; + + const deleteHarvester = (harvester: HarvesterFields) => Connection.fetch(harvester.url, {method: 'DELETE'}) + + const columns: Column[] = [ + {label: 'ID', help: 'Harvester id in database'}, + {label: 'Name', help: 'Harvester name'}, + {label: 'Last Check In', help: 'Datetime of last harvester run that successfully contacted the database'}, + {label: 'Sleep Time (s)', help: 'Time harvester waits after completing a cycle before beginning the next'}, + {label: 'Actions', help: 'Inspect / Add / Save / Delete harvester path information'} + ] + + return ( + + + { + classes={classes} + columns={columns} + row_generator={(row, context) => [ + {row.id}, + + { + userIsAdmin(row) ? + : {row.name} + } + , + + { + (row.last_check_in && + Intl.DateTimeFormat( + 'en-GB', + { dateStyle: 'long', timeStyle: 'long' }) + .format(Date.parse(row.last_check_in)) + ) || (None) + } + , + + { + userIsAdmin(row) ? + : {row.sleep_time} + } + , + + selected?.id === row.id? setSelected(null) : setSelected(row)} + inspectIconProps={selected?.id === row.id ? {color: 'info'} : {}} + onSave={() => updateHarvester(row).then(context.refresh)} + saveButtonProps={{disabled: !userIsAdmin(row) || !context.value_changed}} + onDelete={() => window.confirm(`Delete ${row.name}?`) && deleteHarvester(row).then(context.refresh)} + deleteButtonProps={{disabled: !userIsAdmin(row)}} + /> + , + ]} + url="harvesters/" + />} + + {selected !== null && } + + ); +} diff --git a/frontend/src/Login.js b/frontend/src/Login.js deleted file mode 100644 index 6f1d344a..00000000 --- a/frontend/src/Login.js +++ /dev/null @@ -1,118 +0,0 @@ -import {login} from "./Api" -import { makeStyles } from '@material-ui/core/styles'; -import React, { useState } from "react"; -import Button from '@material-ui/core/Button'; -import CssBaseline from '@material-ui/core/CssBaseline'; -import Alert from '@material-ui/lab/Alert'; -import TextField from '@material-ui/core/TextField'; -import Typography from '@material-ui/core/Typography'; -import Container from '@material-ui/core/Container'; -import { useHistory } from "react-router-dom"; -import { ReactComponent as GalvanalyserIcon} from './Galvanalyser-icon.svg'; - -const useStyles = makeStyles((theme) => ({ - paper: { - marginTop: theme.spacing(8), - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - }, - icon: { - margin: theme.spacing(1), - width: theme.spacing(7), - height: theme.spacing(10), - }, - form: { - width: '100%', // Fix IE 11 issue. - marginTop: theme.spacing(1), - }, - submit: { - margin: theme.spacing(3, 0, 2), - }, -})); - - -export default function Login({ onLogin }) { - const classes = useStyles(); - const [username, setUsername] = useState('') - const [password, setPassword] = useState('') - const [error, setError] = useState('') - - const history = useHistory(); - - const onSubmitClick = (e)=>{ - e.preventDefault() - console.log("You pressed login") - login(username, password).then(r => { - if (!r.ok) { - console.log(r, r.data) - return r.json().then(data=>setError(data.message)); - } - return r.json().then(data => { - setError('') - onLogin() - history.push('/'); - }) - }); - } - - const handleUsernameChange = (e) => { - setUsername(e.target.value) - } - - const handlePasswordChange = (e) => { - setPassword(e.target.value) - } - - return ( - - -
- - - Sign in - -
- - - {error && - - {error} - - } - - -
-
- ) -} diff --git a/frontend/src/Login.tsx b/frontend/src/Login.tsx new file mode 100644 index 00000000..3ffb9061 --- /dev/null +++ b/frontend/src/Login.tsx @@ -0,0 +1,229 @@ +import { makeStyles } from '@mui/styles' +import React, {useState, useRef, FormEvent, Fragment} from "react"; +import Button from '@mui/material/Button'; +import CssBaseline from '@mui/material/CssBaseline'; +import Alert from '@mui/material/Alert'; +import TextField from '@mui/material/TextField'; +import Typography from '@mui/material/Typography'; +import Container from '@mui/material/Container'; +import { useNavigate } from "react-router-dom"; +import { ReactComponent as GalvanalyserIcon} from './Galvanalyser-icon.svg'; +import Connection, {User} from "./APIConnection"; +import Grid from "@mui/material/Grid"; +import Box from "@mui/material/Box"; +import Stack from "@mui/material/Stack"; + +const useStyles = makeStyles((theme) => ({ + paper: { + marginTop: theme.spacing(8), + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + }, + icon: { + margin: theme.spacing(1), + width: theme.spacing(7), + height: theme.spacing(10), + }, + form: { + width: '100%', // Fix IE 11 issue. + marginTop: theme.spacing(1), + }, + submit: { + margin: theme.spacing(3, 0, 2), + }, + textActive: { + backgroundColor: theme.palette.primary.main, + color: theme.palette.common.white, + textAlign: 'center', + cursor: 'pointer', + }, + textInactive: { + textAlign: 'center', + cursor: 'pointer', + } +})); + + +export default function Login() { + const classes = useStyles(); + const [createdUser, setCreatedUser] = useState(null) + const [username, setUsername] = useState('') + const [password, setPassword] = useState('') + const [email, setEmail] = useState('') + const [error, setError] = useState('') + const [registerMode, setRegisterMode] = useState(false) + + const navigate = useNavigate(); + + const submit = useRef(null); + const username_input = useRef(null); + const password_input = useRef(null); + const email_input = useRef(null); + + const handleEnterKey = (e: React.KeyboardEvent) => { + if(e.key === "Enter") { + if (username === "") username_input.current?.focus(); + else if (password === "") password_input.current?.focus(); + else if (registerMode && email === "") email_input.current?.focus(); + else submit.current?.click(); + } + } + + const onSubmitClick = (e: FormEvent)=>{ + e.preventDefault() + console.log("You pressed login") + if (username === "") username_input.current?.focus(); + else if (password === "") password_input.current?.focus(); + else if (registerMode && email === "") email_input.current?.focus(); + else { + if (registerMode) { + Connection.create_user(username, email, password) + .then(user => {console.log('new user', user); return user}) + .then(user => setCreatedUser(user)) + .catch(e => setError(e.message)) + } else + Connection.login(username, password).then(ok => { + if (!ok) { + setError('Unable to log in'); + } else { + setError('') + navigate('/'); + } + }); + } + } + + const handleUsernameChange = (e: React.ChangeEvent) => { + setUsername(e.target.value) + } + + const handlePasswordChange = (e: React.ChangeEvent) => { + setPassword(e.target.value) + } + + const handleEmailChange = (e: React.ChangeEvent) => { + setEmail(e.target.value) + } + + const createdUserContent = + + Success + + + {`The user '${createdUser?.username}' has been created, but is currently inactive.`} + + + New users need to be activated by an existing user before they are + able to use the system. + + + To activate a user, log in to Galvanalyser as an active user and + select the appropriate inactive user from the 'users' tab on the left. + + + + const formContent = + + setRegisterMode(!registerMode)} + > + + Sign in + + + setRegisterMode(!registerMode)} + > + + Register + + + +
+ + + {registerMode && } + {error && + + {error} + + } + + + {registerMode && + + New users will need to be activated by an existing user before they are + able to use the system. + + + To activate a user, log in to Galvanalyser and + select the appropriate user from the 'users' tab on the left. + + } +
+ + return ( + + +
+ + {createdUser !== null? createdUserContent : formContent} +
+
+ ) +} diff --git a/frontend/src/PaginatedTable.tsx b/frontend/src/PaginatedTable.tsx new file mode 100644 index 00000000..8dfe124a --- /dev/null +++ b/frontend/src/PaginatedTable.tsx @@ -0,0 +1,112 @@ +export type unused = any +// /** +// * Offer a table with previous/next links. +// */ +// import classNames from 'classnames' +// import React, {Component, ReactComponentElement} from "react"; +// import TableContainer from "@mui/material/TableContainer"; +// import Table from "@mui/material/Table"; +// import TableBody from "@mui/material/TableBody"; +// import Button from '@mui/material/Button'; +// import Connection, {APIResponse, APIObject, SingleAPIResponse} from "./APIConnection"; +// import TableRow from "@mui/material/TableRow"; +// import TableCell, {TableCellProps} from "@mui/material/TableCell"; +// import LoadingButton from "@mui/lab/LoadingButton"; +// import Tooltip, {TooltipProps} from "@mui/material/Tooltip"; +// import Typography, {TypographyProps} from "@mui/material/Typography"; +// import TableHead from "@mui/material/TableHead"; +// import AsyncTable from "./AsyncTable"; +// +// type PaginatedTableProps = { +// initial_url: string; +// } +// +// type PaginatedTableState = { +// links: PaginationLinks; +// current_url: string; +// } +// +// export type PaginationLinks = { +// previous?: string | null, +// next?: string | null, +// } +// +// type PaginationDataFun = (url?: string | null) => APIResponse +// +// type PaginationProps = PaginationLinks & { +// get_data_fun: PaginationDataFun; +// position: string; +// } +// +// +// class Pagination extends AsyncTable { +// render() { +// return ( +//
+// +// +//
+// ) +// } +// } +// +// export default class PaginatedTable extends Component { +// +// state: PaginatedTableState = { +// links: {previous: null, next: null}, +// current_url: "" +// } +// +// constructor(props: PaginatedTableProps) { +// super(props) +// if (!this.state.current_url) this.state.current_url = props.initial_url +// } +// +// componentDidMount() { +// this.get_data(this.props.initial_url) +// console.log("Mounted PaginatedTable", this) +// } +// +// render() { +// return ( +//
+// +// +// +//
+// ) +// } +// } \ No newline at end of file diff --git a/frontend/src/UseStyles.ts b/frontend/src/UseStyles.ts new file mode 100644 index 00000000..10b590c4 --- /dev/null +++ b/frontend/src/UseStyles.ts @@ -0,0 +1,59 @@ +import {makeStyles} from "@mui/styles"; + +export default makeStyles((theme) => ({ + button: { + margin: theme.spacing(1), + }, + chips: { + display: 'flex', + flexWrap: 'wrap', + }, + chip: { + margin: 2, + }, + container: { + paddingTop: theme.spacing(4), + paddingBottom: theme.spacing(4), + }, + deleteIcon: { + "&:hover": {color: theme.palette.error.light}, + "&:focus": {color: theme.palette.error.light} + }, + head: { + backgroundColor: theme.palette.primary.light, + }, + headCell: { + color: theme.palette.common.black, + }, + iconButton: { + padding: 10, + }, + infoIcon: { + "&:hover": {color: theme.palette.info.light}, + "&:focus": {color: theme.palette.info.light} + }, + input: { + marginLeft: theme.spacing(0), + flex: 1, + }, + inputAdornment: { + color: theme.palette.text.disabled, + }, + newTableCell: {paddingTop: theme.spacing(4)}, + newTableRow: {}, + paper: {}, + refreshIcon: { + "&:hover": {color: theme.palette.warning.light}, + "&:focus": {color: theme.palette.warning.light} + }, + resize: { + fontSize: '10pt', + }, + saveIcon: { + "&:hover": {color: theme.palette.success.light}, + "&:focus": {color: theme.palette.success.light} + }, + table: { + minWidth: 650, + }, +})); diff --git a/frontend/src/UserRoleSet.tsx b/frontend/src/UserRoleSet.tsx new file mode 100644 index 00000000..11d729c6 --- /dev/null +++ b/frontend/src/UserRoleSet.tsx @@ -0,0 +1,202 @@ +import Connection, {APIConnection, User} from './APIConnection' +import React, {Component} from "react"; +import IconButton from "@mui/material/IconButton"; +import Autocomplete from "@mui/material/Autocomplete"; +import TextField from "@mui/material/TextField"; +import AddIcon from '@mui/icons-material/Add'; +import Typography from "@mui/material/Typography"; +import Tooltip from "@mui/material/Tooltip"; +import Divider from "@mui/material/Divider"; +import Avatar from "@mui/material/Avatar"; +import Popover from "@mui/material/Popover"; +import Chip from "@mui/material/Chip"; +import Stack from "@mui/material/Stack"; + +export type UserSet = { + id: number; + url: string; + name: string; + description?: string; + is_admin?: boolean; + users: User[]; +} + +export type UserSetProps = { + user_sets: UserSet[]; + last_updated: Date; + set_last_updated: (date: Date) => void; + editable?: boolean; +} + +type UserSetState = { + all_users: User[] +} + +type AddUserButtonProps = { + user_set: UserSet; + all_users: User[]; + set_last_updated: (date: Date) => void; + [key: string]: any +} + +function AddUserButton(props: AddUserButtonProps) { + const [anchorEl, setAnchorEl] = React.useState(null); + + const handleClick = (event: React.MouseEvent) => { + event.preventDefault() + setAnchorEl(event.currentTarget); + }; + + const handleClose = () => { + setAnchorEl(null); + }; + + const handleChange = (event: React.SyntheticEvent, value: any) => { + handleClose() + console.log(value) + const user_id = value.id; + Connection.fetch( + `${props.user_set.url}add/`, + {method: 'POST', body: JSON.stringify({user: user_id})} + ) + .then(() => props.set_last_updated(new Date())) + } + + const open = Boolean(anchorEl); + const id = open ? `add-user-button-${props.user_set.id}` : undefined; + + const exclude_user_ids = props.user_set.users.map(u => u.id) + const users_to_include = props.all_users.filter(u => !exclude_user_ids.includes(u.id)) + + return ( +
+ + + + + ({label: u.username, id: u.id}))} + sx={{ width: 300 }} + onChange={handleChange} + isOptionEqualToValue={((option, value) => option.id === value.id)} + renderInput={(params) => } + /> + +
+ ); +} + +/** + * Return lists of user roles that we can assign users to/delete users from. + */ +export default class UserRoleSet extends Component { + + constructor(props: UserSetProps) { + super(props); + this.state = {all_users: []} + } + + async componentDidMount() { + Connection.fetchMany('users/') + .then(results => results.map(r => r.content)) + .then(r => this.setState({all_users: r})) + } + + handleDelete(user_id: number, group_url: string) { + Connection.fetch( + `${group_url}remove/`, + {method: 'POST', body: JSON.stringify({user: user_id})} + ).then(() => this.props.set_last_updated(new Date())) + } + + editable: boolean = this.props.editable !== false + _parent_group: UserSet|null = null + _subsequent_editable: boolean = this.editable + + // Work out permissions for each group + is_set_editable = this.props.user_sets.map(u => { + const editable = this._subsequent_editable || + (this.editable && Connection.user && u.users.map(usr => usr.id).includes(Connection.user.id)) + if (editable && u.is_admin) + this._subsequent_editable = true + const out = {id: u.id, editable: this.editable && editable, parent: this._parent_group} + this._parent_group = u + return out + }) + + get user_sets() { + return this.props.user_sets.map(u =>
+ + + {u.name} + + + + {u.users.map(usr => { + const editability = this.is_set_editable.find(s => s.id === u.id) + const editable = editability?.editable + const undeleteable = u.is_admin && u.users.length + (editability?.parent?.users.length || 0) <= 1 + if (editable && undeleteable) + return + } + label={{usr.username}} + size={'small'} + /> + + else if (editable) + return this.handleDelete(usr.id, u.url)} + avatar={} + label={{usr.username}} + size={'small'} + /> + else + return } + label={{usr.username}} + size={'small'} + /> + })} + { + this.is_set_editable.find(s => s.id === u.id)?.editable && + + } + +
) + } + + render() { + return this.user_sets; + } +} \ No newline at end of file diff --git a/frontend/src/auth/index.js b/frontend/src/auth/index.js index 66f92215..7bd11966 100644 --- a/frontend/src/auth/index.js +++ b/frontend/src/auth/index.js @@ -5,9 +5,10 @@ export const [useAuth, authFetch, login, logout] = createAuthProvider({ accessTokenKey: 'access_token', onUpdateToken: (token) => fetch( - '/api/refresh', { + '/api-auth/refresh', { method: 'POST', - body: token.access_token + body: token.access_token, + headers: {'Content-Type': 'application/json'} } ).then((response) => { if (response.ok) { diff --git a/frontend/src/index.css b/frontend/src/index.css index ec2585e8..2310b8c5 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -11,3 +11,8 @@ code { font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace; } + +/* Override .MuiPopover-paper because we can't do it inside the UserRoleSet component */ +.MuiPopover-paper { + overflow: visible; +} \ No newline at end of file diff --git a/frontend/src/index.d.ts b/frontend/src/index.d.ts new file mode 100644 index 00000000..bf5433df --- /dev/null +++ b/frontend/src/index.d.ts @@ -0,0 +1,6 @@ +// Prevent complaints that 'spacing' isn't a DefaultTheme property +declare module "@mui/private-theming" { + import type { Theme } from "@mui/material/styles"; + + interface DefaultTheme extends Theme {} +} \ No newline at end of file diff --git a/frontend/src/index.js b/frontend/src/index.jsx similarity index 72% rename from frontend/src/index.js rename to frontend/src/index.jsx index 5c92e68d..0fd324ad 100644 --- a/frontend/src/index.js +++ b/frontend/src/index.jsx @@ -1,17 +1,22 @@ import React from 'react'; -import ReactDOM from 'react-dom'; +import { createRoot } from 'react-dom/client'; import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; import { BrowserRouter as Router } from 'react-router-dom' -ReactDOM.render( +const root = createRoot(document.getElementById('root')) + +if (module.hot) { + module.hot.accept(); +} + +root.render( - , - document.getElementById('root') + ); // If you want to start measuring performance in your app, pass a function diff --git a/frontend/src/react-app-env.d.ts b/frontend/src/react-app-env.d.ts new file mode 100644 index 00000000..6431bc5f --- /dev/null +++ b/frontend/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 00000000..78701d78 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "jsx": "react-jsx", + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true + }, + "include": [ + "src/*", + "src/**/*" + ] +} diff --git a/frontend/yarn.lock b/frontend/yarn.lock index bbbfa111..ab1338f4 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -29,14 +29,19 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.5.5": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.0", "@babel/compat-data@^7.20.1": +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.5.tgz#86f172690b093373a933223b4745deeb6049e733" + integrity sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g== + +"@babel/compat-data@^7.20.0": version "7.20.1" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.1.tgz#f2e6ef7790d8c8dbf03d379502dcc246dcce0b30" integrity sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ== @@ -63,7 +68,28 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.5", "@babel/core@^7.8.4": +"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.8.4": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.5.tgz#45e2114dc6cd4ab167f81daf7820e8fa1250d113" + integrity sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-module-transforms" "^7.20.2" + "@babel/helpers" "^7.20.5" + "@babel/parser" "^7.20.5" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/core@^7.7.5": version "7.20.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.2.tgz#8dc9b1620a673f92d3624bd926dc49a52cf25b92" integrity sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g== @@ -84,7 +110,16 @@ json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.12.1", "@babel/generator@^7.20.1", "@babel/generator@^7.20.2": +"@babel/generator@^7.12.1", "@babel/generator@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.5.tgz#cb25abee3178adf58d6814b68517c62bdbfdda95" + integrity sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA== + dependencies: + "@babel/types" "^7.20.5" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/generator@^7.12.11", "@babel/generator@^7.20.1", "@babel/generator@^7.20.2": version "7.20.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.4.tgz#4d9f8f0c30be75fd90a0562099a26e5839602ab8" integrity sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA== @@ -118,10 +153,10 @@ browserslist "^4.21.3" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz#3c08a5b5417c7f07b5cf3dfb6dc79cbec682e8c2" - integrity sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.2", "@babel/helper-create-class-features-plugin@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz#327154eedfb12e977baa4ecc72e5806720a85a06" + integrity sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-environment-visitor" "^7.18.9" @@ -131,13 +166,13 @@ "@babel/helper-replace-supers" "^7.19.1" "@babel/helper-split-export-declaration" "^7.18.6" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz#7976aca61c0984202baca73d84e2337a5424a41b" - integrity sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz#5ea79b59962a09ec2acf20a963a01ab4d076ccca" + integrity sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - regexpu-core "^5.1.0" + regexpu-core "^5.2.1" "@babel/helper-define-polyfill-provider@^0.3.3": version "0.3.3" @@ -185,7 +220,7 @@ dependencies: "@babel/types" "^7.18.9" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.18.6": +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== @@ -276,16 +311,25 @@ integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== "@babel/helper-wrap-function@^7.18.9": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz#89f18335cff1152373222f76a4b37799636ae8b1" - integrity sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" + integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== dependencies: "@babel/helper-function-name" "^7.19.0" "@babel/template" "^7.18.10" - "@babel/traverse" "^7.19.0" - "@babel/types" "^7.19.0" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" -"@babel/helpers@^7.12.1", "@babel/helpers@^7.20.1": +"@babel/helpers@^7.12.1", "@babel/helpers@^7.20.5": + version "7.20.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.6.tgz#e64778046b70e04779dfbdf924e7ebb45992c763" + integrity sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w== + dependencies: + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" + +"@babel/helpers@^7.20.1": version "7.20.1" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.1.tgz#2ab7a0fcb0a03b5bf76629196ed63c2d7311f4c9" integrity sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg== @@ -303,7 +347,12 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.3", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.20.1", "@babel/parser@^7.20.2", "@babel/parser@^7.7.0": +"@babel/parser@^7.1.0", "@babel/parser@^7.12.3", "@babel/parser@^7.14.7", "@babel/parser@^7.20.5", "@babel/parser@^7.7.0": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8" + integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA== + +"@babel/parser@^7.18.10", "@babel/parser@^7.20.1", "@babel/parser@^7.20.2": version "7.20.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.3.tgz#5358cf62e380cf69efcb87a7bb922ff88bfac6e2" integrity sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg== @@ -352,11 +401,11 @@ "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-decorators@^7.16.4": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.2.tgz#1c6c32b2a44b154ebeec2bb534f9eaebdb541fb6" - integrity sha512-nkBH96IBmgKnbHQ5gXFrcmez+Z9S2EIDKDQGp005ROqBigc88Tky4rzCnlP/lnlj245dCEQl4/YyV0V1kYh5dw== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.5.tgz#28ba1a0e5044664a512967a19407d7fc26925394" + integrity sha512-Lac7PpRJXcC3s9cKsBfl+uc+DYXU5FD06BrTFunQO6QIQT+DwyzDPURAowI3bcvD1dZF/ank1Z5rstUJn3Hn4Q== dependencies: - "@babel/helper-create-class-features-plugin" "^7.20.2" + "@babel/helper-create-class-features-plugin" "^7.20.5" "@babel/helper-plugin-utils" "^7.20.2" "@babel/helper-replace-supers" "^7.19.1" "@babel/helper-split-export-declaration" "^7.18.6" @@ -447,13 +496,13 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-private-property-in-object@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" - integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz#309c7668f2263f1c711aa399b5a9a6291eef6135" + integrity sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": @@ -541,7 +590,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.18.6": +"@babel/plugin-syntax-jsx@^7.17.12", "@babel/plugin-syntax-jsx@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== @@ -635,9 +684,9 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-block-scoping@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz#f59b1767e6385c663fd0bce655db6ca9c8b236ed" - integrity sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz#401215f9dc13dc5262940e2e527c9536b3d7f237" + integrity sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -767,12 +816,12 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz#ec7455bab6cd8fb05c525a94876f435a48128888" - integrity sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" + integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.19.0" - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-create-regexp-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-transform-new-target@^7.18.6": version "7.18.6" @@ -790,9 +839,9 @@ "@babel/helper-replace-supers" "^7.18.6" "@babel/plugin-transform-parameters@^7.20.1": - version "7.20.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz#7b3468d70c3c5b62e46be0a47b6045d8590fb748" - integrity sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz#f8f9186c681d10c3de7620c916156d893c8a019e" + integrity sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ== dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -844,12 +893,12 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-regenerator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" - integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" + integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - regenerator-transform "^0.15.0" + "@babel/helper-plugin-utils" "^7.20.2" + regenerator-transform "^0.15.1" "@babel/plugin-transform-reserved-words@^7.18.6": version "7.18.6" @@ -1051,13 +1100,20 @@ core-js-pure "^3.25.1" regenerator-runtime "^0.13.10" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.8", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.9", "@babel/runtime@^7.20.1", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.20.1" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.1.tgz#1148bb33ab252b165a06698fde7576092a78b4a9" integrity sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg== dependencies: regenerator-runtime "^0.13.10" +"@babel/runtime@^7.16.3", "@babel/runtime@^7.8.4": + version "7.20.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3" + integrity sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA== + dependencies: + regenerator-runtime "^0.13.11" + "@babel/template@^7.10.4", "@babel/template@^7.18.10", "@babel/template@^7.3.3": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" @@ -1067,7 +1123,23 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.20.1", "@babel/traverse@^7.7.0": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.19.1", "@babel/traverse@^7.20.5", "@babel/traverse@^7.7.0": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.5.tgz#78eb244bea8270fdda1ef9af22a5d5e5b7e57133" + integrity sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.5" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.20.5" + "@babel/types" "^7.20.5" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/traverse@^7.1.6", "@babel/traverse@^7.20.1": version "7.20.1" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.1.tgz#9b15ccbf882f6d107eeeecf263fbcdd208777ec8" integrity sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA== @@ -1083,7 +1155,16 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.6", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": +"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.6", "@babel/types@^7.18.9", "@babel/types@^7.20.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.5.tgz#e206ae370b5393d94dfd1d04cd687cace53efa84" + integrity sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.2.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2": version "7.20.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.2.tgz#67ac09266606190f496322dbaff360fdaa5e7842" integrity sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog== @@ -1115,10 +1196,113 @@ resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18" integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== -"@emotion/hash@^0.8.0": +"@emotion/babel-plugin@^11.10.5": + version "11.10.5" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz#65fa6e1790ddc9e23cc22658a4c5dea423c55c3c" + integrity sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.17.12" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.0" + "@emotion/memoize" "^0.8.0" + "@emotion/serialize" "^1.1.1" + babel-plugin-macros "^3.1.0" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.1.3" + +"@emotion/cache@^11.10.5": + version "11.10.5" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.10.5.tgz#c142da9351f94e47527ed458f7bbbbe40bb13c12" + integrity sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA== + dependencies: + "@emotion/memoize" "^0.8.0" + "@emotion/sheet" "^1.2.1" + "@emotion/utils" "^1.2.0" + "@emotion/weak-memoize" "^0.3.0" + stylis "4.1.3" + +"@emotion/hash@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.0.tgz#c5153d50401ee3c027a57a177bc269b16d889cb7" + integrity sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ== + +"@emotion/is-prop-valid@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz#7f2d35c97891669f7e276eb71c83376a5dc44c83" + integrity sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg== + dependencies: + "@emotion/memoize" "^0.8.0" + +"@emotion/memoize@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.0.tgz#f580f9beb67176fa57aae70b08ed510e1b18980f" + integrity sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA== + +"@emotion/react@^11.10.5": + version "11.10.5" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.10.5.tgz#95fff612a5de1efa9c0d535384d3cfa115fe175d" + integrity sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.10.5" + "@emotion/cache" "^11.10.5" + "@emotion/serialize" "^1.1.1" + "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" + "@emotion/utils" "^1.2.0" + "@emotion/weak-memoize" "^0.3.0" + hoist-non-react-statics "^3.3.1" + +"@emotion/serialize@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.1.tgz#0595701b1902feded8a96d293b26be3f5c1a5cf0" + integrity sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA== + dependencies: + "@emotion/hash" "^0.9.0" + "@emotion/memoize" "^0.8.0" + "@emotion/unitless" "^0.8.0" + "@emotion/utils" "^1.2.0" + csstype "^3.0.2" + +"@emotion/sheet@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.1.tgz#0767e0305230e894897cadb6c8df2c51e61a6c2c" + integrity sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA== + +"@emotion/styled@^11.10.5": + version "11.10.5" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-11.10.5.tgz#1fe7bf941b0909802cb826457e362444e7e96a79" + integrity sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.10.5" + "@emotion/is-prop-valid" "^1.2.0" + "@emotion/serialize" "^1.1.1" + "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" + "@emotion/utils" "^1.2.0" + +"@emotion/unitless@^0.8.0": version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" - integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.0.tgz#a4a36e9cbdc6903737cd20d38033241e1b8833db" + integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw== + +"@emotion/use-insertion-effect-with-fallbacks@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz#ffadaec35dbb7885bd54de3fa267ab2f860294df" + integrity sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A== + +"@emotion/utils@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.0.tgz#9716eaccbc6b5ded2ea5a90d65562609aab0f561" + integrity sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw== + +"@emotion/weak-memoize@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz#ea89004119dc42db2e1dba0f97d553f7372f6fcb" + integrity sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg== "@eslint/eslintrc@^0.4.3": version "0.4.3" @@ -1197,7 +1381,7 @@ js-yaml "^3.13.1" resolve-from "^5.0.0" -"@istanbuljs/schema@^0.1.2": +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== @@ -1439,7 +1623,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": version "0.3.17" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== @@ -1447,208 +1631,245 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@material-ui/core@^4.11.4": - version "4.12.4" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.12.4.tgz#4ac17488e8fcaf55eb6a7f5efb2a131e10138a73" - integrity sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/styles" "^4.11.5" - "@material-ui/system" "^4.12.2" - "@material-ui/types" "5.1.0" - "@material-ui/utils" "^4.11.3" - "@types/react-transition-group" "^4.2.0" - clsx "^1.0.4" - hoist-non-react-statics "^3.3.2" - popper.js "1.16.1-lts" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" - react-transition-group "^4.4.0" - -"@material-ui/data-grid@^4.0.0-alpha.28": - version "4.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/@material-ui/data-grid/-/data-grid-4.0.0-alpha.37.tgz#89d907c4e94e6a0db4e89e4f59160f7811546ca2" - integrity sha512-3T2AG31aad/lWLMLwn1XUP4mUf3H9YZES17dGuYByzkRLCXbBZHBTPEnCctWukajzwm+v0KGg3QpwitGoiDAjA== - dependencies: - "@material-ui/utils" "^5.0.0-alpha.14" - clsx "^1.0.4" - prop-types "^15.7.2" - reselect "^4.0.0" +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + +"@mui/base@5.0.0-alpha.107": + version "5.0.0-alpha.107" + resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-alpha.107.tgz#5547bf3aaea148b58456e6898f74bc183bdcffa9" + integrity sha512-HX/BD8CSe+Y/dpbZ5aKJScJhKQ/Hw6du2yd68Upv2cO67bwixyZ64h3aNcdDu7RQzI7nrZQm0JykffP1Orgq0g== + dependencies: + "@babel/runtime" "^7.20.1" + "@emotion/is-prop-valid" "^1.2.0" + "@mui/types" "^7.2.1" + "@mui/utils" "^5.10.15" + "@popperjs/core" "^2.11.6" + clsx "^1.2.1" + prop-types "^15.8.1" + react-is "^18.2.0" + +"@mui/core-downloads-tracker@^5.10.15": + version "5.10.15" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.10.15.tgz#490f3dea5327c892f063496a0219c48301da0fa0" + integrity sha512-xFcS0LpdF0Q1qJrrNsYUv9PU+ovvhCEPTOMw2jcpEFtl3CA87dLpvztORR5oE2UBFjWF7qLQLOwboQU1+xC7Cw== + +"@mui/icons-material@^5.10.15": + version "5.10.15" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.10.15.tgz#c93f1ba8d2b55fe0a16f559a568304df172cbbcb" + integrity sha512-fXkz7CtYTt4AH4YYT67VFhM/A3YCUqZGGLp/3BlzRPQRNEfFKknw3MgG1S5UYrY5weti8jxMx3mwwfhVP8OMhQ== + dependencies: + "@babel/runtime" "^7.20.1" + +"@mui/lab@^5.0.0-alpha.109": + version "5.0.0-alpha.109" + resolved "https://registry.yarnpkg.com/@mui/lab/-/lab-5.0.0-alpha.109.tgz#e0004174be4c3bcefcdbe674955e201d24ce96e0" + integrity sha512-9ZyzM4AHA1qWh48ZcvqxqwWRH1CzBhQuP9VYP2eEprEjEeraiuvvsZILCNhCemc9WWN04GJh8UiD1FeCaU4kWg== + dependencies: + "@babel/runtime" "^7.20.1" + "@mui/base" "5.0.0-alpha.107" + "@mui/system" "^5.10.15" + "@mui/types" "^7.2.1" + "@mui/utils" "^5.10.15" + clsx "^1.2.1" + prop-types "^15.8.1" + react-is "^18.2.0" + +"@mui/material@^5.10.15": + version "5.10.15" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.10.15.tgz#37345f5a3d71c662703af7b5be0cca229b2a1416" + integrity sha512-OqoHfUtVMppFHgk2M95j+pR8MWfLKhzSdz4aKEfIpFrHIHbYang+oY7Iy/exX+vqpZSEGHgHQ0cGX0hGTGx9cg== + dependencies: + "@babel/runtime" "^7.20.1" + "@mui/base" "5.0.0-alpha.107" + "@mui/core-downloads-tracker" "^5.10.15" + "@mui/system" "^5.10.15" + "@mui/types" "^7.2.1" + "@mui/utils" "^5.10.15" + "@types/react-transition-group" "^4.4.5" + clsx "^1.2.1" + csstype "^3.1.1" + prop-types "^15.8.1" + react-is "^18.2.0" + react-transition-group "^4.4.5" -"@material-ui/icons@^4.11.2": - version "4.11.3" - resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.11.3.tgz#b0693709f9b161ce9ccde276a770d968484ecff1" - integrity sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA== +"@mui/private-theming@^5.10.15": + version "5.10.15" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.10.15.tgz#f039181e197d04d100630829c58b5c33ede209bc" + integrity sha512-l7CsUj5kYdYz118/JHSvZZTYE9WnIWwln0td5jYATnYw9cNX4ygD6AkKOUYZ1Jitp1YLJqcO8jCP9E5/Nql9IQ== dependencies: - "@babel/runtime" "^7.4.4" + "@babel/runtime" "^7.20.1" + "@mui/utils" "^5.10.15" + prop-types "^15.8.1" -"@material-ui/lab@^4.0.0-alpha.58": - version "4.0.0-alpha.61" - resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.61.tgz#9bf8eb389c0c26c15e40933cc114d4ad85e3d978" - integrity sha512-rSzm+XKiNUjKegj8bzt5+pygZeckNLOr+IjykH8sYdVk7dE9y2ZuUSofiMV2bJk3qU+JHwexmw+q0RyNZB9ugg== +"@mui/styled-engine@^5.10.14": + version "5.10.14" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.10.14.tgz#4395198a1919254a3edabf6e8fc8d43c9c59b5c3" + integrity sha512-bgKdM57ExogWpIfhL/ngSlzF4FhbH00vYF+Y5VALTob4uslFqje0xzoWmbfcCn4cZt2NXxZJIwhsq4vzo5itlw== dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.11.3" - clsx "^1.0.4" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" + "@babel/runtime" "^7.20.1" + "@emotion/cache" "^11.10.5" + csstype "^3.1.1" + prop-types "^15.8.1" -"@material-ui/styles@^4.11.5": - version "4.11.5" - resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.11.5.tgz#19f84457df3aafd956ac863dbe156b1d88e2bbfb" - integrity sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA== - dependencies: - "@babel/runtime" "^7.4.4" - "@emotion/hash" "^0.8.0" - "@material-ui/types" "5.1.0" - "@material-ui/utils" "^4.11.3" - clsx "^1.0.4" - csstype "^2.5.2" +"@mui/styles@^5.10.15": + version "5.10.15" + resolved "https://registry.yarnpkg.com/@mui/styles/-/styles-5.10.15.tgz#d7af4c17e8699e6b768f3c11b69c02cdc8cc3541" + integrity sha512-q8OW8Cyq2C9wGJMcDWXYtFa7qgIIZPAZ15JShDQXBLvyib4qDop5wV3+olQoJdwU5ARjmfPd67IsbORWxG3abQ== + dependencies: + "@babel/runtime" "^7.20.1" + "@emotion/hash" "^0.9.0" + "@mui/private-theming" "^5.10.15" + "@mui/types" "^7.2.1" + "@mui/utils" "^5.10.15" + clsx "^1.2.1" + csstype "^3.1.1" hoist-non-react-statics "^3.3.2" - jss "^10.5.1" - jss-plugin-camel-case "^10.5.1" - jss-plugin-default-unit "^10.5.1" - jss-plugin-global "^10.5.1" - jss-plugin-nested "^10.5.1" - jss-plugin-props-sort "^10.5.1" - jss-plugin-rule-value-function "^10.5.1" - jss-plugin-vendor-prefixer "^10.5.1" - prop-types "^15.7.2" + jss "^10.9.2" + jss-plugin-camel-case "^10.9.2" + jss-plugin-default-unit "^10.9.2" + jss-plugin-global "^10.9.2" + jss-plugin-nested "^10.9.2" + jss-plugin-props-sort "^10.9.2" + jss-plugin-rule-value-function "^10.9.2" + jss-plugin-vendor-prefixer "^10.9.2" + prop-types "^15.8.1" -"@material-ui/system@^4.12.2": - version "4.12.2" - resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.12.2.tgz#f5c389adf3fce4146edd489bf4082d461d86aa8b" - integrity sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.11.3" - csstype "^2.5.2" - prop-types "^15.7.2" +"@mui/system@^5.10.15": + version "5.10.15" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.10.15.tgz#4bb58d1d1a531137559b775038a18d6050d9ee57" + integrity sha512-WZmgmpYTMXAaD++QetaaM/miwhNh1JJY1dH7MJH/3Fuv3r3gnhfzE6A55lDqWxkQmlWUO2DCn/cnNZ0FkSdZUg== + dependencies: + "@babel/runtime" "^7.20.1" + "@mui/private-theming" "^5.10.15" + "@mui/styled-engine" "^5.10.14" + "@mui/types" "^7.2.1" + "@mui/utils" "^5.10.15" + clsx "^1.2.1" + csstype "^3.1.1" + prop-types "^15.8.1" -"@material-ui/types@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2" - integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A== +"@mui/types@^7.2.1": + version "7.2.1" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.1.tgz#1eb2bc182c595029884047f2525ad4dbefea318e" + integrity sha512-c5mSM7ivD8EsqK6HUi9hQPr5V7TJ/IRThUQ9nWNYPdhCGriTSQV4vL6DflT99LkM+wLiIS1rVjphpEWxERep7A== -"@material-ui/utils@^4.11.3": - version "4.11.3" - resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.11.3.tgz#232bd86c4ea81dab714f21edad70b7fdf0253942" - integrity sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg== +"@mui/utils@^5.10.15", "@mui/utils@^5.10.3": + version "5.10.15" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.10.15.tgz#54fc1b373508d20dd5568070b2dcc0818e6bebba" + integrity sha512-6AW4MLBUijJi31hxx+6utTJM2q/4hbO+QiMdtwM+f4Iy+BfFnh/elhb08apxNYLfuugPnXXpkDmzEjg+8uDU9g== dependencies: - "@babel/runtime" "^7.4.4" - prop-types "^15.7.2" - react-is "^16.8.0 || ^17.0.0" + "@babel/runtime" "^7.20.1" + "@types/prop-types" "^15.7.5" + "@types/react-is" "^16.7.1 || ^17.0.0" + prop-types "^15.8.1" + react-is "^18.2.0" -"@material-ui/utils@^5.0.0-alpha.14": - version "5.0.0-beta.5" - resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-5.0.0-beta.5.tgz#de492037e1f1f0910fda32e6f11b66dfcde2a1c2" - integrity sha512-wtJ3ovXWZdTAz5eLBqvMpYH/IBJb3qMQbGCyL1i00+sf7AUlAuv4QLx+QtX/siA6L7IpxUQVfqpoCpQH1eYRpQ== +"@mui/x-data-grid@^5.17.12": + version "5.17.12" + resolved "https://registry.yarnpkg.com/@mui/x-data-grid/-/x-data-grid-5.17.12.tgz#b57c32605f1964c2eb8b25136fe51d7165e22112" + integrity sha512-Q7lFxapa9oc8j3LVm3JAS+jmJftcaSLYcvhApYLKYWej9LKMQYov8hUPdIjzSta3E0WTINfiHaTcO1b6W4UMvQ== dependencies: - "@babel/runtime" "^7.14.8" - "@types/prop-types" "^15.7.4" - "@types/react-is" "^16.7.1 || ^17.0.0" - prop-types "^15.7.2" - react-is "^17.0.2" + "@babel/runtime" "^7.18.9" + "@mui/utils" "^5.10.3" + clsx "^1.2.1" + prop-types "^15.8.1" + reselect "^4.1.6" -"@nivo/annotations@0.69.0": - version "0.69.0" - resolved "https://registry.yarnpkg.com/@nivo/annotations/-/annotations-0.69.0.tgz#0e9ee0fd63e4fb6f32baed493b8261163dee1385" - integrity sha512-GeO9lysWhX2FLAw6ePAgJSEkg9vcivueZSKBvxyiv4e05pYm4fnnYzAxq2tsTHCPoPyWbEbbiSpJEzsQY1dQMQ== +"@nivo/annotations@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/annotations/-/annotations-0.80.0.tgz#127e4801fff7370dcfb9acfe1e335781dd65cfd5" + integrity sha512-bC9z0CLjU07LULTMWsqpjovRtHxP7n8oJjqBQBLmHOGB4IfiLbrryBfu9+aEZH3VN2jXHhdpWUz+HxeZzOzsLg== dependencies: - "@nivo/colors" "0.69.0" - lodash "^4.17.11" - react-spring "9.1.2" + "@nivo/colors" "0.80.0" + "@react-spring/web" "9.4.5" + lodash "^4.17.21" -"@nivo/axes@0.69.1": - version "0.69.1" - resolved "https://registry.yarnpkg.com/@nivo/axes/-/axes-0.69.1.tgz#ee338b15d04b38727eb8d7ba361f537c3b561c7a" - integrity sha512-jVWlhyC7qdMLvajgafSUxiDzbB3TRSTzzkbtpWf9D5EeZ6kc0FYBzoDJU4njkRpFh/JjSU8BaMh6aqpYIFfQ4g== +"@nivo/axes@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/axes/-/axes-0.80.0.tgz#22788855ddc45bb6a619dcd03d62d4bd8c0fc35f" + integrity sha512-AsUyaSHGwQVSEK8QXpsn8X+poZxvakLMYW7crKY1xTGPNw+SU4SSBohPVumm2jMH3fTSLNxLhAjWo71GBJXfdA== dependencies: - "@nivo/scales" "0.69.0" + "@nivo/scales" "0.80.0" + "@react-spring/web" "9.4.5" d3-format "^1.4.4" - d3-time "^1.0.11" - d3-time-format "^2.1.3" - react-spring "9.1.2" + d3-time-format "^3.0.0" -"@nivo/colors@0.69.0": - version "0.69.0" - resolved "https://registry.yarnpkg.com/@nivo/colors/-/colors-0.69.0.tgz#273fdb54bcc161d74741e7eea1931c0b22f95f7c" - integrity sha512-mfD/t7VcaOmD+dN8YiflqDeShz7F9tXpPfz772+xwxawu2FRYQ8ksYMC1LoS0zHvBgx/fd/I0U7Yg+OwavfC1g== +"@nivo/colors@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/colors/-/colors-0.80.0.tgz#5b70b4979df246d9d0d69fb638bba9764dd88b52" + integrity sha512-T695Zr411FU4RPo7WDINOAn8f79DPP10SFJmDdEqELE+cbzYVTpXqLGZ7JMv88ko7EOf9qxLQgcBqY69rp9tHQ== dependencies: d3-color "^2.0.0" d3-scale "^3.2.3" d3-scale-chromatic "^2.0.0" - lodash "^4.17.11" - react-motion "^0.5.2" + lodash "^4.17.21" -"@nivo/core@^0.69.0": - version "0.69.0" - resolved "https://registry.yarnpkg.com/@nivo/core/-/core-0.69.0.tgz#786ec43ee6b60f7961f0f27a81f35d45628adc8b" - integrity sha512-xo8dOcLaZe8DB5PJ5kBnvRwL9JYZKVicWiQ2HXBaEAhnTETT10rdUja9yTWGRhWgSXni0292L0jw2+SP4Wm3bA== +"@nivo/core@^0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/core/-/core-0.80.0.tgz#d180cb2622158eb7bc5f984131ff07984f12297e" + integrity sha512-6caih0RavXdWWSfde+rC2pk17WrX9YQlqK26BrxIdXzv3Ydzlh5SkrC7dR2TEvMGBhunzVeLOfiC2DWT1S8CFg== dependencies: - "@nivo/recompose" "0.69.0" + "@nivo/recompose" "0.80.0" + "@react-spring/web" "9.4.5" d3-color "^2.0.0" d3-format "^1.4.4" - d3-hierarchy "^1.1.8" d3-interpolate "^2.0.1" d3-scale "^3.2.3" d3-scale-chromatic "^2.0.0" d3-shape "^1.3.5" - d3-time-format "^2.1.3" - lodash "^4.17.11" - react-spring "9.1.2" - resize-observer-polyfill "^1.5.1" - -"@nivo/legends@0.69.0": - version "0.69.0" - resolved "https://registry.yarnpkg.com/@nivo/legends/-/legends-0.69.0.tgz#af4423d0485c0e4c65c531386bd59a8b78c17a6c" - integrity sha512-LDnEdr+M4rBtUXv+0EJ+hroOLTk64cOrYZuz3LXVYkVTTNlJ2o41ghdVFCsHeiE+0t8fuXO0oHNEoixQx7UKdg== - dependencies: - lodash "^4.17.11" + d3-time-format "^3.0.0" + lodash "^4.17.21" -"@nivo/line@^0.69.1": - version "0.69.1" - resolved "https://registry.yarnpkg.com/@nivo/line/-/line-0.69.1.tgz#08779be6e7a7a2d357607293ac14e026046bc203" - integrity sha512-Q92S7tCJCKc+AJdc2PdYKQmzULNoExIJQ0IV6pgFf2rY2PiUUlI7rFb7Eu8xgpsHe0w4Xa/KxMLCLHWXNBGJQw== - dependencies: - "@nivo/annotations" "0.69.0" - "@nivo/axes" "0.69.1" - "@nivo/colors" "0.69.0" - "@nivo/legends" "0.69.0" - "@nivo/scales" "0.69.0" - "@nivo/tooltip" "0.69.0" - "@nivo/voronoi" "0.69.0" +"@nivo/legends@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/legends/-/legends-0.80.0.tgz#49edc54000075b4df055f86794a8c32810269d06" + integrity sha512-h0IUIPGygpbKIZZZWIxkkxOw4SO0rqPrqDrykjaoQz4CvL4HtLIUS3YRA4akKOVNZfS5agmImjzvIe0s3RvqlQ== + +"@nivo/line@^0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/line/-/line-0.80.0.tgz#ba541b0fcfd53b3a7ce865feb43c993b7cf4a7d4" + integrity sha512-6UAD/y74qq3DDRnVb+QUPvXYojxMtwXMipGSNvCGk8omv1QZNTaUrbV+eQacvn9yh//a0yZcWipnpq0tGJyJCA== + dependencies: + "@nivo/annotations" "0.80.0" + "@nivo/axes" "0.80.0" + "@nivo/colors" "0.80.0" + "@nivo/legends" "0.80.0" + "@nivo/scales" "0.80.0" + "@nivo/tooltip" "0.80.0" + "@nivo/voronoi" "0.80.0" + "@react-spring/web" "9.4.5" d3-shape "^1.3.5" - react-spring "9.1.2" -"@nivo/recompose@0.69.0": - version "0.69.0" - resolved "https://registry.yarnpkg.com/@nivo/recompose/-/recompose-0.69.0.tgz#1fbc5193267611ba8d9297784a40d73a69ee5f04" - integrity sha512-RtjJHDES1uvi6mlZvR/0p13fzNIJmm7ubE0Zly8p0gICGlurwWMyjwhTLGLNc5BYX/qXBlZsVuns5M5V40rzvg== +"@nivo/recompose@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/recompose/-/recompose-0.80.0.tgz#572048aed793321a0bada1fd176b72df5a25282e" + integrity sha512-iL3g7j3nJGD9+mRDbwNwt/IXDXH6E29mhShY1I7SP91xrfusZV9pSFf4EzyYgruNJk/2iqMuaqn+e+TVFra44A== dependencies: react-lifecycles-compat "^3.0.4" -"@nivo/scales@0.69.0": - version "0.69.0" - resolved "https://registry.yarnpkg.com/@nivo/scales/-/scales-0.69.0.tgz#25fd2ca6fe772034033aabbdcd1940c882f7f976" - integrity sha512-o7BZOiFLDwt6zUXBFeRPtpAyFzyt4DPM+tiJD8+J6QzZOijXzZeUCjjv3lVL95UpmznQFKd6kehpTMyjq9/DyQ== +"@nivo/scales@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/scales/-/scales-0.80.0.tgz#39313fb97c8ae9633c2aa1e17adb57cb851e8a50" + integrity sha512-4y2pQdCg+f3n4TKXC2tYuq71veZM+xPRQbOTgGYJpuBvMc7pQsXF9T5z7ryeIG9hkpXkrlyjecU6XcAG7tLSNg== dependencies: d3-scale "^3.2.3" d3-time "^1.0.11" - d3-time-format "^2.1.3" - lodash "^4.17.11" + d3-time-format "^3.0.0" + lodash "^4.17.21" -"@nivo/tooltip@0.69.0": - version "0.69.0" - resolved "https://registry.yarnpkg.com/@nivo/tooltip/-/tooltip-0.69.0.tgz#27db77191a01fecb169d740710e1b82f55d6da80" - integrity sha512-thIObK1KajlZ7vVU5mgwEPRMBKLWh5a4u46i7qeg2nld5bRh54S//0M1U+PZS5t+xg1boE/iXWp2/MLXPxk2EQ== +"@nivo/tooltip@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/tooltip/-/tooltip-0.80.0.tgz#07ebef47eb708a0612bd6297d5ad156bbec19d34" + integrity sha512-qGmrreRwnCsYjn/LAuwBtxBn/tvG8y+rwgd4gkANLBAoXd3bzJyvmkSe+QJPhUG64bq57ibDK+lO2pC48a3/fw== dependencies: - react-spring "9.1.2" + "@react-spring/web" "9.4.5" -"@nivo/voronoi@0.69.0": - version "0.69.0" - resolved "https://registry.yarnpkg.com/@nivo/voronoi/-/voronoi-0.69.0.tgz#12955dec8f6d649d96af361f0609f79b2ad653b9" - integrity sha512-z3qMtvVx7HVi/O1h5E+hEE7pCdt9ZUV6LxhiaNJ5f/XW+t41NyVbovgLj8Tl1ddtsum7De1BfHeLZA3GffjdKA== +"@nivo/voronoi@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/voronoi/-/voronoi-0.80.0.tgz#59cc7ed253dc1a5bbcf614a5ac37d2468d561599" + integrity sha512-zaJV3I3cRu1gHpsXCIEvp6GGlGY8P7D9CwAVCjYDGrz3W/+GKN0kA7qGyHTC97zVxJtfefxSPlP/GtOdxac+qw== dependencies: d3-delaunay "^5.3.0" d3-scale "^3.2.3" @@ -1702,85 +1923,61 @@ schema-utils "^2.6.5" source-map "^0.7.3" -"@react-spring/animated@~9.1.2": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.1.2.tgz#e43b122160f8f4cbb0caac8a7f57acd76dd12369" - integrity sha512-nKOGk+3aWbNp46V/CB1J2vR3GJI/Vork8N1WTI5mt+32QekrSsBn5/YFt4/iPaDGhLjukFxF0IjLs6hRLqSObw== - dependencies: - "@react-spring/shared" "~9.1.2" - "@react-spring/types" "~9.1.2" - -"@react-spring/core@~9.1.2": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.1.2.tgz#6d854a12fe9c3caa7942e51e708cb5fb4e2d1124" - integrity sha512-rgobYPCcLdDwbHBVqAmvtXhhX92G7MoPltJlzUge843yp1dNr47tkagFdCtw9NMGp6eHu/CE5byh/imlhLLAxw== - dependencies: - "@react-spring/animated" "~9.1.2" - "@react-spring/shared" "~9.1.2" - "@react-spring/types" "~9.1.2" - -"@react-spring/konva@~9.1.2": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@react-spring/konva/-/konva-9.1.2.tgz#20567063efd8d441a268826e326bd5d7574bbc50" - integrity sha512-P60mhUHRYgPPhoTBQWzuzD3hfeCFWC0BQ7N0iHzpMTzDIrAvutyg+iAX59jSXo3yatrcx60NmlCsiG8tRxbw6w== - dependencies: - "@react-spring/animated" "~9.1.2" - "@react-spring/core" "~9.1.2" - "@react-spring/shared" "~9.1.2" - "@react-spring/types" "~9.1.2" - -"@react-spring/native@~9.1.2": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@react-spring/native/-/native-9.1.2.tgz#d21a64c20ca08d2c5839cedcf9cc4842770f8ffc" - integrity sha512-d7+tCoKAnDPSoVtpyFFm4BWQhn1h833ocdP0d2POZzKTcR1iQ8YI7EQ22iKGLvwH+0vjymde039CgYy31INqWQ== - dependencies: - "@react-spring/animated" "~9.1.2" - "@react-spring/core" "~9.1.2" - "@react-spring/shared" "~9.1.2" - "@react-spring/types" "~9.1.2" - -"@react-spring/shared@~9.1.2": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.1.2.tgz#c36d077d7eb31fd2cbcf8956d9d35037b2998613" - integrity sha512-sj/RrhFZAteCWAMk+W0t6Ku/skn/lbskCCs8B7ZnHNLMGPM+Zb3MOk+aVbX3T/D0iq/oTnKWyQYqrXDKiFcZ7g== - dependencies: - "@react-spring/types" "~9.1.2" - rafz "^0.1.14" - -"@react-spring/three@~9.1.2": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@react-spring/three/-/three-9.1.2.tgz#49d1d4c0b9d059bd470712c78c9dd73af130677d" - integrity sha512-d/v94ykmfJGLTJxJ+jxlTAJSfFdD+SSf+yvXReS81hc7+9VYeEwIHVIEKOzckYnPy/MEOSVhIVKF/9wdFIIo6g== - dependencies: - "@react-spring/animated" "~9.1.2" - "@react-spring/core" "~9.1.2" - "@react-spring/shared" "~9.1.2" - "@react-spring/types" "~9.1.2" - -"@react-spring/types@~9.1.2": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.1.2.tgz#3273a182f825b38f44ead2a2f3984344abad1e2b" - integrity sha512-NZNImL0ymRFbss1cGKX2qSEeFdFoOgnIJZEW4Uczt+wm04J7g0Zuf23Hf8hM35JtxDr8QO5okp8BBtCM5FzzMg== - -"@react-spring/web@~9.1.2": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.1.2.tgz#6ec409e8559676834b67aa33f0a2d57643c3c555" - integrity sha512-E5W9Hmi2bO6CPorCNV/2iv12ux9LxHJAbpXmrBPKWFRqZixysiHoNQKKPG0DmSvUU1uKkvCvMC4VoB6pj/2kxw== - dependencies: - "@react-spring/animated" "~9.1.2" - "@react-spring/core" "~9.1.2" - "@react-spring/shared" "~9.1.2" - "@react-spring/types" "~9.1.2" - -"@react-spring/zdog@~9.1.2": - version "9.1.2" - resolved "https://registry.yarnpkg.com/@react-spring/zdog/-/zdog-9.1.2.tgz#edf270e93d5db8a94f65d4e94e4438352fbb454f" - integrity sha512-t5RobDp12HGVh6XJ1BZ+dFdxRQ/goEapYvjH5eqQa1vC97bSqJGLiG+SM/E360DtDlh8GXAyGSesd2pXzBkpPg== - dependencies: - "@react-spring/animated" "~9.1.2" - "@react-spring/core" "~9.1.2" - "@react-spring/shared" "~9.1.2" - "@react-spring/types" "~9.1.2" +"@popperjs/core@^2.11.6", "@popperjs/core@^2.9.0": + version "2.11.6" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.6.tgz#cee20bd55e68a1720bdab363ecf0c821ded4cd45" + integrity sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw== + +"@react-spring/animated@~9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.4.5.tgz#dd9921c716a4f4a3ed29491e0c0c9f8ca0eb1a54" + integrity sha512-KWqrtvJSMx6Fj9nMJkhTwM9r6LIriExDRV6YHZV9HKQsaolUFppgkOXpC+rsL1JEtEvKv6EkLLmSqHTnuYjiIA== + dependencies: + "@react-spring/shared" "~9.4.5" + "@react-spring/types" "~9.4.5" + +"@react-spring/core@~9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.4.5.tgz#4616e1adc18dd10f5731f100ebdbe9518b89ba3c" + integrity sha512-83u3FzfQmGMJFwZLAJSwF24/ZJctwUkWtyPD7KYtNagrFeQKUH1I05ZuhmCmqW+2w1KDW1SFWQ43RawqfXKiiQ== + dependencies: + "@react-spring/animated" "~9.4.5" + "@react-spring/rafz" "~9.4.5" + "@react-spring/shared" "~9.4.5" + "@react-spring/types" "~9.4.5" + +"@react-spring/rafz@~9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/rafz/-/rafz-9.4.5.tgz#84f809f287f2a66bbfbc66195db340482f886bd7" + integrity sha512-swGsutMwvnoyTRxvqhfJBtGM8Ipx6ks0RkIpNX9F/U7XmyPvBMGd3GgX/mqxZUpdlsuI1zr/jiYw+GXZxAlLcQ== + +"@react-spring/shared@~9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.4.5.tgz#4c3ad817bca547984fb1539204d752a412a6d829" + integrity sha512-JhMh3nFKsqyag0KM5IIM8BQANGscTdd0mMv3BXsUiMZrcjQTskyfnv5qxEeGWbJGGar52qr5kHuBHtCjQOzniA== + dependencies: + "@react-spring/rafz" "~9.4.5" + "@react-spring/types" "~9.4.5" + +"@react-spring/types@~9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.4.5.tgz#9c71e5ff866b5484a7ef3db822bf6c10e77bdd8c" + integrity sha512-mpRIamoHwql0ogxEUh9yr4TP0xU5CWyZxVQeccGkHHF8kPMErtDXJlxyo0lj+telRF35XNihtPTWoflqtyARmg== + +"@react-spring/web@9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.4.5.tgz#b92f05b87cdc0963a59ee149e677dcaff09f680e" + integrity sha512-NGAkOtKmOzDEctL7MzRlQGv24sRce++0xAY7KlcxmeVkR7LRSGkoXHaIfm9ObzxPMcPHQYQhf3+X9jepIFNHQA== + dependencies: + "@react-spring/animated" "~9.4.5" + "@react-spring/core" "~9.4.5" + "@react-spring/shared" "~9.4.5" + "@react-spring/types" "~9.4.5" + +"@remix-run/router@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.0.3.tgz#953b88c20ea00d0eddaffdc1b115c08474aa295d" + integrity sha512-ceuyTSs7PZ/tQqi19YZNBc5X7kj1f8p+4DIyrcIYFY9h+hd1OKm4RqtiWldR9eGEvIiJfsqwM4BsuCtRIuEw6Q== "@rollup/plugin-node-resolve@^7.1.1": version "7.1.3" @@ -1816,9 +2013,9 @@ integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== "@sinonjs/commons@^1.7.0": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.5.tgz#e280c94c95f206dcfd5aca00a43f2156b758c764" - integrity sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA== + version "1.8.6" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== dependencies: type-detect "4.0.8" @@ -1984,6 +2181,13 @@ dependencies: "@babel/runtime" "^7.12.5" +"@tippyjs/react@4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@tippyjs/react/-/react-4.1.0.tgz#be4e826ac198d2394a5ffed3508ca9c098c527f1" + integrity sha512-g6Dpm46edr9T9z+BYxd/eJZa6QMFc4T4z5xrztxVlkti7AhNYf7OaE6b3Nh+boUZZ9wn8xkNq9VrQM5K4huwnQ== + dependencies: + tippy.js "^6.2.0" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -2021,12 +2225,42 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.2.tgz#235bf339d17185bdec25e024ca19cce257cc7309" - integrity sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg== + version "7.18.3" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" + integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== dependencies: "@babel/types" "^7.3.0" +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" + integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + "@types/eslint@^7.29.0": version "7.29.0" resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.29.0.tgz#e56ddc8e542815272720bb0b4ccc2aff9c3e1c78" @@ -2045,6 +2279,25 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": + version "4.17.31" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz#a1139efeab4e7323834bb0226e62ac019f474b2f" + integrity sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.14" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.14.tgz#143ea0557249bc1b3b54f15db4c81c3d4eb3569c" + integrity sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + "@types/glob@^7.1.1": version "7.2.0" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" @@ -2060,11 +2313,25 @@ dependencies: "@types/node" "*" +"@types/hast@^2.0.0": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" + integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== + dependencies: + "@types/unist" "*" + "@types/html-minifier-terser@^5.0.0": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== +"@types/http-proxy@^1.17.8": + version "1.17.9" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" + integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== + dependencies: + "@types/node" "*" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" @@ -2092,7 +2359,15 @@ expect "^29.0.0" pretty-format "^29.0.0" -"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8": +"@types/jest@^29.2.5": + version "29.2.5" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.5.tgz#c27f41a9d6253f288d1910d3c5f09484a56b73c0" + integrity sha512-H2cSxkKgVmqNHXP7TC2L/WUorrZu8ZigyRywfVzv6EyBlxj39n4C00hjXYQWsbwqgElaj/CiAeSRmk5GoaKTgw== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + +"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== @@ -2102,6 +2377,18 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/mdast@^3.0.0": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" + integrity sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA== + dependencies: + "@types/unist" "*" + +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + "@types/minimatch@*": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" @@ -2112,6 +2399,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== +"@types/node@^18.11.18": + version "18.11.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" + integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== + "@types/normalize-package-data@^2.4.0": version "2.4.1" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" @@ -2127,7 +2419,7 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.1.tgz#dfd20e2dc35f027cdd6c1908e80a5ddc7499670e" integrity sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow== -"@types/prop-types@*", "@types/prop-types@^15.7.4": +"@types/prop-types@*", "@types/prop-types@^15.7.5": version "15.7.5" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== @@ -2137,6 +2429,23 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/react-dom@^18.0.10": + version "18.0.10" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.10.tgz#3b66dec56aa0f16a6cc26da9e9ca96c35c0b4352" + integrity sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg== + dependencies: + "@types/react" "*" + "@types/react-is@^16.7.1 || ^17.0.0": version "17.0.3" resolved "https://registry.yarnpkg.com/@types/react-is/-/react-is-17.0.3.tgz#2d855ba575f2fc8d17ef9861f084acc4b90a137a" @@ -2144,7 +2453,7 @@ dependencies: "@types/react" "*" -"@types/react-transition-group@^4.2.0": +"@types/react-transition-group@^4.4.5": version "4.4.5" resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.5.tgz#aae20dcf773c5aa275d5b9f7cdbca638abc5e416" integrity sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA== @@ -2160,6 +2469,15 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/react@^18.0.26": + version "18.0.26" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917" + integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + "@types/resolve@0.0.8": version "0.0.8" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" @@ -2167,11 +2485,38 @@ dependencies: "@types/node" "*" +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" + integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + "@types/source-list-map@*": version "0.1.2" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" @@ -2201,6 +2546,11 @@ dependencies: source-map "^0.6.1" +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + "@types/webpack-sources@*": version "3.2.0" resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz#16d759ba096c289034b26553d2df1bf45248d38b" @@ -2222,6 +2572,13 @@ anymatch "^3.0.0" source-map "^0.6.0" +"@types/ws@^8.5.1": + version "8.5.3" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" + integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + dependencies: + "@types/node" "*" + "@types/yargs-parser@*": version "21.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" @@ -2348,6 +2705,13 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" +"@vxna/mini-html-webpack-template@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@vxna/mini-html-webpack-template/-/mini-html-webpack-template-2.0.0.tgz#79b012b3385a6f01ae54ef50a3c99dda64d2a29a" + integrity sha512-oVrauLwSeWxq1yC4hR9gL2+k8nzrUsy5fJgt+QqartutOmUQAatJWn28BBvrhVMYZvYb+EsmZJt9nZtGTuUTOw== + dependencies: + common-tags "^1.8.0" + "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -2516,6 +2880,11 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== + acorn-globals@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" @@ -2524,7 +2893,7 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^5.3.1: +acorn-jsx@^5.1.0, acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -2554,7 +2923,7 @@ address@1.1.2: resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== -address@^1.0.1: +address@^1.0.1, address@^1.1.2: version "1.2.1" resolved "https://registry.yarnpkg.com/address/-/address-1.2.1.tgz#25bb61095b7522d65b357baa11bc05492d4c8acd" integrity sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA== @@ -2587,12 +2956,26 @@ ajv-errors@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2602,7 +2985,7 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: +ajv@^8.0.0, ajv@^8.0.1, ajv@^8.8.0: version "8.11.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.2.tgz#aecb20b50607acf2569b6382167b65a96008bb78" integrity sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg== @@ -2634,6 +3017,11 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: dependencies: type-fest "^0.21.3" +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + ansi-html@0.0.7, ansi-html@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" @@ -2682,9 +3070,9 @@ anymatch@^2.0.0: normalize-path "^2.1.1" anymatch@^3.0.0, anymatch@^3.0.3, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -2741,12 +3129,12 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-flatten@^2.1.0: +array-flatten@^2.1.0, array-flatten@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.1.4, array-includes@^3.1.5: +array-includes@^3.1.4, array-includes@^3.1.5, array-includes@^3.1.6: version "3.1.6" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== @@ -2789,7 +3177,7 @@ array.prototype.flat@^1.2.5: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.0: +array.prototype.flatmap@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== @@ -2810,6 +3198,17 @@ array.prototype.reduce@^1.0.5: es-array-method-boxes-properly "^1.0.0" is-string "^1.0.7" +array.prototype.tosorted@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + arrify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" @@ -2830,7 +3229,7 @@ asn1.js@^5.2.0: minimalistic-assert "^1.0.0" safer-buffer "^2.1.0" -assert@^1.1.1: +assert@1.5.0, assert@^1.1.1: version "1.5.0" resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== @@ -2848,6 +3247,23 @@ ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== +ast-types@0.13.3: + version "0.13.3" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7" + integrity sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA== + +ast-types@0.14.2, ast-types@^0.14.2, ast-types@~0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" + integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== + dependencies: + tslib "^2.0.1" + +ast-types@^0.7.2: + version "0.7.8" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.7.8.tgz#902d2e0d60d071bdcd46dc115e1809ed11c138a9" + integrity sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q== + astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -3095,6 +3511,11 @@ babylon@^6.18.0: resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -3188,6 +3609,16 @@ body-parser@1.20.1: type-is "~1.6.18" unpipe "1.0.0" +bonjour-service@^1.0.11: + version "1.0.14" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.14.tgz#c346f5bc84e87802d08f8d5a60b93f758e514ee7" + integrity sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ== + dependencies: + array-flatten "^2.1.2" + dns-equal "^1.0.0" + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + bonjour@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" @@ -3317,7 +3748,7 @@ browserslist@4.14.2: escalade "^3.0.2" node-releases "^1.1.61" -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.6.2, browserslist@^4.6.4: +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.6.2, browserslist@^4.6.4: version "4.21.4" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== @@ -3334,6 +3765,19 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buble@0.20.0: + version "0.20.0" + resolved "https://registry.yarnpkg.com/buble/-/buble-0.20.0.tgz#a143979a8d968b7f76b57f38f2e7ce7cfe938d1f" + integrity sha512-/1gnaMQE8xvd5qsNBl+iTuyjJ9XxeaVxAMF86dQ4EyxFJOZtsgOS8Ra+7WHgZTam5IFDtt4BguN0sH0tVTKrOw== + dependencies: + acorn "^6.4.1" + acorn-dynamic-import "^4.0.0" + acorn-jsx "^5.2.0" + chalk "^2.4.2" + magic-string "^0.25.7" + minimist "^1.2.5" + regexpu-core "4.5.4" + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -3378,6 +3822,24 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +c8@^7.6.0: + version "7.12.0" + resolved "https://registry.yarnpkg.com/c8/-/c8-7.12.0.tgz#402db1c1af4af5249153535d1c84ad70c5c96b14" + integrity sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@istanbuljs/schema" "^0.1.3" + find-up "^5.0.0" + foreground-child "^2.0.0" + istanbul-lib-coverage "^3.2.0" + istanbul-lib-report "^3.0.0" + istanbul-reports "^3.1.4" + rimraf "^3.0.2" + test-exclude "^6.0.0" + v8-to-istanbul "^9.0.0" + yargs "^16.2.0" + yargs-parser "^20.2.9" + cacache@^12.0.2: version "12.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" @@ -3498,10 +3960,15 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001400: - version "1.0.30001431" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz#e7c59bd1bc518fae03a4656be442ce6c4887a795" - integrity sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125: + version "1.0.30001439" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz#ab7371faeb4adff4b74dad1718a6fd122e45d9cb" + integrity sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A== + +caniuse-lite@^1.0.30001400: + version "1.0.30001434" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz#ec1ec1cfb0a93a34a0600d37903853030520a4e5" + integrity sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA== capture-exit@^2.0.0: version "2.0.0" @@ -3532,7 +3999,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0, chalk@^4.1.0: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -3561,9 +4028,9 @@ character-reference-invalid@^1.0.0: integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== check-types@^11.1.1: - version "11.1.2" - resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" - integrity sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ== + version "11.2.2" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.2.2.tgz#7afc0b6a860d686885062f2dba888ba5710335b4" + integrity sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA== chokidar@^2.1.8: version "2.1.8" @@ -3584,7 +4051,7 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.4.1: +chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -3647,6 +4114,11 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +classnames@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" + integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== + clean-css@^4.2.3: version "4.2.4" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" @@ -3659,14 +4131,29 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -clipboard@^2.0.0: - version "2.0.11" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.11.tgz#62180360b97dd668b6b3a84ec226975762a70be5" - integrity sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw== +clean-webpack-plugin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-4.0.0.tgz#72947d4403d452f38ed61a9ff0ada8122aacd729" + integrity sha512-WuWE1nyTNAyW5T7oNyys2EN0cfP2fdRxhxnIQWiAp0bMabPdHhoGxM8A6YL2GhqwgrPnnaemVE7nv5XJ2Fhh2w== + dependencies: + del "^4.1.1" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: - good-listener "^1.2.2" - select "^1.1.2" - tiny-emitter "^2.0.0" + restore-cursor "^3.1.0" + +cli-spinners@^2.2.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" + integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + +clipboard-copy@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/clipboard-copy/-/clipboard-copy-3.2.0.tgz#3c5b8651d3512dcfad295d77a9eb09e7fac8d5fb" + integrity sha512-vooFaGFL6ulEP1liiaWFBmmfuPm3cY3y7T9eB83ZTnYc/oFeAKsq3NcDrOkBC8XaauEE8zHQwI7k0+JSYiVQSQ== cliui@^5.0.0: version "5.0.0" @@ -3686,7 +4173,21 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -clsx@^1.0.4: +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +clsx@^1.0.4, clsx@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== @@ -3758,6 +4259,16 @@ color@^3.0.0: color-convert "^1.9.3" color-string "^1.6.0" +colorette@^2.0.10: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +colors@~0.6.0-1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" + integrity sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw== + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -3770,7 +4281,7 @@ comma-separated-tokens@^1.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== -commander@^2.20.0: +commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -3780,6 +4291,23 @@ commander@^4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" + integrity sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ== + +common-dir@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/common-dir/-/common-dir-3.0.1.tgz#c328570baebd5a6afb929ba762e816d74742d979" + integrity sha512-yEhqFGiuBGkV2vsaEtGAv/CkP3Ff1FF8X69nm5P35Sv+carPQG5Nw9KteaHcMrHsxxF5tED5URg958U3lPF5Eg== + dependencies: + common-sequence "^2.0.0" + +common-sequence@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/common-sequence/-/common-sequence-2.0.2.tgz#accc76bdc5876a1fcd92b73484d4285fff99d838" + integrity sha512-jAg09gkdkrDO9EWTdXfv80WWH3yeZl5oT69fGfedBNS9pXUKYInVJ1bJ+/ht2+Moeei48TmSbQDYMc8EOx9G0g== + common-tags@^1.8.0: version "1.8.2" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" @@ -3847,6 +4375,11 @@ connect-history-api-fallback@^1.6.0: resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" @@ -3881,7 +4414,7 @@ convert-source-map@^0.3.3: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" integrity sha512-+4nRk0k3oEpwUB7/CalD7xE2z4VmtEnnq0GO2IPTkrooTrAhEsWvuLF5iWP1dXrwluki/azwXV1ve7gtYuPldg== -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== @@ -3913,6 +4446,18 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== +copy-webpack-plugin@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== + dependencies: + fast-glob "^3.2.11" + glob-parent "^6.0.1" + globby "^13.1.1" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + core-js-compat@^3.25.1: version "3.26.1" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.26.1.tgz#0e710b09ebf689d719545ac36e49041850f943df" @@ -3930,7 +4475,7 @@ core-js@^2.4.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-js@^3.6.5: +core-js@^3.6.4, core-js@^3.6.5: version "3.26.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.26.1.tgz#7a9816dabd9ee846c1c0fe0e8fcad68f3709134e" integrity sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA== @@ -3950,6 +4495,17 @@ cosmiconfig@^5.0.0: js-yaml "^3.13.1" parse-json "^4.0.0" +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + cosmiconfig@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" @@ -3992,7 +4548,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -4062,6 +4618,11 @@ css-has-pseudo@^0.10.0: postcss "^7.0.6" postcss-selector-parser "^5.0.0-rc.4" +css-initials@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/css-initials/-/css-initials-0.3.1.tgz#0406d78e586fd12b9984a3f7d8a87fcbb2073208" + integrity sha512-fkshKv9vV8AmcxkAWVQ9DmEAKiqe09GHdnFaXecp0NIfsGnXIHVJAHfsxdRy9KXV0/KiWdjBqrCYto2fYIO4xQ== + css-loader@4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.3.0.tgz#c888af64b2a5b2e85462c72c0f4a85c7e2e0821e" @@ -4269,12 +4830,7 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -csstype@^2.5.2: - version "2.6.21" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e" - integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w== - -csstype@^3.0.2: +csstype@^3.0.2, csstype@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== @@ -4313,11 +4869,6 @@ d3-format@^1.4.4: resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.5.tgz#374f2ba1320e3717eb74a9356c67daee17a7edb4" integrity sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ== -d3-hierarchy@^1.1.8: - version "1.1.9" - resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz#2f6bee24caaea43f8dc37545fa01628559647a83" - integrity sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ== - "d3-interpolate@1 - 2", "d3-interpolate@1.2.0 - 2", d3-interpolate@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz#98be499cfb8a3b94d4ff616900501a64abc91163" @@ -4356,25 +4907,13 @@ d3-shape@^1.3.5: dependencies: d3-path "1" -"d3-time-format@2 - 3": +"d3-time-format@2 - 3", d3-time-format@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-3.0.0.tgz#df8056c83659e01f20ac5da5fdeae7c08d5f1bb6" integrity sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag== dependencies: d3-time "1 - 2" -d3-time-format@^2.1.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.3.0.tgz#107bdc028667788a8924ba040faf1fbccd5a7850" - integrity sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ== - dependencies: - d3-time "1" - -d3-time@1, d3-time@^1.0.11: - version "1.1.0" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" - integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== - "d3-time@1 - 2", d3-time@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-2.1.1.tgz#e9d8a8a88691f4548e68ca085e5ff956724a6682" @@ -4382,6 +4921,11 @@ d3-time@1, d3-time@^1.0.11: dependencies: d3-array "2" +d3-time@^1.0.11: + version "1.1.0" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" + integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== + d@1, d@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" @@ -4411,7 +4955,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4431,14 +4975,14 @@ decamelize@^1.2.0: integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decimal.js@^10.2.1: - version "10.4.2" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.2.tgz#0341651d1d997d86065a2ce3a441fbd0d8e8b98e" - integrity sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA== + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== dedent@^0.7.0: version "0.7.0" @@ -4496,6 +5040,25 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" @@ -4549,11 +5112,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -delegate@^3.1.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" - integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== - depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -4587,7 +5145,7 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== -detect-port-alt@1.1.6: +detect-port-alt@1.1.6, detect-port-alt@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== @@ -4634,6 +5192,13 @@ dns-packet@^1.3.1: ip "^1.1.0" safe-buffer "^5.0.1" +dns-packet@^5.2.2: + version "5.4.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" + integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + dns-txt@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" @@ -4763,7 +5328,7 @@ dotenv@8.2.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== -duplexer@^0.1.1: +duplexer@^0.1.1, duplexer@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== @@ -4826,11 +5391,6 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng== - emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -4891,9 +5451,9 @@ error-stack-parser@^2.0.6: stackframe "^1.3.4" es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.20.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" - integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + version "1.20.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.5.tgz#e6dc99177be37cacda5988e692c3fa8b218e95d2" + integrity sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" @@ -4901,6 +5461,7 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: function.prototype.name "^1.1.5" get-intrinsic "^1.1.3" get-symbol-description "^1.0.0" + gopd "^1.0.1" has "^1.0.3" has-property-descriptors "^1.0.0" has-symbols "^1.0.3" @@ -4916,8 +5477,8 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: object.assign "^4.1.4" regexp.prototype.flags "^1.4.3" safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" unbox-primitive "^1.0.2" es-array-method-boxes-properly@^1.0.0: @@ -4973,6 +5534,16 @@ es6-iterator@2.0.3, es6-iterator@^2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" +es6-object-assign@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz#c2c3582656247c39ea107cb1e6652b6f9f24523c" + integrity sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw== + +es6-promise@^4.2.8: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + es6-symbol@^3.1.1, es6-symbol@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" @@ -5006,6 +5577,18 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escodegen@^1.12.0: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + escodegen@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" @@ -5099,24 +5682,25 @@ eslint-plugin-react-hooks@^4.2.0: integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react@^7.21.5: - version "7.31.10" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.10.tgz#6782c2c7fe91c09e715d536067644bbb9491419a" - integrity sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA== + version "7.31.11" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz#011521d2b16dcf95795df688a4770b4eaab364c8" + integrity sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw== dependencies: - array-includes "^3.1.5" - array.prototype.flatmap "^1.3.0" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" doctrine "^2.1.0" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.5" - object.fromentries "^2.0.5" - object.hasown "^1.1.1" - object.values "^1.1.5" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" prop-types "^15.8.1" resolve "^2.0.0-next.3" semver "^6.3.0" - string.prototype.matchall "^4.0.7" + string.prototype.matchall "^4.0.8" eslint-plugin-testing-library@^3.9.2: version "3.10.2" @@ -5232,7 +5816,12 @@ espree@^7.3.0, espree@^7.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -esprima@^4.0.0, esprima@^4.0.1: +esprima@^2.1.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== + +esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -5251,7 +5840,7 @@ esrecurse@^4.1.0, esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: +estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -5261,6 +5850,15 @@ estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-to-babel@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/estree-to-babel/-/estree-to-babel-3.2.1.tgz#82e78315275c3ca74475fdc8ac1a5103c8a75bf5" + integrity sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg== + dependencies: + "@babel/traverse" "^7.1.6" + "@babel/types" "^7.2.0" + c8 "^7.6.0" + estree-walker@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" @@ -5271,6 +5869,11 @@ estree-walker@^1.0.1: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== +estree-walker@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.9.0.tgz#9116372f09c02fd88fcafb0c04343631012a0aa6" + integrity sha512-12U47o7XHUX329+x3FzNVjCx3SHEzMF0nkDv7r/HnBzX/xNTKxajBk6gyygaxrAFtLj39219oMfbtxv4KpaOiA== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -5337,6 +5940,21 @@ execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -5378,7 +5996,7 @@ expect@^29.0.0: jest-message-util "^29.3.1" jest-util "^29.3.1" -express@^4.17.1: +express@^4.17.1, express@^4.17.3: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== @@ -5437,6 +6055,11 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -5456,7 +6079,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.1.1, fast-glob@^3.2.9: +fast-glob@^3.1.1, fast-glob@^3.2.11, fast-glob@^3.2.9: version "3.2.12" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== @@ -5477,6 +6100,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fastest-levenshtein@^1.0.9: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + fastq@^1.6.0: version "1.13.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" @@ -5484,7 +6112,7 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -fault@^1.0.2: +fault@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== @@ -5535,6 +6163,11 @@ filesize@6.1.0: resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.1.0.tgz#e81bdaa780e2451d714d71c0d7a4f3238d37ad00" integrity sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg== +filesize@^8.0.6: + version "8.0.7" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" + integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -5583,6 +6216,11 @@ find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -5598,6 +6236,22 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +findup@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/findup/-/findup-0.1.5.tgz#8ad929a3393bac627957a7e5de4623b06b0e2ceb" + integrity sha512-Udxo3C9A6alt2GZ2MNsgnIvX7De0V3VGxeP/x98NSVgSlizcDHdmJza61LI7zJy4OEtSiJyE72s0/+tBl5/ZxA== + dependencies: + colors "~0.6.0-1" + commander "~2.1.0" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -5641,6 +6295,14 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^3.0.2" + fork-ts-checker-webpack-plugin@4.1.6: version "4.1.6" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz#5055c703febcf37fa06405d400c122b905167fc5" @@ -5654,6 +6316,25 @@ fork-ts-checker-webpack-plugin@4.1.6: tapable "^1.0.0" worker-rpc "^0.1.0" +fork-ts-checker-webpack-plugin@^6.5.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz#4f67183f2f9eb8ba7df7177ce3cf3e75cdafb340" + integrity sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA== + dependencies: + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + glob "^7.1.6" + memfs "^3.1.2" + minimatch "^3.0.4" + schema-utils "2.7.0" + semver "^7.3.2" + tapable "^1.0.0" + form-data@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" @@ -5711,7 +6392,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.1: +fs-extra@^9.0.0, fs-extra@^9.0.1: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -5728,6 +6409,11 @@ fs-minipass@^2.0.0: dependencies: minipass "^3.0.0" +fs-monkey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== + fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -5761,6 +6447,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function.name-polyfill@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/function.name-polyfill/-/function.name-polyfill-1.0.6.tgz#c54e37cae0a77dfcb49d47982815b0826b5c60d9" + integrity sha512-ejQivNFbBPTY5O/waFta6D5AzV8GJiM/fMDaT6LrsYax1cb4eipxuQqKNlugF2jlcXIjifsqvju3wsgV35TELg== + function.prototype.name@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" @@ -5786,7 +6477,7 @@ gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -5824,6 +6515,11 @@ get-stream@^5.0.0: dependencies: pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -5837,6 +6533,11 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== +github-slugger@^1.2.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" + integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -5852,7 +6553,14 @@ glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.5, glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5864,7 +6572,7 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@2.0.0: +global-modules@2.0.0, global-modules@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== @@ -5904,7 +6612,7 @@ globby@11.0.1: merge2 "^1.3.0" slash "^3.0.0" -globby@^11.0.3: +globby@^11.0.3, globby@^11.0.4: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -5916,6 +6624,17 @@ globby@^11.0.3: merge2 "^1.4.1" slash "^3.0.0" +globby@^13.1.1: + version "13.1.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" + integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -5927,12 +6646,12 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -good-listener@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" - integrity sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw== +glogg@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" + integrity sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA== dependencies: - delegate "^3.1.2" + sparkles "^1.0.0" gopd@^1.0.1: version "1.0.1" @@ -5941,7 +6660,7 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -5959,6 +6678,13 @@ gzip-size@5.1.1: duplexer "^0.1.1" pify "^4.0.1" +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" @@ -6050,6 +6776,11 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" +hash-sum@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a" + integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg== + hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" @@ -6063,11 +6794,12 @@ hast-util-parse-selector@^2.0.0: resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== -hastscript@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a" - integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ== +hastscript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" + integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== dependencies: + "@types/hast" "^2.0.0" comma-separated-tokens "^1.0.0" hast-util-parse-selector "^2.0.0" property-information "^5.0.0" @@ -6083,27 +6815,10 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== -highlight.js@~9.13.0: - version "9.13.1" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.13.1.tgz#054586d53a6863311168488a0f58d6c505ce641e" - integrity sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A== - -highlight.js@~9.18.2: - version "9.18.5" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.5.tgz#d18a359867f378c138d6819edfc2a8acd5f29825" - integrity sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA== - -history@^4.9.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" - integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== - dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" +highlight.js@^10.4.1, highlight.js@~10.7.0: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== hmac-drbg@^1.0.1: version "1.0.1" @@ -6114,7 +6829,7 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -6163,6 +6878,11 @@ html-entities@^1.2.1, html-entities@^1.3.1: resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== +html-entities@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -6256,7 +6976,18 @@ http-proxy-middleware@0.19.1: lodash "^4.17.11" micromatch "^3.1.10" -http-proxy@^1.17.0: +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.17.0, http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== @@ -6283,6 +7014,11 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + hyphenate-style-name@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" @@ -6324,7 +7060,12 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.4, ignore@^5.1.8, ignore@^5.2.0: +ignore@^5.1.4, ignore@^5.1.8: + version "5.2.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.1.tgz#c2b1f76cb999ede1502f3a226a9310fdfe88d46c" + integrity sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA== + +ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== @@ -6334,6 +7075,11 @@ immer@8.0.1: resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.1.tgz#9c73db683e2b3975c424fb0572af5889877ae656" integrity sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA== +immer@^9.0.7: + version "9.0.16" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.16.tgz#8e7caab80118c2b54b37ad43e05758cdefad0198" + integrity sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ== + import-cwd@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" @@ -6349,7 +7095,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -6465,6 +7211,11 @@ ipaddr.js@1.9.1, ipaddr.js@^1.9.0: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" @@ -6554,6 +7305,11 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" @@ -6634,7 +7390,7 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== -is-docker@^2.0.0: +is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== @@ -6695,6 +7451,11 @@ is-in-browser@^1.0.2, is-in-browser@^1.1.3: resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" integrity sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g== +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-map@^2.0.1, is-map@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" @@ -6763,6 +7524,16 @@ is-plain-obj@^1.0.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -6793,7 +7564,7 @@ is-resolvable@^1.0.0: resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== -is-root@2.1.0: +is-root@2.1.0, is-root@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== @@ -6887,11 +7658,6 @@ is-wsl@^2.1.1, is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -6963,7 +7729,7 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^3.0.2: +istanbul-reports@^3.0.2, istanbul-reports@^3.1.4: version "3.1.5" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== @@ -6971,6 +7737,11 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +javascript-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79" + integrity sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg== + jest-changed-files@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" @@ -7449,7 +8220,7 @@ jest-worker@^26.5.0, jest-worker@^26.6.2: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^27.5.1: +jest-worker@^27.4.5, jest-worker@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== @@ -7576,7 +8347,7 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jss-plugin-camel-case@^10.5.1: +jss-plugin-camel-case@^10.9.0, jss-plugin-camel-case@^10.9.2: version "10.9.2" resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.2.tgz#76dddfa32f9e62d17daa4e3504991fd0933b89e1" integrity sha512-wgBPlL3WS0WDJ1lPJcgjux/SHnDuu7opmgQKSraKs4z8dCCyYMx9IDPFKBXQ8Q5dVYij1FFV0WdxyhuOOAXuTg== @@ -7585,7 +8356,16 @@ jss-plugin-camel-case@^10.5.1: hyphenate-style-name "^1.0.3" jss "10.9.2" -jss-plugin-default-unit@^10.5.1: +jss-plugin-compose@^10.9.0: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jss-plugin-compose/-/jss-plugin-compose-10.9.2.tgz#276c463ceea0abaf266a17e0fdb6a998a7189ba0" + integrity sha512-XvsGar4D791VgOMqbEk1XYY5s84Ew57OMLYjbnTXl3MSaBTvmR5M3dTqQbBquJGp4pLyyqlfTcijfolZII1w4Q== + dependencies: + "@babel/runtime" "^7.3.1" + jss "10.9.2" + tiny-warning "^1.0.2" + +jss-plugin-default-unit@^10.9.0, jss-plugin-default-unit@^10.9.2: version "10.9.2" resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.2.tgz#3e7f4a1506b18d8fe231554fd982439feb2a9c53" integrity sha512-pYg0QX3bBEFtTnmeSI3l7ad1vtHU42YEEpgW7pmIh+9pkWNWb5dwS/4onSfAaI0kq+dOZHzz4dWe+8vWnanoSg== @@ -7593,7 +8373,7 @@ jss-plugin-default-unit@^10.5.1: "@babel/runtime" "^7.3.1" jss "10.9.2" -jss-plugin-global@^10.5.1: +jss-plugin-global@^10.9.0, jss-plugin-global@^10.9.2: version "10.9.2" resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.9.2.tgz#e7f2ad4a5e8e674fb703b04b57a570b8c3e5c2c2" integrity sha512-GcX0aE8Ef6AtlasVrafg1DItlL/tWHoC4cGir4r3gegbWwF5ZOBYhx04gurPvWHC8F873aEGqge7C17xpwmp2g== @@ -7601,7 +8381,16 @@ jss-plugin-global@^10.5.1: "@babel/runtime" "^7.3.1" jss "10.9.2" -jss-plugin-nested@^10.5.1: +jss-plugin-isolate@^10.9.0: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jss-plugin-isolate/-/jss-plugin-isolate-10.9.2.tgz#80c3b153c0dce919e562093d9e3349a227eec56d" + integrity sha512-r6AuIAGangcJkKBiAkRdpjpWWCyPk1LqxH7xKKTmYwlPUDBEUnGGoAWuPDF8EZT+Me6c487GbEx7CFUWA6z7HA== + dependencies: + "@babel/runtime" "^7.3.1" + css-initials "^0.3.1" + jss "10.9.2" + +jss-plugin-nested@^10.9.0, jss-plugin-nested@^10.9.2: version "10.9.2" resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.9.2.tgz#3aa2502816089ecf3981e1a07c49b276d67dca63" integrity sha512-VgiOWIC6bvgDaAL97XCxGD0BxOKM0K0zeB/ECyNaVF6FqvdGB9KBBWRdy2STYAss4VVA7i5TbxFZN+WSX1kfQA== @@ -7610,7 +8399,7 @@ jss-plugin-nested@^10.5.1: jss "10.9.2" tiny-warning "^1.0.2" -jss-plugin-props-sort@^10.5.1: +jss-plugin-props-sort@^10.9.2: version "10.9.2" resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.2.tgz#645f6c8f179309667b3e6212f66b59a32fb3f01f" integrity sha512-AP1AyUTbi2szylgr+O0OB7gkIxEGzySLITZ2GpsaoX72YMCGI2jYAc+WUhPfvUnZYiauF4zTnN4V4TGuvFjJlw== @@ -7618,7 +8407,7 @@ jss-plugin-props-sort@^10.5.1: "@babel/runtime" "^7.3.1" jss "10.9.2" -jss-plugin-rule-value-function@^10.5.1: +jss-plugin-rule-value-function@^10.9.2: version "10.9.2" resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.2.tgz#9afe07596e477123cbf11120776be6a64494541f" integrity sha512-vf5ms8zvLFMub6swbNxvzsurHfUZ5Shy5aJB2gIpY6WNA3uLinEcxYyraQXItRHi5ivXGqYciFDRM2ZoVoRZ4Q== @@ -7627,7 +8416,7 @@ jss-plugin-rule-value-function@^10.5.1: jss "10.9.2" tiny-warning "^1.0.2" -jss-plugin-vendor-prefixer@^10.5.1: +jss-plugin-vendor-prefixer@^10.9.2: version "10.9.2" resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.2.tgz#410a0f3b9f8dbbfba58f4d329134df4849aa1237" integrity sha512-SxcEoH+Rttf9fEv6KkiPzLdXRmI6waOTcMkbbEFgdZLDYNIP9UKNHFy6thhbRKqv0XMQZdrEsbDyV464zE/dUA== @@ -7636,7 +8425,7 @@ jss-plugin-vendor-prefixer@^10.5.1: css-vendor "^2.0.8" jss "10.9.2" -jss@10.9.2, jss@^10.5.1: +jss@10.9.2, jss@^10.9.0, jss@^10.9.2: version "10.9.2" resolved "https://registry.yarnpkg.com/jss/-/jss-10.9.2.tgz#9379be1f195ef98011dfd31f9448251bd61b95a9" integrity sha512-b8G6rWpYLR4teTUbGd4I4EsnWjg7MN0Q5bSsjKhVkJVjhQDy2KzkbD2AW3TuT0RYZVmZZHKIrXDn6kjU14qkUg== @@ -7693,17 +8482,17 @@ klona@^2.0.4: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== -language-subtag-registry@~0.3.2: +language-subtag-registry@^0.3.20: version "0.3.22" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== language-tags@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.6.tgz#c087cc42cd92eb71f0925e9e271d4f8be5a93430" + integrity sha512-HNkaCgM8wZgE/BZACeotAAgpL9FUjEnhgF0FVQMIgH//zqTPreLYMb3rWYkYAqPoF75Jwuycp1da7uz66cfFQg== dependencies: - language-subtag-registry "~0.3.2" + language-subtag-registry "^0.3.20" last-call-webpack-plugin@^3.0.0: version "3.0.0" @@ -7739,20 +8528,16 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +listify@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/listify/-/listify-1.0.3.tgz#a9335ac351c3d1aea515494ed746976eeb92248b" + integrity sha512-083swF7iH7bx8666zdzBColpgEuy46HjN3r1isD4zV6Ix7FuHfb/2/WVnl4CH8hjuoWeFF7P5KkKNXUnJCFEJg== + loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== - dependencies: - big.js "^5.2.2" - emojis-list "^2.0.0" - json5 "^1.0.1" - loader-utils@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" @@ -7780,6 +8565,11 @@ loader-utils@^2.0.0: emojis-list "^3.0.0" json5 "^2.1.2" +loader-utils@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" + integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -7795,6 +8585,13 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -7845,12 +8642,24 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + loglevel@^1.6.8: version "1.8.1" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.1.tgz#5c621f83d5b48c54ae93b6156353f555963377b4" integrity sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg== -loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: +longest-streak@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" + integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== + +loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -7864,13 +8673,18 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lowlight@~1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.11.0.tgz#1304d83005126d4e8b1dc0f07981e9b689ec2efc" - integrity sha512-xrGGN6XLL7MbTMdPD6NfWPwY43SNkjf/d0mecSx/CW36fUZTjRHEq0/Cdug3TWKtRXLWi7iMl1eP0olYxj/a4A== +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lowlight@^1.17.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.20.0.tgz#ddb197d33462ad0d93bf19d17b6c301aa3941888" + integrity sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw== dependencies: - fault "^1.0.2" - highlight.js "~9.13.0" + fault "^1.0.0" + highlight.js "~10.7.0" lru-cache@^5.1.1: version "5.1.1" @@ -7932,6 +8746,14 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +markdown-to-jsx@^6.11.4: + version "6.11.4" + resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz#b4528b1ab668aef7fe61c1535c27e837819392c5" + integrity sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw== + dependencies: + prop-types "^15.6.2" + unquote "^1.1.0" + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -7941,6 +8763,34 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +mdast-util-from-markdown@^0.8.0: + version "0.8.5" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" + integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-string "^2.0.0" + micromark "~2.11.0" + parse-entities "^2.0.0" + unist-util-stringify-position "^2.0.0" + +mdast-util-to-markdown@^0.6.0: + version "0.6.5" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe" + integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ== + dependencies: + "@types/unist" "^2.0.0" + longest-streak "^2.0.0" + mdast-util-to-string "^2.0.0" + parse-entities "^2.0.0" + repeat-string "^1.0.0" + zwitch "^1.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -7956,6 +8806,13 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== +memfs@^3.1.2, memfs@^3.4.3: + version "3.4.12" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.12.tgz#d00f8ad8dab132dc277c659dc85bfd14b07d03bd" + integrity sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw== + dependencies: + fs-monkey "^1.0.3" + memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -7997,6 +8854,14 @@ microevent.ts@~0.1.1: resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== +micromark@~2.11.0: + version "2.11.4" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" + integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== + dependencies: + debug "^4.0.0" + parse-entities "^2.0.0" + micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -8037,7 +8902,7 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -8074,6 +8939,13 @@ mini-css-extract-plugin@0.11.3: schema-utils "^1.0.0" webpack-sources "^1.1.0" +mini-html-webpack-plugin@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/mini-html-webpack-plugin/-/mini-html-webpack-plugin-3.1.3.tgz#25ad501dd16ba47ef67aaa9637ce6b1e4b7a1344" + integrity sha512-WhnO8ZvOILCCkk4yNTBdoiZNwyY4ktrQ+wOOGdMAtyeK/qi4Viaidwjlf0itG5AjN7sWsOI6ww8f/8V5JfDQkA== + dependencies: + webpack-sources "^2.0.1" + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -8091,14 +8963,14 @@ minimatch@3.0.4: dependencies: brace-expansion "^1.1.7" -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.7" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== @@ -8125,9 +8997,16 @@ minipass-pipeline@^1.2.2: minipass "^3.0.0" minipass@^3.0.0, minipass@^3.1.1: - version "3.3.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.0.0.tgz#7cebb0f9fa7d56f0c5b17853cbe28838a8dbbd3b" + integrity sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw== dependencies: yallist "^4.0.0" @@ -8187,6 +9066,11 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" +mri@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -8215,6 +9099,19 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + nan@^2.12.1: version "2.17.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" @@ -8282,11 +9179,23 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-dir@^0.1.10: + version "0.1.17" + resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" + integrity sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg== + dependencies: + minimatch "^3.0.2" + node-forge@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -8392,7 +9301,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0: +npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -8472,7 +9381,7 @@ object.assign@^4.1.3, object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.0, object.entries@^1.1.5: +object.entries@^1.1.0, object.entries@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== @@ -8481,7 +9390,7 @@ object.entries@^1.1.0, object.entries@^1.1.5: define-properties "^1.1.4" es-abstract "^1.20.4" -object.fromentries@^2.0.5: +object.fromentries@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== @@ -8500,7 +9409,7 @@ object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0 define-properties "^1.1.4" es-abstract "^1.20.4" -object.hasown@^1.1.1: +object.hasown@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== @@ -8515,7 +9424,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.0, object.values@^1.1.5: +object.values@^1.1.0, object.values@^1.1.5, object.values@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== @@ -8548,7 +9457,7 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.0: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -8563,6 +9472,15 @@ open@^7.0.2: is-docker "^2.0.0" is-wsl "^2.1.1" +open@^8.0.9, open@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" + integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + opn@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" @@ -8602,6 +9520,20 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +ora@^4.0.2: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-4.1.1.tgz#566cc0348a15c36f5f0e979612842e02ba9dddbc" + integrity sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A== + dependencies: + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-spinners "^2.2.0" + is-interactive "^1.0.0" + log-symbols "^3.0.0" + mute-stream "0.0.8" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" @@ -8645,6 +9577,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" @@ -8664,6 +9603,14 @@ p-retry@^3.0.1: dependencies: retry "^0.12.0" +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -8709,10 +9656,10 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" -parse-entities@^1.1.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" - integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== dependencies: character-entities "^1.0.0" character-entities-legacy "^1.0.0" @@ -8812,13 +9759,6 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -8835,11 +9775,6 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - integrity sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg== - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -8901,7 +9836,7 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pkg-up@3.1.0: +pkg-up@3.1.0, pkg-up@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== @@ -8915,11 +9850,6 @@ pnp-webpack-plugin@1.6.4: dependencies: ts-pnp "^1.1.6" -popper.js@1.16.1-lts: - version "1.16.1-lts" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05" - integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA== - portfinder@^1.0.26: version "1.0.32" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" @@ -9530,9 +10460,9 @@ postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: uniq "^1.0.1" postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.10" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" - integrity sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w== + version "6.0.11" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -9647,17 +10577,20 @@ pretty-format@^29.0.0, pretty-format@^29.3.1: ansi-styles "^5.0.0" react-is "^18.0.0" -prismjs@^1.8.4: +prismjs@^1.17.1, prismjs@^1.27.0: version "1.29.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== -prismjs@~1.17.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.17.1.tgz#e669fcbd4cdd873c35102881c33b14d0d68519be" - integrity sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q== - optionalDependencies: - clipboard "^2.0.0" +prismjs@~1.27.0: + version "1.27.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.27.0.tgz#bb6ee3138a0b438a3653dd4d6ce0cc6510a45057" + integrity sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA== + +private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== process-nextick-args@~2.0.0: version "2.0.1" @@ -9694,7 +10627,7 @@ prompts@2.4.0: kleur "^3.0.3" sisteransi "^1.0.5" -prompts@^2.0.1: +prompts@^2.0.1, prompts@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== @@ -9702,7 +10635,7 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.5.8, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -9788,6 +10721,15 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +q-i@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/q-i/-/q-i-2.0.1.tgz#fec7e3f0e713f3467358bb5ac80bcc4c115187d6" + integrity sha512-tr7CzPNxkBDBuPzqi/HDUS4uBOppb91akNTeh56TYio8TiIeXp2Yp8ea9NmDu2DmGH35ZjJDq6C3E4SepVZ4bQ== + dependencies: + ansi-styles "^3.2.0" + is-plain-object "^2.0.4" + stringify-object "^3.2.0" + q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -9800,6 +10742,11 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" +qss@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/qss/-/qss-2.0.3.tgz#630b38b120931b52d04704f3abfb0f861604a9ec" + integrity sha512-j48ZBT5IZbSqJiSU8EX4XrN8nXiflHvmMvv2XpFc31gh7n6EpSs75bNr6+oj3FOLWyT8m09pTmqLNl34L7/uPQ== + query-string@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" @@ -9833,18 +10780,13 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -raf@^3.1.0, raf@^3.4.1: +raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== dependencies: performance-now "^2.1.0" -rafz@^0.1.14: - version "0.1.14" - resolved "https://registry.yarnpkg.com/rafz/-/rafz-0.1.14.tgz#164f01cf7cc6094e08467247ef351ef5c8d278fe" - integrity sha512-YiQkedSt1urYtYbvHhTQR3l67M8SZbUvga5eJFM/v4vx/GmDdtXlE2hjJIyRjhhO/PjcdGC+CXCYOUA4onit8w== - randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -9917,36 +10859,107 @@ react-dev-utils@^11.0.3: strip-ansi "6.0.0" text-table "0.2.0" -react-dom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== +react-dev-utils@^12.0.0: + version "12.0.1" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" + integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== + dependencies: + "@babel/code-frame" "^7.16.0" + address "^1.1.2" + browserslist "^4.18.1" + chalk "^4.1.2" + cross-spawn "^7.0.3" + detect-port-alt "^1.1.6" + escape-string-regexp "^4.0.0" + filesize "^8.0.6" + find-up "^5.0.0" + fork-ts-checker-webpack-plugin "^6.5.0" + global-modules "^2.0.0" + globby "^11.0.4" + gzip-size "^6.0.0" + immer "^9.0.7" + is-root "^2.1.0" + loader-utils "^3.2.0" + open "^8.4.0" + pkg-up "^3.1.0" + prompts "^2.4.2" + react-error-overlay "^6.0.11" + recursive-readdir "^2.2.2" + shell-quote "^1.7.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +react-docgen-annotation-resolver@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/react-docgen-annotation-resolver/-/react-docgen-annotation-resolver-2.0.0.tgz#c2c9ac2d6dd5c43396ebadad3b22323820dda78e" + integrity sha512-0rNR0SZAjd4eHTYP3Iq/pi0zTznHtXSLAKOXbK6tGjwd9bTaXUaKQK7hihRvGvqxNjUy0WGTcFgX+lT64vIXBg== + +react-docgen-displayname-handler@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/react-docgen-displayname-handler/-/react-docgen-displayname-handler-3.0.2.tgz#4d79ded9c3c7b504a67ba734ebbff8aa12fda8b4" + integrity sha512-6SDJ2h6WuW0Kq6Vw34C3WmRfh1eYNDkaes9hxsmQ4fmX5tiI2lpR28J2cxlu4RpYrqBLrrtke6kWBef7pIL24w== + dependencies: + ast-types "0.14.2" + +react-docgen@^5.0.0: + version "5.4.3" + resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-5.4.3.tgz#7d297f73b977d0c7611402e5fc2a168acf332b26" + integrity sha512-xlLJyOlnfr8lLEEeaDZ+X2J/KJoe6Nr9AzxnkdQWush5hz2ZSu66w6iLMOScMmxoSHWpWMn+k3v5ZiyCfcWsOA== + dependencies: + "@babel/core" "^7.7.5" + "@babel/generator" "^7.12.11" + "@babel/runtime" "^7.7.6" + ast-types "^0.14.2" + commander "^2.19.0" + doctrine "^3.0.0" + estree-to-babel "^3.1.0" + neo-async "^2.6.1" + node-dir "^0.1.10" + strip-indent "^3.0.0" + +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" + scheduler "^0.23.0" -react-error-overlay@^6.0.9: +react-error-overlay@^6.0.11, react-error-overlay@^6.0.9: version "6.0.11" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== +react-group@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/react-group/-/react-group-3.0.2.tgz#cb31d0fae255111e1dace5b5f9abb9deefc7b36e" + integrity sha512-0Jy99MD27jHSJ0PeynomUM0WArxywdcqQUKLttBWV6KYH+zlKWT/RhDwVxrODtMkRxf644BzuJFie1Hvfun7jA== + dependencies: + prop-types "^15.7.2" + react-hook-form@^7.6.3: - version "7.39.4" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.39.4.tgz#7d9edf4e778a0cec4383f0119cd0699e3826a14a" - integrity sha512-B0e78r9kR9L2M4A4AXGbHoA/vyv34sB/n8QWJAw33TFz8f5t9helBbYAeqnbvcQf1EYzJxKX/bGQQh9K+evCyQ== + version "7.39.5" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.39.5.tgz#a4272b60288ef5e1bb42bbb6ba3b36d243ab2879" + integrity sha512-OE0HKyz5IPc6svN2wd+e+evidZrw4O4WZWAWYzQVZuHi+hYnHFSLnxOq0ddjbdmaLIsLHut/ab7j72y2QT3+KA== -react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: +react-icons@^3.8.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-3.11.0.tgz#2ca2903dfab8268ca18ebd8cc2e879921ec3b254" + integrity sha512-JRgiI/vdF6uyBgyZhVyYJUZAop95Sy4XDe/jmT3R/bKliFWpO/uZBwvSjWEdxwzec7SYbEPNPck0Kff2tUGM2Q== + dependencies: + camelcase "^5.0.0" + +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -"react-is@^16.8.0 || ^17.0.0", react-is@^17.0.1, react-is@^17.0.2: +react-is@^17.0.1: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-is@^18.0.0: +react-is@^18.0.0, react-is@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== @@ -9956,47 +10969,25 @@ react-lifecycles-compat@^3.0.4: resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== -react-motion@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/react-motion/-/react-motion-0.5.2.tgz#0dd3a69e411316567927917c6626551ba0607316" - integrity sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ== - dependencies: - performance-now "^0.2.0" - prop-types "^15.5.8" - raf "^3.1.0" - react-refresh@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== -react-router-dom@^5.2.0: - version "5.3.4" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" - integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== +react-router-dom@^6.4.3: + version "6.4.3" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.4.3.tgz#70093b5f65f85f1df9e5d4182eb7ff3a08299275" + integrity sha512-MiaYQU8CwVCaOfJdYvt84KQNjT78VF0TJrA17SIQgNHRvLnXDJO6qsFqq8F/zzB1BWZjCFIrQpu4QxcshitziQ== dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.3.4" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-router@5.3.4: - version "5.3.4" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" - integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" + "@remix-run/router" "1.0.3" + react-router "6.4.3" + +react-router@6.4.3: + version "6.4.3" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.4.3.tgz#9ed3ee4d6e95889e9b075a5d63e29acc7def0d49" + integrity sha512-BT6DoGn6aV1FVP5yfODMOiieakp3z46P1Fk0RNzJMACzE7C339sFuHebfvWtnB4pzBvXXkHP2vscJzWRuUjTtA== + dependencies: + "@remix-run/router" "1.0.3" react-scripts@4.0.3: version "4.0.3" @@ -10064,35 +11055,95 @@ react-scripts@4.0.3: optionalDependencies: fsevents "^2.1.3" -react-spring@9.1.2: - version "9.1.2" - resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-9.1.2.tgz#a2392f5468bfd960976747d59361236536e1f303" - integrity sha512-xLmkierisElCQShCqAH3PpepjHhCyOK1wGSTdpvG7GGD+SbfG4Sac7wj6wrKTT5A5NUFM5OnVQUXZLe5HScIfA== - dependencies: - "@react-spring/core" "~9.1.2" - "@react-spring/konva" "~9.1.2" - "@react-spring/native" "~9.1.2" - "@react-spring/three" "~9.1.2" - "@react-spring/web" "~9.1.2" - "@react-spring/zdog" "~9.1.2" +react-simple-code-editor@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/react-simple-code-editor/-/react-simple-code-editor-0.13.1.tgz#4514553fa132dcaffec33a6612c58f1613c52416" + integrity sha512-XYeVwRZwgyKtjNIYcAEgg2FaQcCZwhbarnkJIV20U2wkCU9q/CPFBo8nRXrK4GXUz3AvbqZFsZRrpUTkqqEYyQ== -react-syntax-highlighter@^11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-11.0.3.tgz#de639b97b781c3f7056d1ee7b6573ea8ab741460" - integrity sha512-0v0ET2qn9oAam4K/Te9Q/2jtS4R2d6wUFqgk5VcxrCBm+4MB5BE+oQf2CA0RanUHbYaYFuagt/AugICU87ufxQ== +react-styleguidist@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/react-styleguidist/-/react-styleguidist-13.0.0.tgz#e5057a11cb06e907c22fe5db43af95bb8dd954fc" + integrity sha512-F8e9aeB9kx5nMRdjAGble8m6GkgO0GPLVKT+EzoedxnnQfenKZB07agnn5klW2Uo4uyu1Ezl1iZbKFISxSbH3g== + dependencies: + "@tippyjs/react" "4.1.0" + "@vxna/mini-html-webpack-template" "^2.0.0" + acorn "^6.4.1" + acorn-jsx "^5.1.0" + assert "1.5.0" + ast-types "~0.14.2" + buble "0.20.0" + clean-webpack-plugin "^4.0.0" + clipboard-copy "^3.1.0" + clsx "^1.0.4" + common-dir "^3.0.0" + copy-webpack-plugin "^11.0.0" + core-js "^3.6.4" + doctrine "^3.0.0" + es6-object-assign "~1.1.0" + es6-promise "^4.2.8" + escodegen "^1.12.0" + estree-walker "~0.9.0" + fastest-levenshtein "^1.0.9" + findup "^0.1.5" + function.name-polyfill "^1.0.6" + github-slugger "^1.2.1" + glob "^7.1.5" + glogg "^1.0.2" + hash-sum "^2.0.0" + javascript-stringify "^2.0.0" + jss "^10.9.0" + jss-plugin-camel-case "^10.9.0" + jss-plugin-compose "^10.9.0" + jss-plugin-default-unit "^10.9.0" + jss-plugin-global "^10.9.0" + jss-plugin-isolate "^10.9.0" + jss-plugin-nested "^10.9.0" + kleur "^3.0.3" + listify "^1.0.0" + lodash "^4.17.15" + lowercase-keys "^2.0.0" + markdown-to-jsx "^6.11.4" + mini-html-webpack-plugin "^3.1.3" + mri "^1.1.4" + ora "^4.0.2" + prismjs "^1.17.1" + prop-types "^15.8.1" + q-i "^2.0.1" + qss "^2.0.3" + react-dev-utils "^12.0.0" + react-docgen "^5.0.0" + react-docgen-annotation-resolver "^2.0.0" + react-docgen-displayname-handler "^3.0.0" + react-group "^3.0.2" + react-icons "^3.8.0" + react-simple-code-editor "^0.13.1" + recast "~0.18.5" + remark "^13.0.0" + strip-html-comments "^1.0.0" + terser-webpack-plugin "^5.3.3" + to-ast "^1.0.0" + type-detect "^4.0.8" + unist-util-visit "^2.0.0" + webpack-dev-server "^4.9.2" + webpack-merge "^4.2.2" + +react-syntax-highlighter@^15.5.0: + version "15.5.0" + resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz#4b3eccc2325fa2ec8eff1e2d6c18fa4a9e07ab20" + integrity sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg== dependencies: "@babel/runtime" "^7.3.1" - highlight.js "~9.18.2" - lowlight "~1.11.0" - prismjs "^1.8.4" - refractor "^2.4.1" + highlight.js "^10.4.1" + lowlight "^1.17.0" + prismjs "^1.27.0" + refractor "^3.6.0" -react-token-auth@^1.1.8: - version "1.1.9" - resolved "https://registry.yarnpkg.com/react-token-auth/-/react-token-auth-1.1.9.tgz#1656ed80b1403a14f51488c432b2ed65bd2e906b" - integrity sha512-AtC87tdURl7+o3j3GYS9hYho9PEAG9KjctQ3FPkgiSftGl4qC3AK+jYYByKxphGbBJaV3eOt7rAbR3ApWVQXVg== +react-token-auth@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/react-token-auth/-/react-token-auth-2.3.8.tgz#8c86e1e36f05368ea22afc553c5f105826db9356" + integrity sha512-sRy4xpPY0NgTXL/kwQ0LqUZpHiurLG/4lSr9MAVPAuvN/hnjQqAcszl+c869ZO6Pegj2/OEP0MDmvMBJv1SkHQ== -react-transition-group@^4.4.0: +react-transition-group@^4.4.5: version "4.4.5" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== @@ -10102,13 +11153,12 @@ react-transition-group@^4.4.0: loose-envify "^1.4.0" prop-types "^15.6.2" -react@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" read-pkg-up@^7.0.1: version "7.0.1" @@ -10167,6 +11217,16 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +recast@~0.18.5: + version "0.18.10" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.18.10.tgz#605ebbe621511eb89b6356a7e224bff66ed91478" + integrity sha512-XNvYvkfdAN9QewbrxeTOjgINkdY/odTgTS56ZNEWL9Ml0weT4T3sFtvnTuF+Gxyu46ANcRm1ntrF6F5LAJPAaQ== + dependencies: + ast-types "0.13.3" + esprima "~4.0.0" + private "^0.1.8" + source-map "~0.6.1" + recursive-readdir@2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" @@ -10174,6 +11234,13 @@ recursive-readdir@2.2.2: dependencies: minimatch "3.0.4" +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" + redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -10182,14 +11249,14 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -refractor@^2.4.1: - version "2.10.1" - resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.10.1.tgz#166c32f114ed16fd96190ad21d5193d3afc7d34e" - integrity sha512-Xh9o7hQiQlDbxo5/XkOX6H+x/q8rmlmZKr97Ie1Q8ZM32IRRd3B/UxuA/yXDW79DBSXGWxm2yRTbcTVmAciJRw== +refractor@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-3.6.0.tgz#ac318f5a0715ead790fcfb0c71f4dd83d977935a" + integrity sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA== dependencies: - hastscript "^5.0.0" - parse-entities "^1.1.2" - prismjs "~1.17.0" + hastscript "^6.0.0" + parse-entities "^2.0.0" + prismjs "~1.27.0" regenerate-unicode-properties@^10.1.0: version "10.1.0" @@ -10198,7 +11265,14 @@ regenerate-unicode-properties@^10.1.0: dependencies: regenerate "^1.4.2" -regenerate@^1.4.2: +regenerate-unicode-properties@^8.0.2: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0, regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== @@ -10208,12 +11282,12 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.10, regenerator-runtime@^0.13.7: +regenerator-runtime@^0.13.10, regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.7: version "0.13.11" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regenerator-transform@^0.15.0: +regenerator-transform@^0.15.1: version "0.15.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== @@ -10247,7 +11321,19 @@ regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^5.1.0: +regexpu-core@4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" + integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.0.2" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + +regexpu-core@^5.2.1: version "5.2.2" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.2.tgz#3e4e5d12103b64748711c3aad69934d7718e75fc" integrity sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw== @@ -10259,11 +11345,23 @@ regexpu-core@^5.1.0: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" +regjsgen@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + regjsgen@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6" integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA== +regjsparser@^0.6.0: + version "0.6.9" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" + integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== + dependencies: + jsesc "~0.5.0" + regjsparser@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" @@ -10276,6 +11374,29 @@ relateurl@^0.2.7: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== +remark-parse@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640" + integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw== + dependencies: + mdast-util-from-markdown "^0.8.0" + +remark-stringify@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-9.0.1.tgz#576d06e910548b0a7191a71f27b33f1218862894" + integrity sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg== + dependencies: + mdast-util-to-markdown "^0.6.0" + +remark@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/remark/-/remark-13.0.0.tgz#d15d9bf71a402f40287ebe36067b66d54868e425" + integrity sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA== + dependencies: + remark-parse "^9.0.0" + remark-stringify "^9.0.0" + unified "^9.1.0" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -10297,7 +11418,7 @@ repeat-element@^1.1.2: resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== -repeat-string@^1.6.1: +repeat-string@^1.0.0, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== @@ -10322,16 +11443,11 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -reselect@^4.0.0: +reselect@^4.1.6: version "4.1.7" resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.7.tgz#56480d9ff3d3188970ee2b76527bd94a95567a42" integrity sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A== -resize-observer-polyfill@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -10361,22 +11477,17 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" - integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== - resolve-url-loader@^3.1.2: - version "3.1.4" - resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.4.tgz#3c16caebe0b9faea9c7cc252fa49d2353c412320" - integrity sha512-D3sQ04o0eeQEySLrcz4DsX3saHfsr8/N6tfhblxgZKXxMT2Louargg12oGNfoTRLV09GXhVUe5/qgA5vdgNigg== + version "3.1.5" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-3.1.5.tgz#1dce0847d4a2ef43c51f63c9fd30bf6dfbf26716" + integrity sha512-mgFMCmrV/tA4738EsFmPFE5/MaqSgUMe8LK971kVEKA/RrNVb7+VqFsg/qmKyythf34eyq476qIobP/gfFBGSQ== dependencies: adjust-sourcemap-loader "3.0.0" camelcase "5.3.1" compose-function "3.0.3" convert-source-map "1.7.0" es6-iterator "2.0.3" - loader-utils "1.2.3" + loader-utils "^1.2.3" postcss "7.0.36" rework "1.0.1" rework-visit "1.0.0" @@ -10413,6 +11524,14 @@ resolve@^2.0.0-next.3: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -10423,6 +11542,11 @@ retry@^0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -10601,13 +11725,21 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" + +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" schema-utils@^1.0.0: version "1.0.0" @@ -10636,16 +11768,21 @@ schema-utils@^3.0.0, schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== -select@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" - integrity sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA== - selfsigned@^1.10.8: version "1.10.14" resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.14.tgz#ee51d84d9dcecc61e07e4aba34f229ab525c1574" @@ -10653,6 +11790,13 @@ selfsigned@^1.10.8: dependencies: node-forge "^0.10.0" +selfsigned@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" + integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== + dependencies: + node-forge "^1" + "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -10708,6 +11852,13 @@ serialize-javascript@^5.0.1: dependencies: randombytes "^2.1.0" +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" @@ -10798,6 +11949,11 @@ shell-quote@1.7.2: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== +shell-quote@^1.7.3: + version "1.7.4" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8" + integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw== + shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -10812,7 +11968,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -10834,6 +11990,11 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -10884,7 +12045,7 @@ sockjs-client@^1.5.0: inherits "^2.0.4" url-parse "^1.5.10" -sockjs@^0.3.21: +sockjs@^0.3.21, sockjs@^0.3.24: version "0.3.24" resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== @@ -10900,7 +12061,7 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" -source-list-map@^2.0.0: +source-list-map@^2.0.0, source-list-map@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== @@ -10939,7 +12100,7 @@ source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, sourc resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== @@ -10959,6 +12120,11 @@ space-separated-tokens@^1.0.0: resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== +sparkles@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" + integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== + spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -11137,7 +12303,7 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.matchall@^4.0.7: +string.prototype.matchall@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== @@ -11151,7 +12317,7 @@ string.prototype.matchall@^4.0.7: regexp.prototype.flags "^1.4.3" side-channel "^1.0.4" -string.prototype.trimend@^1.0.5: +string.prototype.trimend@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== @@ -11160,7 +12326,7 @@ string.prototype.trimend@^1.0.5: define-properties "^1.1.4" es-abstract "^1.20.4" -string.prototype.trimstart@^1.0.5: +string.prototype.trimstart@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== @@ -11183,7 +12349,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-object@^3.3.0: +stringify-object@^3.2.0, stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== @@ -11248,6 +12414,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-html-comments@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-html-comments/-/strip-html-comments-1.0.0.tgz#0ae7dff0300a6075a4c293fb6111b4cb1d0cb7b7" + integrity sha512-SdeXvMv7YtmePsVLNwg9yvaU37UVos4hryT82Lyyrl3IYb+hAwPLs6SmxMPs5tB8VdA01KPKaiMBcR0oErR5BQ== + strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -11277,6 +12448,11 @@ stylehacks@^4.0.0: postcss "^7.0.0" postcss-selector-parser "^3.0.0" +stylis@4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" + integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -11364,13 +12540,13 @@ tapable@^1.0.0, tapable@^1.1.3: integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== tar@^6.0.2: - version "6.1.12" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.12.tgz#3b742fb05669b55671fb769ab67a7791ea1a62e6" - integrity sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw== + version "6.1.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" + integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^3.0.0" + minipass "^4.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" @@ -11427,6 +12603,17 @@ terser-webpack-plugin@^1.4.3: webpack-sources "^1.4.0" worker-farm "^1.7.0" +terser-webpack-plugin@^5.3.3: + version "5.3.6" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" + integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== + dependencies: + "@jridgewell/trace-mapping" "^0.3.14" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + terser "^5.14.1" + terser@^4.1.2, terser@^4.6.2, terser@^4.6.3: version "4.8.1" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.1.tgz#a00e5634562de2239fd404c649051bf6fc21144f" @@ -11436,7 +12623,7 @@ terser@^4.1.2, terser@^4.6.2, terser@^4.6.3: source-map "~0.6.1" source-map-support "~0.5.12" -terser@^5.3.4: +terser@^5.14.1: version "5.15.1" resolved "https://registry.yarnpkg.com/terser/-/terser-5.15.1.tgz#8561af6e0fd6d839669c73b92bdd5777d870ed6c" integrity sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw== @@ -11446,6 +12633,16 @@ terser@^5.3.4: commander "^2.20.0" source-map-support "~0.5.20" +terser@^5.3.4: + version "5.16.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880" + integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -11490,21 +12687,18 @@ timsort@^0.3.0: resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A== -tiny-emitter@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" - integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== - -tiny-invariant@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" - integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== - -tiny-warning@^1.0.0, tiny-warning@^1.0.2: +tiny-warning@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tippy.js@^6.2.0: + version "6.3.7" + resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-6.3.7.tgz#8ccfb651d642010ed9a32ff29b0e9e19c5b8c61c" + integrity sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ== + dependencies: + "@popperjs/core" "^2.9.0" + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -11515,6 +12709,14 @@ to-arraybuffer@^1.0.0: resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA== +to-ast@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-ast/-/to-ast-1.0.0.tgz#0c4a31c8c98edfde9aaf0192c794b4c8b11ee287" + integrity sha512-FZpqARevv2F9BQZAeOx4b8F1tp07qqITCevw5spzKMC7ewcsP4y42kQosjctkAoROtzMNGbmD5n9ZN+vWmSN/Q== + dependencies: + ast-types "^0.7.2" + esprima "^2.1.0" + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -11574,6 +12776,11 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + tryer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" @@ -11599,7 +12806,7 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3: +tslib@^2.0.1, tslib@^2.0.3: version "2.4.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== @@ -11630,7 +12837,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@4.0.8: +type-detect@4.0.8, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -11690,6 +12897,11 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== +typescript@^4.9.4: + version "4.9.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" + integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -11700,11 +12912,24 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + unicode-match-property-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" @@ -11713,16 +12938,38 @@ unicode-match-property-ecmascript@^2.0.0: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" +unicode-match-property-value-ecmascript@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + unicode-match-property-value-ecmascript@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== +unified@^9.1.0: + version "9.2.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -11764,6 +13011,35 @@ unique-string@^1.0.0: dependencies: crypto-random-string "^1.0.0" +unist-util-is@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + +unist-util-visit@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -11784,7 +13060,7 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unquote@~1.1.1: +unquote@^1.1.0, unquote@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== @@ -11923,6 +13199,15 @@ v8-to-istanbul@^7.0.0: convert-source-map "^1.6.0" source-map "^0.7.3" +v8-to-istanbul@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -11931,11 +13216,6 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" - integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== - vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -11946,6 +13226,24 @@ vendors@^1.0.0: resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + vm-browserify@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" @@ -11997,10 +13295,17 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -web-vitals@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-1.1.2.tgz#06535308168986096239aa84716e68b4c6ae6d1c" - integrity sha512-PFMKIY+bRSXlMxVAQ+m2aw9c/ioUYfDgrYot0YUa+/xa0sakubWhSDyxAKwzymvXVdF4CZI71g06W+mqhzu6ig== +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +web-vitals@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-3.1.0.tgz#a6f5156cb6c7fee562da46078540265ac2cd2d16" + integrity sha512-zCeQ+bOjWjJbXv5ZL0r8Py3XP2doCQMZXNKlBGfUjPAVZWokApdeF/kFlK1peuKlCt8sL9TFkKzyXE9/cmNJQA== webidl-conversions@^5.0.0: version "5.0.0" @@ -12023,6 +13328,17 @@ webpack-dev-middleware@^3.7.2: range-parser "^1.2.1" webpack-log "^2.0.0" +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + webpack-dev-server@3.11.1: version "3.11.1" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz#c74028bf5ba8885aaf230e48a20e8936ab8511f0" @@ -12062,6 +13378,41 @@ webpack-dev-server@3.11.1: ws "^6.2.1" yargs "^13.3.2" +webpack-dev-server@^4.9.2: + version "4.11.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz#ae07f0d71ca0438cf88446f09029b92ce81380b5" + integrity sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.4.2" + webpack-log@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" @@ -12080,6 +13431,13 @@ webpack-manifest-plugin@2.2.0: object.entries "^1.1.0" tapable "^1.0.0" +webpack-merge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + dependencies: + lodash "^4.17.15" + webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" @@ -12088,6 +13446,14 @@ webpack-sources@^1.1.0, webpack-sources@^1.3.0, webpack-sources@^1.4.0, webpack- source-list-map "^2.0.0" source-map "~0.6.1" +webpack-sources@^2.0.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" + integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== + dependencies: + source-list-map "^2.0.1" + source-map "^0.6.1" + webpack@4.44.2: version "4.44.2" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" @@ -12399,6 +13765,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -12426,6 +13801,11 @@ ws@^7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== +ws@^8.4.2: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -12446,6 +13826,11 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" @@ -12456,7 +13841,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0: +yaml@^1.10.0, yaml@^1.7.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== @@ -12477,6 +13862,11 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^20.2.2, yargs-parser@^20.2.9: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + yargs@^13.3.2: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" @@ -12510,7 +13900,25 @@ yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== diff --git a/harvester/Dockerfile b/harvester/Dockerfile new file mode 100644 index 00000000..9e6529cc --- /dev/null +++ b/harvester/Dockerfile @@ -0,0 +1,18 @@ +FROM python:3.10.4-slim@sha256:a2e8240faa44748fe18c5b37f83e14101a38dd3f4a1425d18e9e0e913f89b562 + +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 + +# Install postgresql-client for healthchecking +#RUN apt-get update && \ +# apt-get install -y \ +# postgresql-client \ +# build-essential libssl-dev libffi-dev python3-dev python-dev && \ +# apt-get autoremove && \ +# apt-get autoclean + +RUN mkdir -p /usr/harvester +WORKDIR /usr/harvester +COPY requirements.txt /requirements.txt +RUN pip install -r /requirements.txt +COPY . /usr/harvester diff --git a/harvester/harvester/__init__.py b/harvester/harvester/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/harvester/harvester/api.py b/harvester/harvester/api.py new file mode 100644 index 00000000..358ebd8b --- /dev/null +++ b/harvester/harvester/api.py @@ -0,0 +1,78 @@ +import os +import json +import requests +from .settings import get_setting, get_settings, get_settings_file, get_logger +import time + +logger = get_logger(__file__) + + +def report_harvest_result( + path: os.PathLike|str, + content=None, + file: os.PathLike|str = None, + error: BaseException = None +): + start = time.time() + try: + if error is not None: + data = {'status': 'error', 'error': ";".join(error.args)} + else: + data = {'status': 'success', 'content': content} + data['path'] = path + if file is not None: + data['file'] = file + logger.debug(f"{get_setting('url')}report/; {json.dumps(data)}") + out = requests.post( + f"{get_setting('url')}report/", + headers={ + 'Authorization': f"Harvester {get_setting('api_key')}" + }, + json=data + ) + except BaseException as e: + logger.error(e) + out = None + logger.info(f"API call finished in {time.time() - start}") + return out + + +def update_config(): + logger.info("Updating configuration from API") + try: + url = get_setting('url') + key = get_setting('api_key') + result = requests.get(f"{url}config/", headers={'Authorization': f"Harvester {key}"}) + if result.status_code == 200: + dirty = False + new = result.json() + old = get_settings() + if old is None: + old = {} + all_keys = [*new.keys(), *old.keys()] + for key in all_keys: + if key in old.keys() and key in new.keys(): + if json.dumps(old[key]) == json.dumps(new[key]): + continue + logger.info(f"Updating value for setting '{key}'") + logger.info(f"Old value: {json.dumps(old[key])}") + logger.info(f"New value: {json.dumps(new[key])}") + dirty = True + if key in old.keys(): + logger.info(f"Updating value for setting '{key}'") + logger.info(f"Old value: {json.dumps(old[key])}") + logger.info(f"New value: [not set]") + dirty = True + if key in new.keys(): + logger.info(f"Updating value for setting '{key}'") + logger.info(f"Old value: [not set]") + logger.info(f"New value: {json.dumps(new[key])}") + dirty = True + + if dirty: + with open(get_settings_file(), 'w+') as f: + json.dump(result.json(), f) + else: + logger.error(f"Unable to fetch {url}config/ -- received HTTP {result.status_code}") + except BaseException as e: + logger.error(e) diff --git a/harvester/harvester/harvest.py b/harvester/harvester/harvest.py new file mode 100644 index 00000000..8074dc86 --- /dev/null +++ b/harvester/harvester/harvest.py @@ -0,0 +1,243 @@ +# SPDX-License-Identifier: BSD-2-Clause +# Copyright (c) 2020, The Chancellor, Masters and Scholars of the University +# of Oxford, and the 'Galvanalyser' Developers. All rights reserved. +import datetime +import json +import os +import time + +import dateutil +import sys +from .parse.exceptions import UnsupportedFileTypeError + +from .parse.ivium_input_file import IviumInputFile +from .parse.biologic_input_file import BiologicMprInputFile +from .parse.maccor_input_file import ( + MaccorInputFile, + MaccorExcelInputFile, + MaccorRawInputFile, +) + +from .settings import get_logger, get_setting, get_standard_units, get_standard_columns +from .api import report_harvest_result + +logger = get_logger(__file__) + + +registered_input_files = [ + BiologicMprInputFile, + IviumInputFile, + MaccorInputFile, + MaccorExcelInputFile, + MaccorRawInputFile, +] + + +def serialize_datetime(v): + """ + Recursively search for date[time] classes and convert + dates to iso format strings and datetimes to timestamps + """ + if isinstance(v, datetime.datetime): + return v.timestamp() + if isinstance(v, datetime.date): + return v.isoformat() + if isinstance(v, dict): + return {k: serialize_datetime(x) for k, x in v.items()} + if isinstance(v, list): + return [serialize_datetime(x) for x in v] + return v + + +def import_file(core_path: str, file_path: str) -> bool: + """ + Attempts to import a given file + """ + default_column_ids = get_standard_columns() + default_units = get_standard_units() + max_upload_size = get_setting('max_upload_bytes') + full_file_path = os.sep.join([core_path, file_path]) + if not os.path.isfile(full_file_path): + logger.warn(f"{full_file_path} is not a file, skipping") + report_harvest_result(path=core_path, file=file_path, error=FileNotFoundError()) + return False + logger.info("Importing " + full_file_path) + + try: + # Attempt reading the file before updating the database to avoid + # creating rows for a file we can't read. + # TODO handle rows in the dataset and access tables with no + # corresponding data since the import might fail while reading the data + # anyway + input_file = None + for input_file_cls in registered_input_files: + try: + logger.debug('Tried input reader {}'.format(input_file_cls)) + input_file = input_file_cls( + file_path=full_file_path, + standard_units=default_units, + standard_columns=default_column_ids + ) + except Exception as e: + logger.debug('...failed with: ', type(e), e) + else: + logger.debug('...succeeded...') + break + if input_file is None: + raise UnsupportedFileTypeError + + # Send metadata + core_metadata, extra_metadata = input_file.load_metadata() + report = report_harvest_result( + path=core_path, + file=file_path, + content={ + 'task': 'import', + 'status': 'begin', + 'core_metadata': serialize_datetime(core_metadata), + 'extra_metadata': serialize_datetime(extra_metadata), + 'test_date': serialize_datetime(core_metadata['Date of Test']) + } + ) + if report is None: + logger.error(f"API Error") + return False + if not report.ok: + try: + logger.error(f"API responded with Error: {report.json()['error']}") + except BaseException: + logger.error(f"API Error: {report.status_code}") + return False + upload_info = report.json()['upload_info'] + last_uploaded_record = upload_info.get('last_record_number') + columns = upload_info.get('columns') + + # Figure out column data + column_data = {} + if len(columns): + mapping = {c.get('name'): c.get('id') for c in columns} + value_map = {c.get('name'): c.get('keymap') for c in columns if len(c.get('keymap'))} + else: + mapping = input_file.get_file_column_to_standard_column_mapping() + value_map = {} + next_key = 0 + # limit size of requests. 1kb/column is an arbitrary buffer size. + size = 0 + max_size = max_upload_size + nth_part = 0 + start_row = last_uploaded_record if last_uploaded_record is not None else 0 + # Find out if there's a Sample number column, otherwise we use the row number + record_number_column = [k for k, v in mapping.items() if v == default_column_ids['Sample Number']] + record_number_column = record_number_column[0] if len(record_number_column) else None + # TODO: is this actually determined correctly? Seems there are actually lots of data columns we miss?? + # Anyway, leaving this as instructed because everyone's happy with it as is. + columns_with_data = [c for c in input_file.column_info.keys() if input_file.column_info[c].get('has_data')] + generator = input_file.load_data(input_file.file_path, columns_with_data) + start = time.process_time() + new_row = {} + for i, r in enumerate(generator): + if int(r.get(record_number_column, i)) <= start_row: + continue + # Data are stored up in rows and shipped out when + # adding the current row would exceed the server data + # size limit. + # If sent, sent data are wiped from column_data. + # New row data are added to column_data below. + size += sys.getsizeof(json.dumps(new_row)) + if size > max_size: + if start_row == i: + logger.error(f"Row too large to upload {len(r.keys())} columns, size={sys.getsizeof(r)}") + return False + logger.info(f"Upload part {nth_part} (rows {start_row}-{i - 1}; {size}bytes)") + logger.info(f"Read took {time.process_time() - start}") + nth_part += 1 + start_row = i + report = report_harvest_result(path=core_path, file=file_path, content={ + 'task': 'import', + 'status': 'in_progress', + 'data': [v for v in column_data.values()], + 'test_date': serialize_datetime(core_metadata['Date of Test']) + }) + if report is None: + logger.error(f"API Error") + return False + if not report.ok: + try: + logger.error(f"API responded with Error: {report.json()['error']}") + except BaseException: + logger.error(f"API Error: {report.status_code}") + return False + for k in column_data.keys(): + column_data[k]['values'] = {} + start = time.process_time() + size = 0 + + if i > 0: + for k, v in new_row.items(): + column_data[k]['values'][record_number] = v + + record_number = int(r.get(record_number_column, i)) + new_row = {} + + for k, v in r.items(): + if k == record_number_column: + continue + if k in column_data: + # Numeric data are stored directly + try: + new_row[k] = int(v) + except ValueError: + try: + new_row[k] = float(v) + # Timestamps are stored using float conversion + except ValueError: + try: + new_row[k] = dateutil.parser.parse(v).timestamp() + # Strings are mapped to integer values using a value map which is also sent to the database + except ValueError: + if 'value_map' in column_data[k] and v in column_data[k]['value_map']: + new_row[k] = column_data[k]['value_map'][v] + else: + if 'value_map' in column_data[k]: + column_data[k]['value_map'][v] = next_key + else: + column_data[k]['value_map'] = {v: next_key} + new_row[k] = next_key + next_key += 1 + else: + column_data[k] = {} + if k in mapping: + column_data[k]['column_id'] = mapping[k] + else: + column_data[k]['column_name'] = k + if 'unit' in input_file.column_info[k]: + column_data[k]['unit_symbol'] = input_file.column_info[k].get('unit') + else: + column_data[k]['unit_id'] = default_units['Unitless'] + if k in value_map: + column_data[k]['value_map'] = value_map[k] + column_data[k]['values'] = {} + + # Send data + report = report_harvest_result(path=core_path, file=file_path, content={ + 'task': 'import', + 'status': 'in_progress', + 'data': [v for v in column_data.values()], + 'test_date': serialize_datetime(core_metadata['Date of Test']) + }) + if report is None: + logger.error(f"API Error") + return False + if not report.ok: + try: + logger.error(f"API responded with Error: {report.json()['error']}") + except BaseException: + logger.error(f"API Error: {report.status_code}") + return False + + logger.info("File successfully imported") + except Exception as e: + logger.error(e) + report_harvest_result(path=core_path, file=file_path, error=e) + return False + return True diff --git a/harvester/harvester/parse/__init__.py b/harvester/harvester/parse/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/galvanalyser/harvester/biologic_input_file.py b/harvester/harvester/parse/biologic_input_file.py similarity index 70% rename from backend/galvanalyser/harvester/biologic_input_file.py rename to harvester/harvester/parse/biologic_input_file.py index 29f46bae..57aebea7 100644 --- a/backend/galvanalyser/harvester/biologic_input_file.py +++ b/harvester/harvester/parse/biologic_input_file.py @@ -4,25 +4,9 @@ import os import ntpath -import copy from galvani import BioLogic -from galvani.BioLogic import VMPdata_colID_dtype_map, VMPdata_colID_flag_map -from galvanalyser.database.util.battery_exceptions import UnsupportedFileTypeError -from galvanalyser.database.experiment.input_file import InputFile -from galvanalyser.database.experiment.timeseries_data_row import ( - RECORD_NO_COLUMN_ID, - TEST_TIME_COLUMN_ID, - VOLTAGE_COLUMN_ID, - AMPS_COLUMN_ID, - ENERGY_CAPACITY_COLUMN_ID, - CHARGE_CAPACITY_COLUMN_ID, - TEMPERATURE_COLUMN_ID, - STEP_TIME_COLUMN_ID, - IMPEDENCE_MAG_COLUMN_ID, - IMPEDENCE_PHASE_COLUMN_ID, - FREQUENCY_COLUMN_ID, -) -from galvanalyser.database.experiment.unit import Unit +from .exceptions import UnsupportedFileTypeError +from .input_file import InputFile class BiologicMprInputFile(InputFile): @@ -30,28 +14,29 @@ class BiologicMprInputFile(InputFile): A class for handling input files """ - def __init__(self, file_path): + def __init__(self, file_path, **kwargs): if not file_path.endswith(".mpr"): raise UnsupportedFileTypeError self.mpr_file = BioLogic.MPRfile(file_path) - super().__init__(file_path) + super().__init__(file_path, **kwargs) + self.logger.info("Type is BioLogic") - def get_file_column_to_standard_column_mapping(self): + def get_file_column_to_standard_column_mapping(self) -> dict: """ Return a dict with a key of the column name in the file that maps to the standard column name in the value. Only return values where a mapping exists """ return { - "I/mA": AMPS_COLUMN_ID, - "Ewe/V": VOLTAGE_COLUMN_ID, - "time/s": TEST_TIME_COLUMN_ID, - "Energy/W.h": ENERGY_CAPACITY_COLUMN_ID, - "Q charge/discharge/mA.h": CHARGE_CAPACITY_COLUMN_ID, - "Aux": TEMPERATURE_COLUMN_ID, - "|Z|/Ohm": IMPEDENCE_MAG_COLUMN_ID, - "Phase(Z)/deg": IMPEDENCE_PHASE_COLUMN_ID, - "freq/Hz": FREQUENCY_COLUMN_ID, + "I/mA": self.standard_columns['Amps'], + "Ewe/V": self.standard_columns['Volts'], + "time/s": self.standard_columns['Time'], + "Energy/W.h": self.standard_columns['Energy Capacity'], + "Q charge/discharge/mA.h": self.standard_columns['Charge Capacity'], + "Aux": self.standard_columns['Temperature'], + "|Z|/Ohm": self.standard_columns['Impedence Magnitude'], + "Phase(Z)/deg": self.standard_columns['Impedence Phase'], + "freq/Hz": self.standard_columns['Frequency'], } def load_data(self, file_path, columns): @@ -110,7 +95,7 @@ def load_metadata(self): for name in self.mpr_file.data.dtype.names } for name, data in columns_with_data.items(): - for unit in Unit.get_all_units(): + for unit in self.standard_units: if name[-len(unit):] == unit: data['unit'] = unit @@ -118,5 +103,5 @@ def load_metadata(self): # if sample number not provided by file then we count from 0 metadata["first_sample_no"] = 0 metadata["last_sample_no"] = metadata["num_rows"] - 1 - print(metadata, columns_with_data) + self.logger.debug(metadata, columns_with_data) return metadata, columns_with_data diff --git a/backend/galvanalyser/database/util/battery_exceptions.py b/harvester/harvester/parse/exceptions.py similarity index 68% rename from backend/galvanalyser/database/util/battery_exceptions.py rename to harvester/harvester/parse/exceptions.py index 421f2d9e..b801c256 100644 --- a/backend/galvanalyser/database/util/battery_exceptions.py +++ b/harvester/harvester/parse/exceptions.py @@ -24,19 +24,3 @@ class EmptyFileError(Exception): """ pass - - -class DataGenerationError(Exception): - """ - Exception indicating the failure to generate some columns - """ - - pass - - -class InsertError(Exception): - """ - Exception indicating the failure to insert data - """ - - pass diff --git a/backend/galvanalyser/database/experiment/input_file.py b/harvester/harvester/parse/input_file.py similarity index 83% rename from backend/galvanalyser/database/experiment/input_file.py rename to harvester/harvester/parse/input_file.py index d3cdd102..5dba5fa6 100644 --- a/backend/galvanalyser/database/experiment/input_file.py +++ b/harvester/harvester/parse/input_file.py @@ -1,20 +1,6 @@ -from galvanalyser.database.util.battery_exceptions import UnsupportedFileTypeError -from itertools import accumulate +from .exceptions import UnsupportedFileTypeError import traceback -from galvanalyser.database.experiment.timeseries_data_row import ( - RECORD_NO_COLUMN_ID, - TEST_TIME_COLUMN_ID, - VOLTAGE_COLUMN_ID, - AMPS_COLUMN_ID, - ENERGY_CAPACITY_COLUMN_ID, - CHARGE_CAPACITY_COLUMN_ID, - TEMPERATURE_COLUMN_ID, - STEP_TIME_COLUMN_ID, - IMPEDENCE_MAG_COLUMN_ID, - IMPEDENCE_PHASE_COLUMN_ID, - FREQUENCY_COLUMN_ID, -) -from .unit import Unit +from ..settings import get_logger # see https://gist.github.com/jsheedy/ed81cdf18190183b3b7d # https://stackoverflow.com/a/30721460 @@ -24,9 +10,16 @@ class InputFile: """ A class for handling input files """ + unit_conversion_multipliers = { + 'mA': 1e-3, + 'mA.h': 1e-3 + } - def __init__(self, file_path): + def __init__(self, file_path, standard_columns: dict, standard_units: dict): self.file_path = file_path + self.standard_columns = standard_columns + self.standard_units = standard_units + self.logger = get_logger(f"InputFile({self.file_path})") self.metadata, self.column_info = self.load_metadata() def get_columns(self): @@ -42,7 +35,7 @@ def get_columns(self): "file_column_to_standard_column is {}: {}\n" "column_info is {}\n" ).format(col, std, self.column_info[col])) - if self.column_info[col]['unit'] not in Unit.get_all_units(): + if self.column_info[col]['unit'] not in self.standard_units: raise RuntimeError( "Unknown unit {} provided for standard column mapping" .format(self.column_info[col]['unit']) @@ -60,9 +53,8 @@ def get_test_start_date(self): return self.metadata["Date of Test"] def convert_unit(self, name, value): - if 'unit' in self.column_info[name]: - unit = self.column_info[name]['unit'] - value = Unit.convert(unit, value) + if 'unit' in self.column_info[name] and self.column_info[name]['unit'] in self.unit_conversion_multipliers: + return value * self.unit_conversion_multipliers[self.column_info[name]['unit']] return value def get_data_row_generator( @@ -79,7 +71,7 @@ def get_data_row_generator( for name, col_id in column_name_to_id.items() } - sample_col_id = type_id_to_col_id.get(RECORD_NO_COLUMN_ID, None) + sample_col_id = type_id_to_col_id.get(self.standard_columns['Sample Number'], None) # reconstruct previous row mapping col ids to values if last_values is not None: diff --git a/backend/galvanalyser/harvester/ivium_input_file.py b/harvester/harvester/parse/ivium_input_file.py similarity index 94% rename from backend/galvanalyser/harvester/ivium_input_file.py rename to harvester/harvester/parse/ivium_input_file.py index 4e681a2a..33331f5a 100644 --- a/backend/galvanalyser/harvester/ivium_input_file.py +++ b/harvester/harvester/parse/ivium_input_file.py @@ -3,12 +3,11 @@ # of Oxford, and the 'Galvanalyser' Developers. All rights reserved. import os -import csv import ntpath import re from datetime import datetime -from galvanalyser.database.experiment.input_file import InputFile -from galvanalyser.database.util.battery_exceptions import ( +from .input_file import InputFile +from .exceptions import ( UnsupportedFileTypeError, InvalidDataInFileError, ) @@ -21,19 +20,23 @@ class IviumInputFile(InputFile): A class for handling input files """ - def __init__(self, file_path): + def __init__(self, file_path, **kwargs): self.validate_file(file_path) - super().__init__(file_path) + super().__init__(file_path, **kwargs) + self.logger.info("Type is IVIUM") - def get_file_column_to_standard_column_mapping(self): - print("Type is IVIUM") + def get_file_column_to_standard_column_mapping(self) -> dict: """ Return a dict with a key of the column name in the file that maps to the standard column name in the value. Only return values where a mapping exists """ - print("get_ivium_column_to_standard_column_mapping") - return {"amps": 3, "volts": 2, "test_time": 1} + self.logger.debug("get_ivium_column_to_standard_column_mapping") + return { + "amps": self.standard_columns['Amps'], + "volts": self.standard_columns['Volts'], + "test_time": self.standard_columns['Time'] + } def load_data(self, file_path, columns): """ @@ -57,7 +60,7 @@ def load_data(self, file_path, columns): line = line.decode('ascii') if len(line) != 40: - print(line) + self.logger.debug(line) raise InvalidDataInFileError( ( "Incorrect line length on line {} was {} expected {}" @@ -283,7 +286,7 @@ def load_metadata(self): metadata["first_sample_no"] = 1 # if sample number not provided by file then we count from 0 metadata["last_sample_no"] = len(self._sample_rows) - 1 - print(metadata) + self.logger.debug(metadata) # put in all the ivium metadata metadata["misc_file_data"] = dict(self._file_metadata) return metadata, columns_with_data diff --git a/backend/galvanalyser/harvester/maccor_input_file.py b/harvester/harvester/parse/maccor_input_file.py similarity index 91% rename from backend/galvanalyser/harvester/maccor_input_file.py rename to harvester/harvester/parse/maccor_input_file.py index 68639df7..975bf5ae 100644 --- a/backend/galvanalyser/harvester/maccor_input_file.py +++ b/harvester/harvester/parse/maccor_input_file.py @@ -9,10 +9,11 @@ from datetime import datetime import xlrd import maya -from galvanalyser.database.experiment.input_file import InputFile -from galvanalyser.database.util.battery_exceptions import ( +from .input_file import InputFile +from .exceptions import ( UnsupportedFileTypeError, EmptyFileError, + InvalidDataInFileError ) @@ -21,9 +22,10 @@ class MaccorInputFile(InputFile): A class for handling input files """ - def __init__(self, file_path): + def __init__(self, file_path, **kwargs): self.validate_file(file_path) - super().__init__(file_path) + super().__init__(file_path, **kwargs) + self.logger.info("Type is MACCOR") def identify_columns(self, reader): """ @@ -42,7 +44,7 @@ def identify_columns(self, reader): first_data, correct_number_of_columns, recno_col, row_idx ) column_is_numeric = [isfloat(column) for column in first_data] - print(column_is_numeric) + self.logger.debug(column_is_numeric) numeric_columns = [] for i in range(0, len(column_is_numeric)): if column_is_numeric[i]: @@ -63,7 +65,7 @@ def identify_columns(self, reader): if data_detected: column_has_data[col] = True numeric_columns.remove(col) - print( + self.logger.debug( "Found data in col {} ( {} ) : {}{} on row {}".format( col, headers[col], @@ -111,8 +113,8 @@ def identify_columns(self, reader): else: first_rec = int(first_data[recno_col]) last_rec = int(row[recno_col]) - print(column_info) - print("Num rows {}".format(total_rows)) + self.logger.debug(column_info) + self.logger.debug("Num rows {}".format(total_rows)) return column_info, total_rows, first_rec, last_rec def load_metadata(self): @@ -138,45 +140,29 @@ def load_metadata(self): metadata["num_rows"] = total_rows metadata["first_sample_no"] = first_rec metadata["last_sample_no"] = last_rec - print(metadata) + self.logger.debug(metadata) return metadata, column_info - def get_file_column_to_standard_column_mapping(self): + def get_file_column_to_standard_column_mapping(self) -> dict: """ Return a dict with a key of the column name in the file that maps to the standard column name in the value. Only return values where a mapping exists """ - print("Type is MACCOR") - print("get_maccor_column_to_standard_column_mapping") - all_values = { - "Amp-hr": 5, - "Amps": 3, - "Cyc#": None, - "DPt Time": None, - "Watt-hr": 4, - "State": None, - "Step": None, - "StepTime": 7, - "Step (Sec)": 7, - "Volts": 2, - "Capacity": None, - "Energy": None, - "Power": None, - "TestTime": 1, - "Test (Sec)": 1, - "Rec#": 0, - "Temp 1": 6, + self.logger.debug("get_maccor_column_to_standard_column_mapping") + return { + "Amp-hr": self.standard_columns['Charge Capacity'], + "Amps": self.standard_columns['Amps'], + "Watt-hr": self.standard_columns['Energy Capacity'], + "StepTime": self.standard_columns['Step Time'], + "Step (Sec)": self.standard_columns['Step Time'], + "Volts": self.standard_columns['Volts'], + "TestTime": self.standard_columns['Time'], + "Test (Sec)": self.standard_columns['Time'], + "Rec#": self.standard_columns['Sample Number'], + "Temp 1": self.standard_columns['Temperature'] } - print("all_values: " + str(all_values)) - filtered_values = { - file_col: std_col - for file_col, std_col in all_values.items() - if std_col is not None - } - print("filtered_values: " + str(filtered_values)) - return (filtered_values) def load_data(self, file_path, columns): """ @@ -410,8 +396,8 @@ def identify_columns(self, wbook): numeric_columns.append(col) else: column_has_data[col] = True - print("headers: {}".format(headers)) - print("numeric_columns: {}".format(numeric_columns)) + self.logger.debug("headers: {}".format(headers)) + self.logger.debug("numeric_columns: {}".format(numeric_columns)) try: recno_col = headers.index("Rec#") first_rec = sheet.cell_value(headers_row+1, recno_col) @@ -420,7 +406,7 @@ def identify_columns(self, wbook): first_rec = 1 total_rows = 0 for sheet_id in range(0, wbook.nsheets): - print("Loading sheet... " + str(sheet_id)) + self.logger.debug("Loading sheet... " + str(sheet_id)) sheet = wbook.sheet_by_index(sheet_id) total_rows += sheet.nrows - 1 - int(self._has_metadata_row) for row in range(headers_row+1, sheet.nrows): @@ -428,7 +414,7 @@ def identify_columns(self, wbook): if float(sheet.cell_value(row, column)) != 0.0: column_has_data[column] = True numeric_columns.remove(column) - print( + self.logger.debug( "Found data in col {} ( {} ) : {}".format( column, headers[column], @@ -444,7 +430,7 @@ def identify_columns(self, wbook): except ValueError: # Don't have record numbers, make them up last_rec = total_rows - print("Unloading sheet " + str(sheet_id)) + self.logger.debug("Unloading sheet " + str(sheet_id)) wbook.unload_sheet(sheet_id) column_info = { @@ -454,8 +440,8 @@ def identify_columns(self, wbook): } for i in range(0, len(headers)) } - print(column_info) - print("Num rows {}".format(total_rows)) + self.logger.debug(column_info) + self.logger.debug("Num rows {}".format(total_rows)) return column_info, total_rows, first_rec, last_rec def load_data(self, file_path, @@ -469,7 +455,7 @@ def load_data(self, file_path, headers_row = 0 with xlrd.open_workbook( - file_path, on_demand=True, logfile=LogFilter() + file_path, on_demand=True, logfile=LogFilter(self.logger) ) as wbook: sheet = wbook.sheet_by_index(0) columns_of_interest = [] @@ -485,7 +471,7 @@ def load_data(self, file_path, column_name = column_renames[column_name] column_names.append(column_name) for sheet_id in range(0, wbook.nsheets): - print("Loading sheet..." + str(sheet_id)) + self.logger.debug("Loading sheet..." + str(sheet_id)) sheet = wbook.sheet_by_index(sheet_id) for row in range(headers_row+1, sheet.nrows): yield { @@ -496,7 +482,7 @@ def load_data(self, file_path, ) for col_idx in columns_of_interest } - print("Unloading sheet " + str(sheet_id)) + self.logger.debug("Unloading sheet " + str(sheet_id)) wbook.unload_sheet(sheet_id) def load_metadata(self): @@ -506,7 +492,7 @@ def load_metadata(self): metadata = {} metadata['Filename'] = self.file_path with xlrd.open_workbook( - self.file_path, on_demand=True, logfile=LogFilter() + self.file_path, on_demand=True, logfile=LogFilter(self.logger) ) as wbook: sheet = wbook.sheet_by_index(0) col = 0 @@ -525,7 +511,7 @@ def load_metadata(self): metadata[key] = xlrd.xldate.xldate_as_datetime( sheet.cell_value(0, col + 1), wbook.datemode ) - print( + self.logger.debug( "key " + key + " value: " @@ -560,7 +546,7 @@ def load_metadata(self): metadata["num_rows"] = total_rows metadata["first_sample_no"] = first_rec metadata["last_sample_no"] = last_rec - print(metadata) + self.logger.debug(metadata) return metadata, column_info def validate_file(self, file_path): @@ -612,16 +598,16 @@ def load_metadata(self): metadata["num_rows"] = total_rows metadata["first_sample_no"] = first_rec metadata["last_sample_no"] = last_rec - print(metadata) + self.logger.debug(metadata) return metadata, column_info def validate_file(self, file_path): - print('is_maccor_raw_file') + self.logger.debug('is_maccor_raw_file') with open(file_path, "r") as f: - print('got line') + self.logger.debug('got line') line = f.readline() - print('got line', line) + self.logger.debug('got line', line) line_start = "Today's Date" if not line.startswith(line_start): raise UnsupportedFileTypeError @@ -648,13 +634,16 @@ def validate_file(self, file_path): class LogFilter(object): + def __init__(self, logger): + self.logger = logger + def write(self, *args): if len(args) != 1 or not ( args[0] == "\n" or args[0] == "WARNING *** OLE2 inconsistency: SSCS size is 0 but SSAT size is non-zero" ): - print("".join(args)) + self.logger.debug("".join(args)) def writelines(self, *args): pass diff --git a/harvester/harvester/run.py b/harvester/harvester/run.py new file mode 100644 index 00000000..7b53fd58 --- /dev/null +++ b/harvester/harvester/run.py @@ -0,0 +1,96 @@ +import os.path +import time +from .settings import get_logger, get_setting +from .api import report_harvest_result, update_config +from .harvest import import_file + +logger = get_logger(__file__) + + +def split_path(core_path: os.PathLike|str, path: os.PathLike|str) -> (os.PathLike, os.PathLike): + """ + Split a path into the base path property and the rest + """ + path = os.path.abspath(path) + core_path_abs = os.path.abspath(core_path) + return core_path, os.path.relpath(path, core_path_abs) + + +def harvest(): + logger.info("Beginning harvest cycle") + paths = get_setting('monitored_paths') + if not paths: + logger.info("No paths are being monitored.") + return + + logger.debug(paths) + + for path in paths: + harvest_path(path.get('path')) + + +def harvest_path(path: os.PathLike): + logger.info(f"Harvesting from {path}") + try: + for (dir_path, dir_names, filenames) in os.walk(path): + for filename in filenames: + full_path = os.path.join(dir_path, filename) + core_path, file_path = split_path(path, full_path) + try: + logger.info(f"Reporting stats for {file_path}") + result = report_harvest_result( + path=core_path, + file=file_path, + content={ + 'task': 'file_size', + 'size': os.stat(full_path).st_size + } + ) + if result is not None: + result = result.json() + status = result['state'] + logger.info(f"Server assigned status '{status}'") + if status in ['STABLE', 'RETRY IMPORT']: + logger.info(f"Parsing file {file_path}") + if import_file(core_path, file_path): + report_harvest_result( + path=core_path, + file=file_path, + content={'task': 'import', 'status': 'complete'} + ) + logger.info(f"Successfully parsed file {file_path}") + else: + logger.warn(f"FAILED parsing file {file_path}") + report_harvest_result( + path=path, + file=file_path, + content={'task': 'import', 'status': 'failed'} + ) + except BaseException as e: + logger.error(e) + report_harvest_result(path=path, file=file_path, error=e) + logger.info(f"Completed directory walking of {path}") + except BaseException as e: + logger.error(e) + report_harvest_result(path=path, error=e) + + +def run(): + update_config() + harvest() + + +def run_cycle(): + while True: + try: + run() + sleep_time = get_setting('sleep_time') + if sleep_time is None: + sleep_time = 10 + time.sleep(sleep_time) + except BaseException as e: + logger.error(e) + + +if __name__ == "__main__": + run_cycle() diff --git a/harvester/harvester/settings.py b/harvester/harvester/settings.py new file mode 100644 index 00000000..116d4be8 --- /dev/null +++ b/harvester/harvester/settings.py @@ -0,0 +1,65 @@ +import json +import os +import pathlib +import logging +import logging.handlers + +logging.basicConfig( + format='%(asctime)s %(levelname)s %(message)s [%(name)s]', + level=logging.INFO, + datefmt='%Y-%m-%d %H:%M:%S' +) + + +def get_settings_file() -> pathlib.Path: + return pathlib.Path(os.getenv('SETTINGS_FILE', "/harvester_files/.harvester.json")) + + +def get_logfile() -> pathlib.Path: + return pathlib.Path(os.getenv('LOG_FILE', "/harvester_files/harvester.log")) + + +def get_settings(): + try: + with open(get_settings_file(), 'r') as f: + try: + return json.load(f) + except json.JSONDecodeError as e: + print(f"Error decoding json file {f.name}", e) + f.seek(0) + print(f.readlines()) + except FileNotFoundError: + print(f'No config file at {get_settings_file()}') + return None + + +def get_setting(*args): + settings = get_settings() + if not settings: + if len(args) == 1: + return None + return [None for _ in args] + if len(args) == 1: + return settings.get(args[0]) + return [settings.get(arg) for arg in args] + + +def get_standard_units(): + return {u['name']: u['id'] for u in get_setting('standard_units')} + + +def get_standard_columns(): + return {u['name']: u['id'] for u in get_setting('standard_columns')} + + +def get_logger(name): + logger = logging.getLogger(name) + # stream_handler = logging.StreamHandler(sys.stdout) + # stream_handler.setLevel(logging.INFO) + # logger.addHandler(stream_handler) + formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s [%(name)s]', datefmt='%Y-%m-%d %H:%M:%S') + file_handler = logging.handlers.RotatingFileHandler(get_logfile(), maxBytes=5_000_000, backupCount=5) + file_handler.setLevel(logging.INFO) + file_handler.setFormatter(formatter) + logger.addHandler(file_handler) + return logger diff --git a/harvester/requirements.txt b/harvester/requirements.txt new file mode 100644 index 00000000..36e665dd --- /dev/null +++ b/harvester/requirements.txt @@ -0,0 +1,8 @@ +click==8.1.3 +requests==2.28.1 + +# Filetype readers +galvani==0.2.1 +maya==0.6.1 +xlrd==2.0.1 +psutil==5.9.4 \ No newline at end of file diff --git a/harvester/start.py b/harvester/start.py new file mode 100644 index 00000000..51424532 --- /dev/null +++ b/harvester/start.py @@ -0,0 +1,193 @@ +import click +import re +import json +import requests +import subprocess +import harvester.run +import harvester.settings + + +def query(url: str, data: object = None) -> object|list: + if data is None: + result = requests.get(url) + click.echo(f"GET {url} {result.status_code}") + else: + result = requests.post(url, data=data) + click.echo(f"POST {url}; {json.dumps(data)} {result.status_code}") + if result.status_code != 200: + try: + raise ConnectionError(result.json()['error']) + except (json.JSONDecodeError, AttributeError, KeyError): + raise ConnectionError(f"Unable to connect to {url}") + return result.json() + + +def get_name() -> str: + return input("Enter a name for your harvester: ") + + +def append_slash(url: str) -> str: + if url[-1] != "/": + url = f"{url}/" + return url + + +def get_url() -> str: + click.echo("Enter the URL for the Galvanalyser server you wish to connect to.") + url = input("API URL: ") + return append_slash(url) + + +def register(url: str = None, name: str = None, user_id: int = None, run_foreground: bool = False): + """ + Guide a user through the setup process. + + If url, name, and user_id are set, those stages are skipped. + Specifying both makes the function avoid all calls to input() making it non-interactive. + """ + # Check we can connect to the API + if url is not None: + url = append_slash(url) + url_specified = True + else: + url_specified = False + while True: + if not url_specified: + url = get_url() + try: + query(f"{url}") + break + except BaseException as e: + click.echo(f"Unable to connect to {url} -- {e}", err=True) + if url_specified: + exit(1) + + # Check name okay + if name is None: + name = get_name() + name_specified = False + else: + name_specified = True + while True: + result = query(f"{url}harvesters/?name={name}") + + if len(result) > 0: + click.echo(f"There is already a harvester called {name}.", err=True) + if name_specified: + exit(1) + click.echo("Please try something else.") + name = get_name() + else: + break + + # Select a user to administrate + if user_id is None: + user_url = "" + user_name = "" + result = query(f"{url}users/") + page = 0 + page_size = 10 + click.echo("All harvesters require an administrator to complete setup. Fetching users from database...") + while user_url == "": + users = result[page:page + page_size] + has_prev = page != 0 + has_next = len(result) > ((page + 1) * page_size) + click.echo("Press a number for the username you would like to assign as harvester admin.") + for i, r in enumerate(users): + s = f"{i}: {r['username']}" + click.echo(s) + if has_prev or has_next: + p = "[p]revious" if has_prev else "" + n = "[n]ext" if has_next else "" + s = f"Or go to the {'/'.join([p, n])} page of results" + click.echo(s) + + user_id = click.getchar() + if user_id == "p": + if not has_prev: + click.echo("No previous page available to navigate to!") + continue + page -= 1 + continue + if user_id == "n": + if not has_next: + click.echo("No next page available to navigate to!") + continue + page += 1 + continue + + try: + user_id = int(user_id) + assert user_id <= page_size - 1 + except ValueError: + click.echo(f"Unrecognised option {user_id}") + except AssertionError: + click.echo(f"{user_id} is not an available option") + + user_name = users[user_id]['username'] + user_url = users[user_id]['url'] + else: + user_url = f"{url}users/{user_id}/" + try: + result = query(user_url) + except BaseException: + exit(1) + user_name = result['username'] + + # Register + uid = re.search('/(\\d+)/$', user_url).groups()[0] + click.echo(f"Registering new harvester {name}, administrated by {user_name}") + result = query(f"{url}harvesters/", {'user': uid, 'name': name}) + + # Save credentials + file_name = harvester.settings.get_settings_file() + with open(file_name, 'w+') as f: + json.dump(result, f) + click.echo("Details:") + click.echo(json.dumps(result)) + click.echo(f"Saved to {f.name}") + + click.echo("Success.") + click.echo("") + click.echo(( + f"You can now configure this harvester's watched paths and other details by visiting the API at " + f"{url}" + )) + click.echo("") + click.echo("The harvester will check for updates frequently until you change its polling rate when you update it.") + click.echo("Launching harvester...") + if run_foreground: + harvester.run.run_cycle() + else: + subprocess.Popen(["python", "-m", "harvester.run"]) + click.echo(f"Complete. Harvester is running and logging to {harvester.settings.get_logfile()}") + + +@click.command() +@click.option('--url', type=str, help="API URL to register harvester with.") +@click.option('--name', type=str, help="Name for the harvester.") +@click.option('--user_id', type=int, help="ID of an API user to assign as harvester admin.") +@click.option( + '--run_foreground', + is_flag=True, + help=( + "On completion, run the harvester in the foreground " + "(will not close the thread, useful for Dockerized application)." + ) +) +@click.option( + '--restart', + is_flag=True, + help="Ignore other options and run harvester if config file already exists." +) +def click_wrapper(url: str, name: str, user_id: int, run_foreground: bool, restart: bool): + if restart and harvester.settings.get_setting('url'): + harvester.run.run_cycle() + else: + register(url=url, name=name, user_id=user_id, run_foreground=run_foreground) + + +if __name__ == "__main__": + # Check whether a config file already exists, if so, use it + click.echo("Welcome to Harvester setup.") + click_wrapper() diff --git a/harvester/test/__init__.py b/harvester/test/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/harvester/test/test_harvester.py b/harvester/test/test_harvester.py new file mode 100644 index 00000000..de1f84f9 --- /dev/null +++ b/harvester/test/test_harvester.py @@ -0,0 +1,248 @@ +import unittest +from unittest.mock import patch +import os +from pathlib import Path + +from harvester.harvester.parse.input_file import InputFile +import harvester.harvester.run +import harvester.harvester.harvest + + +class ConfigResponse: + status_code = 200 + + def json(self): + return { + "url": "http://app:5000/harvesters/1/", + "id": 1, + "api_key": "galv_hrv_x", + "name": "Test Harvester", + "sleep_time": 0, + "monitored_paths": [ + { + "path": "/usr/test_data", + "stable_time": 0 + } + ], + "standard_units": [ + { + "id": 1, + "name": "Unitless" + }, + { + "id": 2, + "name": "Time" + }, + { + "id": 3, + "name": "Volts" + }, + { + "id": 4, + "name": "Amps" + }, + { + "id": 5, + "name": "Energy" + }, + { + "id": 6, + "name": "Charge" + }, + { + "id": 7, + "name": "Temperature" + }, + { + "id": 8, + "name": "Power" + }, + { + "id": 9, + "name": "Ohm" + }, + { + "id": 10, + "name": "Degrees" + }, + { + "id": 11, + "name": "Frequency" + } + ], + "standard_columns": [ + { + "id": 1, + "name": "Unknown", + "unit": None + }, + { + "id": 2, + "name": "Sample Number", + "unit": "http://app:5000/units/1/" + }, + { + "id": 3, + "name": "Time", + "unit": "http://app:5000/units/2/" + }, + { + "id": 4, + "name": "Volts", + "unit": "http://app:5000/units/3/" + }, + { + "id": 5, + "name": "Amps", + "unit": "http://app:5000/units/4/" + }, + { + "id": 6, + "name": "Energy Capacity", + "unit": "http://app:5000/units/5/" + }, + { + "id": 7, + "name": "Charge Capacity", + "unit": "http://app:5000/units/6/" + }, + { + "id": 8, + "name": "Temperature", + "unit": "http://app:5000/units/7/" + }, + { + "id": 9, + "name": "Step Time", + "unit": "http://app:5000/units/8/" + }, + { + "id": 10, + "name": "Impedence Magnitude", + "unit": "http://app:5000/units/9/" + }, + { + "id": 11, + "name": "Impedence Phase", + "unit": "http://app:5000/units/10/" + }, + { + "id": 12, + "name": "Frequency", + "unit": "http://app:5000/units/11/" + } + ], + "max_upload_bytes": 2621440 + } + + +class JSONResponse: + def __init__(self, status_code=200, json_data=None): + self.status_code = status_code + self.ok = 200 <= self.status_code < 400 + self.json_data = json_data if json_data else {} + + def json(self): + return self.json_data + + +def fail(e, *kwargs): + raise Exception(e) + + +class TestHarvester(unittest.TestCase): + @patch('requests.get') + @patch('harvester.harvester.api.logger') + @patch('harvester.harvester.run.logger') + @patch('harvester.harvester.api.get_settings_file') + @patch('harvester.harvester.settings.get_settings_file') + @patch('harvester.harvester.settings.get_logfile') + def test_config_update( + self, + mock_settings_log, + mock_settings_file, + mock_api_settings_file, + mock_run_logger, + mock_api_logger, + mock_get + ): + mock_settings_log.return_value = '/tmp/harvester.log' + mock_settings_file.return_value = '/tmp/harvester.json' + mock_api_settings_file.return_value = '/tmp/harvester.json' + mock_api_logger.error = fail + mock_run_logger.error = fail + mock_get.return_value = ConfigResponse() + harvester.harvester.run.update_config() + if not os.path.isfile(mock_settings_file()): + raise AssertionError(f"Expected JSON file '{mock_settings_file()}' not found") + + @patch('harvester.harvester.run.report_harvest_result') + @patch('harvester.harvester.run.import_file') + @patch('harvester.harvester.run.logger') + def test_harvest_path(self, mock_logger, mock_import, mock_report): + mock_logger.error = fail + mock_report.return_value = JSONResponse(200, {'state': 'STABLE'}) + mock_import.return_value = True + harvester.harvester.run.harvest_path(Path('/usr/test_data')) + files = [] + for c in mock_import.call_args_list: + if c.args[1] not in files: + files.append(c.args[1]) + if len(files) != 5: + raise AssertionError(f"Did not find 5 files in path /usr/test_data") + for f in files: + for task in ['file_size', 'import']: + ok = False + for c in mock_report.call_args_list: + if c.kwargs['content']['task'] == task: + if not task == 'import' or c.kwargs['content']['status'] == 'complete': + ok = True + break + if not ok: + raise AssertionError(f"{f} did not make call with 'task'={task}") + + @patch('harvester.harvester.harvest.report_harvest_result') + @patch('harvester.harvester.harvest.logger') + @patch('harvester.harvester.settings.get_settings') + def import_file(self, filename, mock_settings, mock_logger, mock_report): + mock_settings.return_value = ConfigResponse().json() + mock_logger.error = fail + mock_report.return_value = JSONResponse( + 200, {'upload_info': {'last_record_number': 0, 'columns': []}} + ) + if not harvester.harvester.harvest.import_file('/usr/test_data', filename): + raise AssertionError(f"Import failed for /usr/test_data/{filename}") + self.validate_report_calls(mock_report.call_args_list) + + def validate_report_calls(self, calls): + begun = False + for c in calls: + if not 'content' in c.kwargs: + raise AssertionError(f"Report made with no content") + if not begun: + if c.kwargs['content']['status'] != 'begin': + raise AssertionError(f"Expected result reports to start with status='begin'") + if 'core_metadata' not in c.kwargs['content']: + raise AssertionError(f"Expected result report to contain core_metadata") + begun = True + continue + if c.kwargs['content']['status'] != 'in_progress': + raise AssertionError(f"Expected result report status to be 'in_progress'") + if not c.kwargs['content']['data']: + raise AssertionError(f"Expected result report to contain 'data'") + row = c.kwargs['content']['data'][0] + if not 'values' in row: + raise AssertionError(f"'data' contains no 'values' field") + + def test_import_mpr(self): + self.import_file('adam_3_C05.mpr') + + def test_import_idf(self): + self.import_file('Ivium_Cell+1.idf') + + # def test_import_txt(self): + # self.import_file('TPG1+-+Cell+15+-+002.txt') + + +if __name__ == '__main__': + unittest.main() diff --git a/restructure.png b/restructure.png new file mode 100644 index 0000000000000000000000000000000000000000..e94b6276da3c3636bea8714f6fc5e115fa92e475 GIT binary patch literal 250128 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 Date: Mon, 27 Feb 2023 11:19:14 +0000 Subject: [PATCH 2/7] Bugfixes (#50) - closes #48 - fixed incorrect API call endpoint - closes #47 - added volume override for `/app/node_modules/` - closes #49 - use `.env.secret` in tests; create `.env.secret` in GitHub tests from envvars --- .github/workflows/unit-test.yml | 10 ++++++++-- docker-compose.test.yml | 10 ++++------ docker-compose.yml | 1 + frontend/src/APIConnection.ts | 2 +- frontend/src/Login.tsx | 9 +++++++++ 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 6686465b..003701be 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -38,7 +38,7 @@ jobs: sudo smbget -R $LIIONSDEN_SMB_PATH/test-suite-small -U "$LIIONSDEN_SMB_USERNAME%$LIIONSDEN_SMB_PASSWORD" - name: Build the stack - run: docker-compose -f docker-compose.test.yml build harvester + run: touch .env.secret && docker-compose -f docker-compose.test.yml build harvester # Enable tmate debugging of manually-triggered workflows if the input option was provided - name: Setup tmate session @@ -57,8 +57,14 @@ jobs: steps: - uses: actions/checkout@v2 + - name: Set up secrets + run: | + echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" > .env.secret + echo "DJANGO_SECRET_KEY=$DJANGO_SECRET_KEY" >> .env.secret + echo "DJANGO_TEST=$DJANGO_TEST" >> .env.secret + - name: Build the stack - run: touch .env.secret && docker-compose -f docker-compose.test.yml up -d --build app_test + run: docker-compose -f docker-compose.test.yml up -d --build app_test # Enable tmate debugging of manually-triggered workflows if the input option was provided - name: Setup tmate session diff --git a/docker-compose.test.yml b/docker-compose.test.yml index 282b6b9d..a8fe454f 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -9,8 +9,8 @@ services: command: -p 5433 volumes: - "${GALVANALYSER_DATA_PATH}:/var/lib/postgresql/data" - environment: - POSTGRES_PASSWORD: "galvanalyser" + env_file: + - .env.secret restart: unless-stopped app_test: @@ -27,10 +27,8 @@ services: working_dir: /usr/app/backend_django command: ../server.sh # command: tail -F anything - environment: - POSTGRES_PASSWORD: "galvanalyser" - DJANGO_SECRET_KEY: "long-and-insecure-key-12345" - DJANGO_TEST: "TRUE" + env_file: + - .env.secret harvester: build: diff --git a/docker-compose.yml b/docker-compose.yml index 5cfde037..80525fbc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -29,6 +29,7 @@ services: - "80:80" volumes: - ./frontend:/app + - /app/node_modules/ working_dir: /app env_file: - ./.env diff --git a/frontend/src/APIConnection.ts b/frontend/src/APIConnection.ts index 1891aac6..98fff870 100644 --- a/frontend/src/APIConnection.ts +++ b/frontend/src/APIConnection.ts @@ -111,7 +111,7 @@ export class APIConnection { create_user(username: string, email: string, password: string): Promise { return fetch( - this.url + 'users/', + this.url + 'inactive_users/', { method: 'POST', headers: {accept: 'application/json', 'content-type': 'application/json'}, diff --git a/frontend/src/Login.tsx b/frontend/src/Login.tsx index 3ffb9061..85e0d8e7 100644 --- a/frontend/src/Login.tsx +++ b/frontend/src/Login.tsx @@ -121,6 +121,15 @@ export default function Login() { To activate a user, log in to Galvanalyser as an active user and select the appropriate inactive user from the 'users' tab on the left. +
const formContent = From 06bca9249f4123f0b6b2e102c530954bfbc8c36f Mon Sep 17 00:00:00 2001 From: martinjrobins Date: Mon, 27 Feb 2023 19:04:31 +0000 Subject: [PATCH 3/7] harvester logs give line number --- harvester/harvester/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/harvester/harvester/settings.py b/harvester/harvester/settings.py index 116d4be8..4e4a93d2 100644 --- a/harvester/harvester/settings.py +++ b/harvester/harvester/settings.py @@ -5,7 +5,7 @@ import logging.handlers logging.basicConfig( - format='%(asctime)s %(levelname)s %(message)s [%(name)s]', + format='%(asctime)s %(levelname)s %(message)s [%(name)s:%(lineno)d]', level=logging.INFO, datefmt='%Y-%m-%d %H:%M:%S' ) From 4e7a175a6552bfcd64be6e2cc4a31ba3888fd53c Mon Sep 17 00:00:00 2001 From: martinjrobins Date: Mon, 27 Feb 2023 19:04:55 +0000 Subject: [PATCH 4/7] allow for "all in one environment" dev setup --- .gitignore | 3 ++- backend/backend_django/config/settings.py | 4 ++-- backend/server.sh | 2 +- harvester/test/test_harvester.py | 12 +++++++----- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 4b54d615..e1c501cd 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,8 @@ env frontend/src/demo_matlab_code.m -**/.env.secret +**/.env.* +dev.sh backend/backend_django/django_celery_beat.schedulersDatabaseScheduler .harvester/ diff --git a/backend/backend_django/config/settings.py b/backend/backend_django/config/settings.py index 4f6fbf99..97cff24a 100644 --- a/backend/backend_django/config/settings.py +++ b/backend/backend_django/config/settings.py @@ -93,8 +93,8 @@ 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'postgres', - 'HOST': 'postgres', - 'PORT': 5433, + 'HOST': os.environ.get('POSTGRES_HOST', 'postgres'), + 'PORT': os.environ.get('POSTGRES_PORT', 5433), 'USER': 'postgres', 'PASSWORD': os.environ.get('POSTGRES_PASSWORD'), 'TEST': {'NAME': f"test_galvanalyser"} diff --git a/backend/server.sh b/backend/server.sh index 79999a25..20790ffc 100755 --- a/backend/server.sh +++ b/backend/server.sh @@ -7,7 +7,7 @@ set -e PGUP=1 while [ $PGUP -ne 0 ]; do - pg_isready -d "postgresql://postgres:galvanalyser@postgres:5433/postgres" + pg_isready -d "postgresql://postgres:galvanalyser@${POSTGRES_HOST:-postgres}:${POSTGRES_PORT:-5433}/postgres" PGUP=$? >&2 echo "Postgres is unavailable - sleeping" sleep 1 diff --git a/harvester/test/test_harvester.py b/harvester/test/test_harvester.py index de1f84f9..abdd1d82 100644 --- a/harvester/test/test_harvester.py +++ b/harvester/test/test_harvester.py @@ -7,6 +7,8 @@ import harvester.harvester.run import harvester.harvester.harvest +def get_test_file_path(): + return os.getenv('TEST_DIR', "/usr/test_data") class ConfigResponse: status_code = 200 @@ -20,7 +22,7 @@ def json(self): "sleep_time": 0, "monitored_paths": [ { - "path": "/usr/test_data", + "path": get_test_file_path(), "stable_time": 0 } ], @@ -183,13 +185,13 @@ def test_harvest_path(self, mock_logger, mock_import, mock_report): mock_logger.error = fail mock_report.return_value = JSONResponse(200, {'state': 'STABLE'}) mock_import.return_value = True - harvester.harvester.run.harvest_path(Path('/usr/test_data')) + harvester.harvester.run.harvest_path(Path(get_test_file_path())) files = [] for c in mock_import.call_args_list: if c.args[1] not in files: files.append(c.args[1]) if len(files) != 5: - raise AssertionError(f"Did not find 5 files in path /usr/test_data") + raise AssertionError(f"Did not find 5 files in path {get_test_file_path()}") for f in files: for task in ['file_size', 'import']: ok = False @@ -210,8 +212,8 @@ def import_file(self, filename, mock_settings, mock_logger, mock_report): mock_report.return_value = JSONResponse( 200, {'upload_info': {'last_record_number': 0, 'columns': []}} ) - if not harvester.harvester.harvest.import_file('/usr/test_data', filename): - raise AssertionError(f"Import failed for /usr/test_data/{filename}") + if not harvester.harvester.harvest.import_file(get_test_file_path(), filename): + raise AssertionError(f"Import failed for {get_test_file_path()}/{filename}") self.validate_report_calls(mock_report.call_args_list) def validate_report_calls(self, calls): From 363da59a09ca85f98c87bc13a8e16e9dc2918b9c Mon Sep 17 00:00:00 2001 From: Matt Jaquiery Date: Tue, 28 Feb 2023 10:55:58 +0000 Subject: [PATCH 5/7] User management (#52) - User API token management - Tests for token endpoints - User profile management --- backend/backend_django/config/settings.py | 3 +- backend/backend_django/config/urls.py | 2 + .../galvanalyser/migrations/0001_initial.py | 12 +- backend/backend_django/galvanalyser/models.py | 12 +- .../galvanalyser/serializers.py | 46 ++++- .../galvanalyser/tests/test_api_tokens.py | 61 +++++++ backend/backend_django/galvanalyser/views.py | 114 +++++++++++- backend/db.sqlite3 | Bin 131072 -> 0 bytes frontend/src/APIConnection.ts | 66 +++++-- frontend/src/Core.tsx | 70 +++----- frontend/src/DatasetChart.tsx | 2 + frontend/src/Login.tsx | 31 ++-- frontend/src/Tokens.tsx | 164 ++++++++++++++++++ frontend/src/UserProfile.tsx | 101 +++++++++++ 14 files changed, 592 insertions(+), 92 deletions(-) create mode 100644 backend/backend_django/galvanalyser/tests/test_api_tokens.py delete mode 100644 backend/db.sqlite3 create mode 100644 frontend/src/Tokens.tsx create mode 100644 frontend/src/UserProfile.tsx diff --git a/backend/backend_django/config/settings.py b/backend/backend_django/config/settings.py index 97cff24a..5703645e 100644 --- a/backend/backend_django/config/settings.py +++ b/backend/backend_django/config/settings.py @@ -160,7 +160,8 @@ 'SECURE_HASH_ALGORITHM': 'cryptography.hazmat.primitives.hashes.SHA512', 'USER_SERIALIZER': 'galvanalyser.serializers.UserSerializer', 'AUTO_REFRESH': True, - 'AUTH_HEADER_PREFIX': 'Bearer' + 'AUTH_HEADER_PREFIX': 'Bearer', + 'TOKEN_LIMIT_PER_USER': 20 } SPECTACULAR_SETTINGS = { 'TITLE': 'Battery Data API', diff --git a/backend/backend_django/config/urls.py b/backend/backend_django/config/urls.py index 8ab38337..48b6e5f7 100644 --- a/backend/backend_django/config/urls.py +++ b/backend/backend_django/config/urls.py @@ -35,6 +35,7 @@ router.register(r'inactive_users', views.InactiveViewSet, basename='inactive_user') router.register(r'users', views.UserViewSet, basename='user') router.register(r'groups', views.GroupViewSet) +router.register(r'tokens', views.TokenViewSet, basename='tokens') # Wire up our API using automatic URL routing. # Additionally, we include login URLs for the browsable API. @@ -46,6 +47,7 @@ path(r'login/', views.LoginView.as_view(), name='knox_login'), path(r'logout/', views.LogoutView.as_view(), name='knox_logout'), path(r'logoutall/', views.LogoutAllView.as_view(), name='knox_logoutall'), + path(r'create_token/', views.CreateTokenView.as_view(), name='knox_create_token'), path('schema/', SpectacularAPIView.as_view(), name='schema'), path('schema/swagger-ui/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'), path('schema/redoc/', SpectacularRedocView.as_view(url_name='schema'), name='redoc'), diff --git a/backend/backend_django/galvanalyser/migrations/0001_initial.py b/backend/backend_django/galvanalyser/migrations/0001_initial.py index 8160bf31..f967d66c 100644 --- a/backend/backend_django/galvanalyser/migrations/0001_initial.py +++ b/backend/backend_django/galvanalyser/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.1.4 on 2023-02-20 15:47 +# Generated by Django 4.1.4 on 2023-02-27 14:04 from django.conf import settings from django.db import migrations, models @@ -10,8 +10,8 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('auth', '0012_alter_user_first_name_max_length'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('auth', '0012_alter_user_first_name_max_length'), ] operations = [ @@ -84,6 +84,14 @@ class Migration(migrations.Migration): ('user_group', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='readable_harvesters', to='auth.group')), ], ), + migrations.CreateModel( + name='KnoxAuthToken', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('knox_token_key', models.TextField()), + ('name', models.TextField()), + ], + ), migrations.CreateModel( name='MonitoredPath', fields=[ diff --git a/backend/backend_django/galvanalyser/models.py b/backend/backend_django/galvanalyser/models.py index ccdc0bd1..ce5cbed7 100644 --- a/backend/backend_django/galvanalyser/models.py +++ b/backend/backend_django/galvanalyser/models.py @@ -1,8 +1,6 @@ -from django.db.models import F -from django.utils import timezone from django.db import models from django.contrib.auth.models import User, Group - +from knox.models import AuthToken import random @@ -226,3 +224,11 @@ class TimeseriesRangeLabel(models.Model): class VouchFor(models.Model): new_user = models.ForeignKey(to=User, related_name='vouched_for', null=False, on_delete=models.DO_NOTHING) vouching_user = models.ForeignKey(to=User, related_name='vouched_by', null=False, on_delete=models.DO_NOTHING) + + +class KnoxAuthToken(models.Model): + knox_token_key = models.TextField() + name = models.TextField() + + def __str__(self): + return f"{self.knox_token_key}:{self.name}" diff --git a/backend/backend_django/galvanalyser/serializers.py b/backend/backend_django/galvanalyser/serializers.py index 4429f3d8..e62ddfd1 100644 --- a/backend/backend_django/galvanalyser/serializers.py +++ b/backend/backend_django/galvanalyser/serializers.py @@ -11,13 +11,14 @@ DataUnit, \ DataColumnType, \ DataColumn, \ - TimeseriesData, \ TimeseriesRangeLabel, \ - DataColumnStringKeys + DataColumnStringKeys, \ + KnoxAuthToken from django.db import connection from django.contrib.auth.models import User, Group from django.conf.global_settings import DATA_UPLOAD_MAX_MEMORY_SIZE from rest_framework import serializers +from knox.models import AuthToken class HarvesterSerializer(serializers.HyperlinkedModelSerializer): @@ -245,7 +246,7 @@ class Meta: class DataUnitSerializer(serializers.ModelSerializer): class Meta: model = DataUnit - fields = ['name', 'symbol', 'description'] + fields = ['url', 'id', 'name', 'symbol', 'description'] class TimeseriesRangeLabelSerializer(serializers.HyperlinkedModelSerializer): @@ -322,7 +323,11 @@ class GroupSerializer(serializers.HyperlinkedModelSerializer): users = serializers.SerializerMethodField() def get_users(self, instance) -> list: - return UserSerializer(instance.user_set.all(), many=True, context={'request': self.context['request']}).data + return UserSerializer( + instance.user_set.filter(is_active=True), + many=True, + context={'request': self.context['request']} + ).data class Meta: model = Group @@ -342,7 +347,11 @@ def get_description(self, instance): return self.context.get('description') def get_users(self, instance) -> list: - return UserSerializer(instance.user_set.all(), many=True, context={'request': self.context['request']}).data + return UserSerializer( + instance.user_set.filter(is_active=True), + many=True, + context={'request': self.context['request']} + ).data def get_name(self, instance): return self.context.get('name', instance.name) @@ -374,9 +383,36 @@ class Meta: 'url', 'id', 'username', + 'email', 'first_name', 'last_name', 'is_active', 'is_staff', 'is_superuser', ] + + +class KnoxTokenSerializer(serializers.HyperlinkedModelSerializer): + created = serializers.SerializerMethodField() + expiry = serializers.SerializerMethodField() + url = serializers.SerializerMethodField() + + def knox_token(self, instance): + key, id = instance.knox_token_key.split('_') + if not int(id) == self.context['request'].user.id: + raise ValueError('Bad user ID for token access') + return AuthToken.objects.get(user_id=int(id), token_key=key) + + def get_created(self, instance): + return self.knox_token(instance).created + + def get_expiry(self, instance): + return self.knox_token(instance).expiry + + def get_url(self, instance) -> str: + return self.context['request'].build_absolute_uri(reverse('tokens-detail', args=(instance.id,))) + + class Meta: + model = KnoxAuthToken + fields = ['url', 'id', 'name', 'created', 'expiry'] + read_only_fields = ['url', 'id', 'created', 'expiry'] diff --git a/backend/backend_django/galvanalyser/tests/test_api_tokens.py b/backend/backend_django/galvanalyser/tests/test_api_tokens.py new file mode 100644 index 00000000..388e619a --- /dev/null +++ b/backend/backend_django/galvanalyser/tests/test_api_tokens.py @@ -0,0 +1,61 @@ +import unittest +from django.urls import reverse +from rest_framework import status +from rest_framework.test import APITestCase +import logging + +from galvanalyser.models import KnoxAuthToken +from .factories import UserFactory + +logger = logging.getLogger(__file__) +logger.setLevel(logging.INFO) + + +class TokenTests(APITestCase): + def setUp(self): + self.user = UserFactory.create(username='test_user') + self.other_user = UserFactory.create(username='test_user_other') + + def test_crud(self): + self.client.force_login(self.user) + body = {'name': 'Test API token', 'ttl': 600} + url = reverse('knox_create_token') + print("Test create API token") + response = self.client.post(url, body) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.json().get('name'), body['name']) + self.assertIn('token', response.json()) + print("OK") + + print("Test list tokens") + url = reverse('tokens-list') + response = self.client.get(url) + self.assertEqual(len(response.json()), 1) + detail_url = response.json()[0]['url'] + self.client.force_login(self.other_user) + self.assertEqual(self.client.get(detail_url).status_code, status.HTTP_404_NOT_FOUND) + print("OK") + + print("Test token detail") + self.client.force_login(self.user) + response = self.client.get(detail_url) + self.assertEqual(response.json()['name'], body['name']) + self.assertNotIn('token', response.json()) + print("OK") + + print("Test update") + new_name = "new token name" + response = self.client.patch(detail_url, {"name": new_name}) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.json()['name'], new_name) + print("OK") + + print("Test token delete") + response = self.client.delete(detail_url) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + self.assertEqual(KnoxAuthToken.objects.filter(knox_token_key__regex=f"_{self.user.id}$").exists(), False) + print("OK") + + +if __name__ == '__main__': + unittest.main() diff --git a/backend/backend_django/galvanalyser/views.py b/backend/backend_django/galvanalyser/views.py index 699ac2da..f5346ef9 100644 --- a/backend/backend_django/galvanalyser/views.py +++ b/backend/backend_django/galvanalyser/views.py @@ -1,5 +1,8 @@ +import datetime + import knox.auth from django.db.models import Q + from .serializers import HarvesterSerializer, \ HarvesterConfigSerializer, \ MonitoredPathSerializer, \ @@ -16,7 +19,8 @@ TimeseriesRangeLabelSerializer, \ UserSerializer, \ GroupSerializer, \ - HarvestErrorSerializer + HarvestErrorSerializer, \ + KnoxTokenSerializer from .models import Harvester, \ HarvestError, \ MonitoredPath, \ @@ -29,9 +33,10 @@ DataColumnType, \ DataColumnStringKeys, \ DataColumn, \ - TimeseriesData, \ TimeseriesRangeLabel, \ - FileState, VouchFor + FileState, \ + VouchFor, \ + KnoxAuthToken from .auth import HarvesterAccess from django.contrib.auth.models import User, Group from django.shortcuts import get_object_or_404 @@ -43,6 +48,7 @@ from knox.views import LoginView as KnoxLoginView from knox.views import LogoutView as KnoxLogoutView from knox.views import LogoutAllView as KnoxLogoutAllView +from knox.models import AuthToken from rest_framework.authentication import BasicAuthentication from drf_spectacular.utils import extend_schema, extend_schema_view, inline_serializer, OpenApiResponse from .utils import IteratorFile @@ -96,6 +102,11 @@ def post(self, request, fmt=None): return super(LoginView, self).post(request=request, format=fmt) return Response({'detail': "Anonymous login not allowed"}, status=401) + def get_post_response_data(self, request, token, instance): + return { + **UserSerializer(request.user, context={'request': request}).data, + 'token': token + } @extend_schema( description="Log out current Knox Token.", @@ -115,6 +126,76 @@ class LogoutAllView(KnoxLogoutAllView): authentication_classes = [knox.auth.TokenAuthentication] +@extend_schema( + description="Create a new Knox Token. May specify ttl (s) and name in POST request.", + responses={ + 200: inline_serializer( + name='KnoxUser', + fields={ + 'expiry': serializers.DateTimeField(), + 'token': serializers.CharField(), + 'user': UserSerializer + } + ) + } +) +class CreateTokenView(KnoxLoginView): + def get_token_ttl(self): + try: + ttl = self.get_context()['request'].data.get('ttl', None) + if ttl is not None: + ttl = datetime.timedelta(seconds=int(ttl)) + return ttl + except (AttributeError, KeyError, ValueError): + return None + + def get_post_response_data(self, request, token, instance): + error = None + name = request.data.get('name') + if not name: + error = KeyError("Token must have a name") + elif KnoxAuthToken.objects.filter(name=name, knox_token_key__regex=f"_{request.user.id}$").exists(): + error = ValueError("You already have a token with that name") + if error: + instance.delete() + raise error + else: + token_wrapper = KnoxAuthToken.objects.create( + name=name, + knox_token_key=f"{instance.token_key}_{request.user.id}" + ) + return { + 'token': token, + **KnoxTokenSerializer(token_wrapper, context={'request': request}).data + } + + +class TokenViewSet(viewsets.ModelViewSet): + serializer_class = KnoxTokenSerializer + queryset = KnoxAuthToken.objects.none().order_by('-id') + + def get_queryset(self): + token_keys = [f"{t.token_key}_{t.user_id}" for t in AuthToken.objects.filter(user_id=self.request.user.id)] + # Create entries for temporary browser tokens + for k in token_keys: + if not KnoxAuthToken.objects.filter(knox_token_key=k).exists(): + KnoxAuthToken.objects.create(knox_token_key=k, name=f"Browser session [{k}]") + return KnoxAuthToken.objects.filter(knox_token_key__in=token_keys).order_by('-id') + + def destroy(self, request, *args, **kwargs): + try: + token = KnoxAuthToken.objects.get( + pk=kwargs.get('pk'), + knox_token_key__regex=f"_{request.user.id}$" + ) + except KnoxAuthToken.DoesNotExist: + return error_response("Token not found") + key, id = token.knox_token_key.split("_") + AuthToken.objects.filter(user_id=int(id), token_key=key).delete() + token.delete() + return Response(status=204) + + class HarvesterViewSet(viewsets.ModelViewSet): """ Harvesters monitor a set of MonitoredPaths and send reports about ObservedFiles @@ -703,6 +784,33 @@ class UserViewSet(viewsets.ReadOnlyModelViewSet): serializer_class = UserSerializer queryset = User.objects.filter(is_active=True) + @action(detail=True, methods=['PATCH']) + def update_profile(self, request, pk: int = None): + try: + user = User.objects.get(id=pk) + except User.DoesNotExist: + return error_response("User not found", 404) + if user != request.user: + return error_response("You may only edit your own details", 401) + email = request.data.get('email') + if email: + try: + validators.validate_email(email) + except validators.ValidationError: + return error_response("Invalid email") + password = request.data.get('password') + if password and not len(password) > 7: + return error_response("Password must be at least 7 characters") + current_password = request.data.get('currentPassword') + if not user.check_password(current_password): + return error_response("You must include the correct current password", 401) + if email: + user.email = email + if password: + user.set_password(password) + user.save() + return Response(UserSerializer(user, context={'request': request}).data) + class GroupViewSet(viewsets.ReadOnlyModelViewSet): """ diff --git a/backend/db.sqlite3 b/backend/db.sqlite3 deleted file mode 100644 index 46b5aa945b96a89b990271da4f668de37b670c1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131072 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 O009sH0T37}0{;&=mG%Gt diff --git a/frontend/src/APIConnection.ts b/frontend/src/APIConnection.ts index 98fff870..a7f42def 100644 --- a/frontend/src/APIConnection.ts +++ b/frontend/src/APIConnection.ts @@ -1,12 +1,15 @@ +import {UpdateResult} from "./UserProfile"; + export type User = { - url: string, - id: number, - username: string, - first_name: string, - last_name: string, - is_staff: boolean, - is_superuser: boolean, - token: string, + url: string; + id: number; + username: string; + email: string; + first_name: string; + last_name: string; + is_staff: boolean; + is_superuser: boolean; + token: string; } export interface APIObject { @@ -125,17 +128,41 @@ export class APIConnection { }) } + update_user(email: string, password: string, currentPassword: string): Promise { + if (!this.user) + return new Promise(() => {}) + return fetch( + `${this.user.url}update_profile/`, + { + method: 'PATCH', + headers: { + 'content-type': 'application/json', + accept: 'application/json', + authorization: `Bearer ${this.user.token}` + }, + body: JSON.stringify({email, password, currentPassword}) + } + ) + .then(r => { + if (r.status === 200) + return r.json() + .then(user => { + this.user = {...user, token: this.user?.token} + }) + .then(() => ({success: true, message: 'Updated successfully'})) + return r.json() + .then(r => ({success: false, message: r.error})) + }) + } + login(username: string, password: string) { let headers = new Headers(); headers.set('Authorization', 'Basic ' + btoa(username + ":" + password)); headers.set('Accept', 'application/json'); return fetch(this.url + 'login/', {method: 'POST', headers: headers}) .then(r => r.json()) - .then(r => { - this.user = { - ...r.user, - token: r.token - } + .then(user => { + this.user = user window.localStorage.setItem('user', JSON.stringify(this.user)) console.info(`Logged in as ${this.user?.username}`) return true @@ -186,7 +213,7 @@ export class APIConnection { return newOptions; } - _fetch(url: string, options: object, parent: string = "", void_cache: boolean = false): Promise { + _fetch(url: string, options: object, parent: string = "", void_cache: boolean = false): Promise { return fetch(url, options) .then((response) => { if (response.status >= 400) { @@ -199,12 +226,19 @@ export class APIConnection { this.results.remove(url) throw new Error(`Fetch failed for ${url}: ${response.status}`) } + if (response.status === 204) + return null; return response.json() as Promise; }) .then(json => { if (void_cache) this.results.purge(parent) + if (json === null) { + this.results.remove(url) + return url + } this.results.add(json, parent) + return json instanceof Array? parent : json.url }) } @@ -225,7 +259,7 @@ export class APIConnection { return this.results.get(url) } return this._fetch(url, newOptions, url, ignore_cache) - .then(() => this.results.get(url)) + .then((result_url) => this.results.get(result_url)) } async fetch(url: string, options?: any, ignore_cache = false): Promise> { @@ -244,7 +278,7 @@ export class APIConnection { return results[0] } return this._fetch(url, newOptions) - .then(() => this.results.get(url)[0]) + .then((result_url) => this.results.get(result_url)[0]) } } diff --git a/frontend/src/Core.tsx b/frontend/src/Core.tsx index 628a6b1b..89c3f5ba 100644 --- a/frontend/src/Core.tsx +++ b/frontend/src/Core.tsx @@ -18,11 +18,6 @@ import GroupAddIcon from '@mui/icons-material/GroupAdd'; import Equipment from "./Equipment" import Datasets from "./Datasets" import TableChartIcon from '@mui/icons-material/TableChart'; -import Dialog from '@mui/material/Dialog'; -import DialogActions from '@mui/material/DialogActions'; -import DialogContent from '@mui/material/DialogContent'; -import DialogContentText from '@mui/material/DialogContentText'; -import DialogTitle from '@mui/material/DialogTitle'; import BatteryUnknownIcon from '@mui/icons-material/BatteryUnknown'; import BackupIcon from '@mui/icons-material/Backup'; import { makeStyles} from "@mui/styles"; @@ -46,6 +41,8 @@ import ListItemText from '@mui/material/ListItemText'; import { ReactComponent as GalvanalyserLogo } from './Galvanalyser-logo.svg'; import Connection from "./APIConnection"; import Stack from "@mui/material/Stack"; +import Tokens from "./Tokens"; +import UserProfile from "./UserProfile"; const PrivateRoute = (component: JSX.Element) => { const logged = Connection.is_logged_in; @@ -152,8 +149,12 @@ export default function Core() { const isCellsPath = matchPath({path: cellsPath, end: true}, pathname) !== null const equipmentPath = "/equipment" const isEquipmentPath = matchPath({path: equipmentPath, end: true}, pathname) !== null - const userPath = "/users" - const isUsersPath = matchPath({path: userPath, end: true}, pathname) !== null + const usersPath = "/users" + const isUsersPath = matchPath({path: usersPath, end: true}, pathname) !== null + const profilePath = "/profile" + const isProfilePath = matchPath({path: profilePath, end: true}, pathname) !== null + const tokenPath = "/tokens" + const isTokenPath = matchPath({path: tokenPath, end: true}, pathname) !== null const [open, setOpen] = React.useState(false); const handleDrawerOpen = () => { @@ -163,44 +164,6 @@ export default function Core() { setOpen(false); }; - const [tokenOpen, setTokenOpen] = React.useState(false); - const [token, setToken] = React.useState(); - - const handleTokenOpen = () => { - setToken(Connection.user?.token) - setTokenOpen(true); - }; - - const handleTokenClose = () => { - setTokenOpen(false); - }; - - const tokenGenerator = ( - - - - - {"API Token"} - - - - {token} - - - - - - - - ) - const mainListItems = ( + component={Link} to={usersPath}> @@ -270,7 +233,16 @@ export default function Core() { - {tokenGenerator} + + + + + + {updateResult?.message} + + + + + ); +} From dae48e29e48b1ca67ebf76f33b7313cf4e05ddc0 Mon Sep 17 00:00:00 2001 From: Matt Jaquiery Date: Tue, 28 Feb 2023 13:08:09 +0000 Subject: [PATCH 6/7] Basic API message capture --- frontend/src/APIConnection.ts | 61 +++++++----- frontend/src/AsyncTable.tsx | 2 +- frontend/src/Core.tsx | 178 +++++++++++++++++++--------------- frontend/src/UserProfile.tsx | 11 +-- 4 files changed, 141 insertions(+), 111 deletions(-) diff --git a/frontend/src/APIConnection.ts b/frontend/src/APIConnection.ts index a7f42def..828cd839 100644 --- a/frontend/src/APIConnection.ts +++ b/frontend/src/APIConnection.ts @@ -1,5 +1,3 @@ -import {UpdateResult} from "./UserProfile"; - export type User = { url: string; id: number; @@ -36,6 +34,19 @@ export type CachedAPIResponse = { parents: string[]; } +export type APIMessage = { + severity: "error" | "warning" | "info" | "success"; + message: string; + context?: any; +} + +export type MessageHandler = (message: APIMessage) => void + +export type ConnectionProps = { + base_url?: string; + message_handlers?: MessageHandler[]; +} + function clean_url(url: string, baseURL: string): string { url = url.toLowerCase(); if (!url.startsWith(baseURL)) @@ -97,15 +108,29 @@ class ResponseCache { } } +/** + * @class + * APIConnection manages a connection to the backend REST API. + * It handles user management directly, and offers a modified + * fetch interface for everything else. + * + * Results are cached and can be referenced directly with their + * canonical URL and indirectly with a parent URL. + */ export class APIConnection { url: string = 'http://localhost:5000/'.toLowerCase() user: User | null = null cache_expiry_time = 60_000 // 1 minute results: ResponseCache cookies: any + message_handlers: MessageHandler[] = [] - constructor() { - console.info("Spawn API connection") + constructor(props?: ConnectionProps) { + if (props?.base_url) + this.url = props.base_url + if (props?.message_handlers) + this.message_handlers = props.message_handlers + console.info(`Spawn API connection (${this.url})`) const local_user = window.localStorage.getItem('user') if (local_user) this.user = JSON.parse(local_user) @@ -128,7 +153,7 @@ export class APIConnection { }) } - update_user(email: string, password: string, currentPassword: string): Promise { + update_user(email: string, password: string, currentPassword: string): Promise { if (!this.user) return new Promise(() => {}) return fetch( @@ -149,9 +174,9 @@ export class APIConnection { .then(user => { this.user = {...user, token: this.user?.token} }) - .then(() => ({success: true, message: 'Updated successfully'})) + .then(() => ({severity: "success", message: 'Updated successfully'})) return r.json() - .then(r => ({success: false, message: r.error})) + .then(r => ({severity: "error", message: r.error})) }) } @@ -179,26 +204,10 @@ export class APIConnection { return fetch(this.url + "logout/", {method: 'POST'}) } - get_cookie(name: string) { - const value = `; ${document.cookie}`; - const parts = value.split(`; ${name}=`); - if (parts.length === 2) return parts?.pop()?.split(';').shift(); - return null - } - get is_logged_in() { return !!this.user?.token } - async get_is_logged_in(skip: boolean = true): Promise { - await this.login('admin', 'admin') - const cookie = this.get_cookie('csrf_access_token'); - if (cookie === undefined || !this.user) - if (!skip) - return this.get_is_logged_in(false); - return cookie !== undefined && this.user !== null; - } - _prepare_fetch_headers(url: string, options?: any) { if (!this.is_logged_in) throw new Error(`Cannot fetch ${url}: not logged on.`) @@ -230,9 +239,15 @@ export class APIConnection { return null; return response.json() as Promise; }) + .catch(e => { + this.message_handlers.forEach(h => h({severity: "error", message: e.message, context: e})) + return url + }) .then(json => { if (void_cache) this.results.purge(parent) + if (typeof json === "string") + return json if (json === null) { this.results.remove(url) return url diff --git a/frontend/src/AsyncTable.tsx b/frontend/src/AsyncTable.tsx index 24106b2f..f13b7919 100644 --- a/frontend/src/AsyncTable.tsx +++ b/frontend/src/AsyncTable.tsx @@ -186,7 +186,7 @@ export default class AsyncTable extends Component { + update_all = async (use_cache: boolean = false) => { this.reset_new_row() return this.get_data(this.props.url, use_cache) } diff --git a/frontend/src/Core.tsx b/frontend/src/Core.tsx index 89c3f5ba..5597dd2a 100644 --- a/frontend/src/Core.tsx +++ b/frontend/src/Core.tsx @@ -39,10 +39,12 @@ import ListItem from '@mui/material/ListItem'; import ListItemIcon from '@mui/material/ListItemIcon'; import ListItemText from '@mui/material/ListItemText'; import { ReactComponent as GalvanalyserLogo } from './Galvanalyser-logo.svg'; -import Connection from "./APIConnection"; +import Connection, {APIMessage} from "./APIConnection"; import Stack from "@mui/material/Stack"; import Tokens from "./Tokens"; import UserProfile from "./UserProfile"; +import Snackbar from "@mui/material/Snackbar"; +import Alert from "@mui/material/Alert"; const PrivateRoute = (component: JSX.Element) => { const logged = Connection.is_logged_in; @@ -82,7 +84,7 @@ const useStyles = makeStyles((theme) => ({ }), }, galvanalyserLogo: { - height: '40px' + height: '40px' }, menuButton: { marginRight: 36, @@ -164,35 +166,48 @@ export default function Core() { setOpen(false); }; + const [snackbarOpen, setSnackbarOpen] = React.useState(false) + const [apiMessage, setAPIMessage] = React.useState(null) + const handleSnackbarClose = (e: any, reason?: string) => { + if (reason !== 'clickaway') { + setSnackbarOpen(false) + setAPIMessage(null) + } + } + Connection.message_handlers.push((h) => { + setAPIMessage(h) + setSnackbarOpen(true) + }) + const mainListItems = ( - + - + - + - + @@ -214,78 +229,83 @@ export default function Core() { const Layout = (
- - - - - - - - - + + + + + + + + + - - - - - - - -
- - - -
- - {mainListItems} -
-
-
+ + + + + + + +
+ + + +
+ + {mainListItems} +
+
+
-
+
+ + + {apiMessage?.message} + +
); /* A looks through its children s and renders the first one that matches the current URL. */ return ( - - }/> - - - - - - - - - - + + }/> + + + + + + + + + + ); } diff --git a/frontend/src/UserProfile.tsx b/frontend/src/UserProfile.tsx index 41c99102..376f4ec2 100644 --- a/frontend/src/UserProfile.tsx +++ b/frontend/src/UserProfile.tsx @@ -2,7 +2,7 @@ import React, {SyntheticEvent, useState} from 'react'; import TextField from '@mui/material/TextField'; import Paper from '@mui/material/Paper'; import Container from '@mui/material/Container'; -import Connection from "./APIConnection"; +import Connection, {APIMessage} from "./APIConnection"; import useStyles from "./UseStyles"; import Typography from "@mui/material/Typography"; import Stack from "@mui/material/Stack"; @@ -10,17 +10,12 @@ import Button from "@mui/material/Button"; import Alert from "@mui/material/Alert"; import Snackbar from "@mui/material/Snackbar"; -export type UpdateResult = { - success: boolean; - message: string; -} - export default function UserProfile() { const classes = useStyles(); const [email, setEmail] = useState(Connection.user?.email || '') const [password, setPassword] = useState('') const [currentPassword, setCurrentPassword] = useState('') - const [updateResult, setUpdateResult] = useState() + const [updateResult, setUpdateResult] = useState() const [open, setOpen] = useState(false) const updateUser = () => Connection.update_user(email, password, currentPassword) @@ -91,7 +86,7 @@ export default function UserProfile() {
- + {updateResult?.message} From a2f174f6ed291d5b5017ccfa4307e6868c86ebef Mon Sep 17 00:00:00 2001 From: martinjrobins Date: Wed, 1 Mar 2023 13:46:27 +0000 Subject: [PATCH 7/7] #47 frontend-dev runs yarn install on docker-compose up --- docker-compose.dev.yml | 7 ++++++- docker-compose.yml | 1 - 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index cf3bc90d..b1b81105 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -22,7 +22,12 @@ services: context: ./frontend ports: - "3000:3000" - command: yarn start + command: > + bash -c " + yarn install && + yarn start + " + restart: unless-stopped # old_worker: diff --git a/docker-compose.yml b/docker-compose.yml index 80525fbc..5cfde037 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -29,7 +29,6 @@ services: - "80:80" volumes: - ./frontend:/app - - /app/node_modules/ working_dir: /app env_file: - ./.env