diff --git a/.github/workflows/aws-proxy.yml b/.github/workflows/aws-proxy.yml deleted file mode 100644 index 64361937..00000000 --- a/.github/workflows/aws-proxy.yml +++ /dev/null @@ -1,101 +0,0 @@ -name: LocalStack AWS Proxy Extension Tests - -on: - push: - paths: - - aws-proxy/** - branches: - - main - pull_request: - paths: - - .github/workflows/aws-proxy.yml - - aws-proxy/** - workflow_dispatch: - -jobs: - tests-aws-proxy: - name: Run extension tests - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Set up Python 3.x - uses: actions/setup-python@v4 - with: - python-version: '3.13' - - - name: Use Node.js - uses: actions/setup-node@v3 - with: - node-version: 20 - - - name: Enable Corepack and set Yarn version - run: | - corepack enable - corepack prepare yarn@3.2.3 --activate - shell: bash - - - name: Set up Terraform CLI - uses: hashicorp/setup-terraform@v2 - - - name: Run linter - run: | - cd aws-proxy - make install - make lint - - - name: Install LocalStack and extension - env: - LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }} - run: | - set -e - cd aws-proxy - docker pull localstack/localstack-pro & - docker pull public.ecr.aws/lambda/python:3.8 & - - # install latest CLI packages - pip install --upgrade localstack - - # install dependencies - sudo apt-get update - sudo apt-get install -y libsasl2-dev - - # build and install extension - localstack extensions init - ( - make build - make enable - ) - - # install awslocal/tflocal command lines - pip install awscli-local[ver1] - pip install terraform-local - - find /home/runner/.cache/localstack/volume/lib/extensions/python_venv/lib/python3.*/site-packages/aws* - ls -la /home/runner/.cache/localstack/volume/lib/extensions/python_venv/lib/python3.*/site-packages/aws* - DEBUG=1 GATEWAY_SERVER=hypercorn localstack start -d - localstack wait - - - name: Run integration tests - env: - AWS_DEFAULT_REGION: us-east-1 - AWS_ACCESS_KEY_ID: ${{ secrets.TEST_AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.TEST_AWS_SECRET_ACCESS_KEY }} - run: | - cd aws-proxy - make test - - - name: Deploy and test sample app - env: - AWS_DEFAULT_REGION: us-east-1 - AWS_ACCESS_KEY_ID: ${{ secrets.TEST_AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.TEST_AWS_SECRET_ACCESS_KEY }} - LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }} - run: | - cd aws-proxy/example - make test - - - name: Print LocalStack logs - if: always() - run: localstack logs diff --git a/aws-proxy/AGENTS.md b/aws-proxy/AGENTS.md deleted file mode 100644 index bd2d8078..00000000 --- a/aws-proxy/AGENTS.md +++ /dev/null @@ -1,64 +0,0 @@ -# AI Agent Instructions for LocalStack AWS Proxy Extension - -This repo is a LocalStack extension (plugin) that enables a "proxy mode" - proxying requests for certain AWS services (e.g., S3) to the upstream real AWS cloud, while handling the remaining services locally. - -You are an AI agent tasked with adding additional functionality or test coverage to this repo. - -## General Instructions - -* You can assume that the LocalStack container is running locally, with the proxy extension installed and enabled. -* You can assume that test AWS credentials are configured in the shell environment where the AI agent is running. -* Do *not* touch any files outside the working directory (basedir of this file)! -* You can create new files (no need to prompt for confirmation) -* You can make modifications to files (no need to prompt for confirmation) -* You can delete existing files if needed, but only after user confirmation -* You can call different `make` targets (e.g., `make test`) in this repo (no need to prompt for confirmation) -* For each new file created or existing file modified, add a header comment to the file, something like `# Note: This file has been (partially or fully) generated by an AI agent.` -* The proxy tests are executed against real AWS and may incur some costs, so rather than executing the entire test suite or entire modules, focus the testing on individual test functions within a module only. -* Before claiming success, always double-check against real AWS (via `aws` CLI commands) that everything has been cleaned up and there are no leftover resources from the proxy tests. -* Never add any `print(..)` statements to the code - use a logger to report any status to the user, if required. -* To format/lint the codebase you can run `make format` and `make lint`. - -## Testing - -The proxy functionality is covered by integration tests in the `tests/` folder, one file for each different AWS service (e.g., SQS, S3, etc). - -To add a test, follow the pattern in the existing tests. -It usually involves creating two boto3 clients, one for the LocalStack connection, and one for the real upstream AWS cloud. -We then run API requests with both clients and assert that the results are identical, thereby ensuring that the proxy functionality is working properly. - -To run a single test via `pytest` (say, `test_my_logic` in `test_s3.py`), use the following command: -``` -TEST_PATH=tests/test_s3.py::test_my_logic make test -``` - -### Read-Only Mode Support - -Some services have operations that are functionally read-only (don't modify state) but don't follow the standard naming conventions (`Describe*`, `Get*`, `List*`, `Query*`). When adding tests or support for a new service with `read_only: true` configuration, check the [AWS Service Authorization Reference](https://docs.aws.amazon.com/service-authorization/latest/reference/) for the service and identify any operations that: -- Are classified as "Read" access level but don't match the standard prefixes -- Evaluate or simulate something without modifying state (e.g., `Evaluate*`, `Simulate*`, `Test*`, `Check*`, `Validate*`) - -If you find such operations, add them to the service-specific rules in `aws_proxy/server/aws_request_forwarder.py` in the `_is_read_request` method. This ensures that read-only proxy configurations correctly forward these operations rather than blocking them. - -**IMPORTANT**: This step is mandatory when adding a new service. Failure to identify non-standard read-only operations will cause `read_only: true` configurations to incorrectly block legitimate read requests. - -Example services with non-standard read-only operations: -- **AppSync**: `EvaluateCode`, `EvaluateMappingTemplate` -- **IAM**: `SimulateCustomPolicy`, `SimulatePrincipalPolicy` -- **Cognito**: `InitiateAuth` -- **DynamoDB**: `Scan`, `BatchGetItem`, `PartiQLSelect` - -When adding new integration tests, consider the following: -* Include a mix of positive and negative assertions (i.e., presence and absence of resources). -* Include a mix of different configuration options, e.g., the `read_only: true` flag can be specified in the proxy service configuration YAML, enabling read-only mode (which should be covered by tests as well). -* Include some tests that cover matching of resource names (the config YAML allows to specify ARN regex patterns), to ensure the proxy is able to selectively forward requests to certain matching AWS resources only. -* Make sure to either use fixtures (preferred), or reliable cleanups for removing the resources; several fixtures for creating AWS resources are available in the `localstack.testing.pytest.fixtures` module -* If a test uses multiple resources with interdependencies (e.g., an SQS queue connected to an SNS topic), then the test needs to ensure that both resource types are proxied (i.e., created in real AWS), to avoid a situation where a resource in AWS is attempting to reference a local resource in LocalStack (using account ID `000000000000` in their ARN). -* When waiting for the creation status of a resource, use the `localstack.utils.sync.retry(..)` utility function, rather than a manual `for` loop. -* Avoid using `time.sleep()` in tests. Instead, use `localstack.utils.sync.retry(..)` to poll for the expected state. This makes tests more robust and avoids unnecessary delays when resources become available faster than expected. - -## Fixing or Enhancing Logic in the Proxy - -Notes: -* The AWS proxy is running as a LocalStack Extension, and the tests are currently set up in a way that they assume the container to be running with the Extension in dev mode. Hence, in order to make actual changes to the proxy logic, we'll need to restart the LocalStack main container. You can either ask me (the user) to restart the container whenever you're making changes in the core logic, or alternatively remove the `localstack-main` container, and then run `EXTENSION_DEV_MODE=1 DEBUG=1 localstack start -d` again to restart the container, which may reveal some error logs, stack traces, etc. -* If the proxy raises errors or something seems off, you can grab and parse the output of the LocalStack container via `localstack logs`. diff --git a/aws-proxy/MANIFEST.in b/aws-proxy/MANIFEST.in deleted file mode 100644 index dfedfcc6..00000000 --- a/aws-proxy/MANIFEST.in +++ /dev/null @@ -1,2 +0,0 @@ -include pyproject.toml -recursive-exclude aws_proxy/frontend * diff --git a/aws-proxy/Makefile b/aws-proxy/Makefile deleted file mode 100644 index ce74ec8f..00000000 --- a/aws-proxy/Makefile +++ /dev/null @@ -1,79 +0,0 @@ -VENV_BIN = python3 -m venv -VENV_DIR ?= .venv -VENV_ACTIVATE = $(VENV_DIR)/bin/activate -VENV_RUN = . $(VENV_ACTIVATE) -TEST_PATH ?= tests -PIP_CMD ?= pip -FRONTEND_FOLDER = aws_proxy/frontend -COREPACK_EXISTS := $(shell command -v corepack) -YARN_EXISTS := $(shell command -v yarn) - -usage: ## Show this help - @grep -Fh "##" $(MAKEFILE_LIST) | grep -Fv fgrep | sed -e 's/:.*##\s*/##/g' | awk -F'##' '{ printf "%-25s %s\n", $$1, $$2 }' - -clean: ## Clean up - rm -rf .venv/ - rm -rf build/ - rm -rf .eggs/ - rm -rf *.egg-info/ - -format: ## Run ruff to format the whole codebase - ($(VENV_RUN); python -m ruff format .; python -m ruff check --output-format=full --fix .) - -lint: ## Run code linter to check code style - ($(VENV_RUN); python -m ruff check --output-format=full . && python -m ruff format --check .) - -test: ## Run tests - $(VENV_RUN); python -m pytest $(PYTEST_ARGS) $(TEST_PATH) - -entrypoints: install build-frontend ## Generate plugin entrypoints for Python package - $(VENV_RUN); pip install --upgrade plux; python -m plux entrypoints --exclude '**/node_modules/**' - -install-build-deps: venv ## Install build dependencies - $(VENV_RUN); pip install --upgrade build setuptools wheel plux setuptools_scm - -build: install-build-deps build-frontend entrypoints ## Build the extension - $(VENV_RUN); python -m build --no-isolation . --outdir dist - @# make sure that the entrypoints are contained in the dist folder and are non-empty - @test -s localstack_extension_aws_proxy.egg-info/entry_points.txt || (echo "Entrypoints were not correctly created! Aborting!" && exit 1) - -enable: $(wildcard ./dist/localstack_extension_aws_proxy-*.tar.gz) ## Enable the extension in LocalStack - $(VENV_RUN); \ - pip uninstall --yes localstack-extension-aws-proxy; \ - localstack extensions -v install file://$? - -publish: clean-dist venv build - $(VENV_RUN); pip install --upgrade twine; twine upload dist/* - -check-frontend-deps: - @if [ -z "$(YARN_EXISTS)" ]; then \ - npm install --global yarn; \ - fi - @if [ -z "$(COREPACK_EXISTS)" ]; then \ - npm install -g corepack; \ - fi - -install-frontend: check-frontend-deps ## Install dependencies of the frontend - cd $(FRONTEND_FOLDER) && yarn install - -build-frontend: # Build the React app - @if [ ! -d "$(FRONTEND_FOLDER)/node_modules" ]; then \ - $(MAKE) install-frontend; \ - fi - cd $(FRONTEND_FOLDER); rm -rf build && NODE_ENV=prod npm run build - -start-frontend: ## Start the frontend in dev mode (hot reload) - cd $(FRONTEND_FOLDER); yarn start - -venv: - test -d .venv || $(VENV_BIN) .venv - -install: install-frontend venv ## Install dependencies - $(VENV_RUN); pip install -e . - $(VENV_RUN); pip install -e .[test] - touch $(VENV_DIR)/bin/activate - -clean-dist: clean - rm -rf dist/ - -.PHONY: build clean clean-dist dist install publish test diff --git a/aws-proxy/README.md b/aws-proxy/README.md index 3a0e9d6f..8c4b7c9f 100644 --- a/aws-proxy/README.md +++ b/aws-proxy/README.md @@ -1,13 +1,11 @@ -AWS Cloud Proxy Extension (experimental) -======================================== -[![Install LocalStack Extension](https://localstack.cloud/gh/extension-badge.svg)](https://app.localstack.cloud/extensions/remote?url=git+https://github.com/localstack/localstack-extensions/#egg=localstack-extension-aws-proxy&subdirectory=aws-proxy) +AWS Cloud Proxy Extension +========================= A LocalStack extension to proxy and integrate AWS resources into your local machine. This enables one flavor of "hybrid" or "remocal" setups where you can easily bridge the gap between LocalStack (local resources) and remote AWS (resources in the real cloud). -⚠️ Please note that this extension is experimental and still under active development. - -⚠️ Note: Given that the scope of this extension has recently changed (see [below](#resource-replicator-cli-deprecated)) - it has been renamed from `aws-replicator` to `aws-proxy`. +For a step-by-step tutorial, please refer to the documentation: +https://docs.localstack.cloud/aws/tutorials/aws-proxy-localstack-extension/ ## Prerequisites @@ -15,23 +13,24 @@ This enables one flavor of "hybrid" or "remocal" setups where you can easily bri * Docker * Python -## AWS Cloud Proxy +## Installation -The AWS Cloud Proxy can be used to forward certain API calls in LocalStack to real AWS, in order to enable seamless transition between local and remote resources. +Install the extension via the LocalStack CLI: -**Warning:** Be careful when using the proxy - make sure to _never_ give access to production accounts or any critical/sensitive data! +```bash +localstack extensions install localstack-extension-aws-proxy +``` -### Usage +After installation, restart LocalStack for the extension to take effect. -#### Using curl (API) +## Usage -The proxy can be enabled and disabled via the LocalStack internal API. This is the recommended approach. +### Enable the proxy -1. Start LocalStack and install the AWS Proxy extension (restart LocalStack after installation). +Enable the proxy for specific services (e.g., DynamoDB, S3, Cognito) by posting a configuration along with your AWS credentials: -2. Enable the proxy for specific services (e.g., DynamoDB, S3, Cognito) by posting a configuration along with your AWS credentials: -``` -$ curl -X POST http://localhost:4566/_localstack/aws/proxies \ +```bash +curl -X POST http://localhost:4566/_localstack/aws/proxies \ -H 'Content-Type: application/json' \ -d '{ "config": { @@ -49,114 +48,29 @@ $ curl -X POST http://localhost:4566/_localstack/aws/proxies \ }' ``` -3. Check the proxy status: -``` -$ curl http://localhost:4566/_localstack/aws/proxies/status -``` +### Check proxy status -4. Disable the proxy: +```bash +curl http://localhost:4566/_localstack/aws/proxies/status ``` -$ curl -X POST http://localhost:4566/_localstack/aws/proxies/status \ - -H 'Content-Type: application/json' \ - -d '{"status": "disabled"}' -``` - -5. Now, when issuing an API call against LocalStack (e.g., via `awslocal`), the invocation gets forwarded to real AWS and should return data from your real cloud resources. - -#### Using the LocalStack Web App - -You can also configure the proxy from the LocalStack Web App at https://app.localstack.cloud. Navigate to your instance and use the AWS Proxy extension settings to enable/disable the proxy and manage credentials. -Alternatively, the extension exposes a local configuration UI at http://localhost:4566/_localstack/aws-proxy/index.html (requires starting LocalStack with `EXTRA_CORS_ALLOWED_ORIGINS=https://aws-proxy.localhost.localstack.cloud:4566`). Use this Web UI to define the proxy configuration (in YAML syntax) and AWS credentials, then save the configuration. To clean up the running proxy container, click "disable" in the UI. +### Disable the proxy -![configuration settings](etc/proxy-settings.png) - -### Resource-specific proxying - -As an alternative to forwarding _all_ requests for a particular service, you can also proxy only requests for _specific_ resources to AWS. - -For example, assume we own an S3 bucket `my-s3-bucket` in AWS, then we can use the following configuration to forward any requests to `s3://my-s3-bucket` to real AWS, while still handling requests to all other buckets locally in LocalStack: -``` -services: - s3: - resources: - # list of ARNs of S3 buckets to proxy to real AWS - - '.*:my-s3-bucket' - operations: - # list of operation name regex patterns (optional) - - 'Get.*' - - 'Put.*' - # optionally, specify that only read requests should be allowed (Get*/List*/Describe*, etc) - read_only: false - # optionally, allow invoke/execute operations (e.g., Lambda invocations) alongside read_only mode. - # execute operations have side-effects and are deliberately excluded from read_only by default. - execute: false +```bash +curl -X POST http://localhost:4566/_localstack/aws/proxies/status \ + -H 'Content-Type: application/json' \ + -d '{"status": "disabled"}' ``` -Pass this configuration in the `config` field of the `POST /_localstack/aws/proxies` request body (as shown above). +Once enabled, API calls against LocalStack (e.g., via `awslocal`) are forwarded to real AWS and return data from your real cloud resources. -If we then perform local operations against the S3 bucket `my-s3-bucket`, the proxy will forward the request and will return the results from real AWS: -``` -$ awslocal s3 ls s3://my-s3-bucket -2023-05-14 15:53:40 148 my-file-1.txt -2023-05-15 10:24:43 22 my-file-2.txt -``` +## Configuration -Any other S3 requests targeting other buckets will be run against the local state in LocalStack itself, for example: -``` -$ awslocal s3 mb s3://test123 -make_bucket: test123 -... -``` +The following environment variables can be passed to the LocalStack container to customize behavior: -A more comprehensive sample, involving local Lambda functions combined with remote SQS queues and S3 buckets, can be found in the `example` folder of this repo. - -### Configuration - -In addition to the proxy services configuration shown above, the following configs can be used to customize the behavior of the extension itself (simply pass them as environment variables to the main LocalStack container): -* `PROXY_CLEANUP_CONTAINERS`: whether to clean up (remove) the proxy Docker containers once they shut down (default `1`). Can be set to `0` to help debug issues, e.g., if a proxy container starts up and exits immediately. -* `PROXY_LOCALSTACK_HOST`: the target host to use when the proxy container connects to the LocalStack main container (automatically determined by default) -* `PROXY_DOCKER_FLAGS`: additional flags that should be passed when creating the proxy Docker containers - -## Resource Replicator CLI (deprecated) - -Note: Previous versions of this extension also offered a "replicate" mode to copy/clone (rather than proxy) resources from an AWS account into the local instance. -This functionality has been removed from this extension, and is now available directly in the LocalStack Pro image (see [here](https://docs.localstack.cloud/aws/tooling/aws-replicator)). - -If you wish to access the deprecated instructions, they can be found [here](https://github.com/localstack/localstack-extensions/blob/fe0c97e8a9d94f72c80358493e51ce6c1da535dc/aws-replicator/README.md#resource-replicator-cli). - -## Change Log - -* `0.2.4`: Replace deprecated `localstack aws proxy` CLI command with direct Python/HTTP-based proxy startup; update README with curl-based usage instructions -* `0.2.3`: Enhance proxy support and tests for several services (API Gateway v1/v2, CloudWatch, AppSync, Kinesis, KMS, SNS, Cognito-IDP) -* `0.2.2`: Refactor UI to use WebAppExtension pattern -* `0.2.1`: Restructure project to use pyproject.toml -* `0.2.0`: Rename extension from `localstack-extension-aws-replicator` to `localstack-extension-aws-proxy` -* `0.1.25`: Fix dynamodb proxying for read-only mode -* `0.1.24`: Fix healthcheck probe for proxy container -* `0.1.23`: Fix unpinned React.js dependencies preventing webui from loading -* `0.1.22`: Fix auth-related imports that prevent the AWS proxy from starting -* `0.1.20`: Fix logic for proxying S3 requests with `*.s3.amazonaws.com` host header -* `0.1.19`: Print human-readable message for invalid regexes in resource configs; fix logic for proxying S3 requests with host-based addressing -* `0.1.18`: Update environment check to use SDK Docker client and enable starting the proxy from within Docker (e.g., from the LS main container as part of an init script) -* `0.1.17`: Add basic support for ARN-based pattern-matching for `secretsmanager` resources -* `0.1.16`: Update imports for localstack >=3.6 compatibility -* `0.1.15`: Move localstack dependency installation to extra since it's provided at runtime -* `0.1.14`: Install missing dependencies into proxy container for localstack >=3.4 compatibility -* `0.1.13`: Add compatibility with localstack >=3.4; add http2-server; migrate to localstack auth login -* `0.1.12`: Modify aws credentials text field type to password -* `0.1.11`: Fix broken imports after recent upstream CloudFormation changes -* `0.1.10`: Add `REPLICATOR_PROXY_DOCKER_FLAGS` option to pass custom flags to proxy Docker containers -* `0.1.9`: Enhance proxy networking and add `REPLICATOR_LOCALSTACK_HOST` config option -* `0.1.8`: Add `REPLICATOR_CLEANUP_PROXY_CONTAINERS` option to skip removing proxy containers for debugging -* `0.1.7`: Add rolo dependency to tests -* `0.1.6`: Adjust config to support `LOCALSTACK_AUTH_TOKEN` in addition to legacy API keys -* `0.1.5`: Minor fix to accommodate recent upstream changes -* `0.1.4`: Fix imports of `bootstrap.auth` modules for v3.0 compatibility -* `0.1.3`: Adjust code imports for recent LocalStack v3.0 module changes -* `0.1.2`: Remove deprecated ProxyListener for starting local aws-replicator proxy server -* `0.1.1`: Add simple configuration Web UI -* `0.1.0`: Initial version of extension +* `PROXY_CLEANUP_CONTAINERS`: whether to remove proxy Docker containers on shutdown (default `1`). Set to `0` to keep containers for debugging. +* `PROXY_LOCALSTACK_HOST`: the target host used by the proxy container to connect to LocalStack (auto-detected by default). +* `PROXY_DOCKER_FLAGS`: additional flags passed when creating proxy Docker containers. ## License diff --git a/aws-proxy/aws_proxy/__init__.py b/aws-proxy/aws_proxy/__init__.py deleted file mode 100644 index 747d8603..00000000 --- a/aws-proxy/aws_proxy/__init__.py +++ /dev/null @@ -1 +0,0 @@ -name = "aws-proxy" diff --git a/aws-proxy/aws_proxy/client/__init__.py b/aws-proxy/aws_proxy/client/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/aws-proxy/aws_proxy/client/auth_proxy.py b/aws-proxy/aws_proxy/client/auth_proxy.py deleted file mode 100644 index 10e793b7..00000000 --- a/aws-proxy/aws_proxy/client/auth_proxy.py +++ /dev/null @@ -1,524 +0,0 @@ -# Note/disclosure: This file has been partially modified by an AI agent. -import json -import logging -import os -import re -from functools import cache -from typing import Dict, Optional, Tuple -from urllib.parse import urlparse, urlunparse - -import boto3 -import requests -from botocore.awsrequest import AWSPreparedRequest -from botocore.model import OperationModel, ServiceModel -from botocore.session import get_session as get_botocore_session -from localstack.aws.protocol.parser import create_parser -from localstack.aws.spec import load_service -from localstack import config as localstack_config -from localstack.config import external_service_url -from localstack.constants import ( - AWS_REGION_US_EAST_1, - DOCKER_IMAGE_NAME_PRO, - LOCALHOST_HOSTNAME, -) -from localstack.http import Request -from localstack.utils.aws.aws_responses import requests_response -from localstack.utils.bootstrap import setup_logging -from localstack.utils.collections import select_attributes -from localstack.utils.container_utils.container_client import PortMappings -from localstack.utils.docker_utils import ( - DOCKER_CLIENT, - reserve_available_container_port, -) -from localstack.utils.files import new_tmp_file, save_file -from localstack.utils.functions import run_safe -from localstack.utils.net import get_docker_host_from_container, get_free_tcp_port -from localstack.utils.serving import Server -from localstack.utils.strings import short_uid, to_bytes, to_str, truncate -from requests import Response - -from aws_proxy import config as repl_config -from aws_proxy.client.utils import truncate_content -from aws_proxy.config import HANDLER_PATH_PROXIES -from aws_proxy.shared.constants import HEADER_HOST_ORIGINAL, SERVICE_NAME_MAPPING -from aws_proxy.shared.models import AddProxyRequest, ProxyConfig - -LOG = logging.getLogger(__name__) - -LOG.setLevel(logging.INFO) -if localstack_config.DEBUG: - LOG.setLevel(logging.DEBUG) - - -# TODO make configurable -CLI_PIP_PACKAGE = "localstack-extension-aws-proxy" -# note: enable the line below temporarily for testing: -# CLI_PIP_PACKAGE = "git+https://github.com/localstack/localstack-extensions/@branch#egg=localstack-extension-aws-proxy&subdirectory=aws-proxy" - -CONTAINER_NAME_PREFIX = "ls-aws-proxy-" -CONTAINER_CONFIG_FILE = "/tmp/ls.aws.proxy.yml" -CONTAINER_LOG_FILE = "/tmp/ls-aws-proxy.log" - -# default bind host if `bind_host` is not specified for the proxy -DEFAULT_BIND_HOST = "127.0.0.1" - - -class AuthProxyAWS(Server): - def __init__(self, config: ProxyConfig, port: int = None): - self.config = config - port = port or get_free_tcp_port() - super().__init__(port=port) - - def do_run(self): - self.register_in_instance() - self.run_server() - - def run_server(self): - # note: keep import here, to avoid runtime errors - from .http2_server import run_server - - bind_host = self.config.get("bind_host") or DEFAULT_BIND_HOST - proxy = run_server( - port=self.port, bind_addresses=[bind_host], handler=self.proxy_request - ) - proxy.join() - - @classmethod - def start_from_config_file(cls, config_file: str, port: int): - config = json.load(open(config_file)) - config["bind_host"] = "0.0.0.0" - cls(config, port=port).run_server() - - @staticmethod - def register_proxy( - config_file: str, port: int, localstack_host: str, localstack_port: int = 4566 - ): - config = json.load(open(config_file)) - url = f"http://{localstack_host}:{localstack_port}{HANDLER_PATH_PROXIES}" - requests.post(url, json={"port": port, "config": config}) - - def proxy_request(self, request: Request, data: bytes) -> Response: - parsed = self._extract_region_and_service(request.headers) - if not parsed: - return requests_response("", status_code=400) - region_name, service_name = parsed - - # Map service names based on request context - service_name = self._get_service_name(service_name, request.path) - - query_string = to_str(request.query_string or "") - - LOG.debug( - "Proxying request to %s (%s): %s %s %s", - service_name, - region_name, - request.method, - request.path, - query_string, - ) - - # Convert Quart headers to a dict for the LocalStack Request - headers_dict = dict(request.headers) - request = Request( - body=data, - method=request.method, - headers=headers_dict, - path=request.path, - query_string=query_string, - ) - session = boto3.Session() - client = session.client(service_name, region_name=region_name) - - # fix headers (e.g., "Host") and create client - self._fix_headers(request, service_name) - self._fix_host_and_path(request, service_name) - - # create request and request dict - operation_model, aws_request, request_dict = self._parse_aws_request( - request, service_name, region_name=region_name, client=client - ) - - # adjust request dict and fix certain edge cases in the request - self._adjust_request_dict(service_name, request_dict) - - headers_truncated = { - k: truncate(to_str(v)) for k, v in dict(aws_request.headers).items() - } - LOG.debug( - "Sending request for service %s to AWS: %s %s - %s - %s", - service_name, - request.method, - aws_request.url, - truncate_content(request_dict.get("body"), max_length=500), - headers_truncated, - ) - try: - # send request to upstream AWS - result = client._endpoint.make_request(operation_model, request_dict) - - # create response object - TODO: to be replaced with localstack.http.Response over time - response = requests_response( - result[0].content, - status_code=result[0].status_code, - headers=dict(result[0].headers), - ) - - LOG.debug( - "Received response for service %s from AWS: %s - %s", - service_name, - response.status_code, - truncate_content(response.content, max_length=500), - ) - return response - except Exception as e: - if LOG.isEnabledFor(logging.DEBUG): - LOG.exception( - "Error when making request to AWS service %s: %s", service_name, e - ) - return requests_response("", status_code=400) - - def register_in_instance(self): - port = getattr(self, "port", None) - if not port: - raise Exception("Proxy currently not running") - url = f"{external_service_url()}{HANDLER_PATH_PROXIES}" - data = AddProxyRequest(port=port, config=self.config) - LOG.debug("Registering new proxy in main container via: %s", url) - try: - response = requests.post(url, json=data) - assert response.ok - return response - except Exception: - LOG.warning( - "Unable to register auth proxy - is LocalStack running with the extension enabled?" - ) - raise - - def deregister_from_instance(self): - """Deregister this proxy from the LocalStack instance.""" - port = getattr(self, "port", None) - if not port: - return - url = f"{external_service_url()}{HANDLER_PATH_PROXIES}/{port}" - LOG.debug("Deregistering proxy from main container via: %s", url) - try: - response = requests.delete(url) - return response - except Exception as e: - LOG.debug("Unable to deregister auth proxy: %s", e) - - def _parse_aws_request( - self, request: Request, service_name: str, region_name: str, client - ) -> Tuple[OperationModel, AWSPreparedRequest, Dict]: - # Get botocore's service model for making the actual AWS request - botocore_service_model = self._get_botocore_service_model(service_name) - - # Check if request uses JSON protocol (X-Amz-Target header) while service model - # uses RPC v2 CBOR. In this case, we need to parse the request manually since - # create_parser would reject the X-Amz-Target header for RPC v2 services. - x_amz_target = request.headers.get("X-Amz-Target") or request.headers.get( - "X-Amzn-Target" - ) - if x_amz_target and botocore_service_model.protocol == "smithy-rpc-v2-cbor": - # Extract operation name from X-Amz-Target (format: "ServiceName.OperationName") - operation_name = x_amz_target.split(".")[-1] - operation_model = botocore_service_model.operation_model(operation_name) - # Parse JSON body - parsed_request = json.loads(to_str(request.data)) if request.data else {} - else: - # Use LocalStack's parser for other protocols - localstack_service_model = load_service(service_name) - parser = create_parser(localstack_service_model) - ls_operation_model, parsed_request = parser.parse(request) - operation_model = botocore_service_model.operation_model( - ls_operation_model.name - ) - - request_context = { - "client_region": region_name, - "has_streaming_input": operation_model.has_streaming_input, - "auth_type": operation_model.auth_type, - "client_config": client.meta.config, - } - parsed_request = {} if parsed_request is None else parsed_request - parsed_request = {k: v for k, v in parsed_request.items() if v is not None} - - # get endpoint info - endpoint_info = client._resolve_endpoint_ruleset( - operation_model, parsed_request, request_context - ) - # switch for https://github.com/boto/botocore/commit/826b78c54dd87b9da368e9ab6017d8c4823b28c1 - if len(endpoint_info) == 3: - endpoint_url, additional_headers, properties = endpoint_info - if properties: - request_context["endpoint_properties"] = properties - else: - endpoint_url, additional_headers = endpoint_info - - # create request dict - request_dict = client._convert_to_request_dict( - parsed_request, - operation_model, - endpoint_url=endpoint_url, - context=request_context, - headers=additional_headers, - ) - - # TODO: fix for switch between path/host addressing - # Note: the behavior seems to be different across botocore versions. Seems to be working - # with 1.29.97 (fix below not required) whereas newer versions like 1.29.151 require the fix. - if service_name == "s3": - request_url = request_dict["url"] - url_parsed = list(urlparse(request_url)) - path_parts = url_parsed[2].strip("/").split("/") - bucket_subdomain_prefix = f"://{path_parts[0]}.s3." - if bucket_subdomain_prefix in request_url: - prefix = f"/{path_parts[0]}" - url_parsed[2] = url_parsed[2].removeprefix(prefix) - request_dict["url_path"] = request_dict["url_path"].removeprefix(prefix) - # replace empty path with "/" (seems required for signature calculation) - request_dict["url_path"] = request_dict["url_path"] or "/" - url_parsed[2] = url_parsed[2] or "/" - # re-construct final URL - request_dict["url"] = urlunparse(url_parsed) - - aws_request = client._endpoint.create_request(request_dict, operation_model) - - return operation_model, aws_request, request_dict - - def _adjust_request_dict(self, service_name: str, request_dict: Dict): - """Apply minor fixes to the request dict, which seem to be required in the current setup.""" - - req_body = request_dict.get("body") - body_str = run_safe(lambda: to_str(req_body)) or "" - - # TODO: this custom fix should not be required - investigate and remove! - if ( - "' - f"{region}" - ) - - if service_name == "sqs" and isinstance(req_body, dict): - account_id = self._query_account_id_from_aws() - if "QueueUrl" in req_body: - queue_name = req_body["QueueUrl"].split("/")[-1] - req_body["QueueUrl"] = ( - f"https://queue.amazonaws.com/{account_id}/{queue_name}" - ) - if "QueueOwnerAWSAccountId" in req_body: - req_body["QueueOwnerAWSAccountId"] = account_id - if service_name == "sqs" and request_dict.get("url"): - req_json = run_safe(lambda: json.loads(body_str)) or {} - account_id = self._query_account_id_from_aws() - queue_name = req_json.get("QueueName") - if account_id and queue_name: - request_dict["url"] = ( - f"https://queue.amazonaws.com/{account_id}/{queue_name}" - ) - req_json["QueueOwnerAWSAccountId"] = account_id - request_dict["body"] = to_bytes(json.dumps(req_json)) - - def _fix_headers(self, request: Request, service_name: str): - if service_name == "s3": - # fix the Host header, to avoid bucket addressing issues - host = request.headers.get("Host") or "" - regex = r"^(https?://)?([0-9.]+|localhost)(:[0-9]+)?" - if re.match(regex, host): - request.headers["Host"] = re.sub( - regex, rf"\1s3.{LOCALHOST_HOSTNAME}", host - ) - request.headers.pop("Content-Length", None) - request.headers.pop("x-localstack-request-url", None) - request.headers.pop("X-Forwarded-For", None) - request.headers.pop("X-Localstack-Tgt-Api", None) - request.headers.pop("X-Moto-Account-Id", None) - request.headers.pop("Remote-Addr", None) - - def _fix_host_and_path(self, request: Request, service_name: str): - if service_name == "s3": - # fix the path and prepend the bucket name, to avoid bucket addressing issues - regex_base_domain = rf"((amazonaws\.com)|({LOCALHOST_HOSTNAME}))" - host = request.headers.pop(HEADER_HOST_ORIGINAL, None) - host = host or request.headers.get("Host") or "" - match = re.match(rf"(.+)\.s3\..*{regex_base_domain}", host) - if match: - # prepend the bucket name (extracted from the host) to the path of the request (path-based addressing) - request.path = f"/{match.group(1)}{request.path}" - - def _extract_region_and_service(self, headers) -> Optional[Tuple[str, str]]: - auth_header = headers.pop("Authorization", "") - parts = auth_header.split("Credential=", maxsplit=1) - if len(parts) < 2: - return - parts = parts[1].split("/") - if len(parts) < 5: - return - return parts[2], parts[3] - - def _get_service_name(self, service_name: str, path: str) -> str: - """Map AWS signing service names to boto3 client names based on request context.""" - # Map AWS signing names to boto3 client names - service_name = SERVICE_NAME_MAPPING.get(service_name, service_name) - # API Gateway v2 uses 'apigateway' as signing name but needs 'apigatewayv2' client - if service_name == "apigateway" and path.startswith("/v2/"): - return "apigatewayv2" - # CloudWatch uses 'monitoring' as signing name - if service_name == "monitoring": - return "cloudwatch" - return service_name - - @cache - def _query_account_id_from_aws(self) -> str: - session = boto3.Session() - sts_client = session.client("sts") - result = sts_client.get_caller_identity() - return result["Account"] - - @staticmethod - @cache - def _get_botocore_service_model(service_name: str): - """ - Get the botocore service model for a service. This is used instead of LocalStack's - load_service() to ensure protocol compatibility, as LocalStack may use newer protocol - versions (e.g., smithy-rpc-v2-cbor) while clients use older protocols (e.g., query). - """ - session = get_botocore_session() - loader = session.get_component("data_loader") - api_data = loader.load_service_model(service_name, "service-2") - return ServiceModel(api_data) - - -def start_aws_auth_proxy(config: ProxyConfig, port: int = None) -> AuthProxyAWS: - setup_logging() - proxy = AuthProxyAWS(config, port=port) - proxy.start() - return proxy - - -def start_aws_auth_proxy_in_container( - config: ProxyConfig, env_vars: dict = None, port: int = None, quiet: bool = False -): - """ - Run the auth proxy in a separate local container. This can help in cases where users - are running into version/dependency issues on their host machines. - """ - # TODO: Currently running a container and installing the extension on the fly - we - # should consider building pre-baked images for the extension in the future. Also, - # the new packaged CLI binary can help us gain more stability over time... - - logging.getLogger("localstack.utils.container_utils.docker_cmd_client").setLevel( - logging.INFO - ) - logging.getLogger("localstack.utils.docker_utils").setLevel(logging.INFO) - logging.getLogger("localstack.utils.run").setLevel(logging.INFO) - - print("Proxy container is starting up...") - - # determine port mapping - localstack_config.PORTS_CHECK_DOCKER_IMAGE = DOCKER_IMAGE_NAME_PRO - port = port or reserve_available_container_port() - ports = PortMappings() - ports.add(port, port) - - # create container - container_name = f"{CONTAINER_NAME_PREFIX}{short_uid()}" - image_name = DOCKER_IMAGE_NAME_PRO - # add host mapping for localstack.cloud to localhost to prevent the health check from failing - additional_flags = ( - repl_config.PROXY_DOCKER_FLAGS - + " --add-host=localhost.localstack.cloud:host-gateway" - ) - DOCKER_CLIENT.create_container( - image_name, - name=container_name, - entrypoint="", - command=[ - "bash", - "-c", - f"touch {CONTAINER_LOG_FILE}; tail -f {CONTAINER_LOG_FILE}", - ], - ports=ports, - additional_flags=additional_flags, - ) - - # start container in detached mode - DOCKER_CLIENT.start_container(container_name, attach=False) - - # install extension CLI package - venv_activate = ". .venv/bin/activate" - command = [ - "bash", - "-c", - # TODO: manually installing quart/h11/hypercorn as a dirty quick fix for now. To be fixed! - f"{venv_activate}; pip install h11 hypercorn quart; pip install --upgrade --no-deps '{CLI_PIP_PACKAGE}'", - ] - DOCKER_CLIENT.exec_in_container(container_name, command=command) - - # create config file in container - config_file_host = new_tmp_file() - save_file(config_file_host, json.dumps(config)) - DOCKER_CLIENT.copy_into_container( - container_name, config_file_host, container_path=CONTAINER_CONFIG_FILE - ) - - # prepare environment variables - env_var_names = [ - "DEBUG", - "AWS_SECRET_ACCESS_KEY", - "AWS_ACCESS_KEY_ID", - "AWS_SESSION_TOKEN", - "AWS_DEFAULT_REGION", - "LOCALSTACK_AUTH_TOKEN", - ] - env_vars = env_vars or os.environ - env_vars = select_attributes(dict(env_vars), env_var_names) - - # Determine target hostname - we make the host configurable via PROXY_LOCALSTACK_HOST, - # and if not configured then use get_docker_host_from_container() as a fallback. - target_host = repl_config.PROXY_LOCALSTACK_HOST - if not repl_config.PROXY_LOCALSTACK_HOST: - target_host = get_docker_host_from_container() - env_vars["LOCALSTACK_HOST"] = target_host - - try: - print("Proxy container is ready.") - # Start proxy server in background using Python directly (no CLI dependency) - start_server_cmd = ( - f"{venv_activate}; " - f'python -c "from aws_proxy.client.auth_proxy import AuthProxyAWS; ' - f"AuthProxyAWS.start_from_config_file('{CONTAINER_CONFIG_FILE}', {port})\" " - f">> {CONTAINER_LOG_FILE} 2>&1 &" - ) - # Wait for proxy server to start, then register with LocalStack - register_cmd = ( - f"sleep 2 && {venv_activate}; " - f'python -c "from aws_proxy.client.auth_proxy import AuthProxyAWS; ' - f"AuthProxyAWS.register_proxy('{CONTAINER_CONFIG_FILE}', {port}, '{target_host}')\" " - f">> {CONTAINER_LOG_FILE} 2>&1" - ) - command = f"{start_server_cmd} {register_cmd}" - DOCKER_CLIENT.exec_in_container( - container_name, - command=["bash", "-c", command], - env_vars=env_vars, - interactive=False, - ) - except KeyboardInterrupt: - pass - except Exception as e: - LOG.info("Error: %s", e) - finally: - try: - if repl_config.CLEANUP_PROXY_CONTAINERS: - DOCKER_CLIENT.remove_container(container_name, force=True) - except Exception as e: - if "already in progress" not in str(e): - raise diff --git a/aws-proxy/aws_proxy/client/cli.py b/aws-proxy/aws_proxy/client/cli.py deleted file mode 100644 index f3ece0ea..00000000 --- a/aws-proxy/aws_proxy/client/cli.py +++ /dev/null @@ -1,87 +0,0 @@ -import re -import sys - -# Note: This CLI plugin is deprecated and may be removed in a future version. -# Use the LocalStack internal API or the LocalStack Web App to configure the proxy instead. - -import click -import yaml -from localstack_cli.cli import LocalstackCli, LocalstackCliPlugin, console -from localstack_cli.pro.core.cli.aws import aws -from localstack_cli.pro.core.config import is_auth_token_configured -from localstack.utils.files import load_file - -from aws_proxy.shared.models import ProxyConfig, ProxyServiceConfig - - -class AwsProxyPlugin(LocalstackCliPlugin): - name = "aws-proxy" - - def should_load(self) -> bool: - return is_auth_token_configured() - - def attach(self, cli: LocalstackCli) -> None: - group: click.Group = cli.group - if not group.get_command(ctx=None, cmd_name="aws"): - group.add_command(aws) - aws.add_command(cmd_aws_proxy) - - -@click.command(name="proxy", help="Start up an authentication proxy against real AWS") -@click.option( - "-s", - "--services", - help="Comma-delimited list of services to proxy (e.g., sqs,s3)", - required=False, -) -@click.option( - "-c", - "--config", - help="Path to config file for detailed proxy configurations", - required=False, -) -@click.option( - "--host", - help="Network bind host to expose the proxy process on (default: 127.0.0.1)", - required=False, -) -@click.option( - "--container", - help="Run the proxy in a container and not on the host", - required=False, - is_flag=True, -) -@click.option( - "-p", - "--port", - help="Custom port to run the proxy on (by default a random port is used)", - required=False, -) -def cmd_aws_proxy(services: str, config: str, container: bool, port: int, host: str): - from aws_proxy.client.auth_proxy import start_aws_auth_proxy_in_container - - config_json: ProxyConfig = {"services": {}} - if config: - config_json = yaml.load(load_file(config), Loader=yaml.SafeLoader) - if host: - config_json["bind_host"] = host - if services: - services = _split_string(services) - for service in services: - config_json["services"][service] = ProxyServiceConfig(resources=".*") - try: - if container: - return start_aws_auth_proxy_in_container(config_json) - - # note: deferring the import here, to avoid import errors in CLI context - from aws_proxy.client.auth_proxy import start_aws_auth_proxy - - proxy = start_aws_auth_proxy(config_json, port=port) - proxy.join() - except Exception as e: - console.print(f"Unable to start and register auth proxy: {e}") - sys.exit(1) - - -def _split_string(string): - return [s.strip().lower() for s in re.split(r"[\s,]+", string) if s.strip()] diff --git a/aws-proxy/aws_proxy/client/http2_server.py b/aws-proxy/aws_proxy/client/http2_server.py deleted file mode 100644 index 9155fbb4..00000000 --- a/aws-proxy/aws_proxy/client/http2_server.py +++ /dev/null @@ -1,325 +0,0 @@ -# TODO: currently this is only used for the auth_proxy. replace at some point with the more modern gateway -# server -import asyncio -import collections.abc -import logging -import os -import ssl -import threading -import traceback -from typing import Callable, List, Tuple - -import h11 -from hypercorn import utils as hypercorn_utils -from hypercorn.asyncio import serve, tcp_server -from hypercorn.config import Config -from hypercorn.events import Closed -from hypercorn.protocol import http_stream -from localstack import config -from localstack.utils.asyncio import ensure_event_loop, run_coroutine, run_sync -from localstack.utils.files import load_file -from localstack.utils.http import uses_chunked_encoding -from localstack.utils.run import FuncThread -from localstack.utils.sync import retry -from localstack.utils.threads import TMP_THREADS -from quart import Quart -from quart import app as quart_app -from quart import asgi as quart_asgi -from quart import make_response, request -from quart import utils as quart_utils -from quart.app import _cancel_all_tasks - -LOG = logging.getLogger(__name__) - -HTTP_METHODS = ["GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS", "PATCH"] - -# flag to avoid lowercasing all header names (e.g., some AWS S3 SDKs depend on "ETag" response header) -RETURN_CASE_SENSITIVE_HEADERS = True - -# default max content length for HTTP server requests (256 MB) -DEFAULT_MAX_CONTENT_LENGTH = 256 * 1024 * 1024 - -# cache of SSL contexts (indexed by cert file names) -SSL_CONTEXTS = {} -SSL_LOCK = threading.RLock() - - -def setup_quart_logging(): - # set up loggers to avoid duplicate log lines in quart - for name in ["quart.app", "quart.serving"]: - log = logging.getLogger(name) - log.setLevel(logging.INFO if config.DEBUG else logging.WARNING) - for hdl in list(log.handlers): - log.removeHandler(hdl) - - -def apply_patches(): - def InformationalResponse_init(self, *args, **kwargs): - if kwargs.get("status_code") == 100 and not kwargs.get("reason"): - # add missing "100 Continue" keyword which makes boto3 HTTP clients fail/hang - kwargs["reason"] = "Continue" - InformationalResponse_init_orig(self, *args, **kwargs) - - InformationalResponse_init_orig = h11.InformationalResponse.__init__ - h11.InformationalResponse.__init__ = InformationalResponse_init - - # skip error logging for ssl.SSLError in hypercorn tcp_server.py _read_data() - - async def _read_data(self) -> None: - try: - return await _read_data_orig(self) - except Exception: - await self.protocol.handle(Closed()) - - _read_data_orig = tcp_server.TCPServer._read_data - tcp_server.TCPServer._read_data = _read_data - - # skip error logging for ssl.SSLError in hypercorn tcp_server.py _close() - - async def _close(self) -> None: - try: - return await _close_orig(self) - except ssl.SSLError: - return - - _close_orig = tcp_server.TCPServer._close - tcp_server.TCPServer._close = _close - - # avoid SSL context initialization errors when running multiple server threads in parallel - - def create_ssl_context(self, *args, **kwargs): - with SSL_LOCK: - key = "%s%s" % (self.certfile, self.keyfile) - if key not in SSL_CONTEXTS: - # perform retries to circumvent "ssl.SSLError: [SSL] PEM lib (_ssl.c:4012)" - def _do_create(): - SSL_CONTEXTS[key] = create_ssl_context_orig(self, *args, **kwargs) - - retry(_do_create, retries=3, sleep=0.5) - return SSL_CONTEXTS[key] - - create_ssl_context_orig = Config.create_ssl_context - Config.create_ssl_context = create_ssl_context - - # apply patch for case-sensitive header names (e.g., some AWS S3 SDKs depend on "ETag" case-sensitive header) - - def _encode_headers(headers): - if RETURN_CASE_SENSITIVE_HEADERS: - return [(key.encode(), value.encode()) for key, value in headers.items()] - return [ - (key.lower().encode(), value.encode()) for key, value in headers.items() - ] - - quart_asgi._encode_headers = quart_asgi.encode_headers = _encode_headers - quart_app.encode_headers = quart_utils.encode_headers = _encode_headers - - def build_and_validate_headers(headers): - validated_headers = [] - for name, value in headers: - if name[0] == b":"[0]: - raise ValueError("Pseudo headers are not valid") - header_name = ( - bytes(name) if RETURN_CASE_SENSITIVE_HEADERS else bytes(name).lower() - ) - validated_headers.append((header_name.strip(), bytes(value).strip())) - return validated_headers - - hypercorn_utils.build_and_validate_headers = build_and_validate_headers - http_stream.build_and_validate_headers = build_and_validate_headers - - # avoid "h11._util.LocalProtocolError: Too little data for declared Content-Length" for certain status codes - - def suppress_body(method, status_code): - if status_code == 412: - return False - return suppress_body_orig(method, status_code) - - suppress_body_orig = hypercorn_utils.suppress_body - hypercorn_utils.suppress_body = suppress_body - http_stream.suppress_body = suppress_body - - -class HTTPErrorResponse(Exception): - def __init__(self, *args, code=None, **kwargs): - super(HTTPErrorResponse, self).__init__(*args, **kwargs) - self.code = code - - -def get_async_generator_result(result): - gen, headers = result, {} - if isinstance(result, tuple) and len(result) >= 2: - gen, headers = result[:2] - if not isinstance(gen, (collections.abc.Generator, collections.abc.AsyncGenerator)): - return - return gen, headers - - -def run_server( - port: int, - bind_addresses: List[str], - handler: Callable = None, - asynchronous: bool = True, - ssl_creds: Tuple[str, str] = None, - max_content_length: int = None, - send_timeout: int = None, -): - """ - Run an HTTP2-capable Web server on the given port, processing incoming requests via a `handler` function. - :param port: port to bind to - :param bind_addresses: addresses to bind to - :param handler: callable that receives the request and returns a response - :param asynchronous: whether to start the server asynchronously in the background - :param ssl_creds: optional tuple with SSL cert file names (cert file, key file) - :param max_content_length: maximum content length of uploaded payload - :param send_timeout: timeout (in seconds) for sending the request payload over the wire - """ - - ensure_event_loop() - app = Quart(__name__, static_folder=None) - app.config["MAX_CONTENT_LENGTH"] = max_content_length or DEFAULT_MAX_CONTENT_LENGTH - if send_timeout: - app.config["BODY_TIMEOUT"] = send_timeout - - @app.route("/", methods=HTTP_METHODS, defaults={"path": ""}) - @app.route("/", methods=HTTP_METHODS) - async def index(path=None): - response = await make_response("{}") - if handler: - data = await request.get_data() - try: - result = await run_sync(handler, request, data) - if isinstance(result, Exception): - raise result - except Exception as e: - LOG.warning( - "Error in proxy handler for request %s %s: %s %s", - request.method, - request.url, - e, - traceback.format_exc(), - ) - response.status_code = 500 - if isinstance(e, HTTPErrorResponse): - response.status_code = e.code or response.status_code - return response - if result is not None: - # check if this is an async generator (for HTTP2 push event responses) - async_gen = get_async_generator_result(result) - if async_gen: - return async_gen - # prepare and return regular response - is_chunked = uses_chunked_encoding(result) - result_content = result.content or "" - response = await make_response(result_content) - response.status_code = result.status_code - if is_chunked: - response.headers.pop("Content-Length", None) - result.headers.pop("Server", None) - result.headers.pop("Date", None) - headers = { - k: str(v).replace("\n", r"\n") for k, v in result.headers.items() - } - response.headers.update(headers) - # set multi-value headers - multi_value_headers = getattr(result, "multi_value_headers", {}) - for key, values in multi_value_headers.items(): - for value in values: - response.headers.add_header(key, value) - # set default headers, if required - if not is_chunked and request.method not in ["OPTIONS", "HEAD"]: - response_data = await response.get_data() - response.headers["Content-Length"] = str(len(response_data or "")) - if "Connection" not in response.headers: - response.headers["Connection"] = "close" - # fix headers for OPTIONS requests (possible fix for Firefox requests) - if request.method == "OPTIONS": - response.headers.pop("Content-Type", None) - if not response.headers.get("Cache-Control"): - response.headers["Cache-Control"] = "no-cache" - return response - - def run_app_sync(*args, loop=None, shutdown_event=None): - kwargs = {} - config = Config() - cert_file_name, key_file_name = ssl_creds or (None, None) - if cert_file_name: - kwargs["certfile"] = cert_file_name - config.certfile = cert_file_name - if key_file_name: - kwargs["keyfile"] = key_file_name - config.keyfile = key_file_name - setup_quart_logging() - config.h11_pass_raw_headers = True - config.bind = [f"{bind_address}:{port}" for bind_address in bind_addresses] - config.workers = len(bind_addresses) - loop = loop or ensure_event_loop() - run_kwargs = {} - if shutdown_event: - run_kwargs["shutdown_trigger"] = shutdown_event.wait - try: - try: - return loop.run_until_complete(serve(app, config, **run_kwargs)) - except Exception as e: - LOG.info( - "Error running server event loop on port %s: %s %s", - port, - e, - traceback.format_exc(), - ) - if "SSL" in str(e): - c_exists = os.path.exists(cert_file_name) - k_exists = os.path.exists(key_file_name) - c_size = len(load_file(cert_file_name)) if c_exists else 0 - k_size = len(load_file(key_file_name)) if k_exists else 0 - LOG.warning( - "Unable to create SSL context. Cert files exist: %s %s (%sB), %s %s (%sB)", - cert_file_name, - c_exists, - c_size, - key_file_name, - k_exists, - k_size, - ) - raise - finally: - try: - _cancel_all_tasks(loop) - loop.run_until_complete(loop.shutdown_asyncgens()) - finally: - asyncio.set_event_loop(None) - loop.close() - - class ProxyThread(FuncThread): - def __init__(self): - FuncThread.__init__(self, self.run_proxy, None, name="proxy-thread") - self.shutdown_event = None - self.loop = None - - def run_proxy(self, *args): - self.loop = ensure_event_loop() - self.shutdown_event = asyncio.Event() - run_app_sync(loop=self.loop, shutdown_event=self.shutdown_event) - - def stop(self, quiet=None): - event = self.shutdown_event - - async def set_event(): - event.set() - - run_coroutine(set_event(), self.loop) - super().stop(quiet) - - def run_in_thread(): - thread = ProxyThread() - thread.start() - TMP_THREADS.append(thread) - return thread - - if asynchronous: - return run_in_thread() - - return run_app_sync() - - -# apply patches on startup -apply_patches() diff --git a/aws-proxy/aws_proxy/client/resource_types.json b/aws-proxy/aws_proxy/client/resource_types.json deleted file mode 100644 index 9d153f08..00000000 --- a/aws-proxy/aws_proxy/client/resource_types.json +++ /dev/null @@ -1,442 +0,0 @@ -[ - {"TypeName": "AWS::ACMPCA::Certificate"}, - {"TypeName": "AWS::ACMPCA::CertificateAuthority"}, - {"TypeName": "AWS::ACMPCA::CertificateAuthorityActivation"}, - {"TypeName": "AWS::APS::RuleGroupsNamespace"}, - {"TypeName": "AWS::APS::Workspace"}, - {"TypeName": "AWS::AccessAnalyzer::Analyzer"}, - {"TypeName": "AWS::Amplify::App"}, - {"TypeName": "AWS::Amplify::Branch"}, - {"TypeName": "AWS::Amplify::Domain"}, - {"TypeName": "AWS::AmplifyUIBuilder::Component"}, - {"TypeName": "AWS::AmplifyUIBuilder::Theme"}, - {"TypeName": "AWS::ApiGateway::Account"}, - {"TypeName": "AWS::ApiGateway::ApiKey"}, - {"TypeName": "AWS::ApiGateway::Authorizer"}, - {"TypeName": "AWS::ApiGateway::BasePathMapping"}, - {"TypeName": "AWS::ApiGateway::ClientCertificate"}, - {"TypeName": "AWS::ApiGateway::Deployment"}, - {"TypeName": "AWS::ApiGateway::DocumentationVersion"}, - {"TypeName": "AWS::ApiGateway::DomainName"}, - {"TypeName": "AWS::ApiGateway::Method"}, - {"TypeName": "AWS::ApiGateway::Model"}, - {"TypeName": "AWS::ApiGateway::RequestValidator"}, - {"TypeName": "AWS::ApiGateway::Stage"}, - {"TypeName": "AWS::ApiGateway::UsagePlan"}, - {"TypeName": "AWS::ApiGatewayV2::VpcLink"}, - {"TypeName": "AWS::AppFlow::ConnectorProfile"}, - {"TypeName": "AWS::AppFlow::Flow"}, - {"TypeName": "AWS::AppRunner::Service"}, - {"TypeName": "AWS::AppStream::Application"}, - {"TypeName": "AWS::AppStream::Entitlement"}, - {"TypeName": "AWS::AppSync::DomainName"}, - {"TypeName": "AWS::AppSync::DomainNameApiAssociation"}, - {"TypeName": "AWS::ApplicationInsights::Application"}, - {"TypeName": "AWS::Athena::DataCatalog"}, - {"TypeName": "AWS::Athena::NamedQuery"}, - {"TypeName": "AWS::Athena::PreparedStatement"}, - {"TypeName": "AWS::Athena::WorkGroup"}, - {"TypeName": "AWS::AuditManager::Assessment"}, - {"TypeName": "AWS::AutoScaling::LifecycleHook"}, - {"TypeName": "AWS::AutoScaling::WarmPool"}, - {"TypeName": "AWS::Backup::BackupPlan"}, - {"TypeName": "AWS::Backup::BackupVault"}, - {"TypeName": "AWS::Backup::Framework"}, - {"TypeName": "AWS::Backup::ReportPlan"}, - {"TypeName": "AWS::Batch::ComputeEnvironment"}, - {"TypeName": "AWS::Batch::JobQueue"}, - {"TypeName": "AWS::Batch::SchedulingPolicy"}, - {"TypeName": "AWS::Budgets::BudgetsAction"}, - {"TypeName": "AWS::CE::CostCategory"}, - {"TypeName": "AWS::Cassandra::Keyspace"}, - {"TypeName": "AWS::Cassandra::Table"}, - {"TypeName": "AWS::CertificateManager::Account"}, - {"TypeName": "AWS::Chatbot::SlackChannelConfiguration"}, - {"TypeName": "AWS::CloudFormation::HookDefaultVersion"}, - {"TypeName": "AWS::CloudFormation::HookTypeConfig"}, - {"TypeName": "AWS::CloudFormation::ResourceDefaultVersion"}, - {"TypeName": "AWS::CloudFormation::StackSet"}, - {"TypeName": "AWS::CloudFormation::TypeActivation"}, - {"TypeName": "AWS::CloudFront::CachePolicy"}, - {"TypeName": "AWS::CloudFront::CloudFrontOriginAccessIdentity"}, - {"TypeName": "AWS::CloudFront::Distribution"}, - {"TypeName": "AWS::CloudFront::Function"}, - {"TypeName": "AWS::CloudFront::KeyGroup"}, - {"TypeName": "AWS::CloudFront::OriginRequestPolicy"}, - {"TypeName": "AWS::CloudFront::PublicKey"}, - {"TypeName": "AWS::CloudFront::RealtimeLogConfig"}, - {"TypeName": "AWS::CloudFront::ResponseHeadersPolicy"}, - {"TypeName": "AWS::CloudTrail::Trail"}, - {"TypeName": "AWS::CloudWatch::CompositeAlarm"}, - {"TypeName": "AWS::CloudWatch::MetricStream"}, - {"TypeName": "AWS::CodeArtifact::Domain"}, - {"TypeName": "AWS::CodeArtifact::Repository"}, - {"TypeName": "AWS::CodeGuruProfiler::ProfilingGroup"}, - {"TypeName": "AWS::CodeStarConnections::Connection"}, - {"TypeName": "AWS::CodeStarNotifications::NotificationRule"}, - {"TypeName": "AWS::Config::AggregationAuthorization"}, - {"TypeName": "AWS::Config::ConfigurationAggregator"}, - {"TypeName": "AWS::Config::ConformancePack"}, - {"TypeName": "AWS::Config::OrganizationConformancePack"}, - {"TypeName": "AWS::Config::StoredQuery"}, - {"TypeName": "AWS::DataBrew::Dataset"}, - {"TypeName": "AWS::DataBrew::Job"}, - {"TypeName": "AWS::DataBrew::Project"}, - {"TypeName": "AWS::DataBrew::Recipe"}, - {"TypeName": "AWS::DataBrew::Ruleset"}, - {"TypeName": "AWS::DataBrew::Schedule"}, - {"TypeName": "AWS::DataSync::Agent"}, - {"TypeName": "AWS::DataSync::LocationEFS"}, - {"TypeName": "AWS::DataSync::LocationFSxLustre"}, - {"TypeName": "AWS::DataSync::LocationFSxONTAP"}, - {"TypeName": "AWS::DataSync::LocationFSxOpenZFS"}, - {"TypeName": "AWS::DataSync::LocationFSxWindows"}, - {"TypeName": "AWS::DataSync::LocationHDFS"}, - {"TypeName": "AWS::DataSync::LocationNFS"}, - {"TypeName": "AWS::DataSync::LocationObjectStorage"}, - {"TypeName": "AWS::DataSync::LocationS3"}, - {"TypeName": "AWS::DataSync::LocationSMB"}, - {"TypeName": "AWS::DataSync::Task"}, - {"TypeName": "AWS::Detective::Graph"}, - {"TypeName": "AWS::Detective::MemberInvitation"}, - {"TypeName": "AWS::DevOpsGuru::ResourceCollection"}, - {"TypeName": "AWS::DynamoDB::GlobalTable"}, - {"TypeName": "AWS::EC2::CapacityReservation"}, - {"TypeName": "AWS::EC2::CapacityReservationFleet"}, - {"TypeName": "AWS::EC2::CarrierGateway"}, - {"TypeName": "AWS::EC2::CustomerGateway"}, - {"TypeName": "AWS::EC2::DHCPOptions"}, - {"TypeName": "AWS::EC2::EC2Fleet"}, - {"TypeName": "AWS::EC2::FlowLog"}, - {"TypeName": "AWS::EC2::GatewayRouteTableAssociation"}, - {"TypeName": "AWS::EC2::Host"}, - {"TypeName": "AWS::EC2::IPAM"}, - {"TypeName": "AWS::EC2::IPAMPool"}, - {"TypeName": "AWS::EC2::IPAMScope"}, - {"TypeName": "AWS::EC2::InternetGateway"}, - {"TypeName": "AWS::EC2::LocalGatewayRouteTableVPCAssociation"}, - {"TypeName": "AWS::EC2::NatGateway"}, - {"TypeName": "AWS::EC2::NetworkAcl"}, - {"TypeName": "AWS::EC2::NetworkInsightsAccessScope"}, - {"TypeName": "AWS::EC2::NetworkInsightsAccessScopeAnalysis"}, - {"TypeName": "AWS::EC2::NetworkInsightsAnalysis"}, - {"TypeName": "AWS::EC2::NetworkInsightsPath"}, - {"TypeName": "AWS::EC2::NetworkInterface"}, - {"TypeName": "AWS::EC2::PrefixList"}, - {"TypeName": "AWS::EC2::RouteTable"}, - {"TypeName": "AWS::EC2::SpotFleet"}, - {"TypeName": "AWS::EC2::Subnet"}, - {"TypeName": "AWS::EC2::TransitGateway"}, - {"TypeName": "AWS::EC2::TransitGatewayAttachment"}, - {"TypeName": "AWS::EC2::TransitGatewayConnect"}, - {"TypeName": "AWS::EC2::TransitGatewayMulticastDomain"}, - {"TypeName": "AWS::EC2::TransitGatewayPeeringAttachment"}, - {"TypeName": "AWS::EC2::TransitGatewayVpcAttachment"}, - {"TypeName": "AWS::EC2::VPC"}, - {"TypeName": "AWS::EC2::VPCDHCPOptionsAssociation"}, - {"TypeName": "AWS::EC2::VPCPeeringConnection"}, - {"TypeName": "AWS::EC2::VPNGateway"}, - {"TypeName": "AWS::ECR::PullThroughCacheRule"}, - {"TypeName": "AWS::ECR::RegistryPolicy"}, - {"TypeName": "AWS::ECR::ReplicationConfiguration"}, - {"TypeName": "AWS::ECR::Repository"}, - {"TypeName": "AWS::ECS::CapacityProvider"}, - {"TypeName": "AWS::ECS::Cluster"}, - {"TypeName": "AWS::ECS::ClusterCapacityProviderAssociations"}, - {"TypeName": "AWS::ECS::PrimaryTaskSet"}, - {"TypeName": "AWS::ECS::Service"}, - {"TypeName": "AWS::ECS::TaskDefinition"}, - {"TypeName": "AWS::ECS::TaskSet"}, - {"TypeName": "AWS::EFS::AccessPoint"}, - {"TypeName": "AWS::EFS::FileSystem"}, - {"TypeName": "AWS::EFS::MountTarget"}, - {"TypeName": "AWS::EKS::Addon"}, - {"TypeName": "AWS::EKS::Cluster"}, - {"TypeName": "AWS::EKS::FargateProfile"}, - {"TypeName": "AWS::EKS::IdentityProviderConfig"}, - {"TypeName": "AWS::EKS::Nodegroup"}, - {"TypeName": "AWS::EMR::Studio"}, - {"TypeName": "AWS::EMR::StudioSessionMapping"}, - {"TypeName": "AWS::EMRContainers::VirtualCluster"}, - {"TypeName": "AWS::ElastiCache::GlobalReplicationGroup"}, - {"TypeName": "AWS::ElastiCache::User"}, - {"TypeName": "AWS::ElastiCache::UserGroup"}, - {"TypeName": "AWS::ElasticLoadBalancingV2::Listener"}, - {"TypeName": "AWS::ElasticLoadBalancingV2::ListenerRule"}, - {"TypeName": "AWS::EventSchemas::RegistryPolicy"}, - {"TypeName": "AWS::Events::ApiDestination"}, - {"TypeName": "AWS::Events::Archive"}, - {"TypeName": "AWS::Events::Connection"}, - {"TypeName": "AWS::Events::Endpoint"}, - {"TypeName": "AWS::Evidently::Experiment"}, - {"TypeName": "AWS::Evidently::Feature"}, - {"TypeName": "AWS::Evidently::Launch"}, - {"TypeName": "AWS::Evidently::Project"}, - {"TypeName": "AWS::FIS::ExperimentTemplate"}, - {"TypeName": "AWS::FMS::NotificationChannel"}, - {"TypeName": "AWS::FMS::Policy"}, - {"TypeName": "AWS::FinSpace::Environment"}, - {"TypeName": "AWS::Forecast::DatasetGroup"}, - {"TypeName": "AWS::FraudDetector::Detector"}, - {"TypeName": "AWS::FraudDetector::EntityType"}, - {"TypeName": "AWS::FraudDetector::EventType"}, - {"TypeName": "AWS::FraudDetector::Label"}, - {"TypeName": "AWS::FraudDetector::Outcome"}, - {"TypeName": "AWS::FraudDetector::Variable"}, - {"TypeName": "AWS::GameLift::Alias"}, - {"TypeName": "AWS::GameLift::Fleet"}, - {"TypeName": "AWS::GameLift::GameServerGroup"}, - {"TypeName": "AWS::GlobalAccelerator::Accelerator"}, - {"TypeName": "AWS::GlobalAccelerator::EndpointGroup"}, - {"TypeName": "AWS::GlobalAccelerator::Listener"}, - {"TypeName": "AWS::Glue::Registry"}, - {"TypeName": "AWS::Glue::Schema"}, - {"TypeName": "AWS::GreengrassV2::ComponentVersion"}, - {"TypeName": "AWS::GroundStation::Config"}, - {"TypeName": "AWS::GroundStation::MissionProfile"}, - {"TypeName": "AWS::HealthLake::FHIRDatastore"}, - {"TypeName": "AWS::IAM::InstanceProfile"}, - {"TypeName": "AWS::IAM::OIDCProvider"}, - {"TypeName": "AWS::IAM::Role"}, - {"TypeName": "AWS::IAM::SAMLProvider"}, - {"TypeName": "AWS::IAM::ServerCertificate"}, - {"TypeName": "AWS::IAM::VirtualMFADevice"}, - {"TypeName": "AWS::ImageBuilder::DistributionConfiguration"}, - {"TypeName": "AWS::ImageBuilder::ImagePipeline"}, - {"TypeName": "AWS::ImageBuilder::InfrastructureConfiguration"}, - {"TypeName": "AWS::Inspector::AssessmentTarget"}, - {"TypeName": "AWS::InspectorV2::Filter"}, - {"TypeName": "AWS::IoT::AccountAuditConfiguration"}, - {"TypeName": "AWS::IoT::Authorizer"}, - {"TypeName": "AWS::IoT::CACertificate"}, - {"TypeName": "AWS::IoT::Certificate"}, - {"TypeName": "AWS::IoT::CustomMetric"}, - {"TypeName": "AWS::IoT::Dimension"}, - {"TypeName": "AWS::IoT::DomainConfiguration"}, - {"TypeName": "AWS::IoT::FleetMetric"}, - {"TypeName": "AWS::IoT::Logging"}, - {"TypeName": "AWS::IoT::MitigationAction"}, - {"TypeName": "AWS::IoT::ProvisioningTemplate"}, - {"TypeName": "AWS::IoT::ResourceSpecificLogging"}, - {"TypeName": "AWS::IoT::RoleAlias"}, - {"TypeName": "AWS::IoT::ScheduledAudit"}, - {"TypeName": "AWS::IoT::SecurityProfile"}, - {"TypeName": "AWS::IoT::TopicRule"}, - {"TypeName": "AWS::IoT::TopicRuleDestination"}, - {"TypeName": "AWS::IoTAnalytics::Channel"}, - {"TypeName": "AWS::IoTAnalytics::Dataset"}, - {"TypeName": "AWS::IoTAnalytics::Datastore"}, - {"TypeName": "AWS::IoTAnalytics::Pipeline"}, - {"TypeName": "AWS::IoTEvents::AlarmModel"}, - {"TypeName": "AWS::IoTEvents::DetectorModel"}, - {"TypeName": "AWS::IoTEvents::Input"}, - {"TypeName": "AWS::IoTFleetHub::Application"}, - {"TypeName": "AWS::IoTSiteWise::AccessPolicy"}, - {"TypeName": "AWS::IoTSiteWise::Asset"}, - {"TypeName": "AWS::IoTSiteWise::AssetModel"}, - {"TypeName": "AWS::IoTSiteWise::Dashboard"}, - {"TypeName": "AWS::IoTSiteWise::Gateway"}, - {"TypeName": "AWS::IoTSiteWise::Portal"}, - {"TypeName": "AWS::IoTSiteWise::Project"}, - {"TypeName": "AWS::KMS::Alias"}, - {"TypeName": "AWS::KMS::Key"}, - {"TypeName": "AWS::KMS::ReplicaKey"}, - {"TypeName": "AWS::KafkaConnect::Connector"}, - {"TypeName": "AWS::Kendra::DataSource"}, - {"TypeName": "AWS::Kendra::Faq"}, - {"TypeName": "AWS::Kendra::Index"}, - {"TypeName": "AWS::Kinesis::Stream"}, - {"TypeName": "AWS::KinesisAnalyticsV2::Application"}, - {"TypeName": "AWS::KinesisFirehose::DeliveryStream"}, - {"TypeName": "AWS::KinesisVideo::SignalingChannel"}, - {"TypeName": "AWS::KinesisVideo::Stream"}, - {"TypeName": "AWS::LakeFormation::Tag"}, - {"TypeName": "AWS::Lambda::CodeSigningConfig"}, - {"TypeName": "AWS::Lambda::EventSourceMapping"}, - {"TypeName": "AWS::Lambda::Function"}, - {"TypeName": "AWS::Lambda::Url"}, - {"TypeName": "AWS::LicenseManager::Grant"}, - {"TypeName": "AWS::LicenseManager::License"}, - {"TypeName": "AWS::Lightsail::Alarm"}, - {"TypeName": "AWS::Lightsail::Bucket"}, - {"TypeName": "AWS::Lightsail::Certificate"}, - {"TypeName": "AWS::Lightsail::Container"}, - {"TypeName": "AWS::Lightsail::Database"}, - {"TypeName": "AWS::Lightsail::Disk"}, - {"TypeName": "AWS::Lightsail::Instance"}, - {"TypeName": "AWS::Lightsail::LoadBalancer"}, - {"TypeName": "AWS::Lightsail::LoadBalancerTlsCertificate"}, - {"TypeName": "AWS::Lightsail::StaticIp"}, - {"TypeName": "AWS::Logs::LogGroup"}, - {"TypeName": "AWS::Logs::MetricFilter"}, - {"TypeName": "AWS::Logs::QueryDefinition"}, - {"TypeName": "AWS::Logs::ResourcePolicy"}, - {"TypeName": "AWS::LookoutMetrics::AnomalyDetector"}, - {"TypeName": "AWS::LookoutVision::Project"}, - {"TypeName": "AWS::MSK::BatchScramSecret"}, - {"TypeName": "AWS::MSK::Cluster"}, - {"TypeName": "AWS::MSK::Configuration"}, - {"TypeName": "AWS::MWAA::Environment"}, - {"TypeName": "AWS::Macie::CustomDataIdentifier"}, - {"TypeName": "AWS::Macie::FindingsFilter"}, - {"TypeName": "AWS::Macie::Session"}, - {"TypeName": "AWS::MediaConnect::Flow"}, - {"TypeName": "AWS::MediaConnect::FlowEntitlement"}, - {"TypeName": "AWS::MediaConnect::FlowOutput"}, - {"TypeName": "AWS::MediaConnect::FlowSource"}, - {"TypeName": "AWS::MediaConnect::FlowVpcInterface"}, - {"TypeName": "AWS::MediaPackage::Channel"}, - {"TypeName": "AWS::MediaPackage::OriginEndpoint"}, - {"TypeName": "AWS::MediaPackage::PackagingGroup"}, - {"TypeName": "AWS::MemoryDB::ACL"}, - {"TypeName": "AWS::MemoryDB::Cluster"}, - {"TypeName": "AWS::MemoryDB::ParameterGroup"}, - {"TypeName": "AWS::MemoryDB::SubnetGroup"}, - {"TypeName": "AWS::MemoryDB::User"}, - {"TypeName": "AWS::NetworkFirewall::Firewall"}, - {"TypeName": "AWS::NetworkFirewall::FirewallPolicy"}, - {"TypeName": "AWS::NetworkFirewall::LoggingConfiguration"}, - {"TypeName": "AWS::NetworkFirewall::RuleGroup"}, - {"TypeName": "AWS::NetworkManager::Device"}, - {"TypeName": "AWS::NetworkManager::GlobalNetwork"}, - {"TypeName": "AWS::NetworkManager::Link"}, - {"TypeName": "AWS::NetworkManager::Site"}, - {"TypeName": "AWS::OpenSearchService::Domain"}, - {"TypeName": "AWS::OpsWorksCM::Server"}, - {"TypeName": "AWS::Personalize::Dataset"}, - {"TypeName": "AWS::QLDB::Stream"}, - {"TypeName": "AWS::QuickSight::Analysis"}, - {"TypeName": "AWS::QuickSight::Dashboard"}, - {"TypeName": "AWS::QuickSight::DataSet"}, - {"TypeName": "AWS::QuickSight::DataSource"}, - {"TypeName": "AWS::QuickSight::Template"}, - {"TypeName": "AWS::QuickSight::Theme"}, - {"TypeName": "AWS::RDS::DBProxy"}, - {"TypeName": "AWS::RDS::DBProxyEndpoint"}, - {"TypeName": "AWS::RDS::DBProxyTargetGroup"}, - {"TypeName": "AWS::RDS::EventSubscription"}, - {"TypeName": "AWS::RDS::GlobalCluster"}, - {"TypeName": "AWS::RUM::AppMonitor"}, - {"TypeName": "AWS::Redshift::Cluster"}, - {"TypeName": "AWS::Redshift::EndpointAccess"}, - {"TypeName": "AWS::Redshift::EndpointAuthorization"}, - {"TypeName": "AWS::Redshift::EventSubscription"}, - {"TypeName": "AWS::Redshift::ScheduledAction"}, - {"TypeName": "AWS::RedshiftServerless::Namespace"}, - {"TypeName": "AWS::RedshiftServerless::Workgroup"}, - {"TypeName": "AWS::RefactorSpaces::Route"}, - {"TypeName": "AWS::Rekognition::Collection"}, - {"TypeName": "AWS::Rekognition::Project"}, - {"TypeName": "AWS::Rekognition::StreamProcessor"}, - {"TypeName": "AWS::ResilienceHub::App"}, - {"TypeName": "AWS::ResilienceHub::ResiliencyPolicy"}, - {"TypeName": "AWS::ResourceGroups::Group"}, - {"TypeName": "AWS::RoboMaker::Fleet"}, - {"TypeName": "AWS::RoboMaker::Robot"}, - {"TypeName": "AWS::RoboMaker::RobotApplication"}, - {"TypeName": "AWS::RoboMaker::SimulationApplication"}, - {"TypeName": "AWS::RolesAnywhere::CRL"}, - {"TypeName": "AWS::RolesAnywhere::Profile"}, - {"TypeName": "AWS::RolesAnywhere::TrustAnchor"}, - {"TypeName": "AWS::Route53::CidrCollection"}, - {"TypeName": "AWS::Route53::HealthCheck"}, - {"TypeName": "AWS::Route53::HostedZone"}, - {"TypeName": "AWS::Route53::KeySigningKey"}, - {"TypeName": "AWS::Route53Resolver::FirewallDomainList"}, - {"TypeName": "AWS::Route53Resolver::FirewallRuleGroup"}, - {"TypeName": "AWS::Route53Resolver::FirewallRuleGroupAssociation"}, - {"TypeName": "AWS::Route53Resolver::ResolverRule"}, - {"TypeName": "AWS::S3::AccessPoint"}, - {"TypeName": "AWS::S3::Bucket"}, - {"TypeName": "AWS::S3::MultiRegionAccessPoint"}, - {"TypeName": "AWS::S3::MultiRegionAccessPointPolicy"}, - {"TypeName": "AWS::S3::StorageLens"}, - {"TypeName": "AWS::S3ObjectLambda::AccessPoint"}, - {"TypeName": "AWS::S3ObjectLambda::AccessPointPolicy"}, - {"TypeName": "AWS::S3Outposts::AccessPoint"}, - {"TypeName": "AWS::S3Outposts::Bucket"}, - {"TypeName": "AWS::S3Outposts::BucketPolicy"}, - {"TypeName": "AWS::SES::ConfigurationSet"}, - {"TypeName": "AWS::SES::ConfigurationSetEventDestination"}, - {"TypeName": "AWS::SES::ContactList"}, - {"TypeName": "AWS::SES::EmailIdentity"}, - {"TypeName": "AWS::SES::Template"}, - {"TypeName": "AWS::SQS::Queue"}, - {"TypeName": "AWS::SSM::Association"}, - {"TypeName": "AWS::SSM::Document"}, - {"TypeName": "AWS::SSM::ResourceDataSync"}, - {"TypeName": "AWS::SSMContacts::Contact"}, - {"TypeName": "AWS::SSMContacts::ContactChannel"}, - {"TypeName": "AWS::SSMIncidents::ReplicationSet"}, - {"TypeName": "AWS::SSMIncidents::ResponsePlan"}, - {"TypeName": "AWS::SSO::InstanceAccessControlAttributeConfiguration"}, - {"TypeName": "AWS::SSO::PermissionSet"}, - {"TypeName": "AWS::SageMaker::AppImageConfig"}, - {"TypeName": "AWS::SageMaker::Device"}, - {"TypeName": "AWS::SageMaker::DeviceFleet"}, - {"TypeName": "AWS::SageMaker::Domain"}, - {"TypeName": "AWS::SageMaker::Image"}, - {"TypeName": "AWS::SageMaker::ModelPackage"}, - {"TypeName": "AWS::SageMaker::ModelPackageGroup"}, - {"TypeName": "AWS::SageMaker::MonitoringSchedule"}, - {"TypeName": "AWS::SageMaker::Pipeline"}, - {"TypeName": "AWS::SageMaker::Project"}, - {"TypeName": "AWS::SageMaker::UserProfile"}, - {"TypeName": "AWS::ServiceCatalog::CloudFormationProvisionedProduct"}, - {"TypeName": "AWS::ServiceCatalog::ServiceAction"}, - {"TypeName": "AWS::ServiceCatalogAppRegistry::Application"}, - {"TypeName": "AWS::ServiceCatalogAppRegistry::AttributeGroup"}, - {"TypeName": "AWS::Signer::SigningProfile"}, - {"TypeName": "AWS::StepFunctions::Activity"}, - {"TypeName": "AWS::StepFunctions::StateMachine"}, - {"TypeName": "AWS::Synthetics::Canary"}, - {"TypeName": "AWS::Timestream::Database"}, - {"TypeName": "AWS::Timestream::ScheduledQuery"}, - {"TypeName": "AWS::Timestream::Table"}, - {"TypeName": "AWS::Transfer::Workflow"}, - {"TypeName": "AWS::WAFv2::IPSet"}, - {"TypeName": "AWS::WAFv2::LoggingConfiguration"}, - {"TypeName": "AWS::WAFv2::RegexPatternSet"}, - {"TypeName": "AWS::WAFv2::RuleGroup"}, - {"TypeName": "AWS::WAFv2::WebACL"}, - {"TypeName": "AWS::WAFv2::WebACLAssociation"}, - {"TypeName": "AWS::XRay::Group"}, - {"TypeName": "AWS::XRay::SamplingRule"}, - {"TypeName": "AWSQS::EKS::Cluster"}, - {"TypeName": "AWSQS::Kubernetes::Helm"}, - {"TypeName": "AWSQS::Kubernetes::Resource"}, - {"TypeName": "Atlassian::Opsgenie::Integration"}, - {"TypeName": "Atlassian::Opsgenie::Team"}, - {"TypeName": "Atlassian::Opsgenie::User"}, - {"TypeName": "ConfluentCloud::IAM::ServiceAccount"}, - {"TypeName": "Datadog::Dashboards::Dashboard"}, - {"TypeName": "Datadog::Integrations::AWS"}, - {"TypeName": "Datadog::Monitors::Downtime"}, - {"TypeName": "Datadog::Monitors::Monitor"}, - {"TypeName": "Datadog::SLOs::SLO"}, - {"TypeName": "FireEye::CloudIntegrations::Cloudwatch"}, - {"TypeName": "Generic::Database::Schema"}, - {"TypeName": "Generic::Transcribe::Vocabulary"}, - {"TypeName": "MongoDb::Atlas::AwsIamDatabaseUser"}, - {"TypeName": "PaloAltoNetworks::CloudNGFW::NGFW"}, - {"TypeName": "PaloAltoNetworks::CloudNGFW::RuleStack"}, - {"TypeName": "Snyk::Container::Helm"}, - {"TypeName": "Spot::Elastigroup::Group"}, - {"TypeName": "Sysdig::Helm::Agent"}, - {"TypeName": "TF::AD::Computer"}, - {"TypeName": "TF::AD::User"}, - {"TypeName": "TF::AWS::KeyPair"}, - {"TypeName": "TF::AWS::S3Bucket"}, - {"TypeName": "TF::AWS::S3BucketObject"}, - {"TypeName": "TF::Akamai::DnsRecord"}, - {"TypeName": "TF::AzureAD::Application"}, - {"TypeName": "TF::AzureAD::User"}, - {"TypeName": "TF::Cloudflare::Record"}, - {"TypeName": "TF::DigitalOcean::Droplet"}, - {"TypeName": "TF::GitHub::Repository"}, - {"TypeName": "TF::Google::StorageBucket"}, - {"TypeName": "TF::PagerDuty::Service"}, - {"TypeName": "TF::Random::String"}, - {"TypeName": "TF::Random::Uuid"}, - {"TypeName": "TrendMicro::CloudOneContainer::Helm"} -] diff --git a/aws-proxy/aws_proxy/client/utils.py b/aws-proxy/aws_proxy/client/utils.py deleted file mode 100644 index cbaa557f..00000000 --- a/aws-proxy/aws_proxy/client/utils.py +++ /dev/null @@ -1,12 +0,0 @@ -from typing import Union - -from localstack.utils.functions import run_safe -from localstack.utils.strings import to_str, truncate - - -# TODO: add to common utils -def truncate_content(content: Union[str, bytes], max_length: int = None): - max_length = max_length or 100 - if isinstance(content, bytes): - content = run_safe(lambda: to_str(content)) or content - return truncate(content, max_length=max_length) diff --git a/aws-proxy/aws_proxy/config.py b/aws-proxy/aws_proxy/config.py deleted file mode 100644 index 454156d5..00000000 --- a/aws-proxy/aws_proxy/config.py +++ /dev/null @@ -1,17 +0,0 @@ -import os - -from localstack.config import is_env_not_false -from localstack.constants import INTERNAL_RESOURCE_PATH - -# handler path within the internal /_localstack endpoint -HANDLER_PATH_PROXY = f"{INTERNAL_RESOURCE_PATH}/aws/proxy" -HANDLER_PATH_PROXIES = f"{INTERNAL_RESOURCE_PATH}/aws/proxies" - -# whether to clean up proxy containers (set to "0" to investigate startup issues) -CLEANUP_PROXY_CONTAINERS = is_env_not_false("PROXY_CLEANUP_CONTAINERS") - -# additional Docker flags to pass to the proxy containers -PROXY_DOCKER_FLAGS = (os.getenv("PROXY_DOCKER_FLAGS") or "").strip() - -# LS hostname to use for proxy Docker container to register itself at the main container -PROXY_LOCALSTACK_HOST = (os.getenv("PROXY_LOCALSTACK_HOST") or "").strip() diff --git a/aws-proxy/aws_proxy/frontend/.esbuild/esbuild.config.js b/aws-proxy/aws_proxy/frontend/.esbuild/esbuild.config.js deleted file mode 100644 index 2ed5464d..00000000 --- a/aws-proxy/aws_proxy/frontend/.esbuild/esbuild.config.js +++ /dev/null @@ -1,99 +0,0 @@ -/* eslint-disable global-require */ - -const esbuild = require('esbuild'); -const path = require('path'); - -const SvgrPlugin = require('esbuild-plugin-svgr'); -const CopyPlugin = require('esbuild-plugin-copy').default; -const CleanPlugin = require('esbuild-plugin-clean').default; -const { NodeModulesPolyfillPlugin } = require('@esbuild-plugins/node-modules-polyfill'); - -const packageJson = require('../package.json'); -const HtmlPlugin = require('./plugins/html'); -const { writeFileSync } = require('fs'); - -const CURRENT_ENV = process.env.NODE_ENV || 'development.local'; -const BUILD_PATH = path.join(__dirname, '..', '..', 'server', 'static'); - -const BUILD_CONFIG = { - entryPoints: [ - path.join(__dirname, '..', 'src', 'index.tsx'), - path.join(__dirname, '..', 'src', 'index.html'), - ], - assetNames: '[name]-[hash]', - entryNames: '[name]-[hash]', - outdir: BUILD_PATH, - bundle: true, - minify: !CURRENT_ENV.includes('development.local'), - sourcemap: true, - target: 'es2020', - metafile: true, - // splitting: true, - // set in case file loader is added below - plugins: [ - CleanPlugin({ - patterns: [`${BUILD_PATH}/*`, `!${BUILD_PATH}/index.html`], - sync: true, - verbose: false, - options: { - force: true - } - }), - SvgrPlugin({ - prettier: false, - svgo: false, - svgoConfig: { - plugins: [{ removeViewBox: false }], - }, - titleProp: true, - ref: true, - }), - CopyPlugin({ - copyOnStart: true, - // https://github.com/LinbuduLab/nx-plugins/issues/57 - assets: [ - { - from: ['./public/*'], - to: ['./'], - }, - ], - }), - NodeModulesPolyfillPlugin(), - HtmlPlugin({ - filename: path.join(BUILD_PATH, 'index.html'), - env: true, - }), - ], - inject: [path.join(__dirname, 'esbuild.shims.js')], - define: { - // Define replacements for env vars starting with `REACT_APP_` - ...Object.entries(process.env).reduce( - (memo, [name, value]) => name.startsWith('REACT_APP_') ? - { ...memo, [`process.env.${name}`]: JSON.stringify(value) } : - memo, - {}, - ), - 'process.cwd': 'dummyProcessCwd', - global: 'window', - }, - external: [ - ...Object.keys(packageJson.devDependencies || {}), - ], - loader: { - '.md': 'text', - '.gif': 'dataurl', - } -}; - -const build = async (overrides = {}) => { - try { - await esbuild.build({ ...BUILD_CONFIG, ...overrides }); - writeFileSync(path.join(BUILD_PATH, '__init__.py'),'') - console.log('done building'); - } catch (e) { - console.error(e); - process.exit(1); - } -}; - -module.exports = { build }; diff --git a/aws-proxy/aws_proxy/frontend/.esbuild/esbuild.shims.js b/aws-proxy/aws_proxy/frontend/.esbuild/esbuild.shims.js deleted file mode 100644 index c44743a9..00000000 --- a/aws-proxy/aws_proxy/frontend/.esbuild/esbuild.shims.js +++ /dev/null @@ -1,7 +0,0 @@ -import * as React from 'react'; - -export { React }; - -export function dummyProcessCwd() { - return ''; -}; diff --git a/aws-proxy/aws_proxy/frontend/.esbuild/index.js b/aws-proxy/aws_proxy/frontend/.esbuild/index.js deleted file mode 100644 index 66a0005a..00000000 --- a/aws-proxy/aws_proxy/frontend/.esbuild/index.js +++ /dev/null @@ -1,11 +0,0 @@ -const { build, serve } = require('./esbuild.config'); - -(async () => { - if (process.argv.includes('--serve')) { - await serve(); - } else if (process.argv.includes('--watch')) { - await build({ watch: true }); - } else { - await build(); - } -})(); diff --git a/aws-proxy/aws_proxy/frontend/.esbuild/plugins/html/index.js b/aws-proxy/aws_proxy/frontend/.esbuild/plugins/html/index.js deleted file mode 100644 index 2161d8e0..00000000 --- a/aws-proxy/aws_proxy/frontend/.esbuild/plugins/html/index.js +++ /dev/null @@ -1,84 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const crypto = require('crypto'); - -/** - * @param {object} config - * @param {string} config.filename - HTML file to process and override - * @param {boolean} config.env - Whether to replace env vars or not (default - `false`) - * @param {string} config.envPrefix - Limit env vars to pick (default - `REACT_APP_`) - */ -const HtmlPlugin = (config) => ({ - name: 'html', - setup(build) { - build.onResolve({ filter: /\.html$/ }, args => ({ - path: path.resolve(args.resolveDir, args.path), - namespace: 'html', - })); - build.onLoad({ filter: /.html/, namespace: 'html' }, (args) => { - let htmlContent = fs.readFileSync(args.path).toString('utf-8'); - - // replace env vars - if (config.env) { - const envPrefix = config.envPrefix || 'REACT_APP_'; - const envVars = Object.entries(process.env || {}).filter(([name]) => name.startsWith(envPrefix)); - htmlContent = envVars.reduce( - (memo, [name, value]) => memo.replace(new RegExp(`%${name}%`, 'igm'), value), - htmlContent, - ); - } - - return { - contents: htmlContent, - loader: 'file' - }; - }); - - build.onEnd((result) => { - const outFiles = Object.keys((result.metafile || {}).outputs); - const jsFiles = outFiles.filter((p) => p.endsWith('.js')); - const cssFiles = outFiles.filter((p) => p.endsWith('.css')); - const htmlFiles = outFiles.filter((p) => p.endsWith('.html')); - - const headerAppends = cssFiles.reduce( - (memo, p) => { - const filename = p.split(path.sep).slice(-1)[0]; - return [...memo, ``]; - }, - [], - ); - - const bodyAppends = jsFiles.reduce( - (memo, p) => { - const filename = p.split(path.sep).slice(-1)[0]; - return [...memo, ``]; - }, - [], - ); - - for (const htmlFile of htmlFiles) { - let htmlContent = fs.readFileSync(htmlFile).toString('utf-8'); - - // replace env vars - if (config.env) { - const envPrefix = config.envPrefix || 'REACT_APP_'; - const envVars = Object.entries(process.env).filter(([name]) => name.startsWith(envPrefix)); - - htmlContent = envVars.reduce( - (memo, [name, value]) => memo.replace(new RegExp(`%${name}%`, 'igm'), value), - htmlContent, - ); - } - - // inject references to js and css files - htmlContent = htmlContent - .replace('', [...headerAppends, ''].join("\n")) - .replace('', [...bodyAppends, ''].join("\n")); - - fs.writeFileSync(config.filename.replace('-[^.]+', ''), htmlContent); - } - }); - }, -}); - -module.exports = HtmlPlugin; diff --git a/aws-proxy/aws_proxy/frontend/.yarnrc.yml b/aws-proxy/aws_proxy/frontend/.yarnrc.yml deleted file mode 100644 index 8b757b29..00000000 --- a/aws-proxy/aws_proxy/frontend/.yarnrc.yml +++ /dev/null @@ -1 +0,0 @@ -nodeLinker: node-modules \ No newline at end of file diff --git a/aws-proxy/aws_proxy/frontend/__init__.py b/aws-proxy/aws_proxy/frontend/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/aws-proxy/aws_proxy/frontend/package.json b/aws-proxy/aws_proxy/frontend/package.json deleted file mode 100644 index 97b9df2c..00000000 --- a/aws-proxy/aws_proxy/frontend/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "aws_proxy", - "version": "0.1.0", - "private": true, - "license": "UNLICENSED", - "dependencies": { - "@emotion/react": "^11.11.4", - "@emotion/styled": "^11.11.5", - "@localstack/integrations": "1.2.2", - "@mui/material": "^5.15.20", - "axios": "^1.8.4", - "react": "^17.0.2", - "react-dom": "^17.0.2", - "react-router-dom": "^6.24.0", - "react-scripts": "5.0.1", - "typescript": "^4.9.5" - }, - "devDependencies": { - "@esbuild-plugins/node-modules-polyfill": "^0.1.4", - "@testing-library/react": "^13.4.0", - "@types/node": "^16.18.99", - "@types/react": "^19.1.6", - "@types/react-dom": "^17.0.11", - "concurrently": "^8.2.2", - "esbuild": "^0.16.6", - "esbuild-envfile-plugin": "^1.0.2", - "esbuild-plugin-clean": "^1.0.1", - "esbuild-plugin-copy": "^0.3.0", - "esbuild-plugin-svgr": "^1.0.0", - "live-server": "^1.2.2" - }, - "scripts": { - "start": "concurrently --restart-tries -1 --raw \"yarn serve\" \"yarn watch\"", - "serve": "live-server --port=3000 --host=0.0.0.0 --no-browser --watch=aws_proxy/server/static/index.html --entry-file=index.html ../server/static", - "watch": "node .esbuild --watch", - "build": "node .esbuild" - }, - "resolutions": { - "react": "^17.0.2", - "react-dom": "^17.0.2", - "@types/react-dom": "^17.0.11", - "@mui/material": "^5.15.20" - }, - "packageManager": "yarn@3.2.3" -} diff --git a/aws-proxy/aws_proxy/frontend/public/favicon.png b/aws-proxy/aws_proxy/frontend/public/favicon.png deleted file mode 100644 index 4eff7d32..00000000 Binary files a/aws-proxy/aws_proxy/frontend/public/favicon.png and /dev/null differ diff --git a/aws-proxy/aws_proxy/frontend/public/manifest.json b/aws-proxy/aws_proxy/frontend/public/manifest.json deleted file mode 100644 index 95a0a4d2..00000000 --- a/aws-proxy/aws_proxy/frontend/public/manifest.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "short_name": "Proxy", - "name": "Aws Proxy", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/aws-proxy/aws_proxy/frontend/public/robots.txt b/aws-proxy/aws_proxy/frontend/public/robots.txt deleted file mode 100644 index e9e57dc4..00000000 --- a/aws-proxy/aws_proxy/frontend/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/aws-proxy/aws_proxy/frontend/src/CustomRoutes.tsx b/aws-proxy/aws_proxy/frontend/src/CustomRoutes.tsx deleted file mode 100644 index fa86fe3f..00000000 --- a/aws-proxy/aws_proxy/frontend/src/CustomRoutes.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { ReactElement } from "react"; -import { Navigate, Route, Routes } from "react-router-dom"; -import { Dashboard } from "./Dashboard"; - -export const CustomRoutes = (): ReactElement => ( - - {/* Make sure to always have a route fallback to "/" as it is the default page that gets opened from the web app*/} - } /> - } path="/dashboard" /> - -) \ No newline at end of file diff --git a/aws-proxy/aws_proxy/frontend/src/Dashboard.tsx b/aws-proxy/aws_proxy/frontend/src/Dashboard.tsx deleted file mode 100644 index 5637f21d..00000000 --- a/aws-proxy/aws_proxy/frontend/src/Dashboard.tsx +++ /dev/null @@ -1,220 +0,0 @@ -import { - Box, - Button, - Card, - CardActions, - CardContent, - CardHeader, - List, - ListItem, - ListItemText, - Table, - TableBody, - TableCell, - TableContainer, - TableRow, - TextField, - Typography, -} from "@mui/material"; -import { ReactElement, useEffect, useMemo, useState } from "react"; -import { AwsProxyApiClient } from "./utils"; - -const apiEndpoint = `${window.location.origin}/_localstack/aws`; - -const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms)); - -export const Dashboard = (): ReactElement => { - const [config, setConfig] = useState(""); - const [status, setStatus] = useState(null); - const [accessKey, setAccessKey] = useState(""); - const [secretKey, setSecretKey] = useState(""); - const [sessionToken, setSessionToken] = useState(""); - const [isLoading, setLoading] = useState(false); - const apiClient = useMemo(() => new AwsProxyApiClient(apiEndpoint), []); - - const saveConfig = async () => { - setLoading(true); - try { - const envVars = { - AWS_ACCESS_KEY_ID: accessKey, - AWS_SECRET_ACCESS_KEY: secretKey, - AWS_SESSION_TOKEN: sessionToken, - }; - await apiClient.setConfig({ config, env_vars: envVars }); - await pollStatus("enabled"); - } finally { - setLoading(false); - } - }; - const disableProxy = async () => { - setLoading(true); - try { - await apiClient.disableProxy(); - await pollStatus("disabled"); - setAccessKey(""); - setSecretKey(""); - setSessionToken(""); - } finally { - setLoading(false); - } - }; - const getStatus = async () => { - const result = await apiClient.getStatus(); - setStatus(result.status); - setConfig(result.config || ""); - return result; - }; - - const pollStatus = async (expected: string) => { - await sleep(5000); - for (var i = 0; i < 10; i++) { - await sleep(3000); - const result = await getStatus(); - if (result.status === expected) return; - } - }; - - useEffect(() => { - getStatus(); - }, [status]); - - return ( - - - - - Common Use Cases: - - - - - - - - - - - - - - - - - - - Proxy Status: - - - - {status === null - ? "loading ..." - : status === "enabled" - ? "enabled" - : "disabled"} - - {status === "enabled" && ( - - )} - - - - - AWS Credentials: - - - setAccessKey(e.target.value)} - size="small" - style={{ width: "32%" }} - placeholder="AWS_ACCESS_KEY_ID" - />{" "} - setSecretKey(e.target.value)} - size="small" - style={{ width: "32%" }} - placeholder="AWS_SECRET_ACCESS_KEY" - />{" "} - setSessionToken(e.target.value)} - size="small" - style={{ width: "32%" }} - placeholder="AWS_SESSION_TOKEN" - /> - - Please note: AWS credentials are only passed in-memory to - the LocalStack container and will not be persisted on - disk. For security reasons, please make sure to use scoped - credentials with the least set of required permissions - (ideally read-only). - - - - - - Proxy Configuration: - - - setConfig(e.target.value)} - multiline={true} - minRows={5} - size="small" - style={{ width: "100%" }} - /> - - - -
-
-
- - - -
- ); -}; diff --git a/aws-proxy/aws_proxy/frontend/src/index.css b/aws-proxy/aws_proxy/frontend/src/index.css deleted file mode 100644 index 3f462eb2..00000000 --- a/aws-proxy/aws_proxy/frontend/src/index.css +++ /dev/null @@ -1,140 +0,0 @@ -* { - box-sizing: border-box; - margin: 0; - padding: 0; -} - -html { - font-size: 1rem; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -body { - background-color: #f9fafb; -} - -a { - text-decoration: none; -} - -a, -a:hover { - cursor: pointer; -} - -div.centeredPanel { - text-align: center; - padding: 20px; -} - -table.compactTable td, -table.compactTable th { - padding: 10px; -} - -table.compactTable tr { - height: auto; -} - -div.compactInput input { - padding: 7px; -} - -table tr.disabled td { - color: grey; -} - -a.tocAnchor { - position: relative; - top: -80px; - display: block; - height: 0; - width: 0; -} - -#root { - overflow-x: hidden; -} - -.plumb * { - word-wrap: break-word; -} -.layoutnode { - position: absolute; - border: 2px solid #bbbbbf; - border-radius: 5px; - padding: 6px; - max-width: 120px; - background: #fafbfe; -} -.layoutnode.selected, -.shard.selected { - border: 2px solid #888888; - background: #dddddd; - z-index: 100; -} -.shard, -.kinesis_shard { - position: static; - display: block; - border: 1px solid #aaaaaa; - border-radius: 5px; - padding: 3px; - white-space: nowrap; -} -.plumb .title { - font-weight: bold; - white-space: nowrap; -} - -div.MuiCollapse-wrapperInner a.MuiListItem-root { - margin-top: 0px; -} -div.MuiCollapse-wrapperInner a.MuiListItem-root span { - margin-left: 8px; -} -th.MuiTableCell-head { - white-space: nowrap; -} - -.dialogue { - line-height: 1.5; - -} -.dialogue .closeButton { - position: absolute !important; - right: 0; - top: 0; -} - -.MuiDropzoneArea-root { - padding: 20px; -} - -.MuiSelect-icon { - color: inherit !important; -} - -textarea { - width: 100%; -} - -.statusDot { - height: 8px; - min-width: 8px; - border-radius: 50%; - padding: 0; - display: inline-block; - margin-left: 0.5rem; -} - -.grecaptcha-badge { - width: 70px !important; - overflow: hidden !important; - transition: all 0.2s ease !important; - left: 0 !important; -} -.grecaptcha-badge:hover { - width: 256px !important; -} diff --git a/aws-proxy/aws_proxy/frontend/src/index.html b/aws-proxy/aws_proxy/frontend/src/index.html deleted file mode 100644 index a5be6be1..00000000 --- a/aws-proxy/aws_proxy/frontend/src/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - AWS Cloud Proxy - LocalStack Extension - - - - - - - - -
- - - \ No newline at end of file diff --git a/aws-proxy/aws_proxy/frontend/src/index.tsx b/aws-proxy/aws_proxy/frontend/src/index.tsx deleted file mode 100644 index 06334443..00000000 --- a/aws-proxy/aws_proxy/frontend/src/index.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import ReactDOM from "react-dom"; -import "./index.css"; -import { CustomRoutes } from "./CustomRoutes"; -import { HashRouter } from "react-router-dom"; -import { LocalStackThemeProvider } from "@localstack/integrations"; - -ReactDOM.render( - - - - - , - document.getElementById("root") -); diff --git a/aws-proxy/aws_proxy/frontend/src/utils/api.ts b/aws-proxy/aws_proxy/frontend/src/utils/api.ts deleted file mode 100644 index 23691ef9..00000000 --- a/aws-proxy/aws_proxy/frontend/src/utils/api.ts +++ /dev/null @@ -1,53 +0,0 @@ -import axios, { Axios } from "axios"; - -const API_PATH_PROXIES = "/proxies" -const API_PATH_PROXIES_STATUS = `${API_PATH_PROXIES}/status` - -type AWSCredentials = { - AWS_ACCESS_KEY_ID: string, - AWS_SECRET_ACCESS_KEY: string, - AWS_SESSION_TOKEN: string, -} -type SetConfigRequest = { - env_vars: AWSCredentials, - config: string -} - -type GetStatusResponse = { - status: string | null, - config: string, -} - -export class AwsProxyApiClient { - private client: Axios; - - constructor(endpoint: string) { - this.client = axios.create({ baseURL: endpoint }); - - this.client.interceptors.response.use( - (response) => response, - (error) => { - const status = error.response?.status; - const data = error.response?.data; - throw new Error( - `Invalid API response (${status}): ${JSON.stringify(data)}` - ); - } - ); - } - - public async disableProxy(): Promise { - const response = await this.client.post(API_PATH_PROXIES_STATUS, { status: "disabled" }); - return response.data; - } - - public async getStatus(): Promise { - const response = await this.client.get(API_PATH_PROXIES_STATUS) - return response.data; - } - - public async setConfig(params: SetConfigRequest): Promise { - const response = await this.client.post(API_PATH_PROXIES, params); - return response.data; - } -} \ No newline at end of file diff --git a/aws-proxy/aws_proxy/frontend/src/utils/index.ts b/aws-proxy/aws_proxy/frontend/src/utils/index.ts deleted file mode 100644 index 201fc0fb..00000000 --- a/aws-proxy/aws_proxy/frontend/src/utils/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './api' \ No newline at end of file diff --git a/aws-proxy/aws_proxy/frontend/tsconfig.json b/aws-proxy/aws_proxy/frontend/tsconfig.json deleted file mode 100644 index 7c0ee58c..00000000 --- a/aws-proxy/aws_proxy/frontend/tsconfig.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "compilerOptions": { - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], - "jsx": "react-jsx", - "target": "es5", - - "baseUrl": "./", - "esModuleInterop": true, - "moduleResolution": "node", - - "noEmit": true, - "allowJs": true, - "alwaysStrict": true, - "allowUnreachableCode": false, - "allowSyntheticDefaultImports": true, - "noImplicitAny": true, - "strictNullChecks": true, - "resolveJsonModule": true, - "preserveConstEnums": true, - "preserveSymlinks": true, - - "skipLibCheck": true, - "noImplicitReturns": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "typeRoots": [ - "./node_modules/@types", - "./src/types", - ], - - "paths": { - "@localstack/*": ["./node_modules/@localstack/*/src"], - }, - }, - "include": [ - "src/**/*", - ] -} diff --git a/aws-proxy/aws_proxy/frontend/yarn.lock b/aws-proxy/aws_proxy/frontend/yarn.lock deleted file mode 100644 index ece16a7d..00000000 --- a/aws-proxy/aws_proxy/frontend/yarn.lock +++ /dev/null @@ -1,16001 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 6 - cacheKey: 8 - -"@alloc/quick-lru@npm:^5.2.0": - version: 5.2.0 - resolution: "@alloc/quick-lru@npm:5.2.0" - checksum: bdc35758b552bcf045733ac047fb7f9a07c4678b944c641adfbd41f798b4b91fffd0fdc0df2578d9b0afc7b4d636aa6e110ead5d6281a2adc1ab90efd7f057f8 - languageName: node - linkType: hard - -"@apideck/better-ajv-errors@npm:^0.3.1": - version: 0.3.6 - resolution: "@apideck/better-ajv-errors@npm:0.3.6" - dependencies: - json-schema: ^0.4.0 - jsonpointer: ^5.0.0 - leven: ^3.1.0 - peerDependencies: - ajv: ">=8" - checksum: b70ec9aae3b30ba1ac06948e585cd96aabbfe7ef6a1c27dc51e56c425f01290a58e9beb19ed95ee64da9f32df3e9276cd1ea58e78792741d74a519cb56955491 - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.27.1, @babel/code-frame@npm:^7.8.3": - version: 7.27.1 - resolution: "@babel/code-frame@npm:7.27.1" - dependencies: - "@babel/helper-validator-identifier": ^7.27.1 - js-tokens: ^4.0.0 - picocolors: ^1.1.1 - checksum: 5874edc5d37406c4a0bb14cf79c8e51ad412fb0423d176775ac14fc0259831be1bf95bdda9c2aa651126990505e09a9f0ed85deaa99893bc316d2682c5115bdc - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.27.2, @babel/compat-data@npm:^7.27.7, @babel/compat-data@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/compat-data@npm:7.28.5" - checksum: d7bcb3ee713752dc27b89800bfb39f9ac5f3edc46b4f5bb9906e1fe6b6110c7b245dd502602ea66f93790480c228605e9a601f27c07016f24b56772e97bedbdf - languageName: node - linkType: hard - -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.11.1, @babel/core@npm:^7.12.3, @babel/core@npm:^7.16.0, @babel/core@npm:^7.19.6, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": - version: 7.28.5 - resolution: "@babel/core@npm:7.28.5" - dependencies: - "@babel/code-frame": ^7.27.1 - "@babel/generator": ^7.28.5 - "@babel/helper-compilation-targets": ^7.27.2 - "@babel/helper-module-transforms": ^7.28.3 - "@babel/helpers": ^7.28.4 - "@babel/parser": ^7.28.5 - "@babel/template": ^7.27.2 - "@babel/traverse": ^7.28.5 - "@babel/types": ^7.28.5 - "@jridgewell/remapping": ^2.3.5 - convert-source-map: ^2.0.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.3 - semver: ^6.3.1 - checksum: 1ee35b20448f73e9d531091ad4f9e8198dc8f0cebb783263fbff1807342209882ddcaf419be04111326b6f0e494222f7055d71da316c437a6a784d230c11ab9f - languageName: node - linkType: hard - -"@babel/eslint-parser@npm:^7.16.3": - version: 7.28.5 - resolution: "@babel/eslint-parser@npm:7.28.5" - dependencies: - "@nicolo-ribaudo/eslint-scope-5-internals": 5.1.1-v1 - eslint-visitor-keys: ^2.1.0 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - checksum: 8daaf6f24d3f78c18bc4cf2bf1bedda3d829f330f385b85acf630adde3de7a703abf0d2615afea09244caa713dded01aa3c00f3637ea70568b2e8c547067fb99 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.28.5, @babel/generator@npm:^7.7.2": - version: 7.28.5 - resolution: "@babel/generator@npm:7.28.5" - dependencies: - "@babel/parser": ^7.28.5 - "@babel/types": ^7.28.5 - "@jridgewell/gen-mapping": ^0.3.12 - "@jridgewell/trace-mapping": ^0.3.28 - jsesc: ^3.0.2 - checksum: 3e86fa0197bb33394a85a73dbbca92bb1b3f250a30294c7e327359c0978ad90f36f3d71c7f2965a3fc349cfa82becc8f87e7421c75796c8bc48dd9010dd866d1 - languageName: node - linkType: hard - -"@babel/helper-annotate-as-pure@npm:^7.18.6, @babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": - version: 7.27.3 - resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" - dependencies: - "@babel/types": ^7.27.3 - checksum: 63863a5c936ef82b546ca289c9d1b18fabfc24da5c4ee382830b124e2e79b68d626207febc8d4bffc720f50b2ee65691d7d12cc0308679dee2cd6bdc926b7190 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/helper-compilation-targets@npm:7.27.2" - dependencies: - "@babel/compat-data": ^7.27.2 - "@babel/helper-validator-option": ^7.27.1 - browserslist: ^4.24.0 - lru-cache: ^5.1.1 - semver: ^6.3.1 - checksum: 7b95328237de85d7af1dea010a4daa28e79f961dda48b652860d5893ce9b136fc8b9ea1f126d8e0a24963b09ba5c6631dcb907b4ce109b04452d34a6ae979807 - languageName: node - linkType: hard - -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.27.1, @babel/helper-create-class-features-plugin@npm:^7.28.3, @babel/helper-create-class-features-plugin@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/helper-create-class-features-plugin@npm:7.28.5" - dependencies: - "@babel/helper-annotate-as-pure": ^7.27.3 - "@babel/helper-member-expression-to-functions": ^7.28.5 - "@babel/helper-optimise-call-expression": ^7.27.1 - "@babel/helper-replace-supers": ^7.27.1 - "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 - "@babel/traverse": ^7.28.5 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 98f94a27bcde0cf0b847c41e1307057a1caddd131fb5fa0b1566e0c15ccc20b0ebab9667d782bffcd3eac9262226b18e86dcf30ab0f4dc5d14b1e1bf243aba49 - languageName: node - linkType: hard - -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.27.1": - version: 7.28.5 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.28.5" - dependencies: - "@babel/helper-annotate-as-pure": ^7.27.3 - regexpu-core: ^6.3.1 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: de202103e6ff8cd8da0d62eb269fcceb29857f3fa16173f0ff38188fd514e9ad4901aef1d590ff8ba25381644b42eaf70ad9ba91fda59fe7aa6a5e694cdde267 - languageName: node - linkType: hard - -"@babel/helper-define-polyfill-provider@npm:^0.6.5": - version: 0.6.5 - resolution: "@babel/helper-define-polyfill-provider@npm:0.6.5" - dependencies: - "@babel/helper-compilation-targets": ^7.27.2 - "@babel/helper-plugin-utils": ^7.27.1 - debug: ^4.4.1 - lodash.debounce: ^4.0.8 - resolve: ^1.22.10 - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 9fd3b09b209c8ed0d3d8bc1f494f1368b9e1f6e46195af4ce948630fe97d7dafde4882eedace270b319bf6555ddf35e220c77505f6d634f621766cdccbba0aae - languageName: node - linkType: hard - -"@babel/helper-globals@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/helper-globals@npm:7.28.0" - checksum: d8d7b91c12dad1ee747968af0cb73baf91053b2bcf78634da2c2c4991fb45ede9bd0c8f9b5f3254881242bc0921218fcb7c28ae885477c25177147e978ce4397 - languageName: node - linkType: hard - -"@babel/helper-member-expression-to-functions@npm:^7.27.1, @babel/helper-member-expression-to-functions@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/helper-member-expression-to-functions@npm:7.28.5" - dependencies: - "@babel/traverse": ^7.28.5 - "@babel/types": ^7.28.5 - checksum: 447d385233bae2eea713df1785f819b5a5ca272950740da123c42d23f491045120f0fbbb5609c091f7a9bbd40f289a442846dde0cb1bf0c59440fa093690cf7c - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-module-imports@npm:7.27.1" - dependencies: - "@babel/traverse": ^7.27.1 - "@babel/types": ^7.27.1 - checksum: 92d01c71c0e4aacdc2babce418a9a1a27a8f7d770a210ffa0f3933f321befab18b655bc1241bebc40767516731de0b85639140c42e45a8210abe1e792f115b28 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.27.1, @babel/helper-module-transforms@npm:^7.28.3": - version: 7.28.3 - resolution: "@babel/helper-module-transforms@npm:7.28.3" - dependencies: - "@babel/helper-module-imports": ^7.27.1 - "@babel/helper-validator-identifier": ^7.27.1 - "@babel/traverse": ^7.28.3 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 7cf7b79da0fa626d6c84bfc7b35c079a2559caecaa2ff645b0f1db0d741507aa4df6b5b98a3283e8ac4e89094af271d805bf5701e5c4f916e622797b7c8cbb18 - languageName: node - linkType: hard - -"@babel/helper-optimise-call-expression@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" - dependencies: - "@babel/types": ^7.27.1 - checksum: 0fb7ee824a384529d6b74f8a58279f9b56bfe3cce332168067dddeab2552d8eeb56dc8eaf86c04a3a09166a316cb92dfc79c4c623cd034ad4c563952c98b464f - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.8.0": - version: 7.27.1 - resolution: "@babel/helper-plugin-utils@npm:7.27.1" - checksum: 5d715055301badab62bdb2336075a77f8dc8bd290cad2bc1b37ea3bf1b3efc40594d308082229f239deb4d6b5b80b0a73bce000e595ea74416e0339c11037047 - languageName: node - linkType: hard - -"@babel/helper-remap-async-to-generator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-remap-async-to-generator@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": ^7.27.1 - "@babel/helper-wrap-function": ^7.27.1 - "@babel/traverse": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 0747397ba013f87dbf575454a76c18210d61c7c9af0f697546b4bcac670b54ddc156330234407b397f0c948738c304c228e0223039bc45eab4fbf46966a5e8cc - languageName: node - linkType: hard - -"@babel/helper-replace-supers@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-replace-supers@npm:7.27.1" - dependencies: - "@babel/helper-member-expression-to-functions": ^7.27.1 - "@babel/helper-optimise-call-expression": ^7.27.1 - "@babel/traverse": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 3690266c304f21008690ba68062f889a363583cabc13c3d033b94513953147af3e0a3fdb48fa1bb9fa3734b64e221fc65e5222ab70837f02321b7225f487c6ef - languageName: node - linkType: hard - -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0, @babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1" - dependencies: - "@babel/traverse": ^7.27.1 - "@babel/types": ^7.27.1 - checksum: 4f380c5d0e0769fa6942a468b0c2d7c8f0c438f941aaa88f785f8752c103631d0904c7b4e76207a3b0e6588b2dec376595370d92ca8f8f1b422c14a69aa146d4 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-string-parser@npm:7.27.1" - checksum: 0a8464adc4b39b138aedcb443b09f4005d86207d7126e5e079177e05c3116107d856ec08282b365e9a79a9872f40f4092a6127f8d74c8a01c1ef789dacfc25d6 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.27.1, @babel/helper-validator-identifier@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/helper-validator-identifier@npm:7.28.5" - checksum: 5a251a6848e9712aea0338f659a1a3bd334d26219d5511164544ca8ec20774f098c3a6661e9da65a0d085c745c00bb62c8fada38a62f08fa1f8053bc0aeb57e4 - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-validator-option@npm:7.27.1" - checksum: db73e6a308092531c629ee5de7f0d04390835b21a263be2644276cb27da2384b64676cab9f22cd8d8dbd854c92b1d7d56fc8517cf0070c35d1c14a8c828b0903 - languageName: node - linkType: hard - -"@babel/helper-wrap-function@npm:^7.27.1": - version: 7.28.3 - resolution: "@babel/helper-wrap-function@npm:7.28.3" - dependencies: - "@babel/template": ^7.27.2 - "@babel/traverse": ^7.28.3 - "@babel/types": ^7.28.2 - checksum: 0ebdfdc918fdd0c1cf6ff15ba4c664974d0cdf21a017af560d58b00c379df3bf2e55f13a44fe3225668bca169da174f6cb97a96c4e987fb728fdb8f9a39db302 - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.28.4": - version: 7.28.4 - resolution: "@babel/helpers@npm:7.28.4" - dependencies: - "@babel/template": ^7.27.2 - "@babel/types": ^7.28.4 - checksum: a8706219e0bd60c18bbb8e010aa122e9b14e7e7e67c21cc101e6f1b5e79dcb9a18d674f655997f85daaf421aa138cf284710bb04371a2255a0a3137f097430b4 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/parser@npm:7.28.5" - dependencies: - "@babel/types": ^7.28.5 - bin: - parser: ./bin/babel-parser.js - checksum: 5c2456e3f26c70d4a3ce1a220b529a91a2df26c54a2894fd0dea2342699ea1067ffdda9f0715eeab61da46ff546fd5661bc70be6d8d11977cbe21f5f0478819a - languageName: node - linkType: hard - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.28.5" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/traverse": ^7.28.5 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 749b40a963d5633f554cad0336245cb6c1c1393c70a3fddcf302d86a1a42b35efdd2ed62056b88db66f3900887ae1cee9a3eeec89799c22e0cf65059f0dfd142 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: eb7f4146dc01f1198ce559a90b077e58b951a07521ec414e3c7d4593bf6c4ab5c2af22242a7e9fec085e20299e0ba6ea97f44a45e84ab148141bf9eb959ad25e - languageName: node - linkType: hard - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 621cfddfcc99a81e74f8b6f9101fd260b27500cb1a568e3ceae9cc8afe9aee45ac3bca3900a2b66c612b1a2366d29ef67d4df5a1c975be727eaad6906f98c2c6 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 - "@babel/plugin-transform-optional-chaining": ^7.27.1 - peerDependencies: - "@babel/core": ^7.13.0 - checksum: f07aa80272bd7a46b7ba11a4644da6c9b6a5a64e848dfaffdad6f02663adefd512e1aaebe664c4dd95f7ed4f80c872c7f8db8d8e34b47aae0930b412a28711a0 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.28.3": - version: 7.28.3 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.28.3" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/traverse": ^7.28.3 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: c810e5d36030df6861ced35f0adbda7b4b41ac3e984422b32bee906564fd49374435f0a7a1a42eb0a9e6a5170c255f0ab31c163d5fc51fa5a816aa0420311029 - languageName: node - linkType: hard - -"@babel/plugin-proposal-class-properties@npm:^7.16.0": - version: 7.18.6 - resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 49a78a2773ec0db56e915d9797e44fd079ab8a9b2e1716e0df07c92532f2c65d76aeda9543883916b8e0ff13606afeffa67c5b93d05b607bc87653ad18a91422 - languageName: node - linkType: hard - -"@babel/plugin-proposal-decorators@npm:^7.16.4": - version: 7.28.0 - resolution: "@babel/plugin-proposal-decorators@npm:7.28.0" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/plugin-syntax-decorators": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b134907b09ba58f202c219de4eb6246a560441f9166f67b154c1dac32e8a6233e0f59ae9b4909dbd413e0c7dd0afb803a90a7a2fabc194e1b7543211a159eb87 - languageName: node - linkType: hard - -"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.16.0": - version: 7.18.6 - resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 949c9ddcdecdaec766ee610ef98f965f928ccc0361dd87cf9f88cf4896a6ccd62fce063d4494778e50da99dea63d270a1be574a62d6ab81cbe9d85884bf55a7d - languageName: node - linkType: hard - -"@babel/plugin-proposal-numeric-separator@npm:^7.16.0": - version: 7.18.6 - resolution: "@babel/plugin-proposal-numeric-separator@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f370ea584c55bf4040e1f78c80b4eeb1ce2e6aaa74f87d1a48266493c33931d0b6222d8cee3a082383d6bb648ab8d6b7147a06f974d3296ef3bc39c7851683ec - languageName: node - linkType: hard - -"@babel/plugin-proposal-optional-chaining@npm:^7.16.0": - version: 7.21.0 - resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 11c5449e01b18bb8881e8e005a577fa7be2fe5688e2382c8822d51f8f7005342a301a46af7b273b1f5645f9a7b894c428eee8526342038a275ef6ba4c8d8d746 - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-methods@npm:^7.16.0": - version: 7.18.6 - resolution: "@babel/plugin-proposal-private-methods@npm:7.18.6" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 22d8502ee96bca99ad2c8393e8493e2b8d4507576dd054490fd8201a36824373440106f5b098b6d821b026c7e72b0424ff4aeca69ed5f42e48f029d3a156d5ad - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": - version: 7.21.0-placeholder-for-preset-env.2 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d97745d098b835d55033ff3a7fb2b895b9c5295b08a5759e4f20df325aa385a3e0bc9bd5ad8f2ec554a44d4e6525acfc257b8c5848a1345cb40f26a30e277e91 - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-property-in-object@npm:^7.16.7": - version: 7.21.11 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.11" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-create-class-features-plugin": ^7.21.0 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-private-property-in-object": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 1b880543bc5f525b360b53d97dd30807302bb82615cd42bf931968f59003cac75629563d6b104868db50abd22235b3271fdf679fea5db59a267181a99cc0c265 - languageName: node - linkType: hard - -"@babel/plugin-syntax-async-generators@npm:^7.8.4": - version: 7.8.4 - resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 - languageName: node - linkType: hard - -"@babel/plugin-syntax-bigint@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-properties@npm:^7.12.13": - version: 7.12.13 - resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" - dependencies: - "@babel/helper-plugin-utils": ^7.12.13 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-static-block@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948 - languageName: node - linkType: hard - -"@babel/plugin-syntax-decorators@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-decorators@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c085b6083d9ce71f47563e05dddfff18a7611e376297b5a9eb35ef70e5919822f87bfba5b25276dfa55bdb6465943ba5d8d9a00f870611d63eaa1a148adc275e - languageName: node - linkType: hard - -"@babel/plugin-syntax-flow@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-flow@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7baca3171ed595d04c865b0ce46fca7f21900686df9d7fcd1017036ce78bb5483e33803de810831e68d39cf478953db69f49ae3f3de2e3207bc4ba49a96b6739 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-assertions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: fb661d630808d67ecb85eabad25aac4e9696a20464bad4c4a6a0d3d40e4dc22557d47e9be3d591ec06429cf048cfe169b8891c373606344d51c4f3ac0f91d6d0 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-attributes@npm:^7.24.7, @babel/plugin-syntax-import-attributes@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 97973982fff1bbf86b3d1df13380567042887c50e2ae13a400d02a8ff2c9742a60a75e279bfb73019e1cd9710f04be5e6ab81f896e6678dcfcec8b135e8896cf - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-meta@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b - languageName: node - linkType: hard - -"@babel/plugin-syntax-json-strings@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-syntax-jsx@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c6d1324cff286a369aa95d99b8abd21dd07821b5d3affd5fe7d6058c84cff9190743287826463ee57a7beecd10fa1e4bc99061df532ee14e188c1c8937b13e3a - languageName: node - linkType: hard - -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 - languageName: node - linkType: hard - -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 - languageName: node - linkType: hard - -"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e - languageName: node - linkType: hard - -"@babel/plugin-syntax-typescript@npm:^7.27.1, @babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.27.1 - resolution: "@babel/plugin-syntax-typescript@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 87836f7e32af624c2914c73cd6b9803cf324e07d43f61dbb973c6a86f75df725e12540d91fac7141c14b697aa9268fd064220998daced156e96ac3062d7afb41 - languageName: node - linkType: hard - -"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: a651d700fe63ff0ddfd7186f4ebc24447ca734f114433139e3c027bc94a900d013cf1ef2e2db8430425ba542e39ae160c3b05f06b59fd4656273a3df97679e9c - languageName: node - linkType: hard - -"@babel/plugin-transform-arrow-functions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 62c2cc0ae2093336b1aa1376741c5ed245c0987d9e4b4c5313da4a38155509a7098b5acce582b6781cc0699381420010da2e3086353344abe0a6a0ec38961eb7 - languageName: node - linkType: hard - -"@babel/plugin-transform-async-generator-functions@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.28.0" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/helper-remap-async-to-generator": ^7.27.1 - "@babel/traverse": ^7.28.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 174aaccd7a8386fd7f32240c3f65a93cf60dcc5f6a2123cfbff44c0d22b424cd41de3a0c6d136b6a2fa60a8ca01550c261677284cb18a0daeab70730b2265f1d - languageName: node - linkType: hard - -"@babel/plugin-transform-async-to-generator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.27.1" - dependencies: - "@babel/helper-module-imports": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/helper-remap-async-to-generator": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d79d7a7ae7d416f6a48200017d027a6ba94c09c7617eea8b4e9c803630f00094c1a4fc32bf20ce3282567824ce3fcbda51653aac4003c71ea4e681b331338979 - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7fb4988ca80cf1fc8345310d5edfe38e86b3a72a302675cdd09404d5064fe1d1fe1283ebe658ad2b71445ecef857bfb29a748064306b5f6c628e0084759c2201 - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoping@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/plugin-transform-block-scoping@npm:7.28.5" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2cbc11c9b61097b61806c279211a4c4f5e85a5ca7fd52228efbf3a729178d330142a00a93695dbacc2898477e5fa9e34e7637f18323247ebebb84f43005560f3 - languageName: node - linkType: hard - -"@babel/plugin-transform-class-properties@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-class-properties@npm:7.27.1" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 475a6e5a9454912fe1bdc171941976ca10ea4e707675d671cdb5ce6b6761d84d1791ac61b6bca81a2e5f6430cb7b9d8e4b2392404110e69c28207a754e196294 - languageName: node - linkType: hard - -"@babel/plugin-transform-class-static-block@npm:^7.28.3": - version: 7.28.3 - resolution: "@babel/plugin-transform-class-static-block@npm:7.28.3" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.28.3 - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.12.0 - checksum: 9b2feaacbf29637ab35a3aae1df35a1129adec5400a1767443739557fb0d3bf8278bf0ec90aacf43dec9a7dd91428d01375020b70528713e1bc36a72776a104c - languageName: node - linkType: hard - -"@babel/plugin-transform-classes@npm:^7.28.4": - version: 7.28.4 - resolution: "@babel/plugin-transform-classes@npm:7.28.4" - dependencies: - "@babel/helper-annotate-as-pure": ^7.27.3 - "@babel/helper-compilation-targets": ^7.27.2 - "@babel/helper-globals": ^7.28.0 - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/helper-replace-supers": ^7.27.1 - "@babel/traverse": ^7.28.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f412e00c86584a9094cc0a2f3dd181b8108a4dced477d609c5406beddd5bf79d05a7ea74db508dc4dcb37172f042d5ef98d3d6311ade61c7ea6fbbbb70f5ec29 - languageName: node - linkType: hard - -"@babel/plugin-transform-computed-properties@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-computed-properties@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/template": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 48bd20f7d631b08c51155751bf75b698d4a22cca36f41c22921ab92e53039c9ec5c3544e5282e18692325ef85d2e4a18c27e12c62b5e20c26fb0c92447e35224 - languageName: node - linkType: hard - -"@babel/plugin-transform-destructuring@npm:^7.28.0, @babel/plugin-transform-destructuring@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/plugin-transform-destructuring@npm:7.28.5" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/traverse": ^7.28.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 74a06e55e715cfda0fdd8be53d2655d64dfdc28dffaede329d42548fd5b1449ad26a4ce43a24c3fd277b96f8b2010c7b3915afa8297911cda740cc5cc3a81f38 - languageName: node - linkType: hard - -"@babel/plugin-transform-dotall-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2173e5b13f403538ffc6bd57b190cedf4caf320abc13a99e5b2721864e7148dbd3bd7c82d92377136af80432818f665fdd9a1fd33bc5549a4c91e24e5ce2413c - languageName: node - linkType: hard - -"@babel/plugin-transform-duplicate-keys@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ef2112d658338e3ff0827f39a53c0cfa211f1cbbe60363bca833a5269df389598ec965e7283600b46533c39cdca82307d0d69c0f518290ec5b00bb713044715b - languageName: node - linkType: hard - -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 2a109613535e6ac79240dced71429e988affd6a5b3d0cd0f563c8d6c208c51ce7bf2c300bc1150502376b26a51f279119b3358f1c0f2d2f8abca3bcd62e1ae46 - languageName: node - linkType: hard - -"@babel/plugin-transform-dynamic-import@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7a9fbc8d17148b7f11a1d1ca3990d2c2cd44bd08a45dcaf14f20a017721235b9044b20e6168b6940282bb1b48fb78e6afbdfb9dd9d82fde614e15baa7d579932 - languageName: node - linkType: hard - -"@babel/plugin-transform-explicit-resource-management@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-explicit-resource-management@npm:7.28.0" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/plugin-transform-destructuring": ^7.28.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a44140097ed4854883c426613f4e8763237cd0fdab1c780514f4315f6c148d6b528d7a57fe6fdec4dbce28a21b70393ef3507b72dfec2e30bfc8d7db1ff19474 - languageName: node - linkType: hard - -"@babel/plugin-transform-exponentiation-operator@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.28.5" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: da9bb5acd35c9fba92b802641f9462b82334158a149c78a739a04576a1e62be41057a201a41c022dda263bb73ac1a26521bbc997c7fc067f54d487af297995f4 - languageName: node - linkType: hard - -"@babel/plugin-transform-export-namespace-from@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 85082923eca317094f08f4953d8ea2a6558b3117826c0b740676983902b7236df1f4213ad844cb38c2dae104753dbe8f1cc51f01567835d476d32f5f544a4385 - languageName: node - linkType: hard - -"@babel/plugin-transform-flow-strip-types@npm:^7.16.0": - version: 7.27.1 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/plugin-syntax-flow": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0885028866fadefef35292d5a27f878d6a12b6f83778f8731481d4503b49c258507882a7de2aafda9b62d5f6350042f1a06355b998d5ed5e85d693bfcb77b939 - languageName: node - linkType: hard - -"@babel/plugin-transform-for-of@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-for-of@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c9224e08de5d80b2c834383d4359aa9e519db434291711434dd996a4f86b7b664ad67b45d65459b7ec11fa582e3e11a3c769b8a8ca71594bdd4e2f0503f84126 - languageName: node - linkType: hard - -"@babel/plugin-transform-function-name@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-function-name@npm:7.27.1" - dependencies: - "@babel/helper-compilation-targets": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/traverse": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 26a2a183c3c52a96495967420a64afc5a09f743a230272a131668abf23001e393afa6371e6f8e6c60f4182bea210ed31d1caf866452d91009c1daac345a52f23 - languageName: node - linkType: hard - -"@babel/plugin-transform-json-strings@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-json-strings@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2c05a02f63b49f47069271b3405a66c3c8038de5b995b0700b1bd9a5e2bb3e67abd01e4604629302a521f4d8122a4233944aefa16559fd4373d256cc5d3da57f - languageName: node - linkType: hard - -"@babel/plugin-transform-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0a76d12ab19f32dd139964aea7da48cecdb7de0b75e207e576f0f700121fe92367d788f328bf4fb44b8261a0f605c97b44e62ae61cddbb67b14e94c88b411f95 - languageName: node - linkType: hard - -"@babel/plugin-transform-logical-assignment-operators@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.28.5" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c76778f4b186cc4f0b7e3658d91c690678bdb2b9d032f189213016d6177f2564709b79b386523b022b7d52e52331fd91f280f7c7bf85d835e0758b4b0d371447 - languageName: node - linkType: hard - -"@babel/plugin-transform-member-expression-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 804121430a6dcd431e6ffe99c6d1fbbc44b43478113b79c677629e7f877b4f78a06b69c6bfb2747fd84ee91879fe2eb32e4620b53124603086cf5b727593ebe8 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-amd@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 8bb36d448e438d5d30f4faf19120e8c18aa87730269e65d805bf6032824d175ed738057cc392c2c8a650028f1ae0f346cad8d6b723f31a037b586e2092a7be18 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-commonjs@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bc45c1beff9b145c982bd6a614af338893d38bce18a9df7d658c9084e0d8114b286dcd0e015132ae7b15dd966153cb13321e4800df9766d0ddd892d22bf09d2a - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-systemjs@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.28.5" - dependencies: - "@babel/helper-module-transforms": ^7.28.3 - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/helper-validator-identifier": ^7.28.5 - "@babel/traverse": ^7.28.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 646748dcf968c107fedfbff38aa37f7a9ebf2ccdf51fd9f578c6cd323371db36bbc5fe0d995544db168f39be9bca32a85fbf3bfff4742d2bed22e21c2847fa46 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-umd@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b007dd89231f2eeccf1c71a85629bcb692573303977a4b1c5f19a835ea6b5142c18ef07849bc6d752b874a11bc0ddf3c67468b77c8ee8310290b688a4f01ef31 - languageName: node - linkType: hard - -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: a711c92d9753df26cefc1792481e5cbff4fe4f32b383d76b25e36fa865d8023b1b9aa6338cf18f5c0e864c71a7fbe8115e840872ccd61a914d9953849c68de7d - languageName: node - linkType: hard - -"@babel/plugin-transform-new-target@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-new-target@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 32c8078d843bda001244509442d68fd3af088d7348ba883f45c262b2c817a27ffc553b0d78e7f7a763271b2ece7fac56151baad7a91fb21f5bb1d2f38e5acad7 - languageName: node - linkType: hard - -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 1c6b3730748782d2178cc30f5cc37be7d7666148260f3f2dfc43999908bdd319bdfebaaf19cf04ac1f9dee0f7081093d3fa730cda5ae1b34bcd73ce406a78be7 - languageName: node - linkType: hard - -"@babel/plugin-transform-numeric-separator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 049b958911de86d32408cd78017940a207e49c054ae9534ab53a32a57122cc592c0aae3c166d6f29bd1a7d75cc779d71883582dd76cb28b2fbb493e842d8ffca - languageName: node - linkType: hard - -"@babel/plugin-transform-object-rest-spread@npm:^7.28.4": - version: 7.28.4 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.28.4" - dependencies: - "@babel/helper-compilation-targets": ^7.27.2 - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/plugin-transform-destructuring": ^7.28.0 - "@babel/plugin-transform-parameters": ^7.27.7 - "@babel/traverse": ^7.28.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2063672ba4ac457a64b5c0c982439c7b08b4c70f0e743792b98240db5a05f1c063918d8366c92d4d6b2572e2e3452b300a23980b6668e4f54ff349f60d47ec48 - languageName: node - linkType: hard - -"@babel/plugin-transform-object-super@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-object-super@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/helper-replace-supers": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 46b819cb9a6cd3cfefe42d07875fee414f18d5e66040366ae856116db560ad4e16f3899a0a7fddd6773e0d1458444f94b208b67c0e3b6977a27ea17a5c13dbf6 - languageName: node - linkType: hard - -"@babel/plugin-transform-optional-catch-binding@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f4356b04cf21a98480f9788ea50f1f13ee88e89bb6393ba4b84d1f39a4a84c7928c9a4328e8f4c5b6deb218da68a8fd17bf4f46faec7653ddc20ffaaa5ba49f4 - languageName: node - linkType: hard - -"@babel/plugin-transform-optional-chaining@npm:^7.27.1, @babel/plugin-transform-optional-chaining@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.28.5" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 78c2be52b32e893c992aca52ef84130b3540e2ca0e1ff0e45f8d2ccc213b3c6e2b43f8dd2c86a0976acf3cdff97d4488c23b86d7a3e67daa517013089f44af1d - languageName: node - linkType: hard - -"@babel/plugin-transform-parameters@npm:^7.27.7": - version: 7.27.7 - resolution: "@babel/plugin-transform-parameters@npm:7.27.7" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d51f195e1d6ac5d9fce583e9a70a5bfe403e62386e5eb06db9fbc6533f895a98ff7e7c3dcaa311a8e6fa7a9794466e81cdabcba6af9f59d787fb767bfe7868b4 - languageName: node - linkType: hard - -"@babel/plugin-transform-private-methods@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-private-methods@npm:7.27.1" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c76f8f6056946466116e67eb9d8014a2d748ade2062636ab82045c1dac9c233aff10e597777bc5af6f26428beb845ceb41b95007abef7d0484da95789da56662 - languageName: node - linkType: hard - -"@babel/plugin-transform-private-property-in-object@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": ^7.27.1 - "@babel/helper-create-class-features-plugin": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: af539af1bd423aa46b9da83d649be716494ca80783841f47094b6741fa24e11141446027fd152ddff791dede9d4a76d0d5eb467402a2e584d7f5ea90e2673c7e - languageName: node - linkType: hard - -"@babel/plugin-transform-property-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-property-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7caec27d5ed8870895c9faf4f71def72745d69da0d8e77903146a4e135fd7bed5778f5f9cebb36c5fba86338e6194dd67a08c033fc84b4299b7eceab6d9630cb - languageName: node - linkType: hard - -"@babel/plugin-transform-react-constant-elements@npm:^7.12.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-react-constant-elements@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 8372cf17ed551cd2e3da4f32a211881265692a17ad4c4fd40a8adcb89316d147db54f023630022ad7ec7474c4108647f67e3a62db43e515246a7574dcb5eeefe - languageName: node - linkType: hard - -"@babel/plugin-transform-react-display-name@npm:^7.16.0, @babel/plugin-transform-react-display-name@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/plugin-transform-react-display-name@npm:7.28.0" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 268b1a9192974439d17949e170b01cac2a2aa003c844e2fe3b8361146f42f66487178cffdfa8ce862aa9e6c814bc37f879a70300cb3f067815d15fa6aad04e6d - languageName: node - linkType: hard - -"@babel/plugin-transform-react-jsx-development@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-react-jsx-development@npm:7.27.1" - dependencies: - "@babel/plugin-transform-react-jsx": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b88865d5b8c018992f2332da939faa15c4d4a864c9435a5937beaff3fe43781432cc42e0a5d5631098e0bd4066fc33f5fa72203b388b074c3545fe7aaa21e474 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-jsx@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-react-jsx@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": ^7.27.1 - "@babel/helper-module-imports": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/plugin-syntax-jsx": ^7.27.1 - "@babel/types": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 960d36e5d11ba68e4fbf1e2b935c153cb6ea7b0004f838aaee8baf7de30462b8f0562743a39ce3c370cc70b8f79d3c549104a415a615b2b0055b71fd025df0f3 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-pure-annotations@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a6f591c5e85a1ab0685d4a25afe591fe8d11dc0b73c677cf9560ff8d540d036a1cce9efcb729fc9092def4d854dc304ffdc063a89a9247900b69c516bf971a4c - languageName: node - linkType: hard - -"@babel/plugin-transform-regenerator@npm:^7.28.4": - version: 7.28.4 - resolution: "@babel/plugin-transform-regenerator@npm:7.28.4" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2aa99b3a7b254a109e913fabbe1fb320ff40723988fde0e225212b7ef20f523a399a6e45077258b176c29715493b2a853cf7c130811692215adf33e5af99782b - languageName: node - linkType: hard - -"@babel/plugin-transform-regexp-modifiers@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: f6cb385fe0e798bff7e9b20cf5912bf40e180895ff3610b1ccdce260f3c20daaebb3a99dc087c8168a99151cd3e16b94f4689fd5a4b01cf1834b45c133e620b2 - languageName: node - linkType: hard - -"@babel/plugin-transform-reserved-words@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: dea0b66742d2863b369c06c053e11e15ba785892ea19cccf7aef3c1bdaa38b6ab082e19984c5ea7810d275d9445c5400fcc385ad71ce707ed9256fadb102af3b - languageName: node - linkType: hard - -"@babel/plugin-transform-runtime@npm:^7.16.4": - version: 7.28.5 - resolution: "@babel/plugin-transform-runtime@npm:7.28.5" - dependencies: - "@babel/helper-module-imports": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - babel-plugin-polyfill-corejs2: ^0.4.14 - babel-plugin-polyfill-corejs3: ^0.13.0 - babel-plugin-polyfill-regenerator: ^0.6.5 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 5bb66f366c5bb22d0c890667ecd0f1fde9db86ac04df62b21fc2bbf58531eb84068bb0bf38fb1c496c8f78a917c59a884f6c1f8b205b8689d155e72fcf1d442d - languageName: node - linkType: hard - -"@babel/plugin-transform-shorthand-properties@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: fbba6e2aef0b69681acb68202aa249c0598e470cc0853d7ff5bd0171fd6a7ec31d77cfabcce9df6360fc8349eded7e4a65218c32551bd3fc0caaa1ac899ac6d4 - languageName: node - linkType: hard - -"@babel/plugin-transform-spread@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-spread@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 58b08085ee9c29955ac3b68d61c1a79728d44d19a69cb5eb669794aeaf54c57c6647af7b979c1297e81ede3d08b3ddcb1936ef39a533f28ff3e399a9be54dab1 - languageName: node - linkType: hard - -"@babel/plugin-transform-sticky-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: e1414a502efba92c7974681767e365a8cda6c5e9e5f33472a9eaa0ce2e75cea0a9bef881ff8dda37c7810ad902f98d3c00ead92a3ac3b73a79d011df85b5a189 - languageName: node - linkType: hard - -"@babel/plugin-transform-template-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 93aad782503b691faef7c0893372d5243df3219b07f1f22cfc32c104af6a2e7acd6102c128439eab15336d048f1b214ca134b87b0630d8cd568bf447f78b25ce - languageName: node - linkType: hard - -"@babel/plugin-transform-typeof-symbol@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ed8048c8de72c60969a64cf2273cc6d9275d8fa8db9bd25a1268273a00fb9cbd79931140311411bda1443aa56cb3961fb911d1795abacde7f0482f1d8fdf0356 - languageName: node - linkType: hard - -"@babel/plugin-transform-typescript@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/plugin-transform-typescript@npm:7.28.5" - dependencies: - "@babel/helper-annotate-as-pure": ^7.27.3 - "@babel/helper-create-class-features-plugin": ^7.28.5 - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 - "@babel/plugin-syntax-typescript": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 202785e9cc6fb04efba091b3d5560cc8089cdc54df12fafa3d32ed7089e8d7a95b92b2fb1b53ec3e4db3bbafe56e8b32a3530cac004b3e493e902def8666001d - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-escapes@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d817154bc10758ddd85b716e0bc1af1a1091e088400289ab6b78a1a4d609907ce3d2f1fd51a6fd0e0c8ecbb5f8e3aab4957e0747776d132d2379e85c3ef0520a - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-property-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 5d99c89537d1ebaac3f526c04b162cf95a47d363d4829f78c6701a2c06ab78a48da66a94f853f85f44a3d72153410ba923e072bed4b7166fa097f503eb14131d - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a34d89a2b75fb78e66d97c3dc90d4877f7e31f43316b52176f95a5dee20e9bb56ecf158eafc42a001676ddf7b393d9e67650bad6b32f5405780f25fb83cd68e3 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-sets-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.27.1 - "@babel/helper-plugin-utils": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 295126074c7388ab05c82ef3ed0907a1ee4666bbdd763477ead9aba6eb2c74bdf65669416861ac93d337a4a27640963bb214acadc2697275ce95aab14868d57f - languageName: node - linkType: hard - -"@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.16.4": - version: 7.28.5 - resolution: "@babel/preset-env@npm:7.28.5" - dependencies: - "@babel/compat-data": ^7.28.5 - "@babel/helper-compilation-targets": ^7.27.2 - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/helper-validator-option": ^7.27.1 - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.28.5 - "@babel/plugin-bugfix-safari-class-field-initializer-scope": ^7.27.1 - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.27.1 - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.27.1 - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.28.3 - "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2 - "@babel/plugin-syntax-import-assertions": ^7.27.1 - "@babel/plugin-syntax-import-attributes": ^7.27.1 - "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6 - "@babel/plugin-transform-arrow-functions": ^7.27.1 - "@babel/plugin-transform-async-generator-functions": ^7.28.0 - "@babel/plugin-transform-async-to-generator": ^7.27.1 - "@babel/plugin-transform-block-scoped-functions": ^7.27.1 - "@babel/plugin-transform-block-scoping": ^7.28.5 - "@babel/plugin-transform-class-properties": ^7.27.1 - "@babel/plugin-transform-class-static-block": ^7.28.3 - "@babel/plugin-transform-classes": ^7.28.4 - "@babel/plugin-transform-computed-properties": ^7.27.1 - "@babel/plugin-transform-destructuring": ^7.28.5 - "@babel/plugin-transform-dotall-regex": ^7.27.1 - "@babel/plugin-transform-duplicate-keys": ^7.27.1 - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ^7.27.1 - "@babel/plugin-transform-dynamic-import": ^7.27.1 - "@babel/plugin-transform-explicit-resource-management": ^7.28.0 - "@babel/plugin-transform-exponentiation-operator": ^7.28.5 - "@babel/plugin-transform-export-namespace-from": ^7.27.1 - "@babel/plugin-transform-for-of": ^7.27.1 - "@babel/plugin-transform-function-name": ^7.27.1 - "@babel/plugin-transform-json-strings": ^7.27.1 - "@babel/plugin-transform-literals": ^7.27.1 - "@babel/plugin-transform-logical-assignment-operators": ^7.28.5 - "@babel/plugin-transform-member-expression-literals": ^7.27.1 - "@babel/plugin-transform-modules-amd": ^7.27.1 - "@babel/plugin-transform-modules-commonjs": ^7.27.1 - "@babel/plugin-transform-modules-systemjs": ^7.28.5 - "@babel/plugin-transform-modules-umd": ^7.27.1 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.27.1 - "@babel/plugin-transform-new-target": ^7.27.1 - "@babel/plugin-transform-nullish-coalescing-operator": ^7.27.1 - "@babel/plugin-transform-numeric-separator": ^7.27.1 - "@babel/plugin-transform-object-rest-spread": ^7.28.4 - "@babel/plugin-transform-object-super": ^7.27.1 - "@babel/plugin-transform-optional-catch-binding": ^7.27.1 - "@babel/plugin-transform-optional-chaining": ^7.28.5 - "@babel/plugin-transform-parameters": ^7.27.7 - "@babel/plugin-transform-private-methods": ^7.27.1 - "@babel/plugin-transform-private-property-in-object": ^7.27.1 - "@babel/plugin-transform-property-literals": ^7.27.1 - "@babel/plugin-transform-regenerator": ^7.28.4 - "@babel/plugin-transform-regexp-modifiers": ^7.27.1 - "@babel/plugin-transform-reserved-words": ^7.27.1 - "@babel/plugin-transform-shorthand-properties": ^7.27.1 - "@babel/plugin-transform-spread": ^7.27.1 - "@babel/plugin-transform-sticky-regex": ^7.27.1 - "@babel/plugin-transform-template-literals": ^7.27.1 - "@babel/plugin-transform-typeof-symbol": ^7.27.1 - "@babel/plugin-transform-unicode-escapes": ^7.27.1 - "@babel/plugin-transform-unicode-property-regex": ^7.27.1 - "@babel/plugin-transform-unicode-regex": ^7.27.1 - "@babel/plugin-transform-unicode-sets-regex": ^7.27.1 - "@babel/preset-modules": 0.1.6-no-external-plugins - babel-plugin-polyfill-corejs2: ^0.4.14 - babel-plugin-polyfill-corejs3: ^0.13.0 - babel-plugin-polyfill-regenerator: ^0.6.5 - core-js-compat: ^3.43.0 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 9e17ba89c5d8cbea0fde564ea29e6dc17ad43f6ebf1c11347af69a04cf69dbc62c3124d2afe46412bfa41dddde3aaabfeffc0d68bed96f6ea0c4d8fbf652e761 - languageName: node - linkType: hard - -"@babel/preset-modules@npm:0.1.6-no-external-plugins": - version: 0.1.6-no-external-plugins - resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" - dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/types": ^7.4.4 - esutils: ^2.0.2 - peerDependencies: - "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 - checksum: 4855e799bc50f2449fb5210f78ea9e8fd46cf4f242243f1e2ed838e2bd702e25e73e822e7f8447722a5f4baa5e67a8f7a0e403f3e7ce04540ff743a9c411c375 - languageName: node - linkType: hard - -"@babel/preset-react@npm:^7.12.5, @babel/preset-react@npm:^7.16.0": - version: 7.28.5 - resolution: "@babel/preset-react@npm:7.28.5" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/helper-validator-option": ^7.27.1 - "@babel/plugin-transform-react-display-name": ^7.28.0 - "@babel/plugin-transform-react-jsx": ^7.27.1 - "@babel/plugin-transform-react-jsx-development": ^7.27.1 - "@babel/plugin-transform-react-pure-annotations": ^7.27.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 13bc1fe4dde0a29d00323e46749e5beb457844507cb3afa2fefbd85d283c2d4836f9e4a780be735de58a44c505870476dc2838f1f8faf9d6f056481e65f1a0fb - languageName: node - linkType: hard - -"@babel/preset-typescript@npm:^7.16.0": - version: 7.28.5 - resolution: "@babel/preset-typescript@npm:7.28.5" - dependencies: - "@babel/helper-plugin-utils": ^7.27.1 - "@babel/helper-validator-option": ^7.27.1 - "@babel/plugin-syntax-jsx": ^7.27.1 - "@babel/plugin-transform-modules-commonjs": ^7.27.1 - "@babel/plugin-transform-typescript": ^7.28.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 22f889835d9db1e627846e71ca2f02e2d24e2eb9ebcf9845b3b1d37bd3a53787967bafabbbcb342f06aaf7627399a7102ba6ca18f9a0e17066c865d680d2ceb9 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.7": - version: 7.28.4 - resolution: "@babel/runtime@npm:7.28.4" - checksum: 934b0a0460f7d06637d93fcd1a44ac49adc33518d17253b5a0b55ff4cb90a45d8fe78bf034b448911dbec7aff2a90b918697559f78d21c99ff8dbadae9565b55 - languageName: node - linkType: hard - -"@babel/template@npm:^7.27.1, @babel/template@npm:^7.27.2, @babel/template@npm:^7.3.3": - version: 7.27.2 - resolution: "@babel/template@npm:7.27.2" - dependencies: - "@babel/code-frame": ^7.27.1 - "@babel/parser": ^7.27.2 - "@babel/types": ^7.27.1 - checksum: ff5628bc066060624afd970616090e5bba91c6240c2e4b458d13267a523572cbfcbf549391eec8217b94b064cf96571c6273f0c04b28a8567b96edc675c28e27 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.0, @babel/traverse@npm:^7.28.3, @babel/traverse@npm:^7.28.4, @babel/traverse@npm:^7.28.5, @babel/traverse@npm:^7.7.2": - version: 7.28.5 - resolution: "@babel/traverse@npm:7.28.5" - dependencies: - "@babel/code-frame": ^7.27.1 - "@babel/generator": ^7.28.5 - "@babel/helper-globals": ^7.28.0 - "@babel/parser": ^7.28.5 - "@babel/template": ^7.27.2 - "@babel/types": ^7.28.5 - debug: ^4.3.1 - checksum: e028ee9654f44be7c2a2df268455cee72d5c424c9ae536785f8f7c8680356f7b977c77ad76909d07eeed09ff1e125ce01cf783011f66b56c838791a85fa6af04 - languageName: node - linkType: hard - -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.4, @babel/types@npm:^7.28.5, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": - version: 7.28.5 - resolution: "@babel/types@npm:7.28.5" - dependencies: - "@babel/helper-string-parser": ^7.27.1 - "@babel/helper-validator-identifier": ^7.28.5 - checksum: 5bc266af9e55ff92f9ddf33d83a42c9de1a87f9579d0ed62ef94a741a081692dd410a4fbbab18d514b83e135083ff05bc0e37003834801c9514b9d8ad748070d - languageName: node - linkType: hard - -"@bcoe/v8-coverage@npm:^0.2.3": - version: 0.2.3 - resolution: "@bcoe/v8-coverage@npm:0.2.3" - checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27 - languageName: node - linkType: hard - -"@csstools/normalize.css@npm:*": - version: 12.1.1 - resolution: "@csstools/normalize.css@npm:12.1.1" - checksum: a356ee0fcb922f3e0bc23df4468bb4f27fc26c767e25359c079455fe30301d253d8a60c443859b04350c8174393edbb11bad2a9ef2f8cce0e371f6abf6c7ef36 - languageName: node - linkType: hard - -"@csstools/postcss-cascade-layers@npm:^1.1.1": - version: 1.1.1 - resolution: "@csstools/postcss-cascade-layers@npm:1.1.1" - dependencies: - "@csstools/selector-specificity": ^2.0.2 - postcss-selector-parser: ^6.0.10 - peerDependencies: - postcss: ^8.2 - checksum: 8ecd6a929e8ddee3ad0834ab5017f50a569817ba8490d152b11c705c13cf3d9701f74792f375cbd72d8f33a4eeaabb3f984f1514adf8c5a530eb91be70c14cf4 - languageName: node - linkType: hard - -"@csstools/postcss-color-function@npm:^1.1.1": - version: 1.1.1 - resolution: "@csstools/postcss-color-function@npm:1.1.1" - dependencies: - "@csstools/postcss-progressive-custom-properties": ^1.1.0 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: 087595985ebcc2fc42013d6305185d4cdc842d87fb261185db905dc31eaa24fc23a7cc068fa3da814b3c8b98164107ddaf1b4ab24f4ff5b2a7b5fbcd4c6ceec9 - languageName: node - linkType: hard - -"@csstools/postcss-font-format-keywords@npm:^1.0.1": - version: 1.0.1 - resolution: "@csstools/postcss-font-format-keywords@npm:1.0.1" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: ed8d9eab9793f0184e000709bcb155d4eb96c49a312e3ea9e549e006b74fd4aafac63cb9f9f01bec5b717a833539ff085c3f1ef7d273b97d587769ef637d50c1 - languageName: node - linkType: hard - -"@csstools/postcss-hwb-function@npm:^1.0.2": - version: 1.0.2 - resolution: "@csstools/postcss-hwb-function@npm:1.0.2" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: 352ead754a692f7ed33a712c491012cab5c2f2946136a669a354237cfe8e6faca90c7389ee793cb329b9b0ddec984faa06d47e2f875933aaca417afff74ce6aa - languageName: node - linkType: hard - -"@csstools/postcss-ic-unit@npm:^1.0.1": - version: 1.0.1 - resolution: "@csstools/postcss-ic-unit@npm:1.0.1" - dependencies: - "@csstools/postcss-progressive-custom-properties": ^1.1.0 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: 09c414c9b7762b5fbe837ff451d7a11e4890f1ed3c92edc3573f02f3d89747f6ac3f2270799b68a332bd7f5de05bb0dfffddb6323fc4020c2bea33ff58314533 - languageName: node - linkType: hard - -"@csstools/postcss-is-pseudo-class@npm:^2.0.7": - version: 2.0.7 - resolution: "@csstools/postcss-is-pseudo-class@npm:2.0.7" - dependencies: - "@csstools/selector-specificity": ^2.0.0 - postcss-selector-parser: ^6.0.10 - peerDependencies: - postcss: ^8.2 - checksum: a4494bb8e9a34826944ba6872c91c1e88268caab6d06968897f1a0cc75ca5cfc4989435961fc668a9c6842a6d17f4cda0055fa256d23e598b8bbc6f022956125 - languageName: node - linkType: hard - -"@csstools/postcss-nested-calc@npm:^1.0.0": - version: 1.0.0 - resolution: "@csstools/postcss-nested-calc@npm:1.0.0" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: 53bb783dd61621c11c1e6e352f079577e2eb908de67947ceef31a178e070c06c223baae87acd5c3bd51c664515d2adc16166a129159168626111aff548583790 - languageName: node - linkType: hard - -"@csstools/postcss-normalize-display-values@npm:^1.0.1": - version: 1.0.1 - resolution: "@csstools/postcss-normalize-display-values@npm:1.0.1" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: 75901daec3869ba15e0adfd50d8e2e754ec06d55ac44fbd540748476388d223d53710fb3a3cbfe6695a2bab015a489fb47d9e3914ff211736923f8deb818dc0b - languageName: node - linkType: hard - -"@csstools/postcss-oklab-function@npm:^1.1.1": - version: 1.1.1 - resolution: "@csstools/postcss-oklab-function@npm:1.1.1" - dependencies: - "@csstools/postcss-progressive-custom-properties": ^1.1.0 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: d66b789060b37ed810450d9a7d8319a0ae14e913c091f3e0ee482b3471538762e801d5eae3d62fda2f1eb1e88c76786d2c2b06c1172166eba1cca5e2a0dc95f2 - languageName: node - linkType: hard - -"@csstools/postcss-progressive-custom-properties@npm:^1.1.0, @csstools/postcss-progressive-custom-properties@npm:^1.3.0": - version: 1.3.0 - resolution: "@csstools/postcss-progressive-custom-properties@npm:1.3.0" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.3 - checksum: e281845fde5b8a80d06ec20147bd74e96a9351bebbec5e5c3a6fb37ea30a597ff84172601786a8a270662f58f708b4a3bf8d822d6318023def9773d2f6589962 - languageName: node - linkType: hard - -"@csstools/postcss-stepped-value-functions@npm:^1.0.1": - version: 1.0.1 - resolution: "@csstools/postcss-stepped-value-functions@npm:1.0.1" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: 2fc88713a0d49d142010652be8139b00719e407df1173e46047284f1befd0647e1fff67f259f9f55ac3b46bba6462b21f0aa192bd10a2989c51a8ce0d25fc495 - languageName: node - linkType: hard - -"@csstools/postcss-text-decoration-shorthand@npm:^1.0.0": - version: 1.0.0 - resolution: "@csstools/postcss-text-decoration-shorthand@npm:1.0.0" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: d27aaf97872c42bec9f6fde4d8bf924e89f7886f0aca8e4fc5aaf2f9083b09bb43dbbfa29124fa36fcdeb2d4d3e0459a095acf62188260cd1577e9811bb1276e - languageName: node - linkType: hard - -"@csstools/postcss-trigonometric-functions@npm:^1.0.2": - version: 1.0.2 - resolution: "@csstools/postcss-trigonometric-functions@npm:1.0.2" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: f7f5b5f2492606b79a56f09e814ae8f10a2ae9e9c5fb8019f0e347a4a6c07953b2cc663fd4fa43a60e6994dfd958958f39df8ec760e2a646cfe71fe2bb119382 - languageName: node - linkType: hard - -"@csstools/postcss-unset-value@npm:^1.0.2": - version: 1.0.2 - resolution: "@csstools/postcss-unset-value@npm:1.0.2" - peerDependencies: - postcss: ^8.2 - checksum: 3facdae154d6516ffd964f7582696f406465f11cf8dead503e0afdfecc99ebc25638ab2830affce4516131aa2db004458a235e439f575b04e9ef72ad82f55835 - languageName: node - linkType: hard - -"@csstools/selector-specificity@npm:^2.0.0, @csstools/selector-specificity@npm:^2.0.2": - version: 2.2.0 - resolution: "@csstools/selector-specificity@npm:2.2.0" - peerDependencies: - postcss-selector-parser: ^6.0.10 - checksum: 97c89f23b3b527d7bd51ed299969ed2b9fbb219a367948b44aefec228b8eda6ae0ad74fe8a82f9aac8ff32cfd00bb6d0c98d1daeab2e8fc6d5c4af25e5be5673 - languageName: node - linkType: hard - -"@emotion/babel-plugin@npm:^11.13.5": - version: 11.13.5 - resolution: "@emotion/babel-plugin@npm:11.13.5" - dependencies: - "@babel/helper-module-imports": ^7.16.7 - "@babel/runtime": ^7.18.3 - "@emotion/hash": ^0.9.2 - "@emotion/memoize": ^0.9.0 - "@emotion/serialize": ^1.3.3 - babel-plugin-macros: ^3.1.0 - convert-source-map: ^1.5.0 - escape-string-regexp: ^4.0.0 - find-root: ^1.1.0 - source-map: ^0.5.7 - stylis: 4.2.0 - checksum: c41df7e6c19520e76d1939f884be878bf88b5ba00bd3de9d05c5b6c5baa5051686ab124d7317a0645de1b017b574d8139ae1d6390ec267fbe8e85a5252afb542 - languageName: node - linkType: hard - -"@emotion/cache@npm:^11.13.5, @emotion/cache@npm:^11.14.0": - version: 11.14.0 - resolution: "@emotion/cache@npm:11.14.0" - dependencies: - "@emotion/memoize": ^0.9.0 - "@emotion/sheet": ^1.4.0 - "@emotion/utils": ^1.4.2 - "@emotion/weak-memoize": ^0.4.0 - stylis: 4.2.0 - checksum: 0a81591541ea43bc7851742e6444b7800d72e98006f94e775ae6ea0806662d14e0a86ff940f5f19d33b4bb2c427c882aa65d417e7322a6e0d5f20fe65ed920c9 - languageName: node - linkType: hard - -"@emotion/hash@npm:^0.9.1, @emotion/hash@npm:^0.9.2": - version: 0.9.2 - resolution: "@emotion/hash@npm:0.9.2" - checksum: 379bde2830ccb0328c2617ec009642321c0e009a46aa383dfbe75b679c6aea977ca698c832d225a893901f29d7b3eef0e38cf341f560f6b2b56f1ff23c172387 - languageName: node - linkType: hard - -"@emotion/is-prop-valid@npm:^1.3.0": - version: 1.4.0 - resolution: "@emotion/is-prop-valid@npm:1.4.0" - dependencies: - "@emotion/memoize": ^0.9.0 - checksum: 6b003cdc62106c2d5d12207c2d1352d674339252a2d7ac8d96974781d7c639833f35d22e7e331411795daaafa62f126c2824a4983584292b431e08b42877d51e - languageName: node - linkType: hard - -"@emotion/memoize@npm:^0.9.0": - version: 0.9.0 - resolution: "@emotion/memoize@npm:0.9.0" - checksum: 038132359397348e378c593a773b1148cd0cf0a2285ffd067a0f63447b945f5278860d9de718f906a74c7c940ba1783ac2ca18f1c06a307b01cc0e3944e783b1 - languageName: node - linkType: hard - -"@emotion/react@npm:^11.11.4": - version: 11.14.0 - resolution: "@emotion/react@npm:11.14.0" - dependencies: - "@babel/runtime": ^7.18.3 - "@emotion/babel-plugin": ^11.13.5 - "@emotion/cache": ^11.14.0 - "@emotion/serialize": ^1.3.3 - "@emotion/use-insertion-effect-with-fallbacks": ^1.2.0 - "@emotion/utils": ^1.4.2 - "@emotion/weak-memoize": ^0.4.0 - hoist-non-react-statics: ^3.3.1 - peerDependencies: - react: ">=16.8.0" - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 3cf023b11d132b56168713764d6fced8e5a1f0687dfe0caa2782dfd428c8f9e30f9826a919965a311d87b523cd196722aaf75919cd0f6bd0fd57f8a6a0281500 - languageName: node - linkType: hard - -"@emotion/serialize@npm:^1.3.3": - version: 1.3.3 - resolution: "@emotion/serialize@npm:1.3.3" - dependencies: - "@emotion/hash": ^0.9.2 - "@emotion/memoize": ^0.9.0 - "@emotion/unitless": ^0.10.0 - "@emotion/utils": ^1.4.2 - csstype: ^3.0.2 - checksum: 510331233767ae4e09e925287ca2c7269b320fa1d737ea86db5b3c861a734483ea832394c0c1fe5b21468fe335624a75e72818831d303ba38125f54f44ba02e7 - languageName: node - linkType: hard - -"@emotion/sheet@npm:^1.4.0": - version: 1.4.0 - resolution: "@emotion/sheet@npm:1.4.0" - checksum: eeb1212e3289db8e083e72e7e401cd6d1a84deece87e9ce184f7b96b9b5dbd6f070a89057255a6ff14d9865c3ce31f27c39248a053e4cdd875540359042586b4 - languageName: node - linkType: hard - -"@emotion/styled@npm:^11.11.5": - version: 11.14.1 - resolution: "@emotion/styled@npm:11.14.1" - dependencies: - "@babel/runtime": ^7.18.3 - "@emotion/babel-plugin": ^11.13.5 - "@emotion/is-prop-valid": ^1.3.0 - "@emotion/serialize": ^1.3.3 - "@emotion/use-insertion-effect-with-fallbacks": ^1.2.0 - "@emotion/utils": ^1.4.2 - peerDependencies: - "@emotion/react": ^11.0.0-rc.0 - react: ">=16.8.0" - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 86238d9f5c41232a73499e441fa9112e855545519d6772f489fa885634bb8f31b422a9ba9d1e8bc0b4ad66132f9d398b1c309d92c19c5ee21356b41671ec984a - languageName: node - linkType: hard - -"@emotion/unitless@npm:^0.10.0": - version: 0.10.0 - resolution: "@emotion/unitless@npm:0.10.0" - checksum: d79346df31a933e6d33518e92636afeb603ce043f3857d0a39a2ac78a09ef0be8bedff40130930cb25df1beeee12d96ee38613963886fa377c681a89970b787c - languageName: node - linkType: hard - -"@emotion/use-insertion-effect-with-fallbacks@npm:^1.2.0": - version: 1.2.0 - resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.2.0" - peerDependencies: - react: ">=16.8.0" - checksum: 8ff6aec7f2924526ff8c8f8f93d4b8236376e2e12c435314a18c9a373016e24dfdf984e82bbc83712b8e90ff4783cd765eb39fc7050d1a43245e5728740ddd71 - languageName: node - linkType: hard - -"@emotion/utils@npm:^1.4.2": - version: 1.4.2 - resolution: "@emotion/utils@npm:1.4.2" - checksum: 04cf76849c6401205c058b82689fd0ec5bf501aed6974880fe9681a1d61543efb97e848f4c38664ac4a9068c7ad2d1cb84f73bde6cf95f1208aa3c28e0190321 - languageName: node - linkType: hard - -"@emotion/weak-memoize@npm:^0.4.0": - version: 0.4.0 - resolution: "@emotion/weak-memoize@npm:0.4.0" - checksum: db5da0e89bd752c78b6bd65a1e56231f0abebe2f71c0bd8fc47dff96408f7065b02e214080f99924f6a3bfe7ee15afc48dad999d76df86b39b16e513f7a94f52 - languageName: node - linkType: hard - -"@esbuild-plugins/node-modules-polyfill@npm:^0.1.4": - version: 0.1.4 - resolution: "@esbuild-plugins/node-modules-polyfill@npm:0.1.4" - dependencies: - escape-string-regexp: ^4.0.0 - rollup-plugin-node-polyfills: ^0.2.1 - peerDependencies: - esbuild: "*" - checksum: 39ff2a816139d71ebfbb78914c024565b6026da3146776aa10d27ee1330938ce78c7b2aad11c2d7768c7675d0942d1d1690dabfe60fa79e07dbb31cfbe396cec - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/android-arm64@npm:0.16.17" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/android-arm@npm:0.16.17" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/android-x64@npm:0.16.17" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/darwin-arm64@npm:0.16.17" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/darwin-x64@npm:0.16.17" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/freebsd-arm64@npm:0.16.17" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/freebsd-x64@npm:0.16.17" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-arm64@npm:0.16.17" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-arm@npm:0.16.17" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-ia32@npm:0.16.17" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-loong64@npm:0.16.17" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-mips64el@npm:0.16.17" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-ppc64@npm:0.16.17" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-riscv64@npm:0.16.17" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-s390x@npm:0.16.17" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/linux-x64@npm:0.16.17" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/netbsd-x64@npm:0.16.17" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/openbsd-x64@npm:0.16.17" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/sunos-x64@npm:0.16.17" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/win32-arm64@npm:0.16.17" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/win32-ia32@npm:0.16.17" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.16.17": - version: 0.16.17 - resolution: "@esbuild/win32-x64@npm:0.16.17" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@eslint-community/eslint-utils@npm:^4.2.0": - version: 4.9.0 - resolution: "@eslint-community/eslint-utils@npm:4.9.0" - dependencies: - eslint-visitor-keys: ^3.4.3 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: ae9b98eea006d1354368804b0116b8b45017a4e47b486d1b9cfa048a8ed3dc69b9b074eb2b2acb14034e6897c24048fd42b6a6816d9dc8bb9daad79db7d478d2 - languageName: node - linkType: hard - -"@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.6.1": - version: 4.12.2 - resolution: "@eslint-community/regexpp@npm:4.12.2" - checksum: 1770bc81f676a72f65c7200b5675ff7a349786521f30e66125faaf767fde1ba1c19c3790e16ba8508a62a3933afcfc806a893858b3b5906faf693d862b9e4120 - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^2.1.4": - version: 2.1.4 - resolution: "@eslint/eslintrc@npm:2.1.4" - dependencies: - ajv: ^6.12.4 - debug: ^4.3.2 - espree: ^9.6.0 - globals: ^13.19.0 - ignore: ^5.2.0 - import-fresh: ^3.2.1 - js-yaml: ^4.1.0 - minimatch: ^3.1.2 - strip-json-comments: ^3.1.1 - checksum: 10957c7592b20ca0089262d8c2a8accbad14b4f6507e35416c32ee6b4dbf9cad67dfb77096bbd405405e9ada2b107f3797fe94362e1c55e0b09d6e90dd149127 - languageName: node - linkType: hard - -"@eslint/js@npm:8.57.1": - version: 8.57.1 - resolution: "@eslint/js@npm:8.57.1" - checksum: 2afb77454c06e8316793d2e8e79a0154854d35e6782a1217da274ca60b5044d2c69d6091155234ed0551a1e408f86f09dd4ece02752c59568fa403e60611e880 - languageName: node - linkType: hard - -"@humanwhocodes/config-array@npm:^0.13.0": - version: 0.13.0 - resolution: "@humanwhocodes/config-array@npm:0.13.0" - dependencies: - "@humanwhocodes/object-schema": ^2.0.3 - debug: ^4.3.1 - minimatch: ^3.0.5 - checksum: eae69ff9134025dd2924f0b430eb324981494be26f0fddd267a33c28711c4db643242cf9fddf7dadb9d16c96b54b2d2c073e60a56477df86e0173149313bd5d6 - languageName: node - linkType: hard - -"@humanwhocodes/module-importer@npm:^1.0.1": - version: 1.0.1 - resolution: "@humanwhocodes/module-importer@npm:1.0.1" - checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 - languageName: node - linkType: hard - -"@humanwhocodes/object-schema@npm:^2.0.3": - version: 2.0.3 - resolution: "@humanwhocodes/object-schema@npm:2.0.3" - checksum: d3b78f6c5831888c6ecc899df0d03bcc25d46f3ad26a11d7ea52944dc36a35ef543fad965322174238d677a43d5c694434f6607532cff7077062513ad7022631 - languageName: node - linkType: hard - -"@isaacs/balanced-match@npm:^4.0.1": - version: 4.0.1 - resolution: "@isaacs/balanced-match@npm:4.0.1" - checksum: 102fbc6d2c0d5edf8f6dbf2b3feb21695a21bc850f11bc47c4f06aa83bd8884fde3fe9d6d797d619901d96865fdcb4569ac2a54c937992c48885c5e3d9967fe8 - languageName: node - linkType: hard - -"@isaacs/brace-expansion@npm:^5.0.0": - version: 5.0.0 - resolution: "@isaacs/brace-expansion@npm:5.0.0" - dependencies: - "@isaacs/balanced-match": ^4.0.1 - checksum: d7a3b8b0ddbf0ccd8eeb1300e29dd0a0c02147e823d8138f248375a365682360620895c66d113e05ee02389318c654379b0e538b996345b83c914941786705b1 - languageName: node - linkType: hard - -"@isaacs/fs-minipass@npm:^4.0.0": - version: 4.0.1 - resolution: "@isaacs/fs-minipass@npm:4.0.1" - dependencies: - minipass: ^7.0.4 - checksum: 5d36d289960e886484362d9eb6a51d1ea28baed5f5d0140bbe62b99bac52eaf06cc01c2bc0d3575977962f84f6b2c4387b043ee632216643d4787b0999465bf2 - languageName: node - linkType: hard - -"@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" - dependencies: - camelcase: ^5.3.1 - find-up: ^4.1.0 - get-package-type: ^0.1.0 - js-yaml: ^3.13.1 - resolve-from: ^5.0.0 - checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 - languageName: node - linkType: hard - -"@istanbuljs/schema@npm:^0.1.2": - version: 0.1.3 - resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 - languageName: node - linkType: hard - -"@jest/console@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/console@npm:27.5.1" - dependencies: - "@jest/types": ^27.5.1 - "@types/node": "*" - chalk: ^4.0.0 - jest-message-util: ^27.5.1 - jest-util: ^27.5.1 - slash: ^3.0.0 - checksum: 7cb20f06a34b09734c0342685ec53aa4c401fe3757c13a9c58fce76b971a322eb884f6de1068ef96f746e5398e067371b89515a07c268d4440a867c87748a706 - languageName: node - linkType: hard - -"@jest/console@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/console@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@types/node": "*" - chalk: ^4.0.0 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - slash: ^3.0.0 - checksum: fe50d98d26d02ce2901c76dff4bd5429a33c13affb692c9ebf8a578ca2f38a5dd854363d40d6c394f215150791fd1f692afd8e730a4178dda24107c8dfd9750a - languageName: node - linkType: hard - -"@jest/core@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/core@npm:27.5.1" - dependencies: - "@jest/console": ^27.5.1 - "@jest/reporters": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - emittery: ^0.8.1 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - jest-changed-files: ^27.5.1 - jest-config: ^27.5.1 - jest-haste-map: ^27.5.1 - jest-message-util: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-resolve-dependencies: ^27.5.1 - jest-runner: ^27.5.1 - jest-runtime: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 - jest-watcher: ^27.5.1 - micromatch: ^4.0.4 - rimraf: ^3.0.0 - slash: ^3.0.0 - strip-ansi: ^6.0.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: 904a94ad8f1b43cd6b48de3b0226659bff3696150ff8cf7680fc2faffdc8a115203bb9ab6e817c1f79f9d6a81f67953053cbc64d8a4604f2e0c42a04c28cf126 - languageName: node - linkType: hard - -"@jest/environment@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/environment@npm:27.5.1" - dependencies: - "@jest/fake-timers": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/node": "*" - jest-mock: ^27.5.1 - checksum: 2a9e18c35a015508dbec5b90b21c150230fa6c1c8cb8fabe029d46ee2ca4c40eb832fb636157da14c66590d0a4c8a2c053226b041f54a44507d6f6a89abefd66 - languageName: node - linkType: hard - -"@jest/fake-timers@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/fake-timers@npm:27.5.1" - dependencies: - "@jest/types": ^27.5.1 - "@sinonjs/fake-timers": ^8.0.1 - "@types/node": "*" - jest-message-util: ^27.5.1 - jest-mock: ^27.5.1 - jest-util: ^27.5.1 - checksum: 02a0561ed2f4586093facd4ae500b74694f187ac24d4a00e949a39a1c5325bca8932b4fcb0388a2c5ed0656506fc1cf51fd3e32cdd48cea7497ad9c6e028aba8 - languageName: node - linkType: hard - -"@jest/globals@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/globals@npm:27.5.1" - dependencies: - "@jest/environment": ^27.5.1 - "@jest/types": ^27.5.1 - expect: ^27.5.1 - checksum: 087f97047e9dcf555f76fe2ce54aee681e005eaa837a0c0c2d251df6b6412c892c9df54cb871b180342114389a5ff895a4e52e6e6d3d0015bf83c02a54f64c3c - languageName: node - linkType: hard - -"@jest/reporters@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/reporters@npm:27.5.1" - dependencies: - "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/node": "*" - chalk: ^4.0.0 - collect-v8-coverage: ^1.0.0 - exit: ^0.1.2 - glob: ^7.1.2 - graceful-fs: ^4.2.9 - istanbul-lib-coverage: ^3.0.0 - istanbul-lib-instrument: ^5.1.0 - istanbul-lib-report: ^3.0.0 - istanbul-lib-source-maps: ^4.0.0 - istanbul-reports: ^3.1.3 - jest-haste-map: ^27.5.1 - jest-resolve: ^27.5.1 - jest-util: ^27.5.1 - jest-worker: ^27.5.1 - slash: ^3.0.0 - source-map: ^0.6.0 - string-length: ^4.0.1 - terminal-link: ^2.0.0 - v8-to-istanbul: ^8.1.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - checksum: faba5eafb86e62b62e152cafc8812d56308f9d1e8b77f3a7dcae4a8803a20a60a0909cc43ed73363ef649bf558e4fb181c7a336d144c89f7998279d1882bb69e - languageName: node - linkType: hard - -"@jest/schemas@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/schemas@npm:28.1.3" - dependencies: - "@sinclair/typebox": ^0.24.1 - checksum: 3cf1d4b66c9c4ffda58b246de1ddcba8e6ad085af63dccdf07922511f13b68c0cc480a7bc620cb4f3099a6f134801c747e1df7bfc7a4ef4dceefbdea3e31e1de - languageName: node - linkType: hard - -"@jest/source-map@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/source-map@npm:27.5.1" - dependencies: - callsites: ^3.0.0 - graceful-fs: ^4.2.9 - source-map: ^0.6.0 - checksum: 4fb1e743b602841babf7e22bd84eca34676cb05d4eb3b604cae57fc59e406099f5ac759ac1a0d04d901237d143f0f4f234417306e823bde732a1d19982230862 - languageName: node - linkType: hard - -"@jest/test-result@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/test-result@npm:27.5.1" - dependencies: - "@jest/console": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/istanbul-lib-coverage": ^2.0.0 - collect-v8-coverage: ^1.0.0 - checksum: 338f7c509d6a3bc6d7dd7388c8f6f548b87638e171dc1fddfedcacb4e8950583288832223ba688058cbcf874b937d22bdc0fa88f79f5fc666f77957e465c06a5 - languageName: node - linkType: hard - -"@jest/test-result@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/test-result@npm:28.1.3" - dependencies: - "@jest/console": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/istanbul-lib-coverage": ^2.0.0 - collect-v8-coverage: ^1.0.0 - checksum: 957a5dd2fd2e84aabe86698f93c0825e96128ccaa23abf548b159a9b08ac74e4bde7acf4bec48479243dbdb27e4ea1b68c171846d21fb64855c6b55cead9ef27 - languageName: node - linkType: hard - -"@jest/test-sequencer@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/test-sequencer@npm:27.5.1" - dependencies: - "@jest/test-result": ^27.5.1 - graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 - jest-runtime: ^27.5.1 - checksum: f21f9c8bb746847f7f89accfd29d6046eec1446f0b54e4694444feaa4df379791f76ef0f5a4360aafcbc73b50bc979f68b8a7620de404019d3de166be6720cb0 - languageName: node - linkType: hard - -"@jest/transform@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/transform@npm:27.5.1" - dependencies: - "@babel/core": ^7.1.0 - "@jest/types": ^27.5.1 - babel-plugin-istanbul: ^6.1.1 - chalk: ^4.0.0 - convert-source-map: ^1.4.0 - fast-json-stable-stringify: ^2.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-util: ^27.5.1 - micromatch: ^4.0.4 - pirates: ^4.0.4 - slash: ^3.0.0 - source-map: ^0.6.1 - write-file-atomic: ^3.0.0 - checksum: a22079121aedea0f20a03a9c026be971f7b92adbfb4d5fd1fb67be315741deac4f056936d7c72a53b24aa5a1071bc942c003925fd453bf3f6a0ae5da6384e137 - languageName: node - linkType: hard - -"@jest/types@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/types@npm:27.5.1" - 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 - checksum: d1f43cc946d87543ddd79d49547aab2399481d34025d5c5f2025d3d99c573e1d9832fa83cef25e9d9b07a8583500229d15bbb07b8e233d127d911d133e2f14b1 - languageName: node - linkType: hard - -"@jest/types@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/types@npm:28.1.3" - dependencies: - "@jest/schemas": ^28.1.3 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: 1e258d9c063fcf59ebc91e46d5ea5984674ac7ae6cae3e50aa780d22b4405bf2c925f40350bf30013839eb5d4b5e521d956ddf8f3b7c78debef0e75a07f57350 - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.12, @jridgewell/gen-mapping@npm:^0.3.2, @jridgewell/gen-mapping@npm:^0.3.5": - version: 0.3.13 - resolution: "@jridgewell/gen-mapping@npm:0.3.13" - dependencies: - "@jridgewell/sourcemap-codec": ^1.5.0 - "@jridgewell/trace-mapping": ^0.3.24 - checksum: f2105acefc433337145caa3c84bba286de954f61c0bc46279bbd85a9e6a02871089717fa060413cfb6a9d44189fe8313b2d1cabf3a2eb3284d208fd5f75c54ff - languageName: node - linkType: hard - -"@jridgewell/remapping@npm:^2.3.5": - version: 2.3.5 - resolution: "@jridgewell/remapping@npm:2.3.5" - dependencies: - "@jridgewell/gen-mapping": ^0.3.5 - "@jridgewell/trace-mapping": ^0.3.24 - checksum: 4a66a7397c3dc9c6b5c14a0024b1f98c5e1d90a0dbc1e5955b5038f2db339904df2a0ee8a66559fafb4fc23ff33700a2639fd40bbdd2e9e82b58b3bdf83738e3 - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.1.0": - version: 3.1.2 - resolution: "@jridgewell/resolve-uri@npm:3.1.2" - checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870 - languageName: node - linkType: hard - -"@jridgewell/source-map@npm:^0.3.3": - version: 0.3.11 - resolution: "@jridgewell/source-map@npm:0.3.11" - dependencies: - "@jridgewell/gen-mapping": ^0.3.5 - "@jridgewell/trace-mapping": ^0.3.25 - checksum: c8a0011cc67e701f270fa042e32b312f382c413bcc70ca9c03684687cbf5b64d5eed87d4afa36dddaabe60ab3da6db4935f878febd9cfc7f82724ea1a114d344 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": - version: 1.5.5 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" - checksum: c2e36e67971f719a8a3a85ef5a5f580622437cc723c35d03ebd0c9c0b06418700ef006f58af742791f71f6a4fc68fcfaf1f6a74ec2f9a3332860e9373459dae7 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28": - version: 0.3.31 - resolution: "@jridgewell/trace-mapping@npm:0.3.31" - dependencies: - "@jridgewell/resolve-uri": ^3.1.0 - "@jridgewell/sourcemap-codec": ^1.4.14 - checksum: af8fda2431348ad507fbddf8e25f5d08c79ecc94594061ce402cf41bc5aba1a7b3e59bf0fd70a619b35f33983a3f488ceeba8faf56bff784f98bb5394a8b7d47 - languageName: node - linkType: hard - -"@leichtgewicht/ip-codec@npm:^2.0.1": - version: 2.0.5 - resolution: "@leichtgewicht/ip-codec@npm:2.0.5" - checksum: 4fcd025d0a923cb6b87b631a83436a693b255779c583158bbeacde6b4dd75b94cc1eba1c9c188de5fc36c218d160524ea08bfe4ef03a056b00ff14126d66f881 - languageName: node - linkType: hard - -"@localstack/integrations@npm:1.2.2": - version: 1.2.2 - resolution: "@localstack/integrations@npm:1.2.2" - dependencies: - "@mui/material": ^5.15.13 - "@mui/styles": ^5.15.13 - peerDependencies: - react: ^17.0.2 - checksum: 0af7dfe45b9e4dbf05d0fc7755d14c03105068738d965c987f767c835f52340f19b828ecdba2b9eea855b640cdc2ab1c6bd1c923040ea4dd58cf9670ef9a1e28 - languageName: node - linkType: hard - -"@mui/core-downloads-tracker@npm:^5.18.0": - version: 5.18.0 - resolution: "@mui/core-downloads-tracker@npm:5.18.0" - checksum: 065b46739d2bd84b880ad2f6a0a2062d60e3a296ce18ff380cad22ab5b2cb3de396755f322f4bea3a422ffffe1a9244536fc3c9623056ff3873c996e6664b1b9 - languageName: node - linkType: hard - -"@mui/material@npm:^5.15.20": - version: 5.18.0 - resolution: "@mui/material@npm:5.18.0" - dependencies: - "@babel/runtime": ^7.23.9 - "@mui/core-downloads-tracker": ^5.18.0 - "@mui/system": ^5.18.0 - "@mui/types": ~7.2.15 - "@mui/utils": ^5.17.1 - "@popperjs/core": ^2.11.8 - "@types/react-transition-group": ^4.4.10 - clsx: ^2.1.0 - csstype: ^3.1.3 - prop-types: ^15.8.1 - react-is: ^19.0.0 - react-transition-group: ^4.4.5 - peerDependencies: - "@emotion/react": ^11.5.0 - "@emotion/styled": ^11.3.0 - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@emotion/react": - optional: true - "@emotion/styled": - optional: true - "@types/react": - optional: true - checksum: b9d6cf638774e65924adf6f58ad50639c55050b33dc6223aa74686f733e137d173b4594b28be70e8ea3baf413a7fcd3bee40d35e3af12a42b7ba03def71ea217 - languageName: node - linkType: hard - -"@mui/private-theming@npm:^5.17.1": - version: 5.17.1 - resolution: "@mui/private-theming@npm:5.17.1" - dependencies: - "@babel/runtime": ^7.23.9 - "@mui/utils": ^5.17.1 - prop-types: ^15.8.1 - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: ab755e96c8adb6c12f2c7e567154a8d873d56f1e35d0fb897b568123dfc0e9d1d770ca0992410433c728f9f4403f556f3c1e1b5b57b001ef1948ddfc8c1717bd - languageName: node - linkType: hard - -"@mui/styled-engine@npm:^5.18.0": - version: 5.18.0 - resolution: "@mui/styled-engine@npm:5.18.0" - dependencies: - "@babel/runtime": ^7.23.9 - "@emotion/cache": ^11.13.5 - "@emotion/serialize": ^1.3.3 - csstype: ^3.1.3 - prop-types: ^15.8.1 - peerDependencies: - "@emotion/react": ^11.4.1 - "@emotion/styled": ^11.3.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@emotion/react": - optional: true - "@emotion/styled": - optional: true - checksum: ab2d260ad5eea94993bc7706b164ae4ec11bd37dd7be36b93755d18da5b7859d39ad44173adced0e111e8b1b7ef65c0e369df3f2908144237c5e78f793eebb5a - languageName: node - linkType: hard - -"@mui/styles@npm:^5.15.13": - version: 5.18.0 - resolution: "@mui/styles@npm:5.18.0" - dependencies: - "@babel/runtime": ^7.23.9 - "@emotion/hash": ^0.9.1 - "@mui/private-theming": ^5.17.1 - "@mui/types": ~7.2.15 - "@mui/utils": ^5.17.1 - clsx: ^2.1.0 - csstype: ^3.1.3 - hoist-non-react-statics: ^3.3.2 - jss: ^10.10.0 - jss-plugin-camel-case: ^10.10.0 - jss-plugin-default-unit: ^10.10.0 - jss-plugin-global: ^10.10.0 - jss-plugin-nested: ^10.10.0 - jss-plugin-props-sort: ^10.10.0 - jss-plugin-rule-value-function: ^10.10.0 - jss-plugin-vendor-prefixer: ^10.10.0 - prop-types: ^15.8.1 - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 290cd7b7d738277c7024ac3f0840b2fd9f973008bd18a67294a8e1f401ffbca992311101c9af5cc1b799abd8c3ec469a0096c5d8cccc6b540218c433b0040f28 - languageName: node - linkType: hard - -"@mui/system@npm:^5.18.0": - version: 5.18.0 - resolution: "@mui/system@npm:5.18.0" - dependencies: - "@babel/runtime": ^7.23.9 - "@mui/private-theming": ^5.17.1 - "@mui/styled-engine": ^5.18.0 - "@mui/types": ~7.2.15 - "@mui/utils": ^5.17.1 - clsx: ^2.1.0 - csstype: ^3.1.3 - prop-types: ^15.8.1 - peerDependencies: - "@emotion/react": ^11.5.0 - "@emotion/styled": ^11.3.0 - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@emotion/react": - optional: true - "@emotion/styled": - optional: true - "@types/react": - optional: true - checksum: 451f43889c2638da7c52b898e6174eafcdbcbcaaf3a79f954fdd58d9a043786d76fa4fca902cfdd6ab1aa250f5b1f932ef93d789c5a15987d893c0741bf7a1ad - languageName: node - linkType: hard - -"@mui/types@npm:~7.2.15": - version: 7.2.24 - resolution: "@mui/types@npm:7.2.24" - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 3a7367f9503e90fc3cce78885b57b54a00f7a04108be8af957fdc882c1bc0af68390920ea3d6aef855e704651ffd4a530e36ccbec4d0f421a176a2c3c432bb95 - languageName: node - linkType: hard - -"@mui/utils@npm:^5.17.1": - version: 5.17.1 - resolution: "@mui/utils@npm:5.17.1" - dependencies: - "@babel/runtime": ^7.23.9 - "@mui/types": ~7.2.15 - "@types/prop-types": ^15.7.12 - clsx: ^2.1.1 - prop-types: ^15.8.1 - react-is: ^19.0.0 - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0 - react: ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 06f9da7025b9291f1052c0af012fd0f00ff1539bc99880e15f483a85c27bff0e9c3d047511dc5c3177d546c21978227ece2e6f7a7bd91903c72b48b89c45a677 - languageName: node - linkType: hard - -"@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1": - version: 5.1.1-v1 - resolution: "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1" - dependencies: - eslint-scope: 5.1.1 - checksum: f2e3b2d6a6e2d9f163ca22105910c9f850dc4897af0aea3ef0a5886b63d8e1ba6505b71c99cb78a3bba24a09557d601eb21c8dede3f3213753fcfef364eb0e57 - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": 2.0.5 - run-parallel: ^1.1.9 - checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": 2.1.5 - fastq: ^1.6.0 - checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 - languageName: node - linkType: hard - -"@npmcli/agent@npm:^4.0.0": - version: 4.0.0 - resolution: "@npmcli/agent@npm:4.0.0" - dependencies: - agent-base: ^7.1.0 - http-proxy-agent: ^7.0.0 - https-proxy-agent: ^7.0.1 - lru-cache: ^11.2.1 - socks-proxy-agent: ^8.0.3 - checksum: 89ae20b44859ff8d4de56ade319d8ceaa267a0742d6f7345fe98aa5cd8614ced7db85ea4dc5bfbd6614dbb200a10b134e087143582534c939e8a02219e8665c8 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^5.0.0": - version: 5.0.0 - resolution: "@npmcli/fs@npm:5.0.0" - dependencies: - semver: ^7.3.5 - checksum: 897dac32eb37e011800112d406b9ea2ebd96f1dab01bb8fbeb59191b86f6825dffed6a89f3b6c824753d10f8735b76d630927bd7610e9e123b129ef2e5f02cb5 - languageName: node - linkType: hard - -"@pmmmwh/react-refresh-webpack-plugin@npm:^0.5.3": - version: 0.5.17 - resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.5.17" - dependencies: - ansi-html: ^0.0.9 - core-js-pure: ^3.23.3 - error-stack-parser: ^2.0.6 - html-entities: ^2.1.0 - loader-utils: ^2.0.4 - schema-utils: ^4.2.0 - source-map: ^0.7.3 - peerDependencies: - "@types/webpack": 4.x || 5.x - react-refresh: ">=0.10.0 <1.0.0" - sockjs-client: ^1.4.0 - type-fest: ">=0.17.0 <5.0.0" - webpack: ">=4.43.0 <6.0.0" - webpack-dev-server: 3.x || 4.x || 5.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 - checksum: ff80b5064f6acba52f18e240dc0a402c5f0980402fd4e5a212a69b9ad6ad76294b4e0f4a78f356cab17b53b88995c6e4dd0b54e6f07c28c2a307cb8bf61fa88f - languageName: node - linkType: hard - -"@popperjs/core@npm:^2.11.8": - version: 2.11.8 - resolution: "@popperjs/core@npm:2.11.8" - checksum: e5c69fdebf52a4012f6a1f14817ca8e9599cb1be73dd1387e1785e2ed5e5f0862ff817f420a87c7fc532add1f88a12e25aeb010ffcbdc98eace3d55ce2139cf0 - languageName: node - linkType: hard - -"@remix-run/router@npm:1.23.1": - version: 1.23.1 - resolution: "@remix-run/router@npm:1.23.1" - checksum: 776f821f54331331c61261df291765b4a99b1e127fb650180868885bea766fd5e65a7ed1bedf732d981ace593f73b00c4af29deda3d89769c193a476be542e2c - languageName: node - linkType: hard - -"@rollup/plugin-babel@npm:^5.2.0": - version: 5.3.1 - resolution: "@rollup/plugin-babel@npm:5.3.1" - dependencies: - "@babel/helper-module-imports": ^7.10.4 - "@rollup/pluginutils": ^3.1.0 - peerDependencies: - "@babel/core": ^7.0.0 - "@types/babel__core": ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - "@types/babel__core": - optional: true - checksum: 220d71e4647330f252ef33d5f29700aef2e8284a0b61acfcceb47617a7f96208aa1ed16eae75619424bf08811ede5241e271a6d031f07026dee6b3a2bdcdc638 - languageName: node - linkType: hard - -"@rollup/plugin-node-resolve@npm:^11.2.1": - version: 11.2.1 - resolution: "@rollup/plugin-node-resolve@npm:11.2.1" - dependencies: - "@rollup/pluginutils": ^3.1.0 - "@types/resolve": 1.17.1 - builtin-modules: ^3.1.0 - deepmerge: ^4.2.2 - is-module: ^1.0.0 - resolve: ^1.19.0 - peerDependencies: - rollup: ^1.20.0||^2.0.0 - checksum: 6f3b3ecf9a0596a5db4212984bdeb13bb7612693602407e9457ada075dea5a5f2e4e124c592352cf27066a88b194de9b9a95390149b52cf335d5b5e17b4e265b - languageName: node - linkType: hard - -"@rollup/plugin-replace@npm:^2.4.1": - version: 2.4.2 - resolution: "@rollup/plugin-replace@npm:2.4.2" - dependencies: - "@rollup/pluginutils": ^3.1.0 - magic-string: ^0.25.7 - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - checksum: b2f1618ee5526d288e2f8ae328dcb326e20e8dc8bd1f60d3e14d6708a5832e4aa44811f7d493f4aed2deeadca86e3b6b0503cd39bf50cfb4b595bb9da027fad0 - languageName: node - linkType: hard - -"@rollup/pluginutils@npm:^3.1.0": - version: 3.1.0 - resolution: "@rollup/pluginutils@npm:3.1.0" - dependencies: - "@types/estree": 0.0.39 - estree-walker: ^1.0.1 - picomatch: ^2.2.2 - peerDependencies: - rollup: ^1.20.0||^2.0.0 - checksum: 8be16e27863c219edbb25a4e6ec2fe0e1e451d9e917b6a43cf2ae5bc025a6b8faaa40f82a6e53b66d0de37b58ff472c6c3d57a83037ae635041f8df959d6d9aa - languageName: node - linkType: hard - -"@rtsao/scc@npm:^1.1.0": - version: 1.1.0 - resolution: "@rtsao/scc@npm:1.1.0" - checksum: 17d04adf404e04c1e61391ed97bca5117d4c2767a76ae3e879390d6dec7b317fcae68afbf9e98badee075d0b64fa60f287729c4942021b4d19cd01db77385c01 - languageName: node - linkType: hard - -"@rushstack/eslint-patch@npm:^1.1.0": - version: 1.15.0 - resolution: "@rushstack/eslint-patch@npm:1.15.0" - checksum: 0b3f5951e66dabcaf5db4c1db789e1031701819caa69e09f8935cdd4aa0a41649936c2b2a5da795d79e5f56b8b6753b6e20bcfdf9343d4fb27a274a9566d7417 - languageName: node - linkType: hard - -"@sinclair/typebox@npm:^0.24.1": - version: 0.24.51 - resolution: "@sinclair/typebox@npm:0.24.51" - checksum: fd0d855e748ef767eb19da1a60ed0ab928e91e0f358c1dd198d600762c0015440b15755e96d1176e2a0db7e09c6a64ed487828ee10dd0c3e22f61eb09c478cd0 - languageName: node - linkType: hard - -"@sinonjs/commons@npm:^1.7.0": - version: 1.8.6 - resolution: "@sinonjs/commons@npm:1.8.6" - dependencies: - type-detect: 4.0.8 - checksum: 7d3f8c1e85f30cd4e83594fc19b7a657f14d49eb8d95a30095631ce15e906c869e0eff96c5b93dffea7490c00418b07f54582ba49c6560feb2a8c34c0b16832d - languageName: node - linkType: hard - -"@sinonjs/fake-timers@npm:^8.0.1": - version: 8.1.0 - resolution: "@sinonjs/fake-timers@npm:8.1.0" - dependencies: - "@sinonjs/commons": ^1.7.0 - checksum: 09b5a158ce013a6c37613258bad79ca4efeb99b1f59c41c73cca36cac00b258aefcf46eeea970fccf06b989414d86fe9f54c1102272c0c3bdd51a313cea80949 - languageName: node - linkType: hard - -"@surma/rollup-plugin-off-main-thread@npm:^2.2.3": - version: 2.2.3 - resolution: "@surma/rollup-plugin-off-main-thread@npm:2.2.3" - dependencies: - ejs: ^3.1.6 - json5: ^2.2.0 - magic-string: ^0.25.0 - string.prototype.matchall: ^4.0.6 - checksum: 2c021349442e2e2cec96bb50fd82ec8bf8514d909bc73594f6cfc89b3b68f2feed909a8161d7d307d9455585c97e6b66853ce334db432626c7596836d4549c0c - languageName: node - linkType: hard - -"@svgr/babel-plugin-add-jsx-attribute@npm:^5.4.0": - version: 5.4.0 - resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:5.4.0" - checksum: 1c538cf312b486598c6aea17f9b72d7fc308eb5dd32effd804630206a185493b8a828ff980ceb29d57d8319c085614c7cea967be709c71ae77702a4c30037011 - languageName: node - linkType: hard - -"@svgr/babel-plugin-add-jsx-attribute@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:6.5.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: cab83832830a57735329ed68f67c03b57ca21fa037b0134847b0c5c0ef4beca89956d7dacfbf7b2a10fd901e7009e877512086db2ee918b8c69aee7742ae32c0 - languageName: node - linkType: hard - -"@svgr/babel-plugin-remove-jsx-attribute@npm:*": - version: 8.0.0 - resolution: "@svgr/babel-plugin-remove-jsx-attribute@npm:8.0.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ff992893c6c4ac802713ba3a97c13be34e62e6d981c813af40daabcd676df68a72a61bd1e692bb1eda3587f1b1d700ea462222ae2153bb0f46886632d4f88d08 - languageName: node - linkType: hard - -"@svgr/babel-plugin-remove-jsx-attribute@npm:^5.4.0": - version: 5.4.0 - resolution: "@svgr/babel-plugin-remove-jsx-attribute@npm:5.4.0" - checksum: ad2231bfcb14daa944201df66236c222cde05a07c4cffaecab1d36d33f606b6caf17bda21844fc435780c1a27195e49beb8397536fe5e7545dfffcfbbcecb7f8 - languageName: node - linkType: hard - -"@svgr/babel-plugin-remove-jsx-empty-expression@npm:*": - version: 8.0.0 - resolution: "@svgr/babel-plugin-remove-jsx-empty-expression@npm:8.0.0" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0fb691b63a21bac00da3aa2dccec50d0d5a5b347ff408d60803b84410d8af168f2656e4ba1ee1f24dab0ae4e4af77901f2928752bb0434c1f6788133ec599ec8 - languageName: node - linkType: hard - -"@svgr/babel-plugin-remove-jsx-empty-expression@npm:^5.0.1": - version: 5.0.1 - resolution: "@svgr/babel-plugin-remove-jsx-empty-expression@npm:5.0.1" - checksum: 175c8f13ddcb0744f7c3910ebed3799cfb961a75bff130e1ed2071c87ca8b8df8964825c988e511b2e3c5dbf48ad3d4fbbb6989edc53294253df40cf2a24375e - languageName: node - linkType: hard - -"@svgr/babel-plugin-replace-jsx-attribute-value@npm:^5.0.1": - version: 5.0.1 - resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:5.0.1" - checksum: 68f4e2a5b95eca44e22fce485dc2ddd10adabe2b38f6db3ef9071b35e84bf379685f7acab6c05b7a82f722328c02f6424f8252c6dd5c2c4ed2f00104072b1dfe - languageName: node - linkType: hard - -"@svgr/babel-plugin-replace-jsx-attribute-value@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:6.5.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b7d2125758e766e1ebd14b92216b800bdc976959bc696dbfa1e28682919147c1df4bb8b1b5fd037d7a83026e27e681fea3b8d3741af8d3cf4c9dfa3d412125df - languageName: node - linkType: hard - -"@svgr/babel-plugin-svg-dynamic-title@npm:^5.4.0": - version: 5.4.0 - resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:5.4.0" - checksum: c46feb52454acea32031d1d881a81334f2e5f838ed25a2d9014acb5e9541d404405911e86dbee8bee9f1e43c9e07118123a07dc297962dbed0c4c5a86bdc4be9 - languageName: node - linkType: hard - -"@svgr/babel-plugin-svg-dynamic-title@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:6.5.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0fd42ebf127ae9163ef341e84972daa99bdcb9e6ed3f83aabd95ee173fddc43e40e02fa847fbc0a1058cf5549f72b7960a2c5e22c3e4ac18f7e3ac81277852ae - languageName: node - linkType: hard - -"@svgr/babel-plugin-svg-em-dimensions@npm:^5.4.0": - version: 5.4.0 - resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:5.4.0" - checksum: 0d19b26147bbba932bd973258dab4a80a7ea6b9d674713186f0e10fa21a9e3aa4327326b2bf1892e8051712bce0ea30561eb187ca27bb241d33c350cea51ac88 - languageName: node - linkType: hard - -"@svgr/babel-plugin-svg-em-dimensions@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:6.5.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c1550ee9f548526fa66fd171e3ffb5696bfc4e4cd108a631d39db492c7410dc10bba4eb5a190e9df824bf806130ccc586ae7d2e43c547e6a4f93bbb29a18f344 - languageName: node - linkType: hard - -"@svgr/babel-plugin-transform-react-native-svg@npm:^5.4.0": - version: 5.4.0 - resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:5.4.0" - checksum: 8ac5dc9fb2dee24addc74dbcb169860c95a69247606f986eabb0618fb300dd08e8f220891b758e62c051428ba04d8dd50f2c2bf877e15fa190e6d384d1ccd2ad - languageName: node - linkType: hard - -"@svgr/babel-plugin-transform-react-native-svg@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:6.5.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 4c924af22b948b812629e80efb90ad1ec8faae26a232d8ca8a06b46b53e966a2c415a57806a3ff0ea806a622612e546422719b69ec6839717a7755dac19171d9 - languageName: node - linkType: hard - -"@svgr/babel-plugin-transform-svg-component@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/babel-plugin-transform-svg-component@npm:5.5.0" - checksum: 94c3fed490deb8544af4ea32a5d78a840334cdcc8a5a33fe8ea9f1c220a4d714d57c9e10934492de99b7e1acc17963b1749a49927e27b1e839a4dc3c893605c7 - languageName: node - linkType: hard - -"@svgr/babel-plugin-transform-svg-component@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/babel-plugin-transform-svg-component@npm:6.5.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: e496bb5ee871feb6bcab250b6e067322da7dd5c9c2b530b41e5586fe090f86611339b49d0a909c334d9b24cbca0fa755c949a2526c6ad03c6b5885666874cf5f - languageName: node - linkType: hard - -"@svgr/babel-preset@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/babel-preset@npm:5.5.0" - 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 - checksum: 5d396c4499c9ff2df9db6d08a160d10386b9f459cb9c2bb5ee183ab03b2f46c8ef3c9a070f1eee93f4e4433a5f00704e7632b1386078eb697ad8a2b38edb8522 - languageName: node - linkType: hard - -"@svgr/babel-preset@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/babel-preset@npm:6.5.1" - dependencies: - "@svgr/babel-plugin-add-jsx-attribute": ^6.5.1 - "@svgr/babel-plugin-remove-jsx-attribute": "*" - "@svgr/babel-plugin-remove-jsx-empty-expression": "*" - "@svgr/babel-plugin-replace-jsx-attribute-value": ^6.5.1 - "@svgr/babel-plugin-svg-dynamic-title": ^6.5.1 - "@svgr/babel-plugin-svg-em-dimensions": ^6.5.1 - "@svgr/babel-plugin-transform-react-native-svg": ^6.5.1 - "@svgr/babel-plugin-transform-svg-component": ^6.5.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 9f124be39a8e64f909162f925b3a63ddaa5a342a5e24fc0b7f7d9d4d7f7e3b916596c754fb557dc259928399cad5366a27cb231627a0d2dcc4b13ac521cf05af - languageName: node - linkType: hard - -"@svgr/core@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/core@npm:5.5.0" - dependencies: - "@svgr/plugin-jsx": ^5.5.0 - camelcase: ^6.2.0 - cosmiconfig: ^7.0.0 - checksum: 39b230151e30b9ca8551d10674e50efb821d1a49ce10969b09587af130780eba581baa1e321b0922f48331943096f05590aa6ae92d88d011d58093a89dd34158 - languageName: node - linkType: hard - -"@svgr/core@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/core@npm:6.5.1" - dependencies: - "@babel/core": ^7.19.6 - "@svgr/babel-preset": ^6.5.1 - "@svgr/plugin-jsx": ^6.5.1 - camelcase: ^6.2.0 - cosmiconfig: ^7.0.1 - checksum: fd6d6d5da5aeb956703310480b626c1fb3e3973ad9fe8025efc1dcf3d895f857b70d100c63cf32cebb20eb83c9607bafa464c9436e18fe6fe4fafdc73ed6b1a5 - languageName: node - linkType: hard - -"@svgr/hast-util-to-babel-ast@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/hast-util-to-babel-ast@npm:5.5.0" - dependencies: - "@babel/types": ^7.12.6 - checksum: a03c1c7ab92b1a6dbd7671b0b78df4c07e8d808ff092671554a78752ec0c0425c03b6c82569a5f33903d191c73379eedf631f23aeb30b7a70185f5f2fc67fae6 - languageName: node - linkType: hard - -"@svgr/hast-util-to-babel-ast@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/hast-util-to-babel-ast@npm:6.5.1" - dependencies: - "@babel/types": ^7.20.0 - entities: ^4.4.0 - checksum: 37923cce1b3f4e2039077b0c570b6edbabe37d1cf1a6ee35e71e0fe00f9cffac450eec45e9720b1010418131a999cb0047331ba1b6d1d2c69af1b92ac785aacf - languageName: node - linkType: hard - -"@svgr/plugin-jsx@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/plugin-jsx@npm:5.5.0" - 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 - checksum: e053f8dd6bfcd72377b432dd5b1db3c89d503d29839639a87f85b597a680d0b69e33a4db376f5a1074a89615f7157cd36f63f94bdb4083a0fd5bbe918c7fcb9b - languageName: node - linkType: hard - -"@svgr/plugin-jsx@npm:^6.5.1": - version: 6.5.1 - resolution: "@svgr/plugin-jsx@npm:6.5.1" - dependencies: - "@babel/core": ^7.19.6 - "@svgr/babel-preset": ^6.5.1 - "@svgr/hast-util-to-babel-ast": ^6.5.1 - svg-parser: ^2.0.4 - peerDependencies: - "@svgr/core": ^6.0.0 - checksum: 42f22847a6bdf930514d7bedd3c5e1fd8d53eb3594779f9db16cb94c762425907c375cd8ec789114e100a4d38068aca6c7ab5efea4c612fba63f0630c44cc859 - languageName: node - linkType: hard - -"@svgr/plugin-svgo@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/plugin-svgo@npm:5.5.0" - dependencies: - cosmiconfig: ^7.0.0 - deepmerge: ^4.2.2 - svgo: ^1.2.2 - checksum: bef5d09581349afdf654209f82199670649cc749b81ff5f310ce4a3bbad749cde877c9b1a711dd9ced51224e2b5b5a720d242bdf183fa0f83e08e8d5e069b0b6 - languageName: node - linkType: hard - -"@svgr/webpack@npm:^5.5.0": - version: 5.5.0 - resolution: "@svgr/webpack@npm:5.5.0" - 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 - checksum: 540391bd63791625d26d6b5e0dd3c716ef51176bfba53bf0979a1ac4781afd2672f4bef2d76cf3d9cdc8e9ee61bda6863ed405a237b10406633ede4cd524f1cc - languageName: node - linkType: hard - -"@testing-library/dom@npm:^8.5.0": - version: 8.20.1 - resolution: "@testing-library/dom@npm:8.20.1" - dependencies: - "@babel/code-frame": ^7.10.4 - "@babel/runtime": ^7.12.5 - "@types/aria-query": ^5.0.1 - aria-query: 5.1.3 - chalk: ^4.1.0 - dom-accessibility-api: ^0.5.9 - lz-string: ^1.5.0 - pretty-format: ^27.0.2 - checksum: 06fc8dc67849aadb726cbbad0e7546afdf8923bd39acb64c576d706249bd7d0d05f08e08a31913fb621162e3b9c2bd0dce15964437f030f9fa4476326fdd3007 - languageName: node - linkType: hard - -"@testing-library/react@npm:^13.4.0": - version: 13.4.0 - resolution: "@testing-library/react@npm:13.4.0" - dependencies: - "@babel/runtime": ^7.12.5 - "@testing-library/dom": ^8.5.0 - "@types/react-dom": ^18.0.0 - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - checksum: 51ec548c1fdb1271089a5c63e0908f0166f2c7fcd9cacd3108ebbe0ce64cb4351812d885892020dc37608418cfb15698514856502b3cab0e5cc58d6cc1bd4a3e - languageName: node - linkType: hard - -"@tootallnate/once@npm:1": - version: 1.1.2 - resolution: "@tootallnate/once@npm:1.1.2" - checksum: e1fb1bbbc12089a0cb9433dc290f97bddd062deadb6178ce9bcb93bb7c1aecde5e60184bc7065aec42fe1663622a213493c48bbd4972d931aae48315f18e1be9 - languageName: node - linkType: hard - -"@trysound/sax@npm:0.2.0": - version: 0.2.0 - resolution: "@trysound/sax@npm:0.2.0" - checksum: 11226c39b52b391719a2a92e10183e4260d9651f86edced166da1d95f39a0a1eaa470e44d14ac685ccd6d3df7e2002433782872c0feeb260d61e80f21250e65c - languageName: node - linkType: hard - -"@types/aria-query@npm:^5.0.1": - version: 5.0.4 - resolution: "@types/aria-query@npm:5.0.4" - checksum: ad8b87e4ad64255db5f0a73bc2b4da9b146c38a3a8ab4d9306154334e0fc67ae64e76bfa298eebd1e71830591fb15987e5de7111bdb36a2221bdc379e3415fb0 - languageName: node - linkType: hard - -"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14": - version: 7.20.5 - resolution: "@types/babel__core@npm:7.20.5" - dependencies: - "@babel/parser": ^7.20.7 - "@babel/types": ^7.20.7 - "@types/babel__generator": "*" - "@types/babel__template": "*" - "@types/babel__traverse": "*" - checksum: a3226f7930b635ee7a5e72c8d51a357e799d19cbf9d445710fa39ab13804f79ab1a54b72ea7d8e504659c7dfc50675db974b526142c754398d7413aa4bc30845 - languageName: node - linkType: hard - -"@types/babel__generator@npm:*": - version: 7.27.0 - resolution: "@types/babel__generator@npm:7.27.0" - dependencies: - "@babel/types": ^7.0.0 - checksum: e6739cacfa276c1ad38e1d8a6b4b1f816c2c11564e27f558b68151728489aaf0f4366992107ee4ed7615dfa303f6976dedcdce93df2b247116d1bcd1607ee260 - languageName: node - linkType: hard - -"@types/babel__template@npm:*": - version: 7.4.4 - resolution: "@types/babel__template@npm:7.4.4" - dependencies: - "@babel/parser": ^7.1.0 - "@babel/types": ^7.0.0 - checksum: d7a02d2a9b67e822694d8e6a7ddb8f2b71a1d6962dfd266554d2513eefbb205b33ca71a0d163b1caea3981ccf849211f9964d8bd0727124d18ace45aa6c9ae29 - languageName: node - linkType: hard - -"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.4, @types/babel__traverse@npm:^7.0.6": - version: 7.28.0 - resolution: "@types/babel__traverse@npm:7.28.0" - dependencies: - "@babel/types": ^7.28.2 - checksum: e3124e6575b2f70de338eab8a9c704d315a86c46a8e395b6ec78a0157ab7b5fd877289556a57dcf28e4ff3543714e359cc1182d4afc4bcb4f3575a0bbafa0dad - languageName: node - linkType: hard - -"@types/body-parser@npm:*": - version: 1.19.6 - resolution: "@types/body-parser@npm:1.19.6" - dependencies: - "@types/connect": "*" - "@types/node": "*" - checksum: 33041e88eae00af2cfa0827e951e5f1751eafab2a8b6fce06cd89ef368a988907996436b1325180edaeddd1c0c7d0d0d4c20a6c9ff294a91e0039a9db9e9b658 - languageName: node - linkType: hard - -"@types/bonjour@npm:^3.5.9": - version: 3.5.13 - resolution: "@types/bonjour@npm:3.5.13" - dependencies: - "@types/node": "*" - checksum: e827570e097bd7d625a673c9c208af2d1a22fa3885c0a1646533cf24394c839c3e5f60ac1bc60c0ddcc69c0615078c9fb2c01b42596c7c582d895d974f2409ee - languageName: node - linkType: hard - -"@types/connect-history-api-fallback@npm:^1.3.5": - version: 1.5.4 - resolution: "@types/connect-history-api-fallback@npm:1.5.4" - dependencies: - "@types/express-serve-static-core": "*" - "@types/node": "*" - checksum: e1dee43b8570ffac02d2d47a2b4ba80d3ca0dd1840632dafb221da199e59dbe3778d3d7303c9e23c6b401f37c076935a5bc2aeae1c4e5feaefe1c371fe2073fd - languageName: node - linkType: hard - -"@types/connect@npm:*": - version: 3.4.38 - resolution: "@types/connect@npm:3.4.38" - dependencies: - "@types/node": "*" - checksum: 7eb1bc5342a9604facd57598a6c62621e244822442976c443efb84ff745246b10d06e8b309b6e80130026a396f19bf6793b7cecd7380169f369dac3bfc46fb99 - languageName: node - linkType: hard - -"@types/eslint-scope@npm:^3.7.7": - version: 3.7.7 - resolution: "@types/eslint-scope@npm:3.7.7" - dependencies: - "@types/eslint": "*" - "@types/estree": "*" - checksum: e2889a124aaab0b89af1bab5959847c5bec09809209255de0e63b9f54c629a94781daa04adb66bffcdd742f5e25a17614fb933965093c0eea64aacda4309380e - languageName: node - linkType: hard - -"@types/eslint@npm:*": - version: 9.6.1 - resolution: "@types/eslint@npm:9.6.1" - dependencies: - "@types/estree": "*" - "@types/json-schema": "*" - checksum: c286e79707ab604b577cf8ce51d9bbb9780e3d6a68b38a83febe13fa05b8012c92de17c28532fac2b03d3c460123f5055d603a579685325246ca1c86828223e0 - languageName: node - linkType: hard - -"@types/eslint@npm:^7.29.0 || ^8.4.1": - version: 8.56.12 - resolution: "@types/eslint@npm:8.56.12" - dependencies: - "@types/estree": "*" - "@types/json-schema": "*" - checksum: 0f7710ee02a256c499514251f527f84de964bb29487db840408e4cde79283124a38935597636d2265756c34dd1d902e1b00ae78930d4a0b55111909cb7b80d84 - languageName: node - linkType: hard - -"@types/estree@npm:*, @types/estree@npm:^1.0.8": - version: 1.0.8 - resolution: "@types/estree@npm:1.0.8" - checksum: bd93e2e415b6f182ec4da1074e1f36c480f1d26add3e696d54fb30c09bc470897e41361c8fd957bf0985024f8fbf1e6e2aff977d79352ef7eb93a5c6dcff6c11 - languageName: node - linkType: hard - -"@types/estree@npm:0.0.39": - version: 0.0.39 - resolution: "@types/estree@npm:0.0.39" - checksum: 412fb5b9868f2c418126451821833414189b75cc6bf84361156feed733e3d92ec220b9d74a89e52722e03d5e241b2932732711b7497374a404fad49087adc248 - languageName: node - linkType: hard - -"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^5.0.0": - version: 5.1.0 - resolution: "@types/express-serve-static-core@npm:5.1.0" - dependencies: - "@types/node": "*" - "@types/qs": "*" - "@types/range-parser": "*" - "@types/send": "*" - checksum: a2a780a9954e4553b69474ea76ab5c26534dfb274e1a49524f6394cbb590c2bbf73ce9dc67ab920c25d91583c8a99d8e486696b6e9810bef7a964fcbaad88a7b - languageName: node - linkType: hard - -"@types/express-serve-static-core@npm:^4.17.33": - version: 4.19.7 - resolution: "@types/express-serve-static-core@npm:4.19.7" - dependencies: - "@types/node": "*" - "@types/qs": "*" - "@types/range-parser": "*" - "@types/send": "*" - checksum: 6d0f1126293a5b35d3697a5fc7e787d6c1bb8f5368dd0691fe0c8041a812a668ebb3b168124de30e600963d8acdf48ec7373daf7608d9dc1d6288f6c373d19a1 - languageName: node - linkType: hard - -"@types/express@npm:*": - version: 5.0.5 - resolution: "@types/express@npm:5.0.5" - dependencies: - "@types/body-parser": "*" - "@types/express-serve-static-core": ^5.0.0 - "@types/serve-static": ^1 - checksum: 9e72410286fbc80bea8a57d1b374c25235f6019dabf8af67e5b72c2f9be548f36ccc09d048fc88172731450e80f06018f90c17e05beb5afc4dbdaf5f7200dbb3 - languageName: node - linkType: hard - -"@types/express@npm:^4.17.13": - version: 4.17.25 - resolution: "@types/express@npm:4.17.25" - dependencies: - "@types/body-parser": "*" - "@types/express-serve-static-core": ^4.17.33 - "@types/qs": "*" - "@types/serve-static": ^1 - checksum: 285d16008489d37b2be03e2e050bcf201d5d6ed9278ca13619d9029efd2055b192b2445f769116f716cfcf53d9d799a03f4e76199af9cea0ea3dee3d88595931 - languageName: node - linkType: hard - -"@types/graceful-fs@npm:^4.1.2": - version: 4.1.9 - resolution: "@types/graceful-fs@npm:4.1.9" - dependencies: - "@types/node": "*" - checksum: 79d746a8f053954bba36bd3d94a90c78de995d126289d656fb3271dd9f1229d33f678da04d10bce6be440494a5a73438e2e363e92802d16b8315b051036c5256 - languageName: node - linkType: hard - -"@types/html-minifier-terser@npm:^6.0.0": - version: 6.1.0 - resolution: "@types/html-minifier-terser@npm:6.1.0" - checksum: eb843f6a8d662d44fb18ec61041117734c6aae77aa38df1be3b4712e8e50ffaa35f1e1c92fdd0fde14a5675fecf457abcd0d15a01fae7506c91926176967f452 - languageName: node - linkType: hard - -"@types/http-errors@npm:*": - version: 2.0.5 - resolution: "@types/http-errors@npm:2.0.5" - checksum: a88da669366bc483e8f3b3eb3d34ada5f8d13eeeef851b1204d77e2ba6fc42aba4566d877cca5c095204a3f4349b87fe397e3e21288837bdd945dd514120755b - languageName: node - linkType: hard - -"@types/http-proxy@npm:^1.17.8": - version: 1.17.17 - resolution: "@types/http-proxy@npm:1.17.17" - dependencies: - "@types/node": "*" - checksum: 7231460dc06c109447b21c125a60662872b9c2e902efd12c47902b8ad75caded19678fa3115f6b9ce06b94d2f46d697be572e848c52da558f4f1ee88ff18a2e0 - languageName: node - linkType: hard - -"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.6 - resolution: "@types/istanbul-lib-coverage@npm:2.0.6" - checksum: 3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778 - languageName: node - linkType: hard - -"@types/istanbul-lib-report@npm:*": - version: 3.0.3 - resolution: "@types/istanbul-lib-report@npm:3.0.3" - dependencies: - "@types/istanbul-lib-coverage": "*" - checksum: b91e9b60f865ff08cb35667a427b70f6c2c63e88105eadd29a112582942af47ed99c60610180aa8dcc22382fa405033f141c119c69b95db78c4c709fbadfeeb4 - languageName: node - linkType: hard - -"@types/istanbul-reports@npm:^3.0.0": - version: 3.0.4 - resolution: "@types/istanbul-reports@npm:3.0.4" - dependencies: - "@types/istanbul-lib-report": "*" - checksum: 93eb18835770b3431f68ae9ac1ca91741ab85f7606f310a34b3586b5a34450ec038c3eed7ab19266635499594de52ff73723a54a72a75b9f7d6a956f01edee95 - languageName: node - linkType: hard - -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 - languageName: node - linkType: hard - -"@types/json5@npm:^0.0.29": - version: 0.0.29 - resolution: "@types/json5@npm:0.0.29" - checksum: e60b153664572116dfea673c5bda7778dbff150498f44f998e34b5886d8afc47f16799280e4b6e241c0472aef1bc36add771c569c68fc5125fc2ae519a3eb9ac - languageName: node - linkType: hard - -"@types/mime@npm:^1": - version: 1.3.5 - resolution: "@types/mime@npm:1.3.5" - checksum: e29a5f9c4776f5229d84e525b7cd7dd960b51c30a0fb9a028c0821790b82fca9f672dab56561e2acd9e8eed51d431bde52eafdfef30f643586c4162f1aecfc78 - languageName: node - linkType: hard - -"@types/node-forge@npm:^1.3.0": - version: 1.3.14 - resolution: "@types/node-forge@npm:1.3.14" - dependencies: - "@types/node": "*" - checksum: ff621803390e723e56b289a89fca3a06f9f8b438add1b843203a0f64bcbc7ac03d457136b3c15010b5bc89d81f57b35f62964e6e980f6290597bb21b4463c009 - languageName: node - linkType: hard - -"@types/node@npm:*": - version: 24.10.1 - resolution: "@types/node@npm:24.10.1" - dependencies: - undici-types: ~7.16.0 - checksum: c2f370ae7a97c04991e0eee6b57e588a2abef0814a5f6e41fda5a9200cf02ae6654fad51c8372ee203ae4134bab80f5bf441c586f7f50e0fda3ba422f35eb3c0 - languageName: node - linkType: hard - -"@types/node@npm:^16.18.99": - version: 16.18.126 - resolution: "@types/node@npm:16.18.126" - checksum: 86112e7499f8a4d1bb60696cab0bf464adf3c141fca4bc5451e8f3aba5736529b76d4b4396edb21e5d7c19592852f7d6cb81ee70074fd13bde2db2d0db720467 - languageName: node - linkType: hard - -"@types/parse-json@npm:^4.0.0": - version: 4.0.2 - resolution: "@types/parse-json@npm:4.0.2" - checksum: 5bf62eec37c332ad10059252fc0dab7e7da730764869c980b0714777ad3d065e490627be9f40fc52f238ffa3ac4199b19de4127196910576c2fe34dd47c7a470 - languageName: node - linkType: hard - -"@types/prettier@npm:^2.1.5": - version: 2.7.3 - resolution: "@types/prettier@npm:2.7.3" - checksum: 705384209cea6d1433ff6c187c80dcc0b95d99d5c5ce21a46a9a58060c527973506822e428789d842761e0280d25e3359300f017fbe77b9755bc772ab3dc2f83 - languageName: node - linkType: hard - -"@types/prop-types@npm:^15.7.12": - version: 15.7.15 - resolution: "@types/prop-types@npm:15.7.15" - checksum: 31aa2f59b28f24da6fb4f1d70807dae2aedfce090ec63eaf9ea01727a9533ef6eaf017de5bff99fbccad7d1c9e644f52c6c2ba30869465dd22b1a7221c29f356 - languageName: node - linkType: hard - -"@types/q@npm:^1.5.1": - version: 1.5.8 - resolution: "@types/q@npm:1.5.8" - checksum: ff3b7f09c2746d068dee8d39501f09dbf71728c4facdc9cb0e266ea6615ad97e61267c0606ab3da88d11ef1609ce904cef45a9c56b2b397f742388d7f15bb740 - languageName: node - linkType: hard - -"@types/qs@npm:*": - version: 6.14.0 - resolution: "@types/qs@npm:6.14.0" - checksum: 1909205514d22b3cbc7c2314e2bd8056d5f05dfb21cf4377f0730ee5e338ea19957c41735d5e4806c746176563f50005bbab602d8358432e25d900bdf4970826 - languageName: node - linkType: hard - -"@types/range-parser@npm:*": - version: 1.2.7 - resolution: "@types/range-parser@npm:1.2.7" - checksum: 95640233b689dfbd85b8c6ee268812a732cf36d5affead89e806fe30da9a430767af8ef2cd661024fd97e19d61f3dec75af2df5e80ec3bea000019ab7028629a - languageName: node - linkType: hard - -"@types/react-dom@npm:^17.0.11": - version: 17.0.26 - resolution: "@types/react-dom@npm:17.0.26" - peerDependencies: - "@types/react": ^17.0.0 - checksum: 2b62bf86c22b5e84a99d356bf50f5ea681aa70d11d0669c3ab6d5855751677ffb7e7b8d2cec01fff4d3923d0da3221821f7f55ddaa1cf42bc7a06545fe7cf2f1 - languageName: node - linkType: hard - -"@types/react-transition-group@npm:^4.4.10": - version: 4.4.12 - resolution: "@types/react-transition-group@npm:4.4.12" - peerDependencies: - "@types/react": "*" - checksum: 13d36396cae4d3c316b03d4a0ba299f0d039c59368ba65e04b0c3dc06fd0a16f59d2c669c3e32d6d525a95423f156b84e550d26bff0bdd8df285f305f8f3a0ed - languageName: node - linkType: hard - -"@types/react@npm:^19.1.6": - version: 19.2.7 - resolution: "@types/react@npm:19.2.7" - dependencies: - csstype: ^3.2.2 - checksum: b1f4c9a45862ea392b9ead060a5b5730b4c41b21fde097db35e639a8a0978460468d8da87f47226230bd4681d6de48ffee695595540084a8a849dde027c66a46 - languageName: node - linkType: hard - -"@types/resolve@npm:1.17.1": - version: 1.17.1 - resolution: "@types/resolve@npm:1.17.1" - dependencies: - "@types/node": "*" - checksum: dc6a6df507656004e242dcb02c784479deca516d5f4b58a1707e708022b269ae147e1da0521f3e8ad0d63638869d87e0adc023f0bd5454aa6f72ac66c7525cf5 - languageName: node - linkType: hard - -"@types/retry@npm:0.12.0": - version: 0.12.0 - resolution: "@types/retry@npm:0.12.0" - checksum: 61a072c7639f6e8126588bf1eb1ce8835f2cb9c2aba795c4491cf6310e013267b0c8488039857c261c387e9728c1b43205099223f160bb6a76b4374f741b5603 - languageName: node - linkType: hard - -"@types/semver@npm:^7.3.12": - version: 7.7.1 - resolution: "@types/semver@npm:7.7.1" - checksum: 76d218e414482a398148d5c28f2bfa017108869f3fc18cda379c9d8d062348f8b9653ae2fa8642d3b5b52e211928fe8be34f22da4e1f08245c84e0e51e040673 - languageName: node - linkType: hard - -"@types/send@npm:*": - version: 1.2.1 - resolution: "@types/send@npm:1.2.1" - dependencies: - "@types/node": "*" - checksum: 3b8388edeec77ae62f7bbc384c98ca06140614e4ef34fc04b35824f19937f472f8ff3785e83570e0d40e6d7c934c015d4831c82a74a1ade0d9676720835702c5 - languageName: node - linkType: hard - -"@types/send@npm:<1": - version: 0.17.6 - resolution: "@types/send@npm:0.17.6" - dependencies: - "@types/mime": ^1 - "@types/node": "*" - checksum: 5bd287f1357380963eb4b12daef5c8982f52a3269308ff3414304074d4ad7f05fe466f2cb476f54798096877ad3c5343692978776bd674b25261ecbeab87640f - languageName: node - linkType: hard - -"@types/serve-index@npm:^1.9.1": - version: 1.9.4 - resolution: "@types/serve-index@npm:1.9.4" - dependencies: - "@types/express": "*" - checksum: 72727c88d54da5b13275ebfb75dcdc4aa12417bbe9da1939e017c4c5f0c906fae843aa4e0fbfe360e7ee9df2f3d388c21abfc488f77ce58693fb57809f8ded92 - languageName: node - linkType: hard - -"@types/serve-static@npm:^1, @types/serve-static@npm:^1.13.10": - version: 1.15.10 - resolution: "@types/serve-static@npm:1.15.10" - dependencies: - "@types/http-errors": "*" - "@types/node": "*" - "@types/send": <1 - checksum: f216eef2aaf2c8eff09f431c420c5c2989eaf0dfc15d106db9fb64c14577a4059af24fb0ae2eba7984d6360950c8cbc1fb52f65608106477729d251481bc96fe - languageName: node - linkType: hard - -"@types/sockjs@npm:^0.3.33": - version: 0.3.36 - resolution: "@types/sockjs@npm:0.3.36" - dependencies: - "@types/node": "*" - checksum: b4b5381122465d80ea8b158537c00bc82317222d3fb31fd7229ff25b31fa89134abfbab969118da55622236bf3d8fee75759f3959908b5688991f492008f29bc - languageName: node - linkType: hard - -"@types/stack-utils@npm:^2.0.0": - version: 2.0.3 - resolution: "@types/stack-utils@npm:2.0.3" - checksum: 72576cc1522090fe497337c2b99d9838e320659ac57fa5560fcbdcbafcf5d0216c6b3a0a8a4ee4fdb3b1f5e3420aa4f6223ab57b82fef3578bec3206425c6cf5 - languageName: node - linkType: hard - -"@types/trusted-types@npm:^2.0.2": - version: 2.0.7 - resolution: "@types/trusted-types@npm:2.0.7" - checksum: 8e4202766a65877efcf5d5a41b7dd458480b36195e580a3b1085ad21e948bc417d55d6f8af1fd2a7ad008015d4117d5fdfe432731157da3c68678487174e4ba3 - languageName: node - linkType: hard - -"@types/ws@npm:^8.5.5": - version: 8.18.1 - resolution: "@types/ws@npm:8.18.1" - dependencies: - "@types/node": "*" - checksum: 0331b14cde388e2805af66cad3e3f51857db8e68ed91e5b99750915e96fe7572e58296dc99999331bbcf08f0ff00a227a0bb214e991f53c2a5aca7b0e71173fa - languageName: node - linkType: hard - -"@types/yargs-parser@npm:*": - version: 21.0.3 - resolution: "@types/yargs-parser@npm:21.0.3" - checksum: ef236c27f9432983e91432d974243e6c4cdae227cb673740320eff32d04d853eed59c92ca6f1142a335cfdc0e17cccafa62e95886a8154ca8891cc2dec4ee6fc - languageName: node - linkType: hard - -"@types/yargs@npm:^16.0.0": - version: 16.0.11 - resolution: "@types/yargs@npm:16.0.11" - dependencies: - "@types/yargs-parser": "*" - checksum: d172a63bb046d6ca5dd944a6490789103db288d5b4c78cd0a79f4c1c63718df58d3fd9d1987e57721a58dfc8270a2018b1e93565f930347d41ec15416f3075d9 - languageName: node - linkType: hard - -"@types/yargs@npm:^17.0.8": - version: 17.0.35 - resolution: "@types/yargs@npm:17.0.35" - dependencies: - "@types/yargs-parser": "*" - checksum: ebf1f5373388cfcbf9cfb5e56ce7a77c0ba2450420f26f3701010ca92df48cce7e14e4245ed1f17178a38ff8702467a6f4047742775b8e2fd06dec8f4f3501ce - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:^5.5.0": - version: 5.62.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.62.0" - dependencies: - "@eslint-community/regexpp": ^4.4.0 - "@typescript-eslint/scope-manager": 5.62.0 - "@typescript-eslint/type-utils": 5.62.0 - "@typescript-eslint/utils": 5.62.0 - debug: ^4.3.4 - graphemer: ^1.4.0 - ignore: ^5.2.0 - natural-compare-lite: ^1.4.0 - semver: ^7.3.7 - tsutils: ^3.21.0 - peerDependencies: - "@typescript-eslint/parser": ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: fc104b389c768f9fa7d45a48c86d5c1ad522c1d0512943e782a56b1e3096b2cbcc1eea3fcc590647bf0658eef61aac35120a9c6daf979bf629ad2956deb516a1 - languageName: node - linkType: hard - -"@typescript-eslint/experimental-utils@npm:^5.0.0": - version: 5.62.0 - resolution: "@typescript-eslint/experimental-utils@npm:5.62.0" - dependencies: - "@typescript-eslint/utils": 5.62.0 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: ce55d9f74eac5cb94d66d5db9ead9a5d734f4301519fb5956a57f4b405a5318a115b0316195a3c039e0111489138680411709cb769085d71e1e1db1376ea0949 - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:^5.5.0": - version: 5.62.0 - resolution: "@typescript-eslint/parser@npm:5.62.0" - dependencies: - "@typescript-eslint/scope-manager": 5.62.0 - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/typescript-estree": 5.62.0 - debug: ^4.3.4 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: d168f4c7f21a7a63f47002e2d319bcbb6173597af5c60c1cf2de046b46c76b4930a093619e69faf2d30214c29ab27b54dcf1efc7046a6a6bd6f37f59a990e752 - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/scope-manager@npm:5.62.0" - dependencies: - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/visitor-keys": 5.62.0 - checksum: 6062d6b797fe1ce4d275bb0d17204c827494af59b5eaf09d8a78cdd39dadddb31074dded4297aaf5d0f839016d601032857698b0e4516c86a41207de606e9573 - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/type-utils@npm:5.62.0" - dependencies: - "@typescript-eslint/typescript-estree": 5.62.0 - "@typescript-eslint/utils": 5.62.0 - debug: ^4.3.4 - tsutils: ^3.21.0 - peerDependencies: - eslint: "*" - peerDependenciesMeta: - typescript: - optional: true - checksum: fc41eece5f315dfda14320be0da78d3a971d650ea41300be7196934b9715f3fe1120a80207551eb71d39568275dbbcf359bde540d1ca1439d8be15e9885d2739 - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/types@npm:5.62.0" - checksum: 48c87117383d1864766486f24de34086155532b070f6264e09d0e6139449270f8a9559cfef3c56d16e3bcfb52d83d42105d61b36743626399c7c2b5e0ac3b670 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" - dependencies: - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/visitor-keys": 5.62.0 - debug: ^4.3.4 - globby: ^11.1.0 - is-glob: ^4.0.3 - semver: ^7.3.7 - tsutils: ^3.21.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 3624520abb5807ed8f57b1197e61c7b1ed770c56dfcaca66372d584ff50175225798bccb701f7ef129d62c5989070e1ee3a0aa2d84e56d9524dcf011a2bb1a52 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:5.62.0, @typescript-eslint/utils@npm:^5.58.0": - version: 5.62.0 - resolution: "@typescript-eslint/utils@npm:5.62.0" - dependencies: - "@eslint-community/eslint-utils": ^4.2.0 - "@types/json-schema": ^7.0.9 - "@types/semver": ^7.3.12 - "@typescript-eslint/scope-manager": 5.62.0 - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/typescript-estree": 5.62.0 - eslint-scope: ^5.1.1 - semver: ^7.3.7 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: ee9398c8c5db6d1da09463ca7bf36ed134361e20131ea354b2da16a5fdb6df9ba70c62a388d19f6eebb421af1786dbbd79ba95ddd6ab287324fc171c3e28d931 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:5.62.0": - version: 5.62.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" - dependencies: - "@typescript-eslint/types": 5.62.0 - eslint-visitor-keys: ^3.3.0 - checksum: 976b05d103fe8335bef5c93ad3f76d781e3ce50329c0243ee0f00c0fcfb186c81df50e64bfdd34970148113f8ade90887f53e3c4938183afba830b4ba8e30a35 - languageName: node - linkType: hard - -"@ungap/structured-clone@npm:^1.2.0": - version: 1.3.0 - resolution: "@ungap/structured-clone@npm:1.3.0" - checksum: 64ed518f49c2b31f5b50f8570a1e37bde3b62f2460042c50f132430b2d869c4a6586f13aa33a58a4722715b8158c68cae2827389d6752ac54da2893c83e480fc - languageName: node - linkType: hard - -"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": - version: 1.14.1 - resolution: "@webassemblyjs/ast@npm:1.14.1" - dependencies: - "@webassemblyjs/helper-numbers": 1.13.2 - "@webassemblyjs/helper-wasm-bytecode": 1.13.2 - checksum: f9154ad9ea14f6f2374ebe918c221fd69a4d4514126a1acc6fa4966e8d27ab28cb550a5e6880032cf620e19640578658a7e5a55bd2aad1e3db4e9d598b8f2099 - languageName: node - linkType: hard - -"@webassemblyjs/floating-point-hex-parser@npm:1.13.2": - version: 1.13.2 - resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.13.2" - checksum: e866ec8433f4a70baa511df5e8f2ebcd6c24f4e2cc6274c7c5aabe2bcce3459ea4680e0f35d450e1f3602acf3913b6b8e4f15069c8cfd34ae8609fb9a7d01795 - languageName: node - linkType: hard - -"@webassemblyjs/helper-api-error@npm:1.13.2": - version: 1.13.2 - resolution: "@webassemblyjs/helper-api-error@npm:1.13.2" - checksum: 48b5df7fd3095bb252f59a139fe2cbd999a62ac9b488123e9a0da3906ad8a2f2da7b2eb21d328c01a90da987380928706395c2897d1f3ed9e2125b6d75a920d0 - languageName: node - linkType: hard - -"@webassemblyjs/helper-buffer@npm:1.14.1": - version: 1.14.1 - resolution: "@webassemblyjs/helper-buffer@npm:1.14.1" - checksum: b611e981dfd6a797c3d8fc3a772de29a6e55033737c2c09c31bb66c613bdbb2d25f915df1dee62a602c6acc057ca71128432fa8c3e22a893e1219dc454f14ede - languageName: node - linkType: hard - -"@webassemblyjs/helper-numbers@npm:1.13.2": - version: 1.13.2 - resolution: "@webassemblyjs/helper-numbers@npm:1.13.2" - dependencies: - "@webassemblyjs/floating-point-hex-parser": 1.13.2 - "@webassemblyjs/helper-api-error": 1.13.2 - "@xtuc/long": 4.2.2 - checksum: 49e2c9bf9b66997e480f6b44d80f895b3cde4de52ac135921d28e144565edca6903a519f627f4089b5509de1d7f9e5023f0e1a94ff78a36c9e2eb30e7c18ffd2 - languageName: node - linkType: hard - -"@webassemblyjs/helper-wasm-bytecode@npm:1.13.2": - version: 1.13.2 - resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.13.2" - checksum: 8e059e1c1f0294f4fc3df8e4eaff3c5ef6e2e1358f34ebc118eaf5070ed59e56ed7fc92b28be734ebde17c8d662d5d27e06ade686c282445135da083ae11c128 - languageName: node - linkType: hard - -"@webassemblyjs/helper-wasm-section@npm:1.14.1": - version: 1.14.1 - resolution: "@webassemblyjs/helper-wasm-section@npm:1.14.1" - dependencies: - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/helper-buffer": 1.14.1 - "@webassemblyjs/helper-wasm-bytecode": 1.13.2 - "@webassemblyjs/wasm-gen": 1.14.1 - checksum: 0a08d454a63192cd66abf91b6f060ac4b466cef341262246e9dcc828dd4c8536195dea9b46a1244b1eac65b59b8b502164a771a190052a92ff0a0a2ded0f8f53 - languageName: node - linkType: hard - -"@webassemblyjs/ieee754@npm:1.13.2": - version: 1.13.2 - resolution: "@webassemblyjs/ieee754@npm:1.13.2" - dependencies: - "@xtuc/ieee754": ^1.2.0 - checksum: d7e3520baa37a7309fa7db4d73d69fb869878853b1ebd4b168821bd03fcc4c0e1669c06231315b0039035d9a7a462e53de3ad982da4a426a4b0743b5888e8673 - languageName: node - linkType: hard - -"@webassemblyjs/leb128@npm:1.13.2": - version: 1.13.2 - resolution: "@webassemblyjs/leb128@npm:1.13.2" - dependencies: - "@xtuc/long": 4.2.2 - checksum: 64083507f7cff477a6d71a9e325d95665cea78ec8df99ca7c050e1cfbe300fbcf0842ca3dcf3b4fa55028350135588a4f879398d3dd2b6a8de9913ce7faf5333 - languageName: node - linkType: hard - -"@webassemblyjs/utf8@npm:1.13.2": - version: 1.13.2 - resolution: "@webassemblyjs/utf8@npm:1.13.2" - checksum: 95ec6052f30eefa8d50c9b2a3394d08b17d53a4aa52821451d41d774c126fa8f39b988fbf5bff56da86852a87c16d676e576775a4071e5e5ccf020cc85a4b281 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-edit@npm:^1.14.1": - version: 1.14.1 - resolution: "@webassemblyjs/wasm-edit@npm:1.14.1" - dependencies: - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/helper-buffer": 1.14.1 - "@webassemblyjs/helper-wasm-bytecode": 1.13.2 - "@webassemblyjs/helper-wasm-section": 1.14.1 - "@webassemblyjs/wasm-gen": 1.14.1 - "@webassemblyjs/wasm-opt": 1.14.1 - "@webassemblyjs/wasm-parser": 1.14.1 - "@webassemblyjs/wast-printer": 1.14.1 - checksum: 9341c3146bb1b7863f03d6050c2a66990f20384ca137388047bbe1feffacb599e94fca7b7c18287d17e2449ffb4005fdc7f41f674a6975af9ad8522756f8ffff - languageName: node - linkType: hard - -"@webassemblyjs/wasm-gen@npm:1.14.1": - version: 1.14.1 - resolution: "@webassemblyjs/wasm-gen@npm:1.14.1" - dependencies: - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/helper-wasm-bytecode": 1.13.2 - "@webassemblyjs/ieee754": 1.13.2 - "@webassemblyjs/leb128": 1.13.2 - "@webassemblyjs/utf8": 1.13.2 - checksum: 401b12bec7431c4fc29d9414bbe40d3c6dc5be04d25a116657c42329f5481f0129f3b5834c293f26f0e42681ceac9157bf078ce9bdb6a7f78037c650373f98b2 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-opt@npm:1.14.1": - version: 1.14.1 - resolution: "@webassemblyjs/wasm-opt@npm:1.14.1" - dependencies: - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/helper-buffer": 1.14.1 - "@webassemblyjs/wasm-gen": 1.14.1 - "@webassemblyjs/wasm-parser": 1.14.1 - checksum: 60c697a9e9129d8d23573856df0791ba33cea4a3bc2339044cae73128c0983802e5e50a42157b990eeafe1237eb8e7653db6de5f02b54a0ae7b81b02dcdf2ae9 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.14.1": - version: 1.14.1 - resolution: "@webassemblyjs/wasm-parser@npm:1.14.1" - dependencies: - "@webassemblyjs/ast": 1.14.1 - "@webassemblyjs/helper-api-error": 1.13.2 - "@webassemblyjs/helper-wasm-bytecode": 1.13.2 - "@webassemblyjs/ieee754": 1.13.2 - "@webassemblyjs/leb128": 1.13.2 - "@webassemblyjs/utf8": 1.13.2 - checksum: 93f1fe2676da465b4e824419d9812a3d7218de4c3addd4e916c04bc86055fa134416c1b67e4b7cbde8d728c0dce2721d06cc0bfe7a7db7c093a0898009937405 - languageName: node - linkType: hard - -"@webassemblyjs/wast-printer@npm:1.14.1": - version: 1.14.1 - resolution: "@webassemblyjs/wast-printer@npm:1.14.1" - dependencies: - "@webassemblyjs/ast": 1.14.1 - "@xtuc/long": 4.2.2 - checksum: 517881a0554debe6945de719d100b2d8883a2d24ddf47552cdeda866341e2bb153cd824a864bc7e2a61190a4b66b18f9899907e0074e9e820d2912ac0789ea60 - languageName: node - linkType: hard - -"@xtuc/ieee754@npm:^1.2.0": - version: 1.2.0 - resolution: "@xtuc/ieee754@npm:1.2.0" - checksum: ac56d4ca6e17790f1b1677f978c0c6808b1900a5b138885d3da21732f62e30e8f0d9120fcf8f6edfff5100ca902b46f8dd7c1e3f903728634523981e80e2885a - languageName: node - linkType: hard - -"@xtuc/long@npm:4.2.2": - version: 4.2.2 - resolution: "@xtuc/long@npm:4.2.2" - checksum: 8ed0d477ce3bc9c6fe2bf6a6a2cc316bb9c4127c5a7827bae947fa8ec34c7092395c5a283cc300c05b5fa01cbbfa1f938f410a7bf75db7c7846fea41949989ec - languageName: node - linkType: hard - -"abab@npm:^2.0.3, abab@npm:^2.0.5": - version: 2.0.6 - resolution: "abab@npm:2.0.6" - checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e - languageName: node - linkType: hard - -"abbrev@npm:^4.0.0": - version: 4.0.0 - resolution: "abbrev@npm:4.0.0" - checksum: d0344b63d28e763f259b4898c41bdc92c08e9d06d0da5617d0bbe4d78244e46daea88c510a2f9472af59b031d9060ec1a999653144e793fd029a59dae2f56dc8 - languageName: node - linkType: hard - -"accepts@npm:~1.3.4, accepts@npm:~1.3.8": - version: 1.3.8 - resolution: "accepts@npm:1.3.8" - dependencies: - mime-types: ~2.1.34 - negotiator: 0.6.3 - checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 - languageName: node - linkType: hard - -"acorn-globals@npm:^6.0.0": - version: 6.0.0 - resolution: "acorn-globals@npm:6.0.0" - dependencies: - acorn: ^7.1.1 - acorn-walk: ^7.1.1 - checksum: 72d95e5b5e585f9acd019b993ab8bbba68bb3cbc9d9b5c1ebb3c2f1fe5981f11deababfb4949f48e6262f9c57878837f5958c0cca396f81023814680ca878042 - languageName: node - linkType: hard - -"acorn-import-phases@npm:^1.0.3": - version: 1.0.4 - resolution: "acorn-import-phases@npm:1.0.4" - peerDependencies: - acorn: ^8.14.0 - checksum: e669cccfb6711af305150fcbfddcf4485fffdc4547a0ecabebe94103b47124cc02bfd186240061c00ac954cfb0461b4ecc3e203e138e43042b7af32063fa9510 - languageName: node - linkType: hard - -"acorn-jsx@npm:^5.3.2": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 - languageName: node - linkType: hard - -"acorn-walk@npm:^7.1.1": - version: 7.2.0 - resolution: "acorn-walk@npm:7.2.0" - checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f - languageName: node - linkType: hard - -"acorn@npm:^7.1.1": - version: 7.4.1 - resolution: "acorn@npm:7.4.1" - bin: - acorn: bin/acorn - checksum: 1860f23c2107c910c6177b7b7be71be350db9e1080d814493fae143ae37605189504152d1ba8743ba3178d0b37269ce1ffc42b101547fdc1827078f82671e407 - languageName: node - linkType: hard - -"acorn@npm:^8.15.0, acorn@npm:^8.2.4, acorn@npm:^8.9.0": - version: 8.15.0 - resolution: "acorn@npm:8.15.0" - bin: - acorn: bin/acorn - checksum: 309c6b49aedf1a2e34aaf266de06de04aab6eb097c02375c66fdeb0f64556a6a823540409914fb364d9a11bc30d79d485a2eba29af47992d3490e9886c4391c3 - languageName: node - linkType: hard - -"address@npm:^1.0.1, address@npm:^1.1.2": - version: 1.2.2 - resolution: "address@npm:1.2.2" - checksum: ace439960c1e3564d8f523aff23a841904bf33a2a7c2e064f7f60a064194075758b9690e65bd9785692a4ef698a998c57eb74d145881a1cecab8ba658ddb1607 - languageName: node - linkType: hard - -"adjust-sourcemap-loader@npm:^4.0.0": - version: 4.0.0 - resolution: "adjust-sourcemap-loader@npm:4.0.0" - dependencies: - loader-utils: ^2.0.0 - regex-parser: ^2.2.11 - checksum: d524ae23582f41e2275af5d88faab7a9dc09770ed588244e0a76d3196d0d6a90bf02760c71bc6213dbfef3aef4a86232ac9521bfd629752c32b7af37bc74c660 - languageName: node - linkType: hard - -"agent-base@npm:6": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: 4 - checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d - languageName: node - linkType: hard - -"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": - version: 7.1.4 - resolution: "agent-base@npm:7.1.4" - checksum: 86a7f542af277cfbd77dd61e7df8422f90bac512953709003a1c530171a9d019d072e2400eab2b59f84b49ab9dd237be44315ca663ac73e82b3922d10ea5eafa - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: ^2.0.0 - indent-string: ^4.0.0 - checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 - languageName: node - linkType: hard - -"ajv-formats@npm:^2.1.1": - version: 2.1.1 - resolution: "ajv-formats@npm:2.1.1" - dependencies: - ajv: ^8.0.0 - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - checksum: 4a287d937f1ebaad4683249a4c40c0fa3beed30d9ddc0adba04859026a622da0d317851316ea64b3680dc60f5c3c708105ddd5d5db8fe595d9d0207fd19f90b7 - languageName: node - linkType: hard - -"ajv-keywords@npm:^3.4.1, ajv-keywords@npm:^3.5.2": - version: 3.5.2 - resolution: "ajv-keywords@npm:3.5.2" - peerDependencies: - ajv: ^6.9.1 - checksum: 7dc5e5931677a680589050f79dcbe1fefbb8fea38a955af03724229139175b433c63c68f7ae5f86cf8f65d55eb7c25f75a046723e2e58296707617ca690feae9 - languageName: node - linkType: hard - -"ajv-keywords@npm:^5.1.0": - version: 5.1.0 - resolution: "ajv-keywords@npm:5.1.0" - dependencies: - fast-deep-equal: ^3.1.3 - peerDependencies: - ajv: ^8.8.2 - checksum: c35193940b853119242c6757787f09ecf89a2c19bcd36d03ed1a615e710d19d450cb448bfda407b939aba54b002368c8bff30529cc50a0536a8e10bcce300421 - languageName: node - linkType: hard - -"ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: ^3.1.1 - fast-json-stable-stringify: ^2.0.0 - json-schema-traverse: ^0.4.1 - uri-js: ^4.2.2 - checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 - languageName: node - linkType: hard - -"ajv@npm:^8.0.0, ajv@npm:^8.6.0, ajv@npm:^8.9.0": - version: 8.17.1 - resolution: "ajv@npm:8.17.1" - dependencies: - fast-deep-equal: ^3.1.3 - fast-uri: ^3.0.1 - json-schema-traverse: ^1.0.0 - require-from-string: ^2.0.2 - checksum: 1797bf242cfffbaf3b870d13565bd1716b73f214bb7ada9a497063aada210200da36e3ed40237285f3255acc4feeae91b1fb183625331bad27da95973f7253d9 - languageName: node - linkType: hard - -"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.1": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: ^0.21.3 - checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 - languageName: node - linkType: hard - -"ansi-html-community@npm:^0.0.8": - version: 0.0.8 - resolution: "ansi-html-community@npm:0.0.8" - bin: - ansi-html: bin/ansi-html - checksum: 04c568e8348a636963f915e48eaa3e01218322e1169acafdd79c384f22e5558c003f79bbc480c1563865497482817c7eed025f0653ebc17642fededa5cb42089 - languageName: node - linkType: hard - -"ansi-html@npm:^0.0.9": - version: 0.0.9 - resolution: "ansi-html@npm:0.0.9" - bin: - ansi-html: bin/ansi-html - checksum: a03754d6f66bae33938ed8bb3dd98174b7f4895ebe45226185036ed4a1388a7aaf2f2b9581608f0626432ba7add92cfc590aa6475a78bbb90d9d1e1d1af8cbe6 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b - languageName: node - linkType: hard - -"ansi-regex@npm:^6.0.1": - version: 6.2.2 - resolution: "ansi-regex@npm:6.2.2" - checksum: 9b17ce2c6daecc75bcd5966b9ad672c23b184dc3ed9bf3c98a0702f0d2f736c15c10d461913568f2cf527a5e64291c7473358885dd493305c84a1cfed66ba94f - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: ^1.9.0 - checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: ^2.0.1 - checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 - languageName: node - linkType: hard - -"ansi-styles@npm:^5.0.0": - version: 5.2.0 - resolution: "ansi-styles@npm:5.2.0" - checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 - languageName: node - linkType: hard - -"any-promise@npm:^1.0.0": - version: 1.3.0 - resolution: "any-promise@npm:1.3.0" - checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de - languageName: node - linkType: hard - -"anymatch@npm:^2.0.0": - version: 2.0.0 - resolution: "anymatch@npm:2.0.0" - dependencies: - micromatch: ^3.1.4 - normalize-path: ^2.1.1 - checksum: f7bb1929842b4585cdc28edbb385767d499ce7d673f96a8f11348d2b2904592ffffc594fe9229b9a1e9e4dccb9329b7692f9f45e6a11dcefbb76ecdc9ab740f6 - languageName: node - linkType: hard - -"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": - version: 3.1.3 - resolution: "anymatch@npm:3.1.3" - dependencies: - normalize-path: ^3.0.0 - picomatch: ^2.0.4 - checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 - languageName: node - linkType: hard - -"apache-crypt@npm:^1.1.2": - version: 1.2.6 - resolution: "apache-crypt@npm:1.2.6" - dependencies: - unix-crypt-td-js: ^1.1.4 - checksum: 525d137bfac716f0b99861ed6915420789c3b265816071d9fcb942a28ceaf99728f3890d62a09316d746f3ace5548f40a6d169af727b8f62e4c237f327b3bdfc - languageName: node - linkType: hard - -"apache-md5@npm:^1.0.6": - version: 1.1.8 - resolution: "apache-md5@npm:1.1.8" - checksum: 5f93fe00a4c75c947a8ba88054cfa9c141ea13d1581515a59637d580747581345f8cee41204af354f7280439ab19120f4bec4a1ee5cf1ac7033a7a89dbb05ada - languageName: node - linkType: hard - -"arg@npm:^5.0.2": - version: 5.0.2 - resolution: "arg@npm:5.0.2" - checksum: 6c69ada1a9943d332d9e5382393e897c500908d91d5cb735a01120d5f71daf1b339b7b8980cbeaba8fd1afc68e658a739746179e4315a26e8a28951ff9930078 - languageName: node - linkType: hard - -"argparse@npm:^1.0.7": - version: 1.0.10 - resolution: "argparse@npm:1.0.10" - dependencies: - sprintf-js: ~1.0.2 - checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 - languageName: node - linkType: hard - -"argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced - languageName: node - linkType: hard - -"aria-query@npm:5.1.3": - version: 5.1.3 - resolution: "aria-query@npm:5.1.3" - dependencies: - deep-equal: ^2.0.5 - checksum: 929ff95f02857b650fb4cbcd2f41072eee2f46159a6605ea03bf63aa572e35ffdff43d69e815ddc462e16e07de8faba3978afc2813650b4448ee18c9895d982b - languageName: node - linkType: hard - -"aria-query@npm:^5.3.2": - version: 5.3.2 - resolution: "aria-query@npm:5.3.2" - checksum: d971175c85c10df0f6d14adfe6f1292409196114ab3c62f238e208b53103686f46cc70695a4f775b73bc65f6a09b6a092fd963c4f3a5a7d690c8fc5094925717 - languageName: node - linkType: hard - -"arr-diff@npm:^4.0.0": - version: 4.0.0 - resolution: "arr-diff@npm:4.0.0" - checksum: ea7c8834842ad3869297f7915689bef3494fd5b102ac678c13ffccab672d3d1f35802b79e90c4cfec2f424af3392e44112d1ccf65da34562ed75e049597276a0 - languageName: node - linkType: hard - -"arr-flatten@npm:^1.1.0": - version: 1.1.0 - resolution: "arr-flatten@npm:1.1.0" - checksum: 963fe12564fca2f72c055f3f6c206b9e031f7c433a0c66ca9858b484821f248c5b1e5d53c8e4989d80d764cd776cf6d9b160ad05f47bdc63022bfd63b5455e22 - languageName: node - linkType: hard - -"arr-union@npm:^3.1.0": - version: 3.1.0 - resolution: "arr-union@npm:3.1.0" - checksum: b5b0408c6eb7591143c394f3be082fee690ddd21f0fdde0a0a01106799e847f67fcae1b7e56b0a0c173290e29c6aca9562e82b300708a268bc8f88f3d6613cb9 - languageName: node - linkType: hard - -"array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2": - version: 1.0.2 - resolution: "array-buffer-byte-length@npm:1.0.2" - dependencies: - call-bound: ^1.0.3 - is-array-buffer: ^3.0.5 - checksum: 0ae3786195c3211b423e5be8dd93357870e6fb66357d81da968c2c39ef43583ef6eece1f9cb1caccdae4806739c65dea832b44b8593414313cd76a89795fca63 - languageName: node - linkType: hard - -"array-flatten@npm:1.1.1": - version: 1.1.1 - resolution: "array-flatten@npm:1.1.1" - checksum: a9925bf3512d9dce202112965de90c222cd59a4fbfce68a0951d25d965cf44642931f40aac72309c41f12df19afa010ecadceb07cfff9ccc1621e99d89ab5f3b - languageName: node - linkType: hard - -"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8, array-includes@npm:^3.1.9": - version: 3.1.9 - resolution: "array-includes@npm:3.1.9" - dependencies: - call-bind: ^1.0.8 - call-bound: ^1.0.4 - define-properties: ^1.2.1 - es-abstract: ^1.24.0 - es-object-atoms: ^1.1.1 - get-intrinsic: ^1.3.0 - is-string: ^1.1.1 - math-intrinsics: ^1.1.0 - checksum: b58dc526fe415252e50319eaf88336e06e75aa673e3b58d252414739a4612dbe56e7b613fdcc7c90561dc9cf9202bbe5ca029ccd8c08362746459475ae5a8f3e - languageName: node - linkType: hard - -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d - languageName: node - linkType: hard - -"array-unique@npm:^0.3.2": - version: 0.3.2 - resolution: "array-unique@npm:0.3.2" - checksum: da344b89cfa6b0a5c221f965c21638bfb76b57b45184a01135382186924f55973cd9b171d4dad6bf606c6d9d36b0d721d091afdc9791535ead97ccbe78f8a888 - languageName: node - linkType: hard - -"array.prototype.findlast@npm:^1.2.5": - version: 1.2.5 - resolution: "array.prototype.findlast@npm:1.2.5" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-errors: ^1.3.0 - es-object-atoms: ^1.0.0 - es-shim-unscopables: ^1.0.2 - checksum: 83ce4ad95bae07f136d316f5a7c3a5b911ac3296c3476abe60225bc4a17938bf37541972fcc37dd5adbc99cbb9c928c70bbbfc1c1ce549d41a415144030bb446 - languageName: node - linkType: hard - -"array.prototype.findlastindex@npm:^1.2.6": - version: 1.2.6 - resolution: "array.prototype.findlastindex@npm:1.2.6" - dependencies: - call-bind: ^1.0.8 - call-bound: ^1.0.4 - define-properties: ^1.2.1 - es-abstract: ^1.23.9 - es-errors: ^1.3.0 - es-object-atoms: ^1.1.1 - es-shim-unscopables: ^1.1.0 - checksum: bd2665bd51f674d4e1588ce5d5848a8adb255f414070e8e652585598b801480516df2c6cef2c60b6ea1a9189140411c49157a3f112d52e9eabb4e9fc80936ea6 - languageName: node - linkType: hard - -"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.3": - version: 1.3.3 - resolution: "array.prototype.flat@npm:1.3.3" - dependencies: - call-bind: ^1.0.8 - define-properties: ^1.2.1 - es-abstract: ^1.23.5 - es-shim-unscopables: ^1.0.2 - checksum: 5d5a7829ab2bb271a8d30a1c91e6271cef0ec534593c0fe6d2fb9ebf8bb62c1e5326e2fddcbbcbbe5872ca04f5e6b54a1ecf092e0af704fb538da9b2bfd95b40 - languageName: node - linkType: hard - -"array.prototype.flatmap@npm:^1.3.2, array.prototype.flatmap@npm:^1.3.3": - version: 1.3.3 - resolution: "array.prototype.flatmap@npm:1.3.3" - dependencies: - call-bind: ^1.0.8 - define-properties: ^1.2.1 - es-abstract: ^1.23.5 - es-shim-unscopables: ^1.0.2 - checksum: 11b4de09b1cf008be6031bb507d997ad6f1892e57dc9153583de6ebca0f74ea403fffe0f203461d359de05048d609f3f480d9b46fed4099652d8b62cc972f284 - languageName: node - linkType: hard - -"array.prototype.reduce@npm:^1.0.6": - version: 1.0.8 - resolution: "array.prototype.reduce@npm:1.0.8" - dependencies: - call-bind: ^1.0.8 - call-bound: ^1.0.4 - define-properties: ^1.2.1 - es-abstract: ^1.23.9 - es-array-method-boxes-properly: ^1.0.0 - es-errors: ^1.3.0 - es-object-atoms: ^1.1.1 - is-string: ^1.1.1 - checksum: a2a25e087a75e4caae09414acdfffb6ed69f7dd696d8c612d86dfaa5590bde4d7bc934db8bdd28625703f574aa93731848bfc24a7ba65c558aeb222b2a4fd4c4 - languageName: node - linkType: hard - -"array.prototype.tosorted@npm:^1.1.4": - version: 1.1.4 - resolution: "array.prototype.tosorted@npm:1.1.4" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.3 - es-errors: ^1.3.0 - es-shim-unscopables: ^1.0.2 - checksum: e4142d6f556bcbb4f393c02e7dbaea9af8f620c040450c2be137c9cbbd1a17f216b9c688c5f2c08fbb038ab83f55993fa6efdd9a05881d84693c7bcb5422127a - languageName: node - linkType: hard - -"arraybuffer.prototype.slice@npm:^1.0.4": - version: 1.0.4 - resolution: "arraybuffer.prototype.slice@npm:1.0.4" - dependencies: - array-buffer-byte-length: ^1.0.1 - call-bind: ^1.0.8 - define-properties: ^1.2.1 - es-abstract: ^1.23.5 - es-errors: ^1.3.0 - get-intrinsic: ^1.2.6 - is-array-buffer: ^3.0.4 - checksum: b1d1fd20be4e972a3779b1569226f6740170dca10f07aa4421d42cefeec61391e79c557cda8e771f5baefe47d878178cd4438f60916ce831813c08132bced765 - languageName: node - linkType: hard - -"asap@npm:~2.0.6": - version: 2.0.6 - resolution: "asap@npm:2.0.6" - checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d - languageName: node - linkType: hard - -"assign-symbols@npm:^1.0.0": - version: 1.0.0 - resolution: "assign-symbols@npm:1.0.0" - checksum: c0eb895911d05b6b2d245154f70461c5e42c107457972e5ebba38d48967870dee53bcdf6c7047990586daa80fab8dab3cc6300800fbd47b454247fdedd859a2c - languageName: node - linkType: hard - -"ast-types-flow@npm:^0.0.8": - version: 0.0.8 - resolution: "ast-types-flow@npm:0.0.8" - checksum: 0a64706609a179233aac23817837abab614f3548c252a2d3d79ea1e10c74aa28a0846e11f466cf72771b6ed8713abc094dcf8c40c3ec4207da163efa525a94a8 - languageName: node - linkType: hard - -"async-each@npm:^1.0.1": - version: 1.0.6 - resolution: "async-each@npm:1.0.6" - checksum: d237e8c39348d5f1441edbd3893692912afbacaf83a2ccce8978ebeea804529a8838654b12208fbbc08c8b0411a1248948ee9bf9291ebe1921aabd5b613bc5db - languageName: node - linkType: hard - -"async-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-function@npm:1.0.0" - checksum: 9102e246d1ed9b37ac36f57f0a6ca55226876553251a31fc80677e71471f463a54c872dc78d5d7f80740c8ba624395cccbe8b60f7b690c4418f487d8e9fd1106 - languageName: node - linkType: hard - -"async-generator-function@npm:^1.0.0": - version: 1.0.0 - resolution: "async-generator-function@npm:1.0.0" - checksum: 74a71a4a2dd7afd06ebb612f6d612c7f4766a351bedffde466023bf6dae629e46b0d2cd38786239e0fbf245de0c7df76035465e16d1213774a0efb22fec0d713 - languageName: node - linkType: hard - -"async@npm:^3.2.6": - version: 3.2.6 - resolution: "async@npm:3.2.6" - checksum: ee6eb8cd8a0ab1b58bd2a3ed6c415e93e773573a91d31df9d5ef559baafa9dab37d3b096fa7993e84585cac3697b2af6ddb9086f45d3ac8cae821bb2aab65682 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be - languageName: node - linkType: hard - -"at-least-node@npm:^1.0.0": - version: 1.0.0 - resolution: "at-least-node@npm:1.0.0" - checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e - languageName: node - linkType: hard - -"atob@npm:^2.1.2": - version: 2.1.2 - resolution: "atob@npm:2.1.2" - bin: - atob: bin/atob.js - checksum: dfeeeb70090c5ebea7be4b9f787f866686c645d9f39a0d184c817252d0cf08455ed25267d79c03254d3be1f03ac399992a792edcd5ffb9c91e097ab5ef42833a - languageName: node - linkType: hard - -"autoprefixer@npm:^10.4.13": - version: 10.4.22 - resolution: "autoprefixer@npm:10.4.22" - dependencies: - browserslist: ^4.27.0 - caniuse-lite: ^1.0.30001754 - fraction.js: ^5.3.4 - normalize-range: ^0.1.2 - picocolors: ^1.1.1 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.1.0 - bin: - autoprefixer: bin/autoprefixer - checksum: 7aa0c668bc1505a81d31e45c74b9f6176c7c4af80e2f9a471c7bcce223742f62de1889cc99f24f7b3ba2117e899e531b12e65f4bc52a29443c9eeb7929878362 - languageName: node - linkType: hard - -"available-typed-arrays@npm:^1.0.7": - version: 1.0.7 - resolution: "available-typed-arrays@npm:1.0.7" - dependencies: - possible-typed-array-names: ^1.0.0 - checksum: 1aa3ffbfe6578276996de660848b6e95669d9a95ad149e3dd0c0cda77db6ee1dbd9d1dd723b65b6d277b882dd0c4b91a654ae9d3cf9e1254b7e93e4908d78fd3 - languageName: node - linkType: hard - -"aws_proxy@workspace:.": - version: 0.0.0-use.local - resolution: "aws_proxy@workspace:." - dependencies: - "@emotion/react": ^11.11.4 - "@emotion/styled": ^11.11.5 - "@esbuild-plugins/node-modules-polyfill": ^0.1.4 - "@localstack/integrations": 1.2.2 - "@mui/material": ^5.15.20 - "@testing-library/react": ^13.4.0 - "@types/node": ^16.18.99 - "@types/react": ^19.1.6 - "@types/react-dom": ^17.0.11 - axios: ^1.8.4 - concurrently: ^8.2.2 - esbuild: ^0.16.6 - esbuild-envfile-plugin: ^1.0.2 - esbuild-plugin-clean: ^1.0.1 - esbuild-plugin-copy: ^0.3.0 - esbuild-plugin-svgr: ^1.0.0 - live-server: ^1.2.2 - react: ^17.0.2 - react-dom: ^17.0.2 - react-router-dom: ^6.24.0 - react-scripts: 5.0.1 - typescript: ^4.9.5 - languageName: unknown - linkType: soft - -"axe-core@npm:^4.10.0": - version: 4.11.0 - resolution: "axe-core@npm:4.11.0" - checksum: 57b0d7206d4dd63a1127b8ad6e173417857a3de43717cbb03561e75e2ff85765a228a7588fde4c828dbf179ef25f263ad98535656701e78def8f29a9524be866 - languageName: node - linkType: hard - -"axios@npm:^1.8.4": - version: 1.13.2 - resolution: "axios@npm:1.13.2" - dependencies: - follow-redirects: ^1.15.6 - form-data: ^4.0.4 - proxy-from-env: ^1.1.0 - checksum: 057d0204d5930e2969f0bccb9f0752745b1524a36994667833195e7e1a82f245d660752ba8517b2dbea17e9e4ed0479f10b80c5fe45edd0b5a0df645c0060386 - languageName: node - linkType: hard - -"axobject-query@npm:^4.1.0": - version: 4.1.0 - resolution: "axobject-query@npm:4.1.0" - checksum: 7d1e87bf0aa7ae7a76cd39ab627b7c48fda3dc40181303d9adce4ba1d5b5ce73b5e5403ee6626ec8e91090448c887294d6144e24b6741a976f5be9347e3ae1df - languageName: node - linkType: hard - -"babel-jest@npm:^27.4.2, babel-jest@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-jest@npm:27.5.1" - dependencies: - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/babel__core": ^7.1.14 - babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^27.5.1 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - slash: ^3.0.0 - peerDependencies: - "@babel/core": ^7.8.0 - checksum: 4e93e6e9fb996cc5f1505e924eb8e8cc7b25c294ba9629762a2715390f48af6a4c14dbb84cd9730013ac0e03267a5a9aa2fb6318c544489cda7f50f4e506def4 - languageName: node - linkType: hard - -"babel-loader@npm:^8.2.3": - version: 8.4.1 - resolution: "babel-loader@npm:8.4.1" - dependencies: - find-cache-dir: ^3.3.1 - loader-utils: ^2.0.4 - make-dir: ^3.1.0 - schema-utils: ^2.6.5 - peerDependencies: - "@babel/core": ^7.0.0 - webpack: ">=2" - checksum: fa02db1a7d3ebb7b4aab83e926fb51e627a00427943c9dd1b3302c8099c67fa6a242a2adeed37d95abcd39ba619edf558a1dec369ce0849c5a87dc290c90fe2f - languageName: node - linkType: hard - -"babel-plugin-istanbul@npm:^6.1.1": - version: 6.1.1 - resolution: "babel-plugin-istanbul@npm:6.1.1" - dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@istanbuljs/load-nyc-config": ^1.0.0 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-instrument: ^5.0.4 - test-exclude: ^6.0.0 - checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a - languageName: node - linkType: hard - -"babel-plugin-jest-hoist@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-plugin-jest-hoist@npm:27.5.1" - dependencies: - "@babel/template": ^7.3.3 - "@babel/types": ^7.3.3 - "@types/babel__core": ^7.0.0 - "@types/babel__traverse": ^7.0.6 - checksum: 709c17727aa8fd3be755d256fb514bf945a5c2ea6017f037d80280fc44ae5fe7dfeebf63d8412df53796455c2c216119d628d8cc90b099434fd819005943d058 - languageName: node - linkType: hard - -"babel-plugin-macros@npm:^3.1.0": - version: 3.1.0 - resolution: "babel-plugin-macros@npm:3.1.0" - dependencies: - "@babel/runtime": ^7.12.5 - cosmiconfig: ^7.0.0 - resolve: ^1.19.0 - checksum: 765de4abebd3e4688ebdfbff8571ddc8cd8061f839bb6c3e550b0344a4027b04c60491f843296ce3f3379fb356cc873d57a9ee6694262547eb822c14a25be9a6 - languageName: node - linkType: hard - -"babel-plugin-named-asset-import@npm:^0.3.8": - version: 0.3.8 - resolution: "babel-plugin-named-asset-import@npm:0.3.8" - peerDependencies: - "@babel/core": ^7.1.0 - checksum: d1e58df8cb75d91d070feea31087bc989906d3465144bde7e9f3c3690b514a90a55d3aebf3e65e76c5d4c743ecedde5f640f09f43a21fa60f1a5d413cb3f7a67 - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs2@npm:^0.4.14": - version: 0.4.14 - resolution: "babel-plugin-polyfill-corejs2@npm:0.4.14" - dependencies: - "@babel/compat-data": ^7.27.7 - "@babel/helper-define-polyfill-provider": ^0.6.5 - semver: ^6.3.1 - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: d654334c1b4390d08282416144b7b6f3d74d2cab44b2bfa2b6405c828882c82907b8b67698dce1be046c218d2d4fe5bf7fb6d01879938f3129dad969e8cfc44d - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs3@npm:^0.13.0": - version: 0.13.0 - resolution: "babel-plugin-polyfill-corejs3@npm:0.13.0" - dependencies: - "@babel/helper-define-polyfill-provider": ^0.6.5 - core-js-compat: ^3.43.0 - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: cf526031acd97ff2124e7c10e15047e6eeb0620d029c687f1dca99916a8fe6cac0e634b84c913db6cb68b7a024f82492ba8fdcc2a6266e7b05bdac2cba0c2434 - languageName: node - linkType: hard - -"babel-plugin-polyfill-regenerator@npm:^0.6.5": - version: 0.6.5 - resolution: "babel-plugin-polyfill-regenerator@npm:0.6.5" - dependencies: - "@babel/helper-define-polyfill-provider": ^0.6.5 - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: ed1932fa9a31e0752fd10ebf48ab9513a654987cab1182890839523cb898559d24ae0578fdc475d9f995390420e64eeaa4b0427045b56949dace3c725bc66dbb - languageName: node - linkType: hard - -"babel-plugin-transform-react-remove-prop-types@npm:^0.4.24": - version: 0.4.24 - resolution: "babel-plugin-transform-react-remove-prop-types@npm:0.4.24" - checksum: 54afe56d67f0d118c9da23996f39948e502a152b3f582eb6e8f163fcb76c2c1ea4e0cdd4f9fac5c0ef050eab4fe0a950b0b74aae6237bcc0d31d8fc4cc808d1a - languageName: node - linkType: hard - -"babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.2.0 - resolution: "babel-preset-current-node-syntax@npm:1.2.0" - dependencies: - "@babel/plugin-syntax-async-generators": ^7.8.4 - "@babel/plugin-syntax-bigint": ^7.8.3 - "@babel/plugin-syntax-class-properties": ^7.12.13 - "@babel/plugin-syntax-class-static-block": ^7.14.5 - "@babel/plugin-syntax-import-attributes": ^7.24.7 - "@babel/plugin-syntax-import-meta": ^7.10.4 - "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-syntax-private-property-in-object": ^7.14.5 - "@babel/plugin-syntax-top-level-await": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0 || ^8.0.0-0 - checksum: 3608fa671cfa46364ea6ec704b8fcdd7514b7b70e6ec09b1199e13ae73ed346c51d5ce2cb6d4d5b295f6a3f2cad1fdeec2308aa9e037002dd7c929194cc838ea - languageName: node - linkType: hard - -"babel-preset-jest@npm:^27.5.1": - version: 27.5.1 - resolution: "babel-preset-jest@npm:27.5.1" - dependencies: - babel-plugin-jest-hoist: ^27.5.1 - babel-preset-current-node-syntax: ^1.0.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 251bcea11c18fd9672fec104eadb45b43f117ceeb326fa7345ced778d4c1feab29343cd7a87a1dcfae4997d6c851a8b386d7f7213792da6e23b74f4443a8976d - languageName: node - linkType: hard - -"babel-preset-react-app@npm:^10.0.1": - version: 10.1.0 - resolution: "babel-preset-react-app@npm:10.1.0" - 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-proposal-private-property-in-object": ^7.16.7 - "@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 - checksum: e4ac6c85be4f56c7e45b52700e04aed01422221b5c988e7a192a80d3b5aa3abbd415c0b76e8b5d564a411477a0b03323a15108663a9f541bd9397fa32f28ed89 - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 - languageName: node - linkType: hard - -"base@npm:^0.11.1": - version: 0.11.2 - resolution: "base@npm:0.11.2" - 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 - checksum: a4a146b912e27eea8f66d09cb0c9eab666f32ce27859a7dfd50f38cd069a2557b39f16dba1bc2aecb3b44bf096738dd207b7970d99b0318423285ab1b1994edd - languageName: node - linkType: hard - -"baseline-browser-mapping@npm:^2.8.25": - version: 2.8.31 - resolution: "baseline-browser-mapping@npm:2.8.31" - bin: - baseline-browser-mapping: dist/cli.js - checksum: be21b495093f577c6602882b6c3ecf04a1fe4fcf1d1dd497b51571adcc5815999247f3587a85d194b26f4afad3f726e0fd9d2569087ff09146b044ef8044c9de - languageName: node - linkType: hard - -"basic-auth@npm:~2.0.1": - version: 2.0.1 - resolution: "basic-auth@npm:2.0.1" - dependencies: - safe-buffer: 5.1.2 - checksum: 3419b805d5dfc518f3a05dcf42aa53aa9ce820e50b6df5097f9e186322e1bc733c36722b624802cd37e791035aa73b828ed814d8362333d42d7f5cd04d7a5e48 - languageName: node - linkType: hard - -"batch@npm:0.6.1": - version: 0.6.1 - resolution: "batch@npm:0.6.1" - checksum: 61f9934c7378a51dce61b915586191078ef7f1c3eca707fdd58b96ff2ff56d9e0af2bdab66b1462301a73c73374239e6542d9821c0af787f3209a23365d07e7f - languageName: node - linkType: hard - -"bcryptjs@npm:^2.3.0": - version: 2.4.3 - resolution: "bcryptjs@npm:2.4.3" - checksum: 0e80ed852a41f5dfb1853f53ee14a7390b0ef263ce05dba6e2ef3cd919dfad025a7c21ebcfe5bc7fa04b100990edf90c7a877ff7fe623d3e479753253131b629 - languageName: node - linkType: hard - -"bfj@npm:^7.0.2": - version: 7.1.0 - resolution: "bfj@npm:7.1.0" - dependencies: - bluebird: ^3.7.2 - check-types: ^11.2.3 - hoopy: ^0.1.4 - jsonpath: ^1.1.1 - tryer: ^1.0.1 - checksum: 36da9ed36c60f377a3f43bb0433092af7dc40442914b8155a1330ae86b1905640baf57e9c195ab83b36d6518b27cf8ed880adff663aa444c193be149e027d722 - languageName: node - linkType: hard - -"big.js@npm:^5.2.2": - version: 5.2.2 - resolution: "big.js@npm:5.2.2" - checksum: b89b6e8419b097a8fb4ed2399a1931a68c612bce3cfd5ca8c214b2d017531191070f990598de2fc6f3f993d91c0f08aa82697717f6b3b8732c9731866d233c9e - languageName: node - linkType: hard - -"binary-extensions@npm:^1.0.0": - version: 1.13.1 - resolution: "binary-extensions@npm:1.13.1" - checksum: ad7747f33c07e94ba443055de130b50c8b8b130a358bca064c580d91769ca6a69c7ac65ca008ff044ed4541d2c6ad45496e1fadbef5218a68770996b6a2194d7 - languageName: node - linkType: hard - -"binary-extensions@npm:^2.0.0": - version: 2.3.0 - resolution: "binary-extensions@npm:2.3.0" - checksum: bcad01494e8a9283abf18c1b967af65ee79b0c6a9e6fcfafebfe91dbe6e0fc7272bafb73389e198b310516ae04f7ad17d79aacf6cb4c0d5d5202a7e2e52c7d98 - languageName: node - linkType: hard - -"bindings@npm:^1.5.0": - version: 1.5.0 - resolution: "bindings@npm:1.5.0" - dependencies: - file-uri-to-path: 1.0.0 - checksum: 65b6b48095717c2e6105a021a7da4ea435aa8d3d3cd085cb9e85bcb6e5773cf318c4745c3f7c504412855940b585bdf9b918236612a1c7a7942491de176f1ae7 - languageName: node - linkType: hard - -"bluebird@npm:^3.7.2": - version: 3.7.2 - resolution: "bluebird@npm:3.7.2" - checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef - languageName: node - linkType: hard - -"body-parser@npm:1.20.3": - version: 1.20.3 - resolution: "body-parser@npm:1.20.3" - dependencies: - bytes: 3.1.2 - content-type: ~1.0.5 - 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.13.0 - raw-body: 2.5.2 - type-is: ~1.6.18 - unpipe: 1.0.0 - checksum: 1a35c59a6be8d852b00946330141c4f142c6af0f970faa87f10ad74f1ee7118078056706a05ae3093c54dabca9cd3770fa62a170a85801da1a4324f04381167d - languageName: node - linkType: hard - -"bonjour-service@npm:^1.0.11": - version: 1.3.0 - resolution: "bonjour-service@npm:1.3.0" - dependencies: - fast-deep-equal: ^3.1.3 - multicast-dns: ^7.2.5 - checksum: 737bd40d0b609b18afdfcaf3c416a60d7dc94aedc4cb9d6e7af459a7f3bdffadc199370a48c46739d92689741cad4ec8a6987a3e4d869dd301b521227b92e082 - languageName: node - linkType: hard - -"boolbase@npm:^1.0.0, boolbase@npm:~1.0.0": - version: 1.0.0 - resolution: "boolbase@npm:1.0.0" - checksum: 3e25c80ef626c3a3487c73dbfc70ac322ec830666c9ad915d11b701142fab25ec1e63eff2c450c74347acfd2de854ccde865cd79ef4db1683f7c7b046ea43bb0 - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.12 - resolution: "brace-expansion@npm:1.1.12" - dependencies: - balanced-match: ^1.0.0 - concat-map: 0.0.1 - checksum: 12cb6d6310629e3048cadb003e1aca4d8c9bb5c67c3c321bafdd7e7a50155de081f78ea3e0ed92ecc75a9015e784f301efc8132383132f4f7904ad1ac529c562 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.2 - resolution: "brace-expansion@npm:2.0.2" - dependencies: - balanced-match: ^1.0.0 - checksum: 01dff195e3646bc4b0d27b63d9bab84d2ebc06121ff5013ad6e5356daa5a9d6b60fa26cf73c74797f2dc3fbec112af13578d51f75228c1112b26c790a87b0488 - languageName: node - linkType: hard - -"braces@npm:^2.3.1, braces@npm:^2.3.2": - version: 2.3.2 - resolution: "braces@npm:2.3.2" - 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 - checksum: e30dcb6aaf4a31c8df17d848aa283a65699782f75ad61ae93ec25c9729c66cf58e66f0000a9fec84e4add1135bb7da40f7cb9601b36bebcfa9ca58e8d5c07de0 - languageName: node - linkType: hard - -"braces@npm:^3.0.3, braces@npm:~3.0.2": - version: 3.0.3 - resolution: "braces@npm:3.0.3" - dependencies: - fill-range: ^7.1.1 - checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69 - languageName: node - linkType: hard - -"browser-process-hrtime@npm:^1.0.0": - version: 1.0.0 - resolution: "browser-process-hrtime@npm:1.0.0" - checksum: e30f868cdb770b1201afb714ad1575dd86366b6e861900884665fb627109b3cc757c40067d3bfee1ff2a29c835257ea30725a8018a9afd02ac1c24b408b1e45f - languageName: node - linkType: hard - -"browserslist@npm:^4.0.0, browserslist@npm:^4.18.1, browserslist@npm:^4.21.4, browserslist@npm:^4.24.0, browserslist@npm:^4.26.3, browserslist@npm:^4.27.0, browserslist@npm:^4.28.0": - version: 4.28.0 - resolution: "browserslist@npm:4.28.0" - dependencies: - baseline-browser-mapping: ^2.8.25 - caniuse-lite: ^1.0.30001754 - electron-to-chromium: ^1.5.249 - node-releases: ^2.0.27 - update-browserslist-db: ^1.1.4 - bin: - browserslist: cli.js - checksum: c19fe2c6f123851d899d5b207f76de93064e247931e32ca0adcaceb3b48aec65c7c3310c0dc969de96922d488af7de0a0b77b41505e7dfa0a8d3736500748e11 - languageName: node - linkType: hard - -"bser@npm:2.1.1": - version: 2.1.1 - resolution: "bser@npm:2.1.1" - dependencies: - node-int64: ^0.4.0 - checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 - languageName: node - linkType: hard - -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb - languageName: node - linkType: hard - -"builtin-modules@npm:^3.1.0": - version: 3.3.0 - resolution: "builtin-modules@npm:3.3.0" - checksum: db021755d7ed8be048f25668fe2117620861ef6703ea2c65ed2779c9e3636d5c3b82325bd912244293959ff3ae303afa3471f6a15bf5060c103e4cc3a839749d - languageName: node - linkType: hard - -"bytes@npm:3.1.2": - version: 3.1.2 - resolution: "bytes@npm:3.1.2" - checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e - languageName: node - linkType: hard - -"cacache@npm:^20.0.1": - version: 20.0.3 - resolution: "cacache@npm:20.0.3" - dependencies: - "@npmcli/fs": ^5.0.0 - fs-minipass: ^3.0.0 - glob: ^13.0.0 - lru-cache: ^11.1.0 - minipass: ^7.0.3 - minipass-collect: ^2.0.1 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - p-map: ^7.0.2 - ssri: ^13.0.0 - unique-filename: ^5.0.0 - checksum: 595e6b91d72972d596e1e9ccab8ddbf08b773f27240220b1b5b1b7b3f52173cfbcf095212e5d7acd86c3bd453c28e69b116469889c511615ef3589523d542639 - languageName: node - linkType: hard - -"cache-base@npm:^1.0.1": - version: 1.0.1 - resolution: "cache-base@npm:1.0.1" - 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 - checksum: 9114b8654fe2366eedc390bad0bcf534e2f01b239a888894e2928cb58cdc1e6ea23a73c6f3450dcfd2058aa73a8a981e723cd1e7c670c047bf11afdc65880107 - languageName: node - linkType: hard - -"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind-apply-helpers@npm:1.0.2" - dependencies: - es-errors: ^1.3.0 - function-bind: ^1.1.2 - checksum: b2863d74fcf2a6948221f65d95b91b4b2d90cfe8927650b506141e669f7d5de65cea191bf788838bc40d13846b7886c5bc5c84ab96c3adbcf88ad69a72fcdc6b - languageName: node - linkType: hard - -"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": - version: 1.0.8 - resolution: "call-bind@npm:1.0.8" - dependencies: - call-bind-apply-helpers: ^1.0.0 - es-define-property: ^1.0.0 - get-intrinsic: ^1.2.4 - set-function-length: ^1.2.2 - checksum: aa2899bce917a5392fd73bd32e71799c37c0b7ab454e0ed13af7f6727549091182aade8bbb7b55f304a5bc436d543241c14090fb8a3137e9875e23f444f4f5a9 - languageName: node - linkType: hard - -"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3, call-bound@npm:^1.0.4": - version: 1.0.4 - resolution: "call-bound@npm:1.0.4" - dependencies: - call-bind-apply-helpers: ^1.0.2 - get-intrinsic: ^1.3.0 - checksum: 2f6399488d1c272f56306ca60ff696575e2b7f31daf23bc11574798c84d9f2759dceb0cb1f471a85b77f28962a7ac6411f51d283ea2e45319009a19b6ccab3b2 - languageName: node - linkType: hard - -"callsites@npm:^3.0.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 - languageName: node - linkType: hard - -"camel-case@npm:^4.1.2": - version: 4.1.2 - resolution: "camel-case@npm:4.1.2" - dependencies: - pascal-case: ^3.1.2 - tslib: ^2.0.3 - checksum: bcbd25cd253b3cbc69be3f535750137dbf2beb70f093bdc575f73f800acc8443d34fd52ab8f0a2413c34f1e8203139ffc88428d8863e4dfe530cfb257a379ad6 - languageName: node - linkType: hard - -"camelcase-css@npm:^2.0.1": - version: 2.0.1 - resolution: "camelcase-css@npm:2.0.1" - checksum: 1cec2b3b3dcb5026688a470b00299a8db7d904c4802845c353dbd12d9d248d3346949a814d83bfd988d4d2e5b9904c07efe76fecd195a1d4f05b543e7c0b56b1 - languageName: node - linkType: hard - -"camelcase@npm:^5.3.1": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b - languageName: node - linkType: hard - -"camelcase@npm:^6.2.0, camelcase@npm:^6.2.1": - version: 6.3.0 - resolution: "camelcase@npm:6.3.0" - checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d - languageName: node - linkType: hard - -"caniuse-api@npm:^3.0.0": - version: 3.0.0 - resolution: "caniuse-api@npm:3.0.0" - dependencies: - browserslist: ^4.0.0 - caniuse-lite: ^1.0.0 - lodash.memoize: ^4.1.2 - lodash.uniq: ^4.5.0 - checksum: db2a229383b20d0529b6b589dde99d7b6cb56ba371366f58cbbfa2929c9f42c01f873e2b6ef641d4eda9f0b4118de77dbb2805814670bdad4234bf08e720b0b4 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001754": - version: 1.0.30001757 - resolution: "caniuse-lite@npm:1.0.30001757" - checksum: 84ce069d2457f2d2dc68ef9a23870962c89f2bc2a3a67b6b47a431842cfe74a27b8d156b05e5e36f320b501642ecbaf24526963b01468a8b64512ccb8267d135 - languageName: node - linkType: hard - -"case-sensitive-paths-webpack-plugin@npm:^2.4.0": - version: 2.4.0 - resolution: "case-sensitive-paths-webpack-plugin@npm:2.4.0" - checksum: bcf469446eeee9ac0046e30860074ebb9aa4803aab9140e6bb72b600b23b1d70635690754be4504ce35cd99cdf05226bee8d894ba362a3f5485d5f6310fc6d02 - languageName: node - linkType: hard - -"chalk@npm:^2.4.1": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: ^3.2.1 - escape-string-regexp: ^1.0.5 - supports-color: ^5.3.0 - checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 - languageName: node - linkType: hard - -"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: ^4.1.0 - supports-color: ^7.1.0 - checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc - languageName: node - linkType: hard - -"char-regex@npm:^1.0.2": - version: 1.0.2 - resolution: "char-regex@npm:1.0.2" - checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 - languageName: node - linkType: hard - -"char-regex@npm:^2.0.0": - version: 2.0.2 - resolution: "char-regex@npm:2.0.2" - checksum: 4965154ccf32b39c0f31df79e17686ee22fb6ebea774b6128e1d020cf2b01a3319bb608bfa2dba53cd478bed2f1991ac5246bee5ff93d0217ff7514e404694ed - languageName: node - linkType: hard - -"check-types@npm:^11.2.3": - version: 11.2.3 - resolution: "check-types@npm:11.2.3" - checksum: f99ff09ae65e63cfcfa40a1275c0a70d8c43ffbf9ac35095f3bf030cc70361c92e075a9975a1144329e50b4fe4620be6bedb4568c18abc96071a3e23aed3ed8e - languageName: node - linkType: hard - -"chokidar@npm:^2.0.4": - version: 2.1.8 - resolution: "chokidar@npm:2.1.8" - dependencies: - 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 - dependenciesMeta: - fsevents: - optional: true - checksum: 0c43e89cbf0268ef1e1f41ce8ec5233c7ba022c6f3282c2ef6530e351d42396d389a1148c5a040f291cf1f4083a4c6b2f51dad3f31c726442ea9a337de316bcf - languageName: node - linkType: hard - -"chokidar@npm:^3.4.2, chokidar@npm:^3.5.3, chokidar@npm:^3.6.0": - version: 3.6.0 - resolution: "chokidar@npm:3.6.0" - dependencies: - 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 - dependenciesMeta: - fsevents: - optional: true - checksum: d2f29f499705dcd4f6f3bbed79a9ce2388cf530460122eed3b9c48efeab7a4e28739c6551fd15bec9245c6b9eeca7a32baa64694d64d9b6faeb74ddb8c4a413d - languageName: node - linkType: hard - -"chownr@npm:^3.0.0": - version: 3.0.0 - resolution: "chownr@npm:3.0.0" - checksum: fd73a4bab48b79e66903fe1cafbdc208956f41ea4f856df883d0c7277b7ab29fd33ee65f93b2ec9192fc0169238f2f8307b7735d27c155821d886b84aa97aa8d - languageName: node - linkType: hard - -"chrome-trace-event@npm:^1.0.2": - version: 1.0.4 - resolution: "chrome-trace-event@npm:1.0.4" - checksum: fcbbd9dd0cd5b48444319007cc0c15870fd8612cc0df320908aa9d5e8a244084d48571eb28bf3c58c19327d2c5838f354c2d89fac3956d8e992273437401ac19 - languageName: node - linkType: hard - -"ci-info@npm:^3.2.0": - version: 3.9.0 - resolution: "ci-info@npm:3.9.0" - checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 - languageName: node - linkType: hard - -"cjs-module-lexer@npm:^1.0.0": - version: 1.4.3 - resolution: "cjs-module-lexer@npm:1.4.3" - checksum: 221a1661a9ff4944b472c85ac7cd5029b2f2dc7f6c5f4ecf887f261503611110b43a48acb6c07f8f04109c772d1637fdb20b31252bf27058f35aa97bf5ad8b12 - languageName: node - linkType: hard - -"class-utils@npm:^0.3.5": - version: 0.3.6 - resolution: "class-utils@npm:0.3.6" - dependencies: - arr-union: ^3.1.0 - define-property: ^0.2.5 - isobject: ^3.0.0 - static-extend: ^0.1.1 - checksum: be108900801e639e50f96a7e4bfa8867c753a7750a7603879f3981f8b0a89cba657497a2d5f40cd4ea557ff15d535a100818bb486baf6e26fe5d7872e75f1078 - languageName: node - linkType: hard - -"clean-css@npm:^5.2.2": - version: 5.3.3 - resolution: "clean-css@npm:5.3.3" - dependencies: - source-map: ~0.6.0 - checksum: 941987c14860dd7d346d5cf121a82fd2caf8344160b1565c5387f7ccca4bbcaf885bace961be37c4f4713ce2d8c488dd89483c1add47bb779790edbfdcc79cbc - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 - languageName: node - linkType: hard - -"cliui@npm:^7.0.2": - version: 7.0.4 - resolution: "cliui@npm:7.0.4" - dependencies: - string-width: ^4.2.0 - strip-ansi: ^6.0.0 - wrap-ansi: ^7.0.0 - checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f - languageName: node - linkType: hard - -"cliui@npm:^8.0.1": - version: 8.0.1 - resolution: "cliui@npm:8.0.1" - dependencies: - string-width: ^4.2.0 - strip-ansi: ^6.0.1 - wrap-ansi: ^7.0.0 - checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 - languageName: node - linkType: hard - -"clsx@npm:^2.1.0, clsx@npm:^2.1.1": - version: 2.1.1 - resolution: "clsx@npm:2.1.1" - checksum: acd3e1ab9d8a433ecb3cc2f6a05ab95fe50b4a3cfc5ba47abb6cbf3754585fcb87b84e90c822a1f256c4198e3b41c7f6c391577ffc8678ad587fc0976b24fd57 - languageName: node - linkType: hard - -"co@npm:^4.6.0": - version: 4.6.0 - resolution: "co@npm:4.6.0" - checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 - languageName: node - linkType: hard - -"coa@npm:^2.0.2": - version: 2.0.2 - resolution: "coa@npm:2.0.2" - dependencies: - "@types/q": ^1.5.1 - chalk: ^2.4.1 - q: ^1.1.2 - checksum: 44736914aac2160d3d840ed64432a90a3bb72285a0cd6a688eb5cabdf15d15a85eee0915b3f6f2a4659d5075817b1cb577340d3c9cbb47d636d59ab69f819552 - languageName: node - linkType: hard - -"collect-v8-coverage@npm:^1.0.0": - version: 1.0.3 - resolution: "collect-v8-coverage@npm:1.0.3" - checksum: ed1d1ebc9c05e7263fffa3ad6440031db6a1fdd9f574435aa689effcdfe9f2b93aba8ec600f9c7b99124cd6ff5d9415c17961d84ae829a72251a4fe668a49b63 - languageName: node - linkType: hard - -"collection-visit@npm:^1.0.0": - version: 1.0.0 - resolution: "collection-visit@npm:1.0.0" - dependencies: - map-visit: ^1.0.0 - object-visit: ^1.0.0 - checksum: 15d9658fe6eb23594728346adad5433b86bb7a04fd51bbab337755158722f9313a5376ef479de5b35fbc54140764d0d39de89c339f5d25b959ed221466981da9 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: 1.1.3 - checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: ~1.1.4 - checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d - languageName: node - linkType: hard - -"color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 - languageName: node - linkType: hard - -"colord@npm:^2.9.1": - version: 2.9.3 - resolution: "colord@npm:2.9.3" - checksum: 95d909bfbcfd8d5605cbb5af56f2d1ce2b323990258fd7c0d2eb0e6d3bb177254d7fb8213758db56bb4ede708964f78c6b992b326615f81a18a6aaf11d64c650 - languageName: node - linkType: hard - -"colorette@npm:^2.0.10": - version: 2.0.20 - resolution: "colorette@npm:2.0.20" - checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d - languageName: node - linkType: hard - -"colors@npm:1.4.0": - version: 1.4.0 - resolution: "colors@npm:1.4.0" - checksum: 98aa2c2418ad87dedf25d781be69dc5fc5908e279d9d30c34d8b702e586a0474605b3a189511482b9d5ed0d20c867515d22749537f7bc546256c6014f3ebdcec - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: ~1.0.0 - checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c - languageName: node - linkType: hard - -"commander@npm:^2.20.0": - version: 2.20.3 - resolution: "commander@npm:2.20.3" - checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e - languageName: node - linkType: hard - -"commander@npm:^4.0.0": - version: 4.1.1 - resolution: "commander@npm:4.1.1" - checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977 - languageName: node - linkType: hard - -"commander@npm:^7.2.0": - version: 7.2.0 - resolution: "commander@npm:7.2.0" - checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc - languageName: node - linkType: hard - -"commander@npm:^8.3.0": - version: 8.3.0 - resolution: "commander@npm:8.3.0" - checksum: 0f82321821fc27b83bd409510bb9deeebcfa799ff0bf5d102128b500b7af22872c0c92cb6a0ebc5a4cf19c6b550fba9cedfa7329d18c6442a625f851377bacf0 - languageName: node - linkType: hard - -"common-tags@npm:^1.8.0": - version: 1.8.2 - resolution: "common-tags@npm:1.8.2" - checksum: 767a6255a84bbc47df49a60ab583053bb29a7d9687066a18500a516188a062c4e4cd52de341f22de0b07062e699b1b8fe3cfa1cb55b241cb9301aeb4f45b4dff - languageName: node - linkType: hard - -"commondir@npm:^1.0.1": - version: 1.0.1 - resolution: "commondir@npm:1.0.1" - checksum: 59715f2fc456a73f68826285718503340b9f0dd89bfffc42749906c5cf3d4277ef11ef1cca0350d0e79204f00f1f6d83851ececc9095dc88512a697ac0b9bdcb - languageName: node - linkType: hard - -"component-emitter@npm:^1.2.1": - version: 1.3.1 - resolution: "component-emitter@npm:1.3.1" - checksum: 94550aa462c7bd5a61c1bc480e28554aa306066930152d1b1844a0dd3845d4e5db7e261ddec62ae184913b3e59b55a2ad84093b9d3596a8f17c341514d6c483d - languageName: node - linkType: hard - -"compressible@npm:~2.0.18": - version: 2.0.18 - resolution: "compressible@npm:2.0.18" - dependencies: - mime-db: ">= 1.43.0 < 2" - checksum: 58321a85b375d39230405654721353f709d0c1442129e9a17081771b816302a012471a9b8f4864c7dbe02eef7f2aaac3c614795197092262e94b409c9be108f0 - languageName: node - linkType: hard - -"compression@npm:^1.7.4": - version: 1.8.1 - resolution: "compression@npm:1.8.1" - dependencies: - bytes: 3.1.2 - compressible: ~2.0.18 - debug: 2.6.9 - negotiator: ~0.6.4 - on-headers: ~1.1.0 - safe-buffer: 5.2.1 - vary: ~1.1.2 - checksum: 906325935180cd3507d30ed898fb129deccab03689383d55536245a94610f5003923bb14c95ee6adc8d658ee13be549407eb4346ef55169045f3e41e9969808e - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af - languageName: node - linkType: hard - -"concurrently@npm:^8.2.2": - version: 8.2.2 - resolution: "concurrently@npm:8.2.2" - dependencies: - chalk: ^4.1.2 - date-fns: ^2.30.0 - lodash: ^4.17.21 - rxjs: ^7.8.1 - shell-quote: ^1.8.1 - spawn-command: 0.0.2 - supports-color: ^8.1.1 - tree-kill: ^1.2.2 - yargs: ^17.7.2 - bin: - conc: dist/bin/concurrently.js - concurrently: dist/bin/concurrently.js - checksum: 8ac774df06869773438f1bf91025180c52d5b53139bc86cf47659136c0d97461d0579c515d848d1e945d4e3e0cafe646b2ea18af8d74259b46abddcfe39b2c6c - languageName: node - linkType: hard - -"confusing-browser-globals@npm:^1.0.11": - version: 1.0.11 - resolution: "confusing-browser-globals@npm:1.0.11" - checksum: 3afc635abd37e566477f610e7978b15753f0e84025c25d49236f1f14d480117185516bdd40d2a2167e6bed8048641a9854964b9c067e3dcdfa6b5d0ad3c3a5ef - languageName: node - linkType: hard - -"connect-history-api-fallback@npm:^2.0.0": - version: 2.0.0 - resolution: "connect-history-api-fallback@npm:2.0.0" - checksum: dc5368690f4a5c413889792f8df70d5941ca9da44523cde3f87af0745faee5ee16afb8195434550f0504726642734f2683d6c07f8b460f828a12c45fbd4c9a68 - languageName: node - linkType: hard - -"connect@npm:^3.6.6": - version: 3.7.0 - resolution: "connect@npm:3.7.0" - dependencies: - debug: 2.6.9 - finalhandler: 1.1.2 - parseurl: ~1.3.3 - utils-merge: 1.0.1 - checksum: 96e1c4effcf219b065c7823e57351c94366d2e2a6952fa95e8212bffb35c86f1d5a3f9f6c5796d4cd3a5fdda628368b1c3cc44bf19c66cfd68fe9f9cab9177e2 - languageName: node - linkType: hard - -"content-disposition@npm:0.5.4": - version: 0.5.4 - resolution: "content-disposition@npm:0.5.4" - dependencies: - safe-buffer: 5.2.1 - checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3 - languageName: node - linkType: hard - -"content-type@npm:~1.0.4, content-type@npm:~1.0.5": - version: 1.0.5 - resolution: "content-type@npm:1.0.5" - checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 - languageName: node - linkType: hard - -"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": - version: 1.9.0 - resolution: "convert-source-map@npm:1.9.0" - checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 - languageName: node - linkType: hard - -"convert-source-map@npm:^2.0.0": - version: 2.0.0 - resolution: "convert-source-map@npm:2.0.0" - checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 - languageName: node - linkType: hard - -"cookie-signature@npm:1.0.6": - version: 1.0.6 - resolution: "cookie-signature@npm:1.0.6" - checksum: f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a - languageName: node - linkType: hard - -"cookie@npm:0.7.1": - version: 0.7.1 - resolution: "cookie@npm:0.7.1" - checksum: cec5e425549b3650eb5c3498a9ba3cde0b9cd419e3b36e4b92739d30b4d89e0b678b98c1ddc209ce7cf958cd3215671fd6ac47aec21f10c2a0cc68abd399d8a7 - languageName: node - linkType: hard - -"copy-descriptor@npm:^0.1.0": - version: 0.1.1 - resolution: "copy-descriptor@npm:0.1.1" - checksum: d4b7b57b14f1d256bb9aa0b479241048afd7f5bcf22035fc7b94e8af757adeae247ea23c1a774fe44869fd5694efba4a969b88d966766c5245fdee59837fe45b - languageName: node - linkType: hard - -"core-js-compat@npm:^3.43.0": - version: 3.47.0 - resolution: "core-js-compat@npm:3.47.0" - dependencies: - browserslist: ^4.28.0 - checksum: 425c8cb4c3277a11f3d7d4752c53e5903892635126ed1cdc326a1cd7d961606c5d2c951493f1c783e624f9cdc1ec791c6db68dc19988d68f112d7d82a4c39c9a - languageName: node - linkType: hard - -"core-js-pure@npm:^3.23.3": - version: 3.47.0 - resolution: "core-js-pure@npm:3.47.0" - checksum: e3d604ef8f8aaafcd9b8fbc1ac313ea2be21439b84ca8ebebdd7b2a66fddb93e3c52003e5a288514d8735cb9ad1a019b5d046fbcc55cac97c17ba4691fa26f22 - languageName: node - linkType: hard - -"core-js@npm:^3.19.2": - version: 3.47.0 - resolution: "core-js@npm:3.47.0" - checksum: 33ed738fbf1d8596400915ed8ff02538cc89e805d7298e52dbac34b9aecd62400cf84905ce6d5fabd5cc96cb61395907d67d8b89067263f3d7fff8e79a230109 - languageName: node - linkType: hard - -"core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 - languageName: node - linkType: hard - -"cors@npm:latest": - version: 2.8.5 - resolution: "cors@npm:2.8.5" - dependencies: - object-assign: ^4 - vary: ^1 - checksum: ced838404ccd184f61ab4fdc5847035b681c90db7ac17e428f3d81d69e2989d2b680cc254da0e2554f5ed4f8a341820a1ce3d1c16b499f6e2f47a1b9b07b5006 - languageName: node - linkType: hard - -"cosmiconfig@npm:^6.0.0": - version: 6.0.0 - resolution: "cosmiconfig@npm:6.0.0" - 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 - checksum: 8eed7c854b91643ecb820767d0deb038b50780ecc3d53b0b19e03ed8aabed4ae77271198d1ae3d49c3b110867edf679f5faad924820a8d1774144a87cb6f98fc - languageName: node - linkType: hard - -"cosmiconfig@npm:^7.0.0, cosmiconfig@npm:^7.0.1": - version: 7.1.0 - resolution: "cosmiconfig@npm:7.1.0" - dependencies: - "@types/parse-json": ^4.0.0 - import-fresh: ^3.2.1 - parse-json: ^5.0.0 - path-type: ^4.0.0 - yaml: ^1.10.0 - checksum: c53bf7befc1591b2651a22414a5e786cd5f2eeaa87f3678a3d49d6069835a9d8d1aef223728e98aa8fec9a95bf831120d245096db12abe019fecb51f5696c96f - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": - version: 7.0.6 - resolution: "cross-spawn@npm:7.0.6" - dependencies: - path-key: ^3.1.0 - shebang-command: ^2.0.0 - which: ^2.0.1 - checksum: 8d306efacaf6f3f60e0224c287664093fa9185680b2d195852ba9a863f85d02dcc737094c6e512175f8ee0161f9b87c73c6826034c2422e39de7d6569cf4503b - languageName: node - linkType: hard - -"crypto-random-string@npm:^2.0.0": - version: 2.0.0 - resolution: "crypto-random-string@npm:2.0.0" - checksum: 0283879f55e7c16fdceacc181f87a0a65c53bc16ffe1d58b9d19a6277adcd71900d02bb2c4843dd55e78c51e30e89b0fec618a7f170ebcc95b33182c28f05fd6 - languageName: node - linkType: hard - -"css-blank-pseudo@npm:^3.0.3": - version: 3.0.3 - resolution: "css-blank-pseudo@npm:3.0.3" - dependencies: - postcss-selector-parser: ^6.0.9 - peerDependencies: - postcss: ^8.4 - bin: - css-blank-pseudo: dist/cli.cjs - checksum: 9be0a13885a99d8ba9e1f45ea66e801d4da75b58c1c3c516a40772fa3a93ef9952b15dcac0418acbb6c89daaae0572819647701b8e553a02972826e33d4cd67f - languageName: node - linkType: hard - -"css-declaration-sorter@npm:^6.3.1": - version: 6.4.1 - resolution: "css-declaration-sorter@npm:6.4.1" - peerDependencies: - postcss: ^8.0.9 - checksum: cbdc9e0d481011b1a28fd5b60d4eb55fe204391d31a0b1b490b2cecf4baa85810f9b8c48adab4df644f4718104ed3ed72c64a9745e3216173767bf4aeca7f9b8 - languageName: node - linkType: hard - -"css-has-pseudo@npm:^3.0.4": - version: 3.0.4 - resolution: "css-has-pseudo@npm:3.0.4" - dependencies: - postcss-selector-parser: ^6.0.9 - peerDependencies: - postcss: ^8.4 - bin: - css-has-pseudo: dist/cli.cjs - checksum: 8f165d68f6621891d9fa1d874794916a52ed8847dfbec591523ad68774650cc1eae062ba08f59514666e04aeba27be72c9b211892f3a187c5ba6e287bd4260e7 - languageName: node - linkType: hard - -"css-loader@npm:^6.5.1": - version: 6.11.0 - resolution: "css-loader@npm:6.11.0" - dependencies: - icss-utils: ^5.1.0 - postcss: ^8.4.33 - postcss-modules-extract-imports: ^3.1.0 - postcss-modules-local-by-default: ^4.0.5 - postcss-modules-scope: ^3.2.0 - postcss-modules-values: ^4.0.0 - postcss-value-parser: ^4.2.0 - semver: ^7.5.4 - peerDependencies: - "@rspack/core": 0.x || 1.x - webpack: ^5.0.0 - peerDependenciesMeta: - "@rspack/core": - optional: true - webpack: - optional: true - checksum: 5c8d35975a7121334905394e88e28f05df72f037dbed2fb8fec4be5f0b313ae73a13894ba791867d4a4190c35896da84a7fd0c54fb426db55d85ba5e714edbe3 - languageName: node - linkType: hard - -"css-minimizer-webpack-plugin@npm:^3.2.0": - version: 3.4.1 - resolution: "css-minimizer-webpack-plugin@npm:3.4.1" - dependencies: - cssnano: ^5.0.6 - jest-worker: ^27.0.2 - postcss: ^8.3.5 - schema-utils: ^4.0.0 - serialize-javascript: ^6.0.0 - source-map: ^0.6.1 - peerDependencies: - webpack: ^5.0.0 - peerDependenciesMeta: - "@parcel/css": - optional: true - clean-css: - optional: true - csso: - optional: true - esbuild: - optional: true - checksum: 065c6c1eadb7c99267db5d04d6f3909e9968b73c4cb79ab9e4502a5fbf1a3d564cfe6f8e0bff8e4ab00d4ed233e9c3c76a4ebe0ee89150b3d9ecb064ddf1e5e9 - languageName: node - linkType: hard - -"css-prefers-color-scheme@npm:^6.0.3": - version: 6.0.3 - resolution: "css-prefers-color-scheme@npm:6.0.3" - peerDependencies: - postcss: ^8.4 - bin: - css-prefers-color-scheme: dist/cli.cjs - checksum: 3a2b02f0454adda68861cdcaf6a0d11f462eadf165301cba61c5ec7c5f229ac261c5baa54c377d9b811ec5f21b30d72a02bc032cdad2415b3a566f08a0c47b3a - languageName: node - linkType: hard - -"css-select-base-adapter@npm:^0.1.1": - version: 0.1.1 - resolution: "css-select-base-adapter@npm:0.1.1" - checksum: c107e9cfa53a23427e4537451a67358375e656baa3322345a982d3c2751fb3904002aae7e5d72386c59f766fe6b109d1ffb43eeab1c16f069f7a3828eb17851c - languageName: node - linkType: hard - -"css-select@npm:^2.0.0": - version: 2.1.0 - resolution: "css-select@npm:2.1.0" - dependencies: - boolbase: ^1.0.0 - css-what: ^3.2.1 - domutils: ^1.7.0 - nth-check: ^1.0.2 - checksum: 0c4099910f2411e2a9103cf92ea6a4ad738b57da75bcf73d39ef2c14a00ef36e5f16cb863211c901320618b24ace74da6333442d82995cafd5040077307de462 - languageName: node - linkType: hard - -"css-select@npm:^4.1.3": - version: 4.3.0 - resolution: "css-select@npm:4.3.0" - dependencies: - boolbase: ^1.0.0 - css-what: ^6.0.1 - domhandler: ^4.3.1 - domutils: ^2.8.0 - nth-check: ^2.0.1 - checksum: d6202736839194dd7f910320032e7cfc40372f025e4bf21ca5bf6eb0a33264f322f50ba9c0adc35dadd342d3d6fae5ca244779a4873afbfa76561e343f2058e0 - languageName: node - linkType: hard - -"css-tree@npm:1.0.0-alpha.37": - version: 1.0.0-alpha.37 - resolution: "css-tree@npm:1.0.0-alpha.37" - dependencies: - mdn-data: 2.0.4 - source-map: ^0.6.1 - checksum: 0e419a1388ec0fbbe92885fba4a557f9fb0e077a2a1fad629b7245bbf7b4ef5df49e6877401b952b09b9057ffe1a3dba74f6fdfbf7b2223a5a35bce27ff2307d - languageName: node - linkType: hard - -"css-tree@npm:^1.1.2, css-tree@npm:^1.1.3": - version: 1.1.3 - resolution: "css-tree@npm:1.1.3" - dependencies: - mdn-data: 2.0.14 - source-map: ^0.6.1 - checksum: 79f9b81803991b6977b7fcb1588799270438274d89066ce08f117f5cdb5e20019b446d766c61506dd772c839df84caa16042d6076f20c97187f5abe3b50e7d1f - languageName: node - linkType: hard - -"css-vendor@npm:^2.0.8": - version: 2.0.8 - resolution: "css-vendor@npm:2.0.8" - dependencies: - "@babel/runtime": ^7.8.3 - is-in-browser: ^1.0.2 - checksum: 647cd4ea5e401c65c59376255aa2b708e92bf84fba9ce2b3ff5ecb94bf51d74ac374052b1cf9956ef7419b8ebf07fcea9a7683d2d2459127b2ca747ab5b98745 - languageName: node - linkType: hard - -"css-what@npm:^3.2.1": - version: 3.4.2 - resolution: "css-what@npm:3.4.2" - checksum: 26bb5ec3ae718393d418016365c849fa14bd0de408c735dea3ddf58146b6cc54f3b336fb4afd31d95c06ca79583acbcdfec7ee93d31ff5c1a697df135b38dfeb - languageName: node - linkType: hard - -"css-what@npm:^6.0.1": - version: 6.2.2 - resolution: "css-what@npm:6.2.2" - checksum: 4d1f07b348a638e1f8b4c72804a1e93881f35e0f541256aec5ac0497c5855df7db7ab02da030de950d4813044f6d029a14ca657e0f92c3987e4b604246235b2b - languageName: node - linkType: hard - -"cssdb@npm:^7.1.0": - version: 7.11.2 - resolution: "cssdb@npm:7.11.2" - checksum: 79b2c3b6de1d80c7f3e40f28c06138b7f1ca27fe5d9173195cc781d8acc0261c2bdeccdf141bd035b13709655cf724c8ad4757ddf12a3d21b6d002368c9cb027 - languageName: node - linkType: hard - -"cssesc@npm:^3.0.0": - version: 3.0.0 - resolution: "cssesc@npm:3.0.0" - bin: - cssesc: bin/cssesc - checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2 - languageName: node - linkType: hard - -"cssnano-preset-default@npm:^5.2.14": - version: 5.2.14 - resolution: "cssnano-preset-default@npm:5.2.14" - dependencies: - css-declaration-sorter: ^6.3.1 - cssnano-utils: ^3.1.0 - postcss-calc: ^8.2.3 - postcss-colormin: ^5.3.1 - postcss-convert-values: ^5.1.3 - postcss-discard-comments: ^5.1.2 - postcss-discard-duplicates: ^5.1.0 - postcss-discard-empty: ^5.1.1 - postcss-discard-overridden: ^5.1.0 - postcss-merge-longhand: ^5.1.7 - postcss-merge-rules: ^5.1.4 - postcss-minify-font-values: ^5.1.0 - postcss-minify-gradients: ^5.1.1 - postcss-minify-params: ^5.1.4 - postcss-minify-selectors: ^5.2.1 - postcss-normalize-charset: ^5.1.0 - postcss-normalize-display-values: ^5.1.0 - postcss-normalize-positions: ^5.1.1 - postcss-normalize-repeat-style: ^5.1.1 - postcss-normalize-string: ^5.1.0 - postcss-normalize-timing-functions: ^5.1.0 - postcss-normalize-unicode: ^5.1.1 - postcss-normalize-url: ^5.1.0 - postcss-normalize-whitespace: ^5.1.1 - postcss-ordered-values: ^5.1.3 - postcss-reduce-initial: ^5.1.2 - postcss-reduce-transforms: ^5.1.0 - postcss-svgo: ^5.1.0 - postcss-unique-selectors: ^5.1.1 - peerDependencies: - postcss: ^8.2.15 - checksum: d3bbbe3d50c6174afb28d0bdb65b511fdab33952ec84810aef58b87189f3891c34aaa8b6a6101acd5314f8acded839b43513e39a75f91a698ddc985a1b1d9e95 - languageName: node - linkType: hard - -"cssnano-utils@npm:^3.1.0": - version: 3.1.0 - resolution: "cssnano-utils@npm:3.1.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 975c84ce9174cf23bb1da1e9faed8421954607e9ea76440cd3bb0c1bea7e17e490d800fca5ae2812d1d9e9d5524eef23ede0a3f52497d7ccc628e5d7321536f2 - languageName: node - linkType: hard - -"cssnano@npm:^5.0.6": - version: 5.1.15 - resolution: "cssnano@npm:5.1.15" - dependencies: - cssnano-preset-default: ^5.2.14 - lilconfig: ^2.0.3 - yaml: ^1.10.2 - peerDependencies: - postcss: ^8.2.15 - checksum: ca9e1922178617c66c2f1548824b2c7af2ecf69cc3a187fc96bf8d29251c2e84d9e4966c69cf64a2a6a057a37dff7d6d057bc8a2a0957e6ea382e452ae9d0bbb - languageName: node - linkType: hard - -"csso@npm:^4.0.2, csso@npm:^4.2.0": - version: 4.2.0 - resolution: "csso@npm:4.2.0" - dependencies: - css-tree: ^1.1.2 - checksum: 380ba9663da3bcea58dee358a0d8c4468bb6539be3c439dc266ac41c047217f52fd698fb7e4b6b6ccdfb8cf53ef4ceed8cc8ceccb8dfca2aa628319826b5b998 - languageName: node - linkType: hard - -"cssom@npm:^0.4.4": - version: 0.4.4 - resolution: "cssom@npm:0.4.4" - checksum: e3bc1076e7ee4213d4fef05e7ae03bfa83dc05f32611d8edc341f4ecc3d9647b89c8245474c7dd2cdcdb797a27c462e99da7ad00a34399694559f763478ff53f - languageName: node - linkType: hard - -"cssom@npm:~0.3.6": - version: 0.3.8 - resolution: "cssom@npm:0.3.8" - checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6 - languageName: node - linkType: hard - -"cssstyle@npm:^2.3.0": - version: 2.3.0 - resolution: "cssstyle@npm:2.3.0" - dependencies: - cssom: ~0.3.6 - checksum: 5f05e6fd2e3df0b44695c2f08b9ef38b011862b274e320665176467c0725e44a53e341bc4959a41176e83b66064ab786262e7380fd1cabeae6efee0d255bb4e3 - languageName: node - linkType: hard - -"csstype@npm:^3.0.2, csstype@npm:^3.1.3, csstype@npm:^3.2.2": - version: 3.2.3 - resolution: "csstype@npm:3.2.3" - checksum: cb882521b3398958a1ce6ca98c011aec0bde1c77ecaf8a1dd4db3b112a189939beae3b1308243b2fe50fc27eb3edeb0f73a5a4d91d928765dc6d5ecc7bda92ee - languageName: node - linkType: hard - -"damerau-levenshtein@npm:^1.0.8": - version: 1.0.8 - resolution: "damerau-levenshtein@npm:1.0.8" - checksum: d240b7757544460ae0586a341a53110ab0a61126570ef2d8c731e3eab3f0cb6e488e2609e6a69b46727635de49be20b071688698744417ff1b6c1d7ccd03e0de - languageName: node - linkType: hard - -"data-urls@npm:^2.0.0": - version: 2.0.0 - resolution: "data-urls@npm:2.0.0" - dependencies: - abab: ^2.0.3 - whatwg-mimetype: ^2.3.0 - whatwg-url: ^8.0.0 - checksum: 97caf828aac25e25e04ba6869db0f99c75e6859bb5b424ada28d3e7841941ebf08ddff3c1b1bb4585986bd507a5d54c2a716853ea6cb98af877400e637393e71 - languageName: node - linkType: hard - -"data-view-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "data-view-buffer@npm:1.0.2" - dependencies: - call-bound: ^1.0.3 - es-errors: ^1.3.0 - is-data-view: ^1.0.2 - checksum: 1e1cd509c3037ac0f8ba320da3d1f8bf1a9f09b0be09394b5e40781b8cc15ff9834967ba7c9f843a425b34f9fe14ce44cf055af6662c44263424c1eb8d65659b - languageName: node - linkType: hard - -"data-view-byte-length@npm:^1.0.2": - version: 1.0.2 - resolution: "data-view-byte-length@npm:1.0.2" - dependencies: - call-bound: ^1.0.3 - es-errors: ^1.3.0 - is-data-view: ^1.0.2 - checksum: 3600c91ced1cfa935f19ef2abae11029e01738de8d229354d3b2a172bf0d7e4ed08ff8f53294b715569fdf72dfeaa96aa7652f479c0f60570878d88e7e8bddf6 - languageName: node - linkType: hard - -"data-view-byte-offset@npm:^1.0.1": - version: 1.0.1 - resolution: "data-view-byte-offset@npm:1.0.1" - dependencies: - call-bound: ^1.0.2 - es-errors: ^1.3.0 - is-data-view: ^1.0.1 - checksum: 8dd492cd51d19970876626b5b5169fbb67ca31ec1d1d3238ee6a71820ca8b80cafb141c485999db1ee1ef02f2cc3b99424c5eda8d59e852d9ebb79ab290eb5ee - languageName: node - linkType: hard - -"date-fns@npm:^2.30.0": - version: 2.30.0 - resolution: "date-fns@npm:2.30.0" - dependencies: - "@babel/runtime": ^7.21.0 - checksum: f7be01523282e9bb06c0cd2693d34f245247a29098527d4420628966a2d9aad154bd0e90a6b1cf66d37adcb769cd108cf8a7bd49d76db0fb119af5cdd13644f4 - languageName: node - linkType: hard - -"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.0": - version: 2.6.9 - resolution: "debug@npm:2.6.9" - dependencies: - ms: 2.0.0 - checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.4.1": - version: 4.4.3 - resolution: "debug@npm:4.4.3" - dependencies: - ms: ^2.1.3 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 4805abd570e601acdca85b6aa3757186084a45cff9b2fa6eee1f3b173caa776b45f478b2a71a572d616d2010cea9211d0ac4a02a610e4c18ac4324bde3760834 - languageName: node - linkType: hard - -"debug@npm:^3.2.7": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: ^2.1.1 - checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c - languageName: node - linkType: hard - -"decimal.js@npm:^10.2.1": - version: 10.6.0 - resolution: "decimal.js@npm:10.6.0" - checksum: 9302b990cd6f4da1c7602200002e40e15d15660374432963421d3cd6d81cc6e27e0a488356b030fee64650947e32e78bdbea245d596dadfeeeb02e146d485999 - languageName: node - linkType: hard - -"decode-uri-component@npm:^0.2.0": - version: 0.2.2 - resolution: "decode-uri-component@npm:0.2.2" - checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 - languageName: node - linkType: hard - -"dedent@npm:^0.7.0": - version: 0.7.0 - resolution: "dedent@npm:0.7.0" - checksum: 87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2 - languageName: node - linkType: hard - -"deep-equal@npm:^2.0.5": - version: 2.2.3 - resolution: "deep-equal@npm:2.2.3" - dependencies: - array-buffer-byte-length: ^1.0.0 - call-bind: ^1.0.5 - es-get-iterator: ^1.1.3 - get-intrinsic: ^1.2.2 - is-arguments: ^1.1.1 - is-array-buffer: ^3.0.2 - is-date-object: ^1.0.5 - is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.2 - isarray: ^2.0.5 - object-is: ^1.1.5 - object-keys: ^1.1.1 - object.assign: ^4.1.4 - regexp.prototype.flags: ^1.5.1 - side-channel: ^1.0.4 - which-boxed-primitive: ^1.0.2 - which-collection: ^1.0.1 - which-typed-array: ^1.1.13 - checksum: ee8852f23e4d20a5626c13b02f415ba443a1b30b4b3d39eaf366d59c4a85e6545d7ec917db44d476a85ae5a86064f7e5f7af7479f38f113995ba869f3a1ddc53 - languageName: node - linkType: hard - -"deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 - languageName: node - linkType: hard - -"deepmerge@npm:^4.2.2": - version: 4.3.1 - resolution: "deepmerge@npm:4.3.1" - checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 - languageName: node - linkType: hard - -"default-gateway@npm:^6.0.3": - version: 6.0.3 - resolution: "default-gateway@npm:6.0.3" - dependencies: - execa: ^5.0.0 - checksum: 126f8273ecac8ee9ff91ea778e8784f6cd732d77c3157e8c5bdd6ed03651b5291f71446d05bc02d04073b1e67583604db5394ea3cf992ede0088c70ea15b7378 - languageName: node - linkType: hard - -"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": - version: 1.1.4 - resolution: "define-data-property@npm:1.1.4" - dependencies: - es-define-property: ^1.0.0 - es-errors: ^1.3.0 - gopd: ^1.0.1 - checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b - languageName: node - linkType: hard - -"define-lazy-prop@npm:^2.0.0": - version: 2.0.0 - resolution: "define-lazy-prop@npm:2.0.0" - checksum: 0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2 - languageName: node - linkType: hard - -"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1": - version: 1.2.1 - resolution: "define-properties@npm:1.2.1" - dependencies: - define-data-property: ^1.0.1 - has-property-descriptors: ^1.0.0 - object-keys: ^1.1.1 - checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 - languageName: node - linkType: hard - -"define-property@npm:^0.2.5": - version: 0.2.5 - resolution: "define-property@npm:0.2.5" - dependencies: - is-descriptor: ^0.1.0 - checksum: 85af107072b04973b13f9e4128ab74ddfda48ec7ad2e54b193c0ffb57067c4ce5b7786a7b4ae1f24bd03e87c5d18766b094571810b314d7540f86d4354dbd394 - languageName: node - linkType: hard - -"define-property@npm:^1.0.0": - version: 1.0.0 - resolution: "define-property@npm:1.0.0" - dependencies: - is-descriptor: ^1.0.0 - checksum: 5fbed11dace44dd22914035ba9ae83ad06008532ca814d7936a53a09e897838acdad5b108dd0688cc8d2a7cf0681acbe00ee4136cf36743f680d10517379350a - languageName: node - linkType: hard - -"define-property@npm:^2.0.2": - version: 2.0.2 - resolution: "define-property@npm:2.0.2" - dependencies: - is-descriptor: ^1.0.2 - isobject: ^3.0.1 - checksum: 3217ed53fc9eed06ba8da6f4d33e28c68a82e2f2a8ab4d562c4920d8169a166fe7271453675e6c69301466f36a65d7f47edf0cf7f474b9aa52a5ead9c1b13c99 - languageName: node - linkType: hard - -"del@npm:^6.0.0": - version: 6.1.1 - resolution: "del@npm:6.1.1" - dependencies: - globby: ^11.0.1 - graceful-fs: ^4.2.4 - is-glob: ^4.0.1 - is-path-cwd: ^2.2.0 - is-path-inside: ^3.0.2 - p-map: ^4.0.0 - rimraf: ^3.0.2 - slash: ^3.0.0 - checksum: 563288b73b8b19a7261c47fd21a330eeab6e2acd7c6208c49790dfd369127120dd7836cdf0c1eca216b77c94782a81507eac6b4734252d3bef2795cb366996b6 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 - languageName: node - linkType: hard - -"depd@npm:2.0.0, depd@npm:~2.0.0": - version: 2.0.0 - resolution: "depd@npm:2.0.0" - checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a - languageName: node - linkType: hard - -"depd@npm:~1.1.2": - version: 1.1.2 - resolution: "depd@npm:1.1.2" - checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 - languageName: node - linkType: hard - -"destroy@npm:1.2.0": - version: 1.2.0 - resolution: "destroy@npm:1.2.0" - checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 - languageName: node - linkType: hard - -"detect-newline@npm:^3.0.0": - version: 3.1.0 - resolution: "detect-newline@npm:3.1.0" - checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 - languageName: node - linkType: hard - -"detect-node@npm:^2.0.4": - version: 2.1.0 - resolution: "detect-node@npm:2.1.0" - checksum: 832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e - languageName: node - linkType: hard - -"detect-port-alt@npm:^1.1.6": - version: 1.1.6 - resolution: "detect-port-alt@npm:1.1.6" - dependencies: - address: ^1.0.1 - debug: ^2.6.0 - bin: - detect: ./bin/detect-port - detect-port: ./bin/detect-port - checksum: 9dc37b1fa4a9dd6d4889e1045849b8d841232b598d1ca888bf712f4035b07a17cf6d537465a0d7323250048d3a5a0540e3b7cf89457efc222f96f77e2c40d16a - languageName: node - linkType: hard - -"didyoumean@npm:^1.2.2": - version: 1.2.2 - resolution: "didyoumean@npm:1.2.2" - checksum: d5d98719d58b3c2fa59663c4c42ba9716f1fd01245c31d5fce31915bd3aa26e6aac149788e007358f778ebbd68a2256eb5973e8ca6f221df221ba060115acf2e - languageName: node - linkType: hard - -"diff-sequences@npm:^27.5.1": - version: 27.5.1 - resolution: "diff-sequences@npm:27.5.1" - checksum: a00db5554c9da7da225db2d2638d85f8e41124eccbd56cbaefb3b276dcbb1c1c2ad851c32defe2055a54a4806f030656cbf6638105fd6ce97bb87b90b32a33ca - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: ^4.0.0 - checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 - languageName: node - linkType: hard - -"dlv@npm:^1.1.3": - version: 1.1.3 - resolution: "dlv@npm:1.1.3" - checksum: d7381bca22ed11933a1ccf376db7a94bee2c57aa61e490f680124fa2d1cd27e94eba641d9f45be57caab4f9a6579de0983466f620a2cd6230d7ec93312105ae7 - languageName: node - linkType: hard - -"dns-packet@npm:^5.2.2": - version: 5.6.1 - resolution: "dns-packet@npm:5.6.1" - dependencies: - "@leichtgewicht/ip-codec": ^2.0.1 - checksum: 64c06457f0c6e143f7a0946e0aeb8de1c5f752217cfa143ef527467c00a6d78db1835cfdb6bb68333d9f9a4963cf23f410439b5262a8935cce1236f45e344b81 - languageName: node - linkType: hard - -"doctrine@npm:^2.1.0": - version: 2.1.0 - resolution: "doctrine@npm:2.1.0" - dependencies: - esutils: ^2.0.2 - checksum: a45e277f7feaed309fe658ace1ff286c6e2002ac515af0aaf37145b8baa96e49899638c7cd47dccf84c3d32abfc113246625b3ac8f552d1046072adee13b0dc8 - languageName: node - linkType: hard - -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: ^2.0.2 - checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce - languageName: node - linkType: hard - -"dom-accessibility-api@npm:^0.5.9": - version: 0.5.16 - resolution: "dom-accessibility-api@npm:0.5.16" - checksum: 005eb283caef57fc1adec4d5df4dd49189b628f2f575af45decb210e04d634459e3f1ee64f18b41e2dcf200c844bc1d9279d80807e686a30d69a4756151ad248 - languageName: node - linkType: hard - -"dom-converter@npm:^0.2.0": - version: 0.2.0 - resolution: "dom-converter@npm:0.2.0" - dependencies: - utila: ~0.4 - checksum: ea52fe303f5392e48dea563abef0e6fb3a478b8dbe3c599e99bb5d53981c6c38fc4944e56bb92a8ead6bb989d10b7914722ae11febbd2fd0910e33b9fc4aaa77 - languageName: node - linkType: hard - -"dom-helpers@npm:^5.0.1": - version: 5.2.1 - resolution: "dom-helpers@npm:5.2.1" - dependencies: - "@babel/runtime": ^7.8.7 - csstype: ^3.0.2 - checksum: 863ba9e086f7093df3376b43e74ce4422571d404fc9828bf2c56140963d5edf0e56160f9b2f3bb61b282c07f8fc8134f023c98fd684bddcb12daf7b0f14d951c - languageName: node - linkType: hard - -"dom-serializer@npm:0": - version: 0.2.2 - resolution: "dom-serializer@npm:0.2.2" - dependencies: - domelementtype: ^2.0.1 - entities: ^2.0.0 - checksum: 376344893e4feccab649a14ca1a46473e9961f40fe62479ea692d4fee4d9df1c00ca8654811a79c1ca7b020096987e1ca4fb4d7f8bae32c1db800a680a0e5d5e - languageName: node - linkType: hard - -"dom-serializer@npm:^1.0.1": - version: 1.4.1 - resolution: "dom-serializer@npm:1.4.1" - dependencies: - domelementtype: ^2.0.1 - domhandler: ^4.2.0 - entities: ^2.0.0 - checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 - languageName: node - linkType: hard - -"domelementtype@npm:1": - version: 1.3.1 - resolution: "domelementtype@npm:1.3.1" - checksum: 7893da40218ae2106ec6ffc146b17f203487a52f5228b032ea7aa470e41dfe03e1bd762d0ee0139e792195efda765434b04b43cddcf63207b098f6ae44b36ad6 - languageName: node - linkType: hard - -"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": - version: 2.3.0 - resolution: "domelementtype@npm:2.3.0" - checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 - languageName: node - linkType: hard - -"domexception@npm:^2.0.1": - version: 2.0.1 - resolution: "domexception@npm:2.0.1" - dependencies: - webidl-conversions: ^5.0.0 - checksum: d638e9cb05c52999f1b2eb87c374b03311ea5b1d69c2f875bc92da73e17db60c12142b45c950228642ff7f845c536b65305483350d080df59003a653da80b691 - languageName: node - linkType: hard - -"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": - version: 4.3.1 - resolution: "domhandler@npm:4.3.1" - dependencies: - domelementtype: ^2.2.0 - checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa - languageName: node - linkType: hard - -"domutils@npm:^1.7.0": - version: 1.7.0 - resolution: "domutils@npm:1.7.0" - dependencies: - dom-serializer: 0 - domelementtype: 1 - checksum: f60a725b1f73c1ae82f4894b691601ecc6ecb68320d87923ac3633137627c7865725af813ae5d188ad3954283853bcf46779eb50304ec5d5354044569fcefd2b - languageName: node - linkType: hard - -"domutils@npm:^2.5.2, domutils@npm:^2.8.0": - version: 2.8.0 - resolution: "domutils@npm:2.8.0" - dependencies: - dom-serializer: ^1.0.1 - domelementtype: ^2.2.0 - domhandler: ^4.2.0 - checksum: abf7434315283e9aadc2a24bac0e00eab07ae4313b40cc239f89d84d7315ebdfd2fb1b5bf750a96bc1b4403d7237c7b2ebf60459be394d625ead4ca89b934391 - languageName: node - linkType: hard - -"dot-case@npm:^3.0.4": - version: 3.0.4 - resolution: "dot-case@npm:3.0.4" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - checksum: a65e3519414856df0228b9f645332f974f2bf5433370f544a681122eab59e66038fc3349b4be1cdc47152779dac71a5864f1ccda2f745e767c46e9c6543b1169 - languageName: node - linkType: hard - -"dotenv-expand@npm:^5.1.0": - version: 5.1.0 - resolution: "dotenv-expand@npm:5.1.0" - checksum: 8017675b7f254384915d55f9eb6388e577cf0a1231a28d54b0ca03b782be9501b0ac90ac57338636d395fa59051e6209e9b44b8ddf169ce6076dffb5dea227d3 - languageName: node - linkType: hard - -"dotenv@npm:16.4.5": - version: 16.4.5 - resolution: "dotenv@npm:16.4.5" - checksum: 301a12c3d44fd49888b74eb9ccf9f07a1f5df43f489e7fcb89647a2edcd84c42d6bc349dc8df099cd18f07c35c7b04685c1a4f3e6a6a9e6b30f8d48c15b7f49c - languageName: node - linkType: hard - -"dotenv@npm:^10.0.0": - version: 10.0.0 - resolution: "dotenv@npm:10.0.0" - checksum: f412c5fe8c24fbe313d302d2500e247ba8a1946492db405a4de4d30dd0eb186a88a43f13c958c5a7de303938949c4231c56994f97d05c4bc1f22478d631b4005 - languageName: node - linkType: hard - -"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "dunder-proto@npm:1.0.1" - dependencies: - call-bind-apply-helpers: ^1.0.1 - es-errors: ^1.3.0 - gopd: ^1.2.0 - checksum: 149207e36f07bd4941921b0ca929e3a28f1da7bd6b6ff8ff7f4e2f2e460675af4576eeba359c635723dc189b64cdd4787e0255897d5b135ccc5d15cb8685fc90 - languageName: node - linkType: hard - -"duplexer@npm:^0.1.2, duplexer@npm:~0.1.1": - version: 0.1.2 - resolution: "duplexer@npm:0.1.2" - checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 - languageName: node - linkType: hard - -"ee-first@npm:1.1.1": - version: 1.1.1 - resolution: "ee-first@npm:1.1.1" - checksum: 1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f - languageName: node - linkType: hard - -"ejs@npm:^3.1.6": - version: 3.1.10 - resolution: "ejs@npm:3.1.10" - dependencies: - jake: ^10.8.5 - bin: - ejs: bin/cli.js - checksum: ce90637e9c7538663ae023b8a7a380b2ef7cc4096de70be85abf5a3b9641912dde65353211d05e24d56b1f242d71185c6d00e02cb8860701d571786d92c71f05 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.5.249": - version: 1.5.260 - resolution: "electron-to-chromium@npm:1.5.260" - checksum: 9b0813b195f0bb44ae04fe9bedfdecde38d573dfdc7763ed342203037765c1573f95cfd552a44a8e4a2c55712b055d9de37b8f9388ebc93b829cc37392411ff3 - languageName: node - linkType: hard - -"emittery@npm:^0.10.2": - version: 0.10.2 - resolution: "emittery@npm:0.10.2" - checksum: ee3e21788b043b90885b18ea756ec3105c1cedc50b29709c92b01e239c7e55345d4bb6d3aef4ddbaf528eef448a40b3bb831bad9ee0fc9c25cbf1367ab1ab5ac - languageName: node - linkType: hard - -"emittery@npm:^0.8.1": - version: 0.8.1 - resolution: "emittery@npm:0.8.1" - checksum: 2457e8c7b0688bb006126f2c025b2655abe682f66b184954122a8a065b5277f9813d49d627896a10b076b81c513ec5f491fd9c14fbd42c04b95ca3c9f3c365ee - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 - languageName: node - linkType: hard - -"emojis-list@npm:^3.0.0": - version: 3.0.0 - resolution: "emojis-list@npm:3.0.0" - checksum: ddaaa02542e1e9436c03970eeed445f4ed29a5337dfba0fe0c38dfdd2af5da2429c2a0821304e8a8d1cadf27fdd5b22ff793571fa803ae16852a6975c65e8e70 - languageName: node - linkType: hard - -"encodeurl@npm:^2.0.0, encodeurl@npm:~2.0.0": - version: 2.0.0 - resolution: "encodeurl@npm:2.0.0" - checksum: abf5cd51b78082cf8af7be6785813c33b6df2068ce5191a40ca8b1afe6a86f9230af9a9ce694a5ce4665955e5c1120871826df9c128a642e09c58d592e2807fe - languageName: node - linkType: hard - -"encodeurl@npm:~1.0.2": - version: 1.0.2 - resolution: "encodeurl@npm:1.0.2" - checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: ^0.6.2 - checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f - languageName: node - linkType: hard - -"enhanced-resolve@npm:^5.17.3": - version: 5.18.3 - resolution: "enhanced-resolve@npm:5.18.3" - dependencies: - graceful-fs: ^4.2.4 - tapable: ^2.2.0 - checksum: e2b2188a7f9b68616984b5ce1f43b97bef3c5fde4d193c24ea4cfdb4eb784a700093f049f14155733a3cb3ae1204550590aa37dda7e742022c8f447f618a4816 - languageName: node - linkType: hard - -"entities@npm:^2.0.0": - version: 2.2.0 - resolution: "entities@npm:2.2.0" - checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 - languageName: node - linkType: hard - -"entities@npm:^4.4.0": - version: 4.5.0 - resolution: "entities@npm:4.5.0" - checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 - languageName: node - linkType: hard - -"error-ex@npm:^1.3.1": - version: 1.3.4 - resolution: "error-ex@npm:1.3.4" - dependencies: - is-arrayish: ^0.2.1 - checksum: 25136c0984569c8d68417036a9a1624804314296f24675199a391e5d20b2e26fe6d9304d40901293fa86900603a229983c9a8921ea7f1d16f814c2db946ff4ef - languageName: node - linkType: hard - -"error-stack-parser@npm:^2.0.6": - version: 2.1.4 - resolution: "error-stack-parser@npm:2.1.4" - dependencies: - stackframe: ^1.3.4 - checksum: 3b916d2d14c6682f287c8bfa28e14672f47eafe832701080e420e7cdbaebb2c50293868256a95706ac2330fe078cf5664713158b49bc30d7a5f2ac229ded0e18 - languageName: node - linkType: hard - -"es-abstract@npm:^1.17.2, es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6, es-abstract@npm:^1.23.9, es-abstract@npm:^1.24.0": - version: 1.24.0 - resolution: "es-abstract@npm:1.24.0" - dependencies: - array-buffer-byte-length: ^1.0.2 - arraybuffer.prototype.slice: ^1.0.4 - available-typed-arrays: ^1.0.7 - call-bind: ^1.0.8 - call-bound: ^1.0.4 - data-view-buffer: ^1.0.2 - data-view-byte-length: ^1.0.2 - data-view-byte-offset: ^1.0.1 - es-define-property: ^1.0.1 - es-errors: ^1.3.0 - es-object-atoms: ^1.1.1 - es-set-tostringtag: ^2.1.0 - es-to-primitive: ^1.3.0 - function.prototype.name: ^1.1.8 - get-intrinsic: ^1.3.0 - get-proto: ^1.0.1 - get-symbol-description: ^1.1.0 - globalthis: ^1.0.4 - gopd: ^1.2.0 - has-property-descriptors: ^1.0.2 - has-proto: ^1.2.0 - has-symbols: ^1.1.0 - hasown: ^2.0.2 - internal-slot: ^1.1.0 - is-array-buffer: ^3.0.5 - is-callable: ^1.2.7 - is-data-view: ^1.0.2 - is-negative-zero: ^2.0.3 - is-regex: ^1.2.1 - is-set: ^2.0.3 - is-shared-array-buffer: ^1.0.4 - is-string: ^1.1.1 - is-typed-array: ^1.1.15 - is-weakref: ^1.1.1 - math-intrinsics: ^1.1.0 - object-inspect: ^1.13.4 - object-keys: ^1.1.1 - object.assign: ^4.1.7 - own-keys: ^1.0.1 - regexp.prototype.flags: ^1.5.4 - safe-array-concat: ^1.1.3 - safe-push-apply: ^1.0.0 - safe-regex-test: ^1.1.0 - set-proto: ^1.0.0 - stop-iteration-iterator: ^1.1.0 - string.prototype.trim: ^1.2.10 - string.prototype.trimend: ^1.0.9 - string.prototype.trimstart: ^1.0.8 - typed-array-buffer: ^1.0.3 - typed-array-byte-length: ^1.0.3 - typed-array-byte-offset: ^1.0.4 - typed-array-length: ^1.0.7 - unbox-primitive: ^1.1.0 - which-typed-array: ^1.1.19 - checksum: 06b3d605e56e3da9d16d4db2629a42dac1ca31f2961a41d15c860422a266115e865b43e82d6b9da81a0fabbbb65ebc12fb68b0b755bc9dbddacb6bf7450e96df - languageName: node - linkType: hard - -"es-array-method-boxes-properly@npm:^1.0.0": - version: 1.0.0 - resolution: "es-array-method-boxes-properly@npm:1.0.0" - checksum: 2537fcd1cecf187083890bc6f5236d3a26bf39237433587e5bf63392e88faae929dbba78ff0120681a3f6f81c23fe3816122982c160d63b38c95c830b633b826 - languageName: node - linkType: hard - -"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": - version: 1.0.1 - resolution: "es-define-property@npm:1.0.1" - checksum: 0512f4e5d564021c9e3a644437b0155af2679d10d80f21adaf868e64d30efdfbd321631956f20f42d655fedb2e3a027da479fad3fa6048f768eb453a80a5f80a - languageName: node - linkType: hard - -"es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 - languageName: node - linkType: hard - -"es-get-iterator@npm:^1.1.3": - version: 1.1.3 - resolution: "es-get-iterator@npm:1.1.3" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.3 - has-symbols: ^1.0.3 - is-arguments: ^1.1.1 - is-map: ^2.0.2 - is-set: ^2.0.2 - is-string: ^1.0.7 - isarray: ^2.0.5 - stop-iteration-iterator: ^1.0.0 - checksum: 8fa118da42667a01a7c7529f8a8cca514feeff243feec1ce0bb73baaa3514560bd09d2b3438873cf8a5aaec5d52da248131de153b28e2638a061b6e4df13267d - languageName: node - linkType: hard - -"es-iterator-helpers@npm:^1.2.1": - version: 1.2.1 - resolution: "es-iterator-helpers@npm:1.2.1" - dependencies: - call-bind: ^1.0.8 - call-bound: ^1.0.3 - define-properties: ^1.2.1 - es-abstract: ^1.23.6 - es-errors: ^1.3.0 - es-set-tostringtag: ^2.0.3 - function-bind: ^1.1.2 - get-intrinsic: ^1.2.6 - globalthis: ^1.0.4 - gopd: ^1.2.0 - has-property-descriptors: ^1.0.2 - has-proto: ^1.2.0 - has-symbols: ^1.1.0 - internal-slot: ^1.1.0 - iterator.prototype: ^1.1.4 - safe-array-concat: ^1.1.3 - checksum: 952808dd1df3643d67ec7adf20c30b36e5eecadfbf36354e6f39ed3266c8e0acf3446ce9bc465e38723d613cb1d915c1c07c140df65bdce85da012a6e7bda62b - languageName: node - linkType: hard - -"es-module-lexer@npm:^1.2.1": - version: 1.7.0 - resolution: "es-module-lexer@npm:1.7.0" - checksum: 7858bb76ae387fdbf8a6fccc951bf18919768309850587553eca34698b9193fbc65fab03d3d9f69163d860321fbf66adf89d5821e7f4148c7cb7d7b997259211 - languageName: node - linkType: hard - -"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": - version: 1.1.1 - resolution: "es-object-atoms@npm:1.1.1" - dependencies: - es-errors: ^1.3.0 - checksum: 214d3767287b12f36d3d7267ef342bbbe1e89f899cfd67040309fc65032372a8e60201410a99a1645f2f90c1912c8c49c8668066f6bdd954bcd614dda2e3da97 - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.0.3, es-set-tostringtag@npm:^2.1.0": - version: 2.1.0 - resolution: "es-set-tostringtag@npm:2.1.0" - dependencies: - es-errors: ^1.3.0 - get-intrinsic: ^1.2.6 - has-tostringtag: ^1.0.2 - hasown: ^2.0.2 - checksum: 789f35de4be3dc8d11fdcb91bc26af4ae3e6d602caa93299a8c45cf05d36cc5081454ae2a6d3afa09cceca214b76c046e4f8151e092e6fc7feeb5efb9e794fc6 - languageName: node - linkType: hard - -"es-shim-unscopables@npm:^1.0.2, es-shim-unscopables@npm:^1.1.0": - version: 1.1.0 - resolution: "es-shim-unscopables@npm:1.1.0" - dependencies: - hasown: ^2.0.2 - checksum: 33cfb1ebcb2f869f0bf528be1a8660b4fe8b6cec8fc641f330e508db2284b58ee2980fad6d0828882d22858c759c0806076427a3673b6daa60f753e3b558ee15 - languageName: node - linkType: hard - -"es-to-primitive@npm:^1.3.0": - version: 1.3.0 - resolution: "es-to-primitive@npm:1.3.0" - dependencies: - is-callable: ^1.2.7 - is-date-object: ^1.0.5 - is-symbol: ^1.0.4 - checksum: 966965880356486cd4d1fe9a523deda2084c81b3702d951212c098f5f2ee93605d1b7c1840062efb48a07d892641c7ed1bc194db563645c0dd2b919cb6d65b93 - languageName: node - linkType: hard - -"esbuild-envfile-plugin@npm:^1.0.2": - version: 1.0.7 - resolution: "esbuild-envfile-plugin@npm:1.0.7" - dependencies: - dotenv: 16.4.5 - checksum: e1411091fec191c42b3fa34069b75272c1842c388c8261ea81c17982dc38193f9e2660f1157674f4de519013f91a8f9884418e75a627b05fb289cdc74a1b391c - languageName: node - linkType: hard - -"esbuild-plugin-clean@npm:^1.0.1": - version: 1.0.1 - resolution: "esbuild-plugin-clean@npm:1.0.1" - dependencies: - chalk: ^4.1.2 - del: ^6.0.0 - peerDependencies: - esbuild: ">= 0.14.0" - checksum: f2213ee2cb77b8e26ed1e3e5ee9792ff389656c9dec829b990c59eaeade38b17153b7b118e8214ccc8c2f93a5ec17f7ab780630b3535a461c41434fde1cec6ff - languageName: node - linkType: hard - -"esbuild-plugin-copy@npm:^0.3.0": - version: 0.3.0 - resolution: "esbuild-plugin-copy@npm:0.3.0" - dependencies: - chalk: ^4.1.2 - fs-extra: ^10.0.0 - globby: ^11.0.3 - peerDependencies: - esbuild: ^0.13.2 - checksum: 6d8c25f1e60257b7baa58e6aa2c68e344535fee661dad96a17ae7b6ea3ea9c16644ac8415703a7b269ccba97b67c085ca93a01c4184b2702c3bb82280cf8a667 - languageName: node - linkType: hard - -"esbuild-plugin-svgr@npm:^1.0.0": - version: 1.1.0 - resolution: "esbuild-plugin-svgr@npm:1.1.0" - dependencies: - "@svgr/core": ^6.5.1 - checksum: f5212ed2792f922def06c7e571f89164e87f54c03111e3eb9d1226f9b0e49311f124227b7e9d2fd024c7fd1016abe7e7f929e047497d869c8a0057c5aae76dc4 - languageName: node - linkType: hard - -"esbuild@npm:^0.16.6": - version: 0.16.17 - resolution: "esbuild@npm:0.16.17" - dependencies: - "@esbuild/android-arm": 0.16.17 - "@esbuild/android-arm64": 0.16.17 - "@esbuild/android-x64": 0.16.17 - "@esbuild/darwin-arm64": 0.16.17 - "@esbuild/darwin-x64": 0.16.17 - "@esbuild/freebsd-arm64": 0.16.17 - "@esbuild/freebsd-x64": 0.16.17 - "@esbuild/linux-arm": 0.16.17 - "@esbuild/linux-arm64": 0.16.17 - "@esbuild/linux-ia32": 0.16.17 - "@esbuild/linux-loong64": 0.16.17 - "@esbuild/linux-mips64el": 0.16.17 - "@esbuild/linux-ppc64": 0.16.17 - "@esbuild/linux-riscv64": 0.16.17 - "@esbuild/linux-s390x": 0.16.17 - "@esbuild/linux-x64": 0.16.17 - "@esbuild/netbsd-x64": 0.16.17 - "@esbuild/openbsd-x64": 0.16.17 - "@esbuild/sunos-x64": 0.16.17 - "@esbuild/win32-arm64": 0.16.17 - "@esbuild/win32-ia32": 0.16.17 - "@esbuild/win32-x64": 0.16.17 - dependenciesMeta: - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 4c2cc609ecfb426554bc3f75beb92d89eb2d0c515cfceebaa36c7599d7dcaab7056b70f6d6b51e72b45951ddf9021ee28e356cf205f8e42cc055d522312ea30c - languageName: node - linkType: hard - -"escalade@npm:^3.1.1, escalade@npm:^3.2.0": - version: 3.2.0 - resolution: "escalade@npm:3.2.0" - checksum: 47b029c83de01b0d17ad99ed766347b974b0d628e848de404018f3abee728e987da0d2d370ad4574aa3d5b5bfc368754fd085d69a30f8e75903486ec4b5b709e - languageName: node - linkType: hard - -"escape-html@npm:^1.0.3, escape-html@npm:~1.0.3": - version: 1.0.3 - resolution: "escape-html@npm:1.0.3" - checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^2.0.0": - version: 2.0.0 - resolution: "escape-string-regexp@npm:2.0.0" - checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 - languageName: node - linkType: hard - -"escodegen@npm:^1.8.1": - version: 1.14.3 - resolution: "escodegen@npm:1.14.3" - dependencies: - esprima: ^4.0.1 - estraverse: ^4.2.0 - esutils: ^2.0.2 - optionator: ^0.8.1 - source-map: ~0.6.1 - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: 381cdc4767ecdb221206bbbab021b467bbc2a6f5c9a99c9e6353040080bdd3dfe73d7604ad89a47aca6ea7d58bc635f6bd3fbc8da9a1998e9ddfa8372362ccd0 - languageName: node - linkType: hard - -"escodegen@npm:^2.0.0": - version: 2.1.0 - resolution: "escodegen@npm:2.1.0" - dependencies: - esprima: ^4.0.1 - estraverse: ^5.2.0 - esutils: ^2.0.2 - source-map: ~0.6.1 - dependenciesMeta: - source-map: - optional: true - bin: - escodegen: bin/escodegen.js - esgenerate: bin/esgenerate.js - checksum: 096696407e161305cd05aebb95134ad176708bc5cb13d0dcc89a5fcbb959b8ed757e7f2591a5f8036f8f4952d4a724de0df14cd419e29212729fa6df5ce16bf6 - languageName: node - linkType: hard - -"eslint-config-react-app@npm:^7.0.1": - version: 7.0.1 - resolution: "eslint-config-react-app@npm:7.0.1" - dependencies: - "@babel/core": ^7.16.0 - "@babel/eslint-parser": ^7.16.3 - "@rushstack/eslint-patch": ^1.1.0 - "@typescript-eslint/eslint-plugin": ^5.5.0 - "@typescript-eslint/parser": ^5.5.0 - babel-preset-react-app: ^10.0.1 - confusing-browser-globals: ^1.0.11 - eslint-plugin-flowtype: ^8.0.3 - eslint-plugin-import: ^2.25.3 - eslint-plugin-jest: ^25.3.0 - eslint-plugin-jsx-a11y: ^6.5.1 - eslint-plugin-react: ^7.27.1 - eslint-plugin-react-hooks: ^4.3.0 - eslint-plugin-testing-library: ^5.0.1 - peerDependencies: - eslint: ^8.0.0 - checksum: a67e0821809e62308d6e419753fa2acfc7cd353659fab08cf34735f59c6c66910c0b6fda0471c4ec0d712ce762d65efc6431b39569f8d575e2d9bdfc384e0824 - languageName: node - linkType: hard - -"eslint-import-resolver-node@npm:^0.3.9": - version: 0.3.9 - resolution: "eslint-import-resolver-node@npm:0.3.9" - dependencies: - debug: ^3.2.7 - is-core-module: ^2.13.0 - resolve: ^1.22.4 - checksum: 439b91271236b452d478d0522a44482e8c8540bf9df9bd744062ebb89ab45727a3acd03366a6ba2bdbcde8f9f718bab7fe8db64688aca75acf37e04eafd25e22 - languageName: node - linkType: hard - -"eslint-module-utils@npm:^2.12.1": - version: 2.12.1 - resolution: "eslint-module-utils@npm:2.12.1" - dependencies: - debug: ^3.2.7 - peerDependenciesMeta: - eslint: - optional: true - checksum: 2f074670d8c934687820a83140048776b28bbaf35fc37f35623f63cc9c438d496d11f0683b4feabb9a120435435d4a69604b1c6c567f118be2c9a0aba6760fc1 - languageName: node - linkType: hard - -"eslint-plugin-flowtype@npm:^8.0.3": - version: 8.0.3 - resolution: "eslint-plugin-flowtype@npm:8.0.3" - dependencies: - lodash: ^4.17.21 - string-natural-compare: ^3.0.1 - peerDependencies: - "@babel/plugin-syntax-flow": ^7.14.5 - "@babel/plugin-transform-react-jsx": ^7.14.9 - eslint: ^8.1.0 - checksum: 30e63c5357b0b5571f39afed51e59c140084f4aa53c106b1fd04f26da42b268908466daa6020b92943e71409bdaee1c67202515ed9012404d027cc92cb03cefa - languageName: node - linkType: hard - -"eslint-plugin-import@npm:^2.25.3": - version: 2.32.0 - resolution: "eslint-plugin-import@npm:2.32.0" - dependencies: - "@rtsao/scc": ^1.1.0 - array-includes: ^3.1.9 - array.prototype.findlastindex: ^1.2.6 - array.prototype.flat: ^1.3.3 - array.prototype.flatmap: ^1.3.3 - debug: ^3.2.7 - doctrine: ^2.1.0 - eslint-import-resolver-node: ^0.3.9 - eslint-module-utils: ^2.12.1 - hasown: ^2.0.2 - is-core-module: ^2.16.1 - is-glob: ^4.0.3 - minimatch: ^3.1.2 - object.fromentries: ^2.0.8 - object.groupby: ^1.0.3 - object.values: ^1.2.1 - semver: ^6.3.1 - string.prototype.trimend: ^1.0.9 - tsconfig-paths: ^3.15.0 - peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - checksum: 8cd40595b5e4346d3698eb577014b4b6d0ba57b7b9edf975be4f052a89330ec202d0cc5c3861d37ebeafa151b6264821410243889b0c31710911a6b625bcf76b - languageName: node - linkType: hard - -"eslint-plugin-jest@npm:^25.3.0": - version: 25.7.0 - resolution: "eslint-plugin-jest@npm:25.7.0" - dependencies: - "@typescript-eslint/experimental-utils": ^5.0.0 - peerDependencies: - "@typescript-eslint/eslint-plugin": ^4.0.0 || ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - "@typescript-eslint/eslint-plugin": - optional: true - jest: - optional: true - checksum: fc6da96131f4cbf33d15ef911ec8e600ccd71deb97d73c0ca340427cef7b01ff41a797e2e7d1e351abf97321a46ed0c0acff5ee8eeedac94961dd6dad1f718a9 - languageName: node - linkType: hard - -"eslint-plugin-jsx-a11y@npm:^6.5.1": - version: 6.10.2 - resolution: "eslint-plugin-jsx-a11y@npm:6.10.2" - dependencies: - aria-query: ^5.3.2 - array-includes: ^3.1.8 - array.prototype.flatmap: ^1.3.2 - ast-types-flow: ^0.0.8 - axe-core: ^4.10.0 - axobject-query: ^4.1.0 - damerau-levenshtein: ^1.0.8 - emoji-regex: ^9.2.2 - hasown: ^2.0.2 - jsx-ast-utils: ^3.3.5 - language-tags: ^1.0.9 - minimatch: ^3.1.2 - object.fromentries: ^2.0.8 - safe-regex-test: ^1.0.3 - string.prototype.includes: ^2.0.1 - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - checksum: 0cc861398fa26ada61ed5703eef5b335495fcb96253263dcd5e399488ff019a2636372021baacc040e3560d1a34bfcd5d5ad9f1754f44cd0509c956f7df94050 - languageName: node - linkType: hard - -"eslint-plugin-react-hooks@npm:^4.3.0": - version: 4.6.2 - resolution: "eslint-plugin-react-hooks@npm:4.6.2" - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - checksum: 395c433610f59577cfcf3f2e42bcb130436c8a0b3777ac64f441d88c5275f4fcfc89094cedab270f2822daf29af1079151a7a6579a8e9ea8cee66540ba0384c4 - languageName: node - linkType: hard - -"eslint-plugin-react@npm:^7.27.1": - version: 7.37.5 - resolution: "eslint-plugin-react@npm:7.37.5" - dependencies: - array-includes: ^3.1.8 - array.prototype.findlast: ^1.2.5 - array.prototype.flatmap: ^1.3.3 - array.prototype.tosorted: ^1.1.4 - doctrine: ^2.1.0 - es-iterator-helpers: ^1.2.1 - estraverse: ^5.3.0 - hasown: ^2.0.2 - jsx-ast-utils: ^2.4.1 || ^3.0.0 - minimatch: ^3.1.2 - object.entries: ^1.1.9 - object.fromentries: ^2.0.8 - object.values: ^1.2.1 - prop-types: ^15.8.1 - resolve: ^2.0.0-next.5 - semver: ^6.3.1 - string.prototype.matchall: ^4.0.12 - string.prototype.repeat: ^1.0.0 - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - checksum: 8675e7558e646e3c2fcb04bb60cfe416000b831ef0b363f0117838f5bfc799156113cb06058ad4d4b39fc730903b7360b05038da11093064ca37caf76b7cf2ca - languageName: node - linkType: hard - -"eslint-plugin-testing-library@npm:^5.0.1": - version: 5.11.1 - resolution: "eslint-plugin-testing-library@npm:5.11.1" - dependencies: - "@typescript-eslint/utils": ^5.58.0 - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - checksum: 9f3fc68ef9f13016a4381b33ab5dbffcc189e5de3eaeba184bcf7d2771faa7f54e59c04b652162fb1c0f83fb52428dd909db5450a25508b94be59eba69fcc990 - languageName: node - linkType: hard - -"eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.1": - version: 5.1.1 - resolution: "eslint-scope@npm:5.1.1" - dependencies: - esrecurse: ^4.3.0 - estraverse: ^4.1.1 - checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb - languageName: node - linkType: hard - -"eslint-scope@npm:^7.2.2": - version: 7.2.2 - resolution: "eslint-scope@npm:7.2.2" - dependencies: - esrecurse: ^4.3.0 - estraverse: ^5.2.0 - checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^2.1.0": - version: 2.1.0 - resolution: "eslint-visitor-keys@npm:2.1.0" - checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": - version: 3.4.3 - resolution: "eslint-visitor-keys@npm:3.4.3" - checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 - languageName: node - linkType: hard - -"eslint-webpack-plugin@npm:^3.1.1": - version: 3.2.0 - resolution: "eslint-webpack-plugin@npm:3.2.0" - dependencies: - "@types/eslint": ^7.29.0 || ^8.4.1 - jest-worker: ^28.0.2 - micromatch: ^4.0.5 - normalize-path: ^3.0.0 - schema-utils: ^4.0.0 - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - webpack: ^5.0.0 - checksum: 095034c35e773fdb21ec7e597ae1f8a6899679c290db29d8568ca94619e8c7f4971f0f9edccc8a965322ab8af9286c87205985a38f4fdcf17654aee7cd8bb7b5 - languageName: node - linkType: hard - -"eslint@npm:^8.3.0": - version: 8.57.1 - resolution: "eslint@npm:8.57.1" - dependencies: - "@eslint-community/eslint-utils": ^4.2.0 - "@eslint-community/regexpp": ^4.6.1 - "@eslint/eslintrc": ^2.1.4 - "@eslint/js": 8.57.1 - "@humanwhocodes/config-array": ^0.13.0 - "@humanwhocodes/module-importer": ^1.0.1 - "@nodelib/fs.walk": ^1.2.8 - "@ungap/structured-clone": ^1.2.0 - ajv: ^6.12.4 - chalk: ^4.0.0 - cross-spawn: ^7.0.2 - debug: ^4.3.2 - doctrine: ^3.0.0 - escape-string-regexp: ^4.0.0 - eslint-scope: ^7.2.2 - eslint-visitor-keys: ^3.4.3 - espree: ^9.6.1 - esquery: ^1.4.2 - esutils: ^2.0.2 - fast-deep-equal: ^3.1.3 - file-entry-cache: ^6.0.1 - find-up: ^5.0.0 - glob-parent: ^6.0.2 - globals: ^13.19.0 - graphemer: ^1.4.0 - ignore: ^5.2.0 - imurmurhash: ^0.1.4 - is-glob: ^4.0.0 - is-path-inside: ^3.0.3 - js-yaml: ^4.1.0 - json-stable-stringify-without-jsonify: ^1.0.1 - levn: ^0.4.1 - lodash.merge: ^4.6.2 - minimatch: ^3.1.2 - natural-compare: ^1.4.0 - optionator: ^0.9.3 - strip-ansi: ^6.0.1 - text-table: ^0.2.0 - bin: - eslint: bin/eslint.js - checksum: e2489bb7f86dd2011967759a09164e65744ef7688c310bc990612fc26953f34cc391872807486b15c06833bdff737726a23e9b4cdba5de144c311377dc41d91b - languageName: node - linkType: hard - -"espree@npm:^9.6.0, espree@npm:^9.6.1": - version: 9.6.1 - resolution: "espree@npm:9.6.1" - dependencies: - acorn: ^8.9.0 - acorn-jsx: ^5.3.2 - eslint-visitor-keys: ^3.4.1 - checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 - languageName: node - linkType: hard - -"esprima@npm:1.2.2": - version: 1.2.2 - resolution: "esprima@npm:1.2.2" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: 4f10006f0e315f2f7d8cf6630e465f183512f1ab2e862b11785a133ce37ed1696573deefb5256e510eaa4368342b13b393334477f6ccdcdb8f10e782b0f5e6dc - languageName: node - linkType: hard - -"esprima@npm:^4.0.0, esprima@npm:^4.0.1": - version: 4.0.1 - resolution: "esprima@npm:4.0.1" - bin: - esparse: ./bin/esparse.js - esvalidate: ./bin/esvalidate.js - checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 - languageName: node - linkType: hard - -"esquery@npm:^1.4.2": - version: 1.6.0 - resolution: "esquery@npm:1.6.0" - dependencies: - estraverse: ^5.1.0 - checksum: 08ec4fe446d9ab27186da274d979558557fbdbbd10968fa9758552482720c54152a5640e08b9009e5a30706b66aba510692054d4129d32d0e12e05bbc0b96fb2 - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: ^5.2.0 - checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 - languageName: node - linkType: hard - -"estraverse@npm:^4.1.1, estraverse@npm:^4.2.0": - version: 4.3.0 - resolution: "estraverse@npm:4.3.0" - checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 - languageName: node - linkType: hard - -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b - languageName: node - linkType: hard - -"estree-walker@npm:^0.6.1": - version: 0.6.1 - resolution: "estree-walker@npm:0.6.1" - checksum: 9d6f82a4921f11eec18f8089fb3cce6e53bcf45a8e545c42a2674d02d055fb30f25f90495f8be60803df6c39680c80dcee7f944526867eb7aa1fc9254883b23d - languageName: node - linkType: hard - -"estree-walker@npm:^1.0.1": - version: 1.0.1 - resolution: "estree-walker@npm:1.0.1" - checksum: 7e70da539691f6db03a08e7ce94f394ce2eef4180e136d251af299d41f92fb2d28ebcd9a6e393e3728d7970aeb5358705ddf7209d52fbcb2dd4693f95dcf925f - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 - languageName: node - linkType: hard - -"etag@npm:^1.8.1, etag@npm:~1.8.1": - version: 1.8.1 - resolution: "etag@npm:1.8.1" - checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff - languageName: node - linkType: hard - -"event-stream@npm:3.3.4": - version: 3.3.4 - resolution: "event-stream@npm:3.3.4" - dependencies: - duplexer: ~0.1.1 - from: ~0 - map-stream: ~0.1.0 - pause-stream: 0.0.11 - split: 0.3 - stream-combiner: ~0.0.4 - through: ~2.3.1 - checksum: 80b467820b6daf824d9fb4345d2daf115a056e5c104463f2e98534e92d196a27f2df5ea2aa085624db26f4c45698905499e881d13bc7c01f7a13eac85be72a22 - languageName: node - linkType: hard - -"eventemitter3@npm:^4.0.0": - version: 4.0.7 - resolution: "eventemitter3@npm:4.0.7" - checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 - languageName: node - linkType: hard - -"events@npm:^3.2.0": - version: 3.3.0 - resolution: "events@npm:3.3.0" - checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 - languageName: node - linkType: hard - -"execa@npm:^5.0.0": - version: 5.1.1 - resolution: "execa@npm:5.1.1" - dependencies: - cross-spawn: ^7.0.3 - get-stream: ^6.0.0 - human-signals: ^2.1.0 - is-stream: ^2.0.0 - merge-stream: ^2.0.0 - npm-run-path: ^4.0.1 - onetime: ^5.1.2 - signal-exit: ^3.0.3 - strip-final-newline: ^2.0.0 - checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 - languageName: node - linkType: hard - -"exit@npm:^0.1.2": - version: 0.1.2 - resolution: "exit@npm:0.1.2" - checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 - languageName: node - linkType: hard - -"expand-brackets@npm:^2.1.4": - version: 2.1.4 - resolution: "expand-brackets@npm:2.1.4" - 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 - checksum: 1781d422e7edfa20009e2abda673cadb040a6037f0bd30fcd7357304f4f0c284afd420d7622722ca4a016f39b6d091841ab57b401c1f7e2e5131ac65b9f14fa1 - languageName: node - linkType: hard - -"expect@npm:^27.5.1": - version: 27.5.1 - resolution: "expect@npm:27.5.1" - dependencies: - "@jest/types": ^27.5.1 - jest-get-type: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - checksum: b2c66beb52de53ef1872165aace40224e722bca3c2274c54cfa74b6d617d55cf0ccdbf36783ccd64dbea501b280098ed33fd0b207d4f15bc03cd3c7a24364a6a - languageName: node - linkType: hard - -"exponential-backoff@npm:^3.1.1": - version: 3.1.3 - resolution: "exponential-backoff@npm:3.1.3" - checksum: 471fdb70fd3d2c08a74a026973bdd4105b7832911f610ca67bbb74e39279411c1eed2f2a110c9d41c2edd89459ba58fdaba1c174beed73e7a42d773882dcff82 - languageName: node - linkType: hard - -"express@npm:^4.17.3": - version: 4.21.2 - resolution: "express@npm:4.21.2" - dependencies: - accepts: ~1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.3 - content-disposition: 0.5.4 - content-type: ~1.0.4 - cookie: 0.7.1 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: ~2.0.0 - escape-html: ~1.0.3 - etag: ~1.8.1 - finalhandler: 1.3.1 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.3 - methods: ~1.1.2 - on-finished: 2.4.1 - parseurl: ~1.3.3 - path-to-regexp: 0.1.12 - proxy-addr: ~2.0.7 - qs: 6.13.0 - range-parser: ~1.2.1 - safe-buffer: 5.2.1 - send: 0.19.0 - serve-static: 1.16.2 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: ~1.6.18 - utils-merge: 1.0.1 - vary: ~1.1.2 - checksum: 3aef1d355622732e20b8f3a7c112d4391d44e2131f4f449e1f273a309752a41abfad714e881f177645517cbe29b3ccdc10b35e7e25c13506114244a5b72f549d - languageName: node - linkType: hard - -"extend-shallow@npm:^2.0.1": - version: 2.0.1 - resolution: "extend-shallow@npm:2.0.1" - dependencies: - is-extendable: ^0.1.0 - checksum: 8fb58d9d7a511f4baf78d383e637bd7d2e80843bd9cd0853649108ea835208fb614da502a553acc30208e1325240bb7cc4a68473021612496bb89725483656d8 - languageName: node - linkType: hard - -"extend-shallow@npm:^3.0.0, extend-shallow@npm:^3.0.2": - version: 3.0.2 - resolution: "extend-shallow@npm:3.0.2" - dependencies: - assign-symbols: ^1.0.0 - is-extendable: ^1.0.1 - checksum: a920b0cd5838a9995ace31dfd11ab5e79bf6e295aa566910ce53dff19f4b1c0fda2ef21f26b28586c7a2450ca2b42d97bd8c0f5cec9351a819222bf861e02461 - languageName: node - linkType: hard - -"extglob@npm:^2.0.4": - version: 2.0.4 - resolution: "extglob@npm:2.0.4" - 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 - checksum: a41531b8934735b684cef5e8c5a01d0f298d7d384500ceca38793a9ce098125aab04ee73e2d75d5b2901bc5dddd2b64e1b5e3bf19139ea48bac52af4a92f1d00 - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d - languageName: node - linkType: hard - -"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": - version: 3.3.3 - resolution: "fast-glob@npm:3.3.3" - 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.8 - checksum: 0704d7b85c0305fd2cef37777337dfa26230fdd072dce9fb5c82a4b03156f3ffb8ed3e636033e65d45d2a5805a4e475825369a27404c0307f2db0c8eb3366fbd - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb - languageName: node - linkType: hard - -"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c - languageName: node - linkType: hard - -"fast-uri@npm:^3.0.1": - version: 3.1.0 - resolution: "fast-uri@npm:3.1.0" - checksum: daab0efd3548cc53d0db38ecc764d125773f8bd70c34552ff21abdc6530f26fa4cb1771f944222ca5e61a0a1a85d01a104848ff88c61736de445d97bd616ea7e - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.19.1 - resolution: "fastq@npm:1.19.1" - dependencies: - reusify: ^1.0.4 - checksum: 7691d1794fb84ad0ec2a185f10e00f0e1713b894e2c9c4d42f0bc0ba5f8c00e6e655a202074ca0b91b9c3d977aab7c30c41a8dc069fb5368576ac0054870a0e6 - languageName: node - linkType: hard - -"faye-websocket@npm:0.11.x, faye-websocket@npm:^0.11.3": - version: 0.11.4 - resolution: "faye-websocket@npm:0.11.4" - dependencies: - websocket-driver: ">=0.5.1" - checksum: d49a62caf027f871149fc2b3f3c7104dc6d62744277eb6f9f36e2d5714e847d846b9f7f0d0b7169b25a012e24a594cde11a93034b30732e4c683f20b8a5019fa - languageName: node - linkType: hard - -"fb-watchman@npm:^2.0.0": - version: 2.0.2 - resolution: "fb-watchman@npm:2.0.2" - dependencies: - bser: 2.1.1 - checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 - languageName: node - linkType: hard - -"fdir@npm:^6.5.0": - version: 6.5.0 - resolution: "fdir@npm:6.5.0" - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - checksum: bd537daa9d3cd53887eed35efa0eab2dbb1ca408790e10e024120e7a36c6e9ae2b33710cb8381e35def01bc9c1d7eaba746f886338413e68ff6ebaee07b9a6e8 - languageName: node - linkType: hard - -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" - dependencies: - flat-cache: ^3.0.4 - checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 - languageName: node - linkType: hard - -"file-loader@npm:^6.2.0": - version: 6.2.0 - resolution: "file-loader@npm:6.2.0" - dependencies: - loader-utils: ^2.0.0 - schema-utils: ^3.0.0 - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - checksum: faf43eecf233f4897b0150aaa874eeeac214e4f9de49738a9e0ef734a30b5260059e85b7edadf852b98e415f875bd5f12587768a93fd52aaf2e479ecf95fab20 - languageName: node - linkType: hard - -"file-uri-to-path@npm:1.0.0": - version: 1.0.0 - resolution: "file-uri-to-path@npm:1.0.0" - checksum: b648580bdd893a008c92c7ecc96c3ee57a5e7b6c4c18a9a09b44fb5d36d79146f8e442578bc0e173dc027adf3987e254ba1dfd6e3ec998b7c282873010502144 - languageName: node - linkType: hard - -"filelist@npm:^1.0.4": - version: 1.0.4 - resolution: "filelist@npm:1.0.4" - dependencies: - minimatch: ^5.0.1 - checksum: a303573b0821e17f2d5e9783688ab6fbfce5d52aaac842790ae85e704a6f5e4e3538660a63183d6453834dedf1e0f19a9dadcebfa3e926c72397694ea11f5160 - languageName: node - linkType: hard - -"filesize@npm:^8.0.6": - version: 8.0.7 - resolution: "filesize@npm:8.0.7" - checksum: 8603d27c5287b984cb100733640645e078f5f5ad65c6d913173e01fb99e09b0747828498fd86647685ccecb69be31f3587b9739ab1e50732116b2374aff4cbf9 - languageName: node - linkType: hard - -"fill-range@npm:^4.0.0": - version: 4.0.0 - resolution: "fill-range@npm:4.0.0" - dependencies: - extend-shallow: ^2.0.1 - is-number: ^3.0.0 - repeat-string: ^1.6.1 - to-regex-range: ^2.1.0 - checksum: dbb5102467786ab42bc7a3ec7380ae5d6bfd1b5177b2216de89e4a541193f8ba599a6db84651bd2c58c8921db41b8cc3d699ea83b477342d3ce404020f73c298 - languageName: node - linkType: hard - -"fill-range@npm:^7.1.1": - version: 7.1.1 - resolution: "fill-range@npm:7.1.1" - dependencies: - to-regex-range: ^5.0.1 - checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798 - languageName: node - linkType: hard - -"finalhandler@npm:1.1.2": - version: 1.1.2 - resolution: "finalhandler@npm:1.1.2" - 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 - checksum: 617880460c5138dd7ccfd555cb5dde4d8f170f4b31b8bd51e4b646bb2946c30f7db716428a1f2882d730d2b72afb47d1f67cc487b874cb15426f95753a88965e - languageName: node - linkType: hard - -"finalhandler@npm:1.3.1": - version: 1.3.1 - resolution: "finalhandler@npm:1.3.1" - dependencies: - debug: 2.6.9 - encodeurl: ~2.0.0 - escape-html: ~1.0.3 - on-finished: 2.4.1 - parseurl: ~1.3.3 - statuses: 2.0.1 - unpipe: ~1.0.0 - checksum: a8c58cd97c9cd47679a870f6833a7b417043f5a288cd6af6d0f49b476c874a506100303a128b6d3b654c3d74fa4ff2ffed68a48a27e8630cda5c918f2977dcf4 - languageName: node - linkType: hard - -"find-cache-dir@npm:^3.3.1": - version: 3.3.2 - resolution: "find-cache-dir@npm:3.3.2" - dependencies: - commondir: ^1.0.1 - make-dir: ^3.0.2 - pkg-dir: ^4.1.0 - checksum: 1e61c2e64f5c0b1c535bd85939ae73b0e5773142713273818cc0b393ee3555fb0fd44e1a5b161b8b6c3e03e98c2fcc9c227d784850a13a90a8ab576869576817 - languageName: node - linkType: hard - -"find-root@npm:^1.1.0": - version: 1.1.0 - resolution: "find-root@npm:1.1.0" - checksum: b2a59fe4b6c932eef36c45a048ae8f93c85640212ebe8363164814990ee20f154197505965f3f4f102efc33bfb1cbc26fd17c4a2fc739ebc51b886b137cbefaf - languageName: node - linkType: hard - -"find-up@npm:^3.0.0": - version: 3.0.0 - resolution: "find-up@npm:3.0.0" - dependencies: - locate-path: ^3.0.0 - checksum: 38eba3fe7a66e4bc7f0f5a1366dc25508b7cfc349f852640e3678d26ad9a6d7e2c43eff0a472287de4a9753ef58f066a0ea892a256fa3636ad51b3fe1e17fae9 - languageName: node - linkType: hard - -"find-up@npm:^4.0.0, find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: ^5.0.0 - path-exists: ^4.0.0 - checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 - languageName: node - linkType: hard - -"find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" - dependencies: - locate-path: ^6.0.0 - path-exists: ^4.0.0 - checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 - languageName: node - linkType: hard - -"flat-cache@npm:^3.0.4": - version: 3.2.0 - resolution: "flat-cache@npm:3.2.0" - dependencies: - flatted: ^3.2.9 - keyv: ^4.5.3 - rimraf: ^3.0.2 - checksum: e7e0f59801e288b54bee5cb9681e9ee21ee28ef309f886b312c9d08415b79fc0f24ac842f84356ce80f47d6a53de62197ce0e6e148dc42d5db005992e2a756ec - languageName: node - linkType: hard - -"flatted@npm:^3.2.9": - version: 3.3.3 - resolution: "flatted@npm:3.3.3" - checksum: 8c96c02fbeadcf4e8ffd0fa24983241e27698b0781295622591fc13585e2f226609d95e422bcf2ef044146ffacb6b68b1f20871454eddf75ab3caa6ee5f4a1fe - languageName: node - linkType: hard - -"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.15.6": - version: 1.15.11 - resolution: "follow-redirects@npm:1.15.11" - peerDependenciesMeta: - debug: - optional: true - checksum: 20bf55e9504f59e6cc3743ba27edb2ebf41edea1baab34799408f2c050f73f0c612728db21c691276296d2795ea8a812dc532a98e8793619fcab91abe06d017f - languageName: node - linkType: hard - -"for-each@npm:^0.3.3, for-each@npm:^0.3.5": - version: 0.3.5 - resolution: "for-each@npm:0.3.5" - dependencies: - is-callable: ^1.2.7 - checksum: 3c986d7e11f4381237cc98baa0a2f87eabe74719eee65ed7bed275163082b940ede19268c61d04c6260e0215983b12f8d885e3c8f9aa8c2113bf07c37051745c - languageName: node - linkType: hard - -"for-in@npm:^1.0.2": - version: 1.0.2 - resolution: "for-in@npm:1.0.2" - checksum: 09f4ae93ce785d253ac963d94c7f3432d89398bf25ac7a24ed034ca393bf74380bdeccc40e0f2d721a895e54211b07c8fad7132e8157827f6f7f059b70b4043d - languageName: node - linkType: hard - -"fork-ts-checker-webpack-plugin@npm:^6.5.0": - version: 6.5.3 - resolution: "fork-ts-checker-webpack-plugin@npm:6.5.3" - 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 - peerDependencies: - eslint: ">= 6" - typescript: ">= 2.7" - vue-template-compiler: "*" - webpack: ">= 4" - peerDependenciesMeta: - eslint: - optional: true - vue-template-compiler: - optional: true - checksum: 9732a49bfeed8fc23e6e8a59795fa7c238edeba91040a9b520db54b4d316dda27f9f1893d360e296fd0ad8930627d364417d28a8c7007fba60cc730ebfce4956 - languageName: node - linkType: hard - -"form-data@npm:^3.0.0": - version: 3.0.4 - resolution: "form-data@npm:3.0.4" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.8 - es-set-tostringtag: ^2.1.0 - hasown: ^2.0.2 - mime-types: ^2.1.35 - checksum: 989005f575b9a14a30144df1745ef60c64cf901e648ae198bf63e5caeaf8dacf595a85dfd56f90a845eceb14fe1bea58b3845e8171337a4cf72781fa19867efc - languageName: node - linkType: hard - -"form-data@npm:^4.0.4": - version: 4.0.5 - resolution: "form-data@npm:4.0.5" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.8 - es-set-tostringtag: ^2.1.0 - hasown: ^2.0.2 - mime-types: ^2.1.12 - checksum: af8328413c16d0cded5fccc975a44d227c5120fd46a9e81de8acf619d43ed838414cc6d7792195b30b248f76a65246949a129a4dadd148721948f90cd6d4fb69 - languageName: node - linkType: hard - -"forwarded@npm:0.2.0": - version: 0.2.0 - resolution: "forwarded@npm:0.2.0" - checksum: fd27e2394d8887ebd16a66ffc889dc983fbbd797d5d3f01087c020283c0f019a7d05ee85669383d8e0d216b116d720fc0cef2f6e9b7eb9f4c90c6e0bc7fd28e6 - languageName: node - linkType: hard - -"fraction.js@npm:^5.3.4": - version: 5.3.4 - resolution: "fraction.js@npm:5.3.4" - checksum: 6ac88ecfdb5fabe3566ae30f79828d448288efbb852cd43ad83afc961fb6923e1d77bc65fbcba8ccda10894114edd419581a050c73d61e368fdd4c3ff416a65a - languageName: node - linkType: hard - -"fragment-cache@npm:^0.2.1": - version: 0.2.1 - resolution: "fragment-cache@npm:0.2.1" - dependencies: - map-cache: ^0.2.2 - checksum: 1cbbd0b0116b67d5790175de0038a11df23c1cd2e8dcdbade58ebba5594c2d641dade6b4f126d82a7b4a6ffc2ea12e3d387dbb64ea2ae97cf02847d436f60fdc - languageName: node - linkType: hard - -"fresh@npm:0.5.2": - version: 0.5.2 - resolution: "fresh@npm:0.5.2" - checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 - languageName: node - linkType: hard - -"fresh@npm:^2.0.0": - version: 2.0.0 - resolution: "fresh@npm:2.0.0" - checksum: 38b9828352c6271e2a0dd8bdd985d0100dbbc4eb8b6a03286071dd6f7d96cfaacd06d7735701ad9a95870eb3f4555e67c08db1dcfe24c2e7bb87383c72fae1d2 - languageName: node - linkType: hard - -"from@npm:~0": - version: 0.1.7 - resolution: "from@npm:0.1.7" - checksum: b85125b7890489656eb2e4f208f7654a93ec26e3aefaf3bbbcc0d496fc1941e4405834fcc9fe7333192aa2187905510ace70417bbf9ac6f6f4784a731d986939 - languageName: node - linkType: hard - -"fs-extra@npm:^10.0.0": - version: 10.1.0 - resolution: "fs-extra@npm:10.1.0" - dependencies: - graceful-fs: ^4.2.0 - jsonfile: ^6.0.1 - universalify: ^2.0.0 - checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 - languageName: node - linkType: hard - -"fs-extra@npm:^9.0.0, fs-extra@npm:^9.0.1": - version: 9.1.0 - resolution: "fs-extra@npm:9.1.0" - dependencies: - at-least-node: ^1.0.0 - graceful-fs: ^4.2.0 - jsonfile: ^6.0.1 - universalify: ^2.0.0 - checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20 - languageName: node - linkType: hard - -"fs-minipass@npm:^3.0.0": - version: 3.0.3 - resolution: "fs-minipass@npm:3.0.3" - dependencies: - minipass: ^7.0.3 - checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 - languageName: node - linkType: hard - -"fs-monkey@npm:^1.0.4": - version: 1.1.0 - resolution: "fs-monkey@npm:1.1.0" - checksum: ebb6305a37ca4731ffe9aceae21be40992fe5384f7a25819a1d64d17c649e7eeac3fc9ad6269cad6fffc409df0f4583253c93a930549fd82d5f8aed46beb5b9b - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 - languageName: node - linkType: hard - -"fsevents@npm:^1.2.7": - version: 1.2.13 - resolution: "fsevents@npm:1.2.13" - dependencies: - bindings: ^1.5.0 - nan: ^2.12.1 - checksum: ae855aa737aaa2f9167e9f70417cf6e45a5cd11918e1fee9923709a0149be52416d765433b4aeff56c789b1152e718cd1b13ddec6043b78cdda68260d86383c1 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": - version: 2.3.3 - resolution: "fsevents@npm:2.3.3" - dependencies: - node-gyp: latest - checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@^1.2.7#~builtin": - version: 1.2.13 - resolution: "fsevents@patch:fsevents@npm%3A1.2.13#~builtin::version=1.2.13&hash=18f3a7" - dependencies: - bindings: ^1.5.0 - nan: ^2.12.1 - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": - version: 2.3.3 - resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=18f3a7" - dependencies: - node-gyp: latest - conditions: os=darwin - languageName: node - linkType: hard - -"function-bind@npm:^1.1.2": - version: 1.1.2 - resolution: "function-bind@npm:1.1.2" - checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 - languageName: node - linkType: hard - -"function.prototype.name@npm:^1.1.6, function.prototype.name@npm:^1.1.8": - version: 1.1.8 - resolution: "function.prototype.name@npm:1.1.8" - dependencies: - call-bind: ^1.0.8 - call-bound: ^1.0.3 - define-properties: ^1.2.1 - functions-have-names: ^1.2.3 - hasown: ^2.0.2 - is-callable: ^1.2.7 - checksum: 3a366535dc08b25f40a322efefa83b2da3cd0f6da41db7775f2339679120ef63b6c7e967266182609e655b8f0a8f65596ed21c7fd72ad8bd5621c2340edd4010 - languageName: node - linkType: hard - -"functions-have-names@npm:^1.2.3": - version: 1.2.3 - resolution: "functions-have-names@npm:1.2.3" - checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 - languageName: node - linkType: hard - -"generator-function@npm:^2.0.0": - version: 2.0.1 - resolution: "generator-function@npm:2.0.1" - checksum: 3bf87f7b0230de5d74529677e6c3ceb3b7b5d9618b5a22d92b45ce3876defbaf5a77791b25a61b0fa7d13f95675b5ff67a7769f3b9af33f096e34653519e873d - languageName: node - linkType: hard - -"gensync@npm:^1.0.0-beta.2": - version: 1.0.0-beta.2 - resolution: "gensync@npm:1.0.0-beta.2" - checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.5": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0": - version: 1.3.1 - resolution: "get-intrinsic@npm:1.3.1" - dependencies: - async-function: ^1.0.0 - async-generator-function: ^1.0.0 - call-bind-apply-helpers: ^1.0.2 - es-define-property: ^1.0.1 - es-errors: ^1.3.0 - es-object-atoms: ^1.1.1 - function-bind: ^1.1.2 - generator-function: ^2.0.0 - get-proto: ^1.0.1 - gopd: ^1.2.0 - has-symbols: ^1.1.0 - hasown: ^2.0.2 - math-intrinsics: ^1.1.0 - checksum: c02b3b6a445f9cd53e14896303794ac60f9751f58a69099127248abdb0251957174c6524245fc68579dc8e6a35161d3d94c93e665f808274716f4248b269436a - languageName: node - linkType: hard - -"get-own-enumerable-property-symbols@npm:^3.0.0": - version: 3.0.2 - resolution: "get-own-enumerable-property-symbols@npm:3.0.2" - checksum: 8f0331f14159f939830884799f937343c8c0a2c330506094bc12cbee3665d88337fe97a4ea35c002cc2bdba0f5d9975ad7ec3abb925015cdf2a93e76d4759ede - languageName: node - linkType: hard - -"get-package-type@npm:^0.1.0": - version: 0.1.0 - resolution: "get-package-type@npm:0.1.0" - checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 - languageName: node - linkType: hard - -"get-proto@npm:^1.0.0, get-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "get-proto@npm:1.0.1" - dependencies: - dunder-proto: ^1.0.1 - es-object-atoms: ^1.0.0 - checksum: 4fc96afdb58ced9a67558698b91433e6b037aaa6f1493af77498d7c85b141382cf223c0e5946f334fb328ee85dfe6edd06d218eaf09556f4bc4ec6005d7f5f7b - languageName: node - linkType: hard - -"get-stream@npm:^6.0.0": - version: 6.0.1 - resolution: "get-stream@npm:6.0.1" - checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad - languageName: node - linkType: hard - -"get-symbol-description@npm:^1.1.0": - version: 1.1.0 - resolution: "get-symbol-description@npm:1.1.0" - dependencies: - call-bound: ^1.0.3 - es-errors: ^1.3.0 - get-intrinsic: ^1.2.6 - checksum: 655ed04db48ee65ef2ddbe096540d4405e79ba0a7f54225775fef43a7e2afcb93a77d141c5f05fdef0afce2eb93bcbfb3597142189d562ac167ff183582683cd - languageName: node - linkType: hard - -"get-value@npm:^2.0.3, get-value@npm:^2.0.6": - version: 2.0.6 - resolution: "get-value@npm:2.0.6" - checksum: 5c3b99cb5398ea8016bf46ff17afc5d1d286874d2ad38ca5edb6e87d75c0965b0094cb9a9dddef2c59c23d250702323539a7fbdd870620db38c7e7d7ec87c1eb - languageName: node - linkType: hard - -"glob-parent@npm:^3.1.0": - version: 3.1.0 - resolution: "glob-parent@npm:3.1.0" - dependencies: - is-glob: ^3.1.0 - path-dirname: ^1.0.0 - checksum: 653d559237e89a11b9934bef3f392ec42335602034c928590544d383ff5ef449f7b12f3cfa539708e74bc0a6c28ab1fe51d663cc07463cdf899ba92afd85a855 - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: ^4.0.1 - checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e - languageName: node - linkType: hard - -"glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: ^4.0.3 - checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 - languageName: node - linkType: hard - -"glob-to-regexp@npm:^0.4.1": - version: 0.4.1 - resolution: "glob-to-regexp@npm:0.4.1" - checksum: e795f4e8f06d2a15e86f76e4d92751cf8bbfcf0157cea5c2f0f35678a8195a750b34096b1256e436f0cebc1883b5ff0888c47348443e69546a5a87f9e1eb1167 - languageName: node - linkType: hard - -"glob@npm:^13.0.0": - version: 13.0.0 - resolution: "glob@npm:13.0.0" - dependencies: - minimatch: ^10.1.1 - minipass: ^7.1.2 - path-scurry: ^2.0.0 - checksum: 963730222b0acc85a0d2616c08ba3a5d5b5f33fbf69182791967b8a02245db505577a6fc19836d5d58e1cbbfb414ad4f62f605a0372ab05cd9e6998efe944369 - languageName: node - linkType: hard - -"glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^3.1.1 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 - languageName: node - linkType: hard - -"global-modules@npm:^2.0.0": - version: 2.0.0 - resolution: "global-modules@npm:2.0.0" - dependencies: - global-prefix: ^3.0.0 - checksum: d6197f25856c878c2fb5f038899f2dca7cbb2f7b7cf8999660c0104972d5cfa5c68b5a0a77fa8206bb536c3903a4615665acb9709b4d80846e1bb47eaef65430 - languageName: node - linkType: hard - -"global-prefix@npm:^3.0.0": - version: 3.0.0 - resolution: "global-prefix@npm:3.0.0" - dependencies: - ini: ^1.3.5 - kind-of: ^6.0.2 - which: ^1.3.1 - checksum: 8a82fc1d6f22c45484a4e34656cc91bf021a03e03213b0035098d605bfc612d7141f1e14a21097e8a0413b4884afd5b260df0b6a25605ce9d722e11f1df2881d - languageName: node - linkType: hard - -"globals@npm:^13.19.0": - version: 13.24.0 - resolution: "globals@npm:13.24.0" - dependencies: - type-fest: ^0.20.2 - checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c - languageName: node - linkType: hard - -"globalthis@npm:^1.0.4": - version: 1.0.4 - resolution: "globalthis@npm:1.0.4" - dependencies: - define-properties: ^1.2.1 - gopd: ^1.0.1 - checksum: 39ad667ad9f01476474633a1834a70842041f70a55571e8dcef5fb957980a92da5022db5430fca8aecc5d47704ae30618c0bc877a579c70710c904e9ef06108a - languageName: node - linkType: hard - -"globby@npm:^11.0.1, globby@npm:^11.0.3, globby@npm:^11.0.4, globby@npm:^11.1.0": - version: 11.1.0 - resolution: "globby@npm:11.1.0" - dependencies: - array-union: ^2.1.0 - dir-glob: ^3.0.1 - fast-glob: ^3.2.9 - ignore: ^5.2.0 - merge2: ^1.4.1 - slash: ^3.0.0 - checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 - languageName: node - linkType: hard - -"gopd@npm:^1.0.1, gopd@npm:^1.2.0": - version: 1.2.0 - resolution: "gopd@npm:1.2.0" - checksum: cc6d8e655e360955bdccaca51a12a474268f95bb793fc3e1f2bdadb075f28bfd1fd988dab872daf77a61d78cbaf13744bc8727a17cfb1d150d76047d805375f3 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": - version: 4.2.11 - resolution: "graceful-fs@npm:4.2.11" - checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 - languageName: node - linkType: hard - -"graphemer@npm:^1.4.0": - version: 1.4.0 - resolution: "graphemer@npm:1.4.0" - checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 - languageName: node - linkType: hard - -"gzip-size@npm:^6.0.0": - version: 6.0.0 - resolution: "gzip-size@npm:6.0.0" - dependencies: - duplexer: ^0.1.2 - checksum: 2df97f359696ad154fc171dcb55bc883fe6e833bca7a65e457b9358f3cb6312405ed70a8da24a77c1baac0639906cd52358dc0ce2ec1a937eaa631b934c94194 - languageName: node - linkType: hard - -"handle-thing@npm:^2.0.0": - version: 2.0.1 - resolution: "handle-thing@npm:2.0.1" - checksum: 68071f313062315cd9dce55710e9496873945f1dd425107007058fc1629f93002a7649fcc3e464281ce02c7e809a35f5925504ab8105d972cf649f1f47cb7d6c - languageName: node - linkType: hard - -"harmony-reflect@npm:^1.4.6": - version: 1.6.2 - resolution: "harmony-reflect@npm:1.6.2" - checksum: 2e5bae414cd2bfae5476147f9935dc69ee9b9a413206994dcb94c5b3208d4555da3d4313aff6fd14bd9991c1e3ef69cdda5c8fac1eb1d7afc064925839339b8c - languageName: node - linkType: hard - -"has-bigints@npm:^1.0.2": - version: 1.1.0 - resolution: "has-bigints@npm:1.1.0" - checksum: 79730518ae02c77e4af6a1d1a0b6a2c3e1509785532771f9baf0241e83e36329542c3d7a0e723df8cbc85f74eff4f177828a2265a01ba576adbdc2d40d86538b - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad - languageName: node - linkType: hard - -"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": - version: 1.0.2 - resolution: "has-property-descriptors@npm:1.0.2" - dependencies: - es-define-property: ^1.0.0 - checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3 - languageName: node - linkType: hard - -"has-proto@npm:^1.2.0": - version: 1.2.0 - resolution: "has-proto@npm:1.2.0" - dependencies: - dunder-proto: ^1.0.0 - checksum: f55010cb94caa56308041d77967c72a02ffd71386b23f9afa8447e58bc92d49d15c19bf75173713468e92fe3fb1680b03b115da39c21c32c74886d1d50d3e7ff - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "has-symbols@npm:1.1.0" - checksum: b2316c7302a0e8ba3aaba215f834e96c22c86f192e7310bdf689dd0e6999510c89b00fbc5742571507cebf25764d68c988b3a0da217369a73596191ac0ce694b - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.2": - version: 1.0.2 - resolution: "has-tostringtag@npm:1.0.2" - dependencies: - has-symbols: ^1.0.3 - checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d - languageName: node - linkType: hard - -"has-value@npm:^0.3.1": - version: 0.3.1 - resolution: "has-value@npm:0.3.1" - dependencies: - get-value: ^2.0.3 - has-values: ^0.1.4 - isobject: ^2.0.0 - checksum: 29e2a1e6571dad83451b769c7ce032fce6009f65bccace07c2962d3ad4d5530b6743d8f3229e4ecf3ea8e905d23a752c5f7089100c1f3162039fa6dc3976558f - languageName: node - linkType: hard - -"has-value@npm:^1.0.0": - version: 1.0.0 - resolution: "has-value@npm:1.0.0" - dependencies: - get-value: ^2.0.6 - has-values: ^1.0.0 - isobject: ^3.0.0 - checksum: b9421d354e44f03d3272ac39fd49f804f19bc1e4fa3ceef7745df43d6b402053f828445c03226b21d7d934a21ac9cf4bc569396dc312f496ddff873197bbd847 - languageName: node - linkType: hard - -"has-values@npm:^0.1.4": - version: 0.1.4 - resolution: "has-values@npm:0.1.4" - checksum: ab1c4bcaf811ccd1856c11cfe90e62fca9e2b026ebe474233a3d282d8d67e3b59ed85b622c7673bac3db198cb98bd1da2b39300a2f98e453729b115350af49bc - languageName: node - linkType: hard - -"has-values@npm:^1.0.0": - version: 1.0.0 - resolution: "has-values@npm:1.0.0" - dependencies: - is-number: ^3.0.0 - kind-of: ^4.0.0 - checksum: 77e6693f732b5e4cf6c38dfe85fdcefad0fab011af74995c3e83863fabf5e3a836f406d83565816baa0bc0a523c9410db8b990fe977074d61aeb6d8f4fcffa11 - languageName: node - linkType: hard - -"hasown@npm:^2.0.0, hasown@npm:^2.0.2": - version: 2.0.2 - resolution: "hasown@npm:2.0.2" - dependencies: - function-bind: ^1.1.2 - checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db - languageName: node - linkType: hard - -"he@npm:^1.2.0": - version: 1.2.0 - resolution: "he@npm:1.2.0" - bin: - he: bin/he - checksum: 3d4d6babccccd79c5c5a3f929a68af33360d6445587d628087f39a965079d84f18ce9c3d3f917ee1e3978916fc833bb8b29377c3b403f919426f91bc6965e7a7 - languageName: node - linkType: hard - -"hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": - version: 3.3.2 - resolution: "hoist-non-react-statics@npm:3.3.2" - dependencies: - react-is: ^16.7.0 - checksum: b1538270429b13901ee586aa44f4cc3ecd8831c061d06cb8322e50ea17b3f5ce4d0e2e66394761e6c8e152cd8c34fb3b4b690116c6ce2bd45b18c746516cb9e8 - languageName: node - linkType: hard - -"hoopy@npm:^0.1.4": - version: 0.1.4 - resolution: "hoopy@npm:0.1.4" - checksum: cfa60c7684c5e1ee4efe26e167bc54b73f839ffb59d1d44a5c4bf891e26b4f5bcc666555219a98fec95508fea4eda3a79540c53c05cc79afc1f66f9a238f4d9e - languageName: node - linkType: hard - -"hpack.js@npm:^2.1.6": - version: 2.1.6 - resolution: "hpack.js@npm:2.1.6" - dependencies: - inherits: ^2.0.1 - obuf: ^1.0.0 - readable-stream: ^2.0.1 - wbuf: ^1.1.0 - checksum: 2de144115197967ad6eeee33faf41096c6ba87078703c5cb011632dcfbffeb45784569e0cf02c317bd79c48375597c8ec88c30fff5bb0b023e8f654fb6e9c06e - languageName: node - linkType: hard - -"html-encoding-sniffer@npm:^2.0.1": - version: 2.0.1 - resolution: "html-encoding-sniffer@npm:2.0.1" - dependencies: - whatwg-encoding: ^1.0.5 - checksum: bf30cce461015ed7e365736fcd6a3063c7bc016a91f74398ef6158886970a96333938f7c02417ab3c12aa82e3e53b40822145facccb9ddfbcdc15a879ae4d7ba - languageName: node - linkType: hard - -"html-entities@npm:^2.1.0, html-entities@npm:^2.3.2": - version: 2.6.0 - resolution: "html-entities@npm:2.6.0" - checksum: 720643f7954019c80911430a7df2728524c07080edfe812610bfc5d8191cd772b470bee0ee151bf7426679314ae53cf28a1c845d702123714e625a8565b26567 - languageName: node - linkType: hard - -"html-escaper@npm:^2.0.0": - version: 2.0.2 - resolution: "html-escaper@npm:2.0.2" - checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 - languageName: node - linkType: hard - -"html-minifier-terser@npm:^6.0.2": - version: 6.1.0 - resolution: "html-minifier-terser@npm:6.1.0" - dependencies: - camel-case: ^4.1.2 - clean-css: ^5.2.2 - commander: ^8.3.0 - he: ^1.2.0 - param-case: ^3.0.4 - relateurl: ^0.2.7 - terser: ^5.10.0 - bin: - html-minifier-terser: cli.js - checksum: ac52c14006476f773204c198b64838477859dc2879490040efab8979c0207424da55d59df7348153f412efa45a0840a1ca3c757bf14767d23a15e3e389d37a93 - languageName: node - linkType: hard - -"html-webpack-plugin@npm:^5.5.0": - version: 5.6.5 - resolution: "html-webpack-plugin@npm:5.6.5" - dependencies: - "@types/html-minifier-terser": ^6.0.0 - html-minifier-terser: ^6.0.2 - lodash: ^4.17.21 - pretty-error: ^4.0.0 - tapable: ^2.0.0 - peerDependencies: - "@rspack/core": 0.x || 1.x - webpack: ^5.20.0 - peerDependenciesMeta: - "@rspack/core": - optional: true - webpack: - optional: true - checksum: 74fa9b1a25cb1e5434d22bbc7cce8d7a182f2db9061accf8b535cdb676e251bd0d9f3d7efd6aaab0988157acc8c8349a435c6fd0d4f2c21f5d24c2b3c5c9f611 - languageName: node - linkType: hard - -"htmlparser2@npm:^6.1.0": - version: 6.1.0 - resolution: "htmlparser2@npm:6.1.0" - dependencies: - domelementtype: ^2.0.1 - domhandler: ^4.0.0 - domutils: ^2.5.2 - entities: ^2.0.0 - checksum: 81a7b3d9c3bb9acb568a02fc9b1b81ffbfa55eae7f1c41ae0bf840006d1dbf54cb3aa245b2553e2c94db674840a9f0fdad7027c9a9d01a062065314039058c4e - languageName: node - linkType: hard - -"http-auth@npm:3.1.x": - version: 3.1.3 - resolution: "http-auth@npm:3.1.3" - dependencies: - apache-crypt: ^1.1.2 - apache-md5: ^1.0.6 - bcryptjs: ^2.3.0 - uuid: ^3.0.0 - checksum: 8d7bf987dea5ff50979e89a52deaf27fffefe5e7a36206ea3d3e17bd002c4b12a49d1c66b7ef105ee8d5daa8fc6e09470728b45419685cb71fde34a51e888ff5 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.1": - version: 4.2.0 - resolution: "http-cache-semantics@npm:4.2.0" - checksum: 7a7246ddfce629f96832791176fd643589d954e6f3b49548dadb4290451961237fab8fcea41cd2008fe819d95b41c1e8b97f47d088afc0a1c81705287b4ddbcc - languageName: node - linkType: hard - -"http-deceiver@npm:^1.2.7": - version: 1.2.7 - resolution: "http-deceiver@npm:1.2.7" - checksum: 64d7d1ae3a6933eb0e9a94e6f27be4af45a53a96c3c34e84ff57113787105a89fff9d1c3df263ef63add823df019b0e8f52f7121e32393bb5ce9a713bf100b41 - languageName: node - linkType: hard - -"http-errors@npm:2.0.0": - version: 2.0.0 - resolution: "http-errors@npm:2.0.0" - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - checksum: 9b0a3782665c52ce9dc658a0d1560bcb0214ba5699e4ea15aefb2a496e2ca83db03ebc42e1cce4ac1f413e4e0d2d736a3fd755772c556a9a06853ba2a0b7d920 - languageName: node - linkType: hard - -"http-errors@npm:^2.0.0": - version: 2.0.1 - resolution: "http-errors@npm:2.0.1" - dependencies: - depd: ~2.0.0 - inherits: ~2.0.4 - setprototypeof: ~1.2.0 - statuses: ~2.0.2 - toidentifier: ~1.0.1 - checksum: 155d1a100a06e4964597013109590b97540a177b69c3600bbc93efc746465a99a2b718f43cdf76b3791af994bbe3a5711002046bf668cdc007ea44cea6df7ccd - languageName: node - linkType: hard - -"http-errors@npm:~1.6.2": - version: 1.6.3 - resolution: "http-errors@npm:1.6.3" - dependencies: - depd: ~1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: ">= 1.4.0 < 2" - checksum: a9654ee027e3d5de305a56db1d1461f25709ac23267c6dc28cdab8323e3f96caa58a9a6a5e93ac15d7285cee0c2f019378c3ada9026e7fe19c872d695f27de7c - languageName: node - linkType: hard - -"http-parser-js@npm:>=0.5.1": - version: 0.5.10 - resolution: "http-parser-js@npm:0.5.10" - checksum: 1038177c5f114860345ce7c19223d2cdd9a103265bd897bab13343c9eff4deef60f7956a674485f1234ffc9b19fb4b97f0c20a5848cfc9ccbf5d3c438d89ae89 - languageName: node - linkType: hard - -"http-proxy-agent@npm:^4.0.1": - version: 4.0.1 - resolution: "http-proxy-agent@npm:4.0.1" - dependencies: - "@tootallnate/once": 1 - agent-base: 6 - debug: 4 - checksum: c6a5da5a1929416b6bbdf77b1aca13888013fe7eb9d59fc292e25d18e041bb154a8dfada58e223fc7b76b9b2d155a87e92e608235201f77d34aa258707963a82 - languageName: node - linkType: hard - -"http-proxy-agent@npm:^7.0.0": - version: 7.0.2 - resolution: "http-proxy-agent@npm:7.0.2" - dependencies: - agent-base: ^7.1.0 - debug: ^4.3.4 - checksum: 670858c8f8f3146db5889e1fa117630910101db601fff7d5a8aa637da0abedf68c899f03d3451cac2f83bcc4c3d2dabf339b3aa00ff8080571cceb02c3ce02f3 - languageName: node - linkType: hard - -"http-proxy-middleware@npm:^2.0.3": - version: 2.0.9 - resolution: "http-proxy-middleware@npm:2.0.9" - 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 - peerDependencies: - "@types/express": ^4.17.13 - peerDependenciesMeta: - "@types/express": - optional: true - checksum: 0ea88609b9c13fa03b89f8e6b85bd5c537027ec6990005dd81a7fbb3e73fcf8d6a6e3db2b57b1c6cddbcda80965704584dc6291d0e721b2700198c4e59ee0d0b - languageName: node - linkType: hard - -"http-proxy@npm:^1.18.1": - version: 1.18.1 - resolution: "http-proxy@npm:1.18.1" - dependencies: - eventemitter3: ^4.0.0 - follow-redirects: ^1.0.0 - requires-port: ^1.0.0 - checksum: f5bd96bf83e0b1e4226633dbb51f8b056c3e6321917df402deacec31dd7fe433914fc7a2c1831cf7ae21e69c90b3a669b8f434723e9e8b71fd68afe30737b6a5 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: 6 - debug: 4 - checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^7.0.1": - version: 7.0.6 - resolution: "https-proxy-agent@npm:7.0.6" - dependencies: - agent-base: ^7.1.2 - debug: 4 - checksum: b882377a120aa0544846172e5db021fa8afbf83fea2a897d397bd2ddd8095ab268c24bc462f40a15f2a8c600bf4aa05ce52927f70038d4014e68aefecfa94e8d - languageName: node - linkType: hard - -"human-signals@npm:^2.1.0": - version: 2.1.0 - resolution: "human-signals@npm:2.1.0" - checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 - languageName: node - linkType: hard - -"hyphenate-style-name@npm:^1.0.3": - version: 1.1.0 - resolution: "hyphenate-style-name@npm:1.1.0" - checksum: b9ed74e29181d96bd58a2d0e62fc4a19879db591dba268275829ff0ae595fcdf11faafaeaa63330a45c3004664d7db1f0fc7cdb372af8ee4615ed8260302c207 - languageName: node - linkType: hard - -"iconv-lite@npm:0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: ">= 2.1.2 < 3" - checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 - languageName: node - linkType: hard - -"iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: ">= 2.1.2 < 3.0.0" - checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf - languageName: node - linkType: hard - -"icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": - version: 5.1.0 - resolution: "icss-utils@npm:5.1.0" - peerDependencies: - postcss: ^8.1.0 - checksum: 5c324d283552b1269cfc13a503aaaa172a280f914e5b81544f3803bc6f06a3b585fb79f66f7c771a2c052db7982c18bf92d001e3b47282e3abbbb4c4cc488d68 - languageName: node - linkType: hard - -"idb@npm:^7.0.1": - version: 7.1.1 - resolution: "idb@npm:7.1.1" - checksum: 1973c28d53c784b177bdef9f527ec89ec239ec7cf5fcbd987dae75a16c03f5b7dfcc8c6d3285716fd0309dd57739805390bd9f98ce23b1b7d8849a3b52de8d56 - languageName: node - linkType: hard - -"identity-obj-proxy@npm:^3.0.0": - version: 3.0.0 - resolution: "identity-obj-proxy@npm:3.0.0" - dependencies: - harmony-reflect: ^1.4.6 - checksum: 97559f8ea2aeaa1a880d279d8c49550dce01148321e00a2102cda5ddf9ce622fa1d7f3efc7bed63458af78889de888fdaebaf31c816312298bb3fdd0ef8aaf2c - languageName: node - linkType: hard - -"ignore@npm:^5.2.0": - version: 5.3.2 - resolution: "ignore@npm:5.3.2" - checksum: 2acfd32a573260ea522ea0bfeff880af426d68f6831f973129e2ba7363f422923cf53aab62f8369cbf4667c7b25b6f8a3761b34ecdb284ea18e87a5262a865be - languageName: node - linkType: hard - -"immer@npm:^9.0.7": - version: 9.0.21 - resolution: "immer@npm:9.0.21" - checksum: 70e3c274165995352f6936695f0ef4723c52c92c92dd0e9afdfe008175af39fa28e76aafb3a2ca9d57d1fb8f796efc4dd1e1cc36f18d33fa5b74f3dfb0375432 - languageName: node - linkType: hard - -"import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1": - version: 3.3.1 - resolution: "import-fresh@npm:3.3.1" - dependencies: - parent-module: ^1.0.0 - resolve-from: ^4.0.0 - checksum: a06b19461b4879cc654d46f8a6244eb55eb053437afd4cbb6613cad6be203811849ed3e4ea038783092879487299fda24af932b86bdfff67c9055ba3612b8c87 - languageName: node - linkType: hard - -"import-local@npm:^3.0.2": - version: 3.2.0 - resolution: "import-local@npm:3.2.0" - dependencies: - pkg-dir: ^4.2.0 - resolve-cwd: ^3.0.0 - bin: - import-local-fixture: fixtures/cli.js - checksum: 0b0b0b412b2521739fbb85eeed834a3c34de9bc67e670b3d0b86248fc460d990a7b116ad056c084b87a693ef73d1f17268d6a5be626bb43c998a8b1c8a230004 - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: ^1.3.0 - wrappy: 1 - checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3, inherits@npm:~2.0.4": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 - languageName: node - linkType: hard - -"inherits@npm:2.0.3": - version: 2.0.3 - resolution: "inherits@npm:2.0.3" - checksum: 78cb8d7d850d20a5e9a7f3620db31483aa00ad5f722ce03a55b110e5a723539b3716a3b463e2b96ce3fe286f33afc7c131fa2f91407528ba80cea98a7545d4c0 - languageName: node - linkType: hard - -"ini@npm:^1.3.5": - version: 1.3.8 - resolution: "ini@npm:1.3.8" - checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 - languageName: node - linkType: hard - -"internal-slot@npm:^1.1.0": - version: 1.1.0 - resolution: "internal-slot@npm:1.1.0" - dependencies: - es-errors: ^1.3.0 - hasown: ^2.0.2 - side-channel: ^1.1.0 - checksum: 8e0991c2d048cc08dab0a91f573c99f6a4215075887517ea4fa32203ce8aea60fa03f95b177977fa27eb502e5168366d0f3e02c762b799691411d49900611861 - languageName: node - linkType: hard - -"ip-address@npm:^10.0.1": - version: 10.1.0 - resolution: "ip-address@npm:10.1.0" - checksum: 76b1abcdf52a32e2e05ca1f202f3a8ab8547e5651a9233781b330271bd7f1a741067748d71c4cbb9d9906d9f1fa69e7ddc8b4a11130db4534fdab0e908c84e0d - languageName: node - linkType: hard - -"ipaddr.js@npm:1.9.1": - version: 1.9.1 - resolution: "ipaddr.js@npm:1.9.1" - checksum: f88d3825981486f5a1942414c8d77dd6674dd71c065adcfa46f578d677edcb99fda25af42675cb59db492fdf427b34a5abfcde3982da11a8fd83a500b41cfe77 - languageName: node - linkType: hard - -"ipaddr.js@npm:^2.0.1": - version: 2.2.0 - resolution: "ipaddr.js@npm:2.2.0" - checksum: 770ba8451fd9bf78015e8edac0d5abd7a708cbf75f9429ca9147a9d2f3a2d60767cd5de2aab2b1e13ca6e4445bdeff42bf12ef6f151c07a5c6cf8a44328e2859 - languageName: node - linkType: hard - -"is-accessor-descriptor@npm:^1.0.1": - version: 1.0.1 - resolution: "is-accessor-descriptor@npm:1.0.1" - dependencies: - hasown: ^2.0.0 - checksum: 8db44c02230a5e9b9dec390a343178791f073d5d5556a400527d2fd67a72d93b226abab2bd4123305c268f5dc22831bfdbd38430441fda82ea9e0b95ddc6b267 - languageName: node - linkType: hard - -"is-arguments@npm:^1.1.1": - version: 1.2.0 - resolution: "is-arguments@npm:1.2.0" - dependencies: - call-bound: ^1.0.2 - has-tostringtag: ^1.0.2 - checksum: aae9307fedfe2e5be14aebd0f48a9eeedf6b8c8f5a0b66257b965146d1e94abdc3f08e3dce3b1d908e1fa23c70039a88810ee1d753905758b9b6eebbab0bafeb - languageName: node - linkType: hard - -"is-array-buffer@npm:^3.0.2, is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": - version: 3.0.5 - resolution: "is-array-buffer@npm:3.0.5" - dependencies: - call-bind: ^1.0.8 - call-bound: ^1.0.3 - get-intrinsic: ^1.2.6 - checksum: f137a2a6e77af682cdbffef1e633c140cf596f72321baf8bba0f4ef22685eb4339dde23dfe9e9ca430b5f961dee4d46577dcf12b792b68518c8449b134fb9156 - languageName: node - linkType: hard - -"is-arrayish@npm:^0.2.1": - version: 0.2.1 - resolution: "is-arrayish@npm:0.2.1" - checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f - languageName: node - linkType: hard - -"is-async-function@npm:^2.0.0": - version: 2.1.1 - resolution: "is-async-function@npm:2.1.1" - dependencies: - async-function: ^1.0.0 - call-bound: ^1.0.3 - get-proto: ^1.0.1 - has-tostringtag: ^1.0.2 - safe-regex-test: ^1.1.0 - checksum: 9bece45133da26636488ca127d7686b85ad3ca18927e2850cff1937a650059e90be1c71a48623f8791646bb7a241b0cabf602a0b9252dcfa5ab273f2399000e6 - languageName: node - linkType: hard - -"is-bigint@npm:^1.1.0": - version: 1.1.0 - resolution: "is-bigint@npm:1.1.0" - dependencies: - has-bigints: ^1.0.2 - checksum: ee1544f0e664f253306786ed1dce494b8cf242ef415d6375d8545b4d8816b0f054bd9f948a8988ae2c6325d1c28260dd02978236b2f7b8fb70dfc4838a6c9fa7 - languageName: node - linkType: hard - -"is-binary-path@npm:^1.0.0": - version: 1.0.1 - resolution: "is-binary-path@npm:1.0.1" - dependencies: - binary-extensions: ^1.0.0 - checksum: a803c99e9d898170c3b44a86fbdc0736d3d7fcbe737345433fb78e810b9fe30c982657782ad0e676644ba4693ddf05601a7423b5611423218663d6b533341ac9 - languageName: node - linkType: hard - -"is-binary-path@npm:~2.1.0": - version: 2.1.0 - resolution: "is-binary-path@npm:2.1.0" - dependencies: - binary-extensions: ^2.0.0 - checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c - languageName: node - linkType: hard - -"is-boolean-object@npm:^1.2.1": - version: 1.2.2 - resolution: "is-boolean-object@npm:1.2.2" - dependencies: - call-bound: ^1.0.3 - has-tostringtag: ^1.0.2 - checksum: 0415b181e8f1bfd5d3f8a20f8108e64d372a72131674eea9c2923f39d065b6ad08d654765553bdbffbd92c3746f1007986c34087db1bd89a31f71be8359ccdaa - languageName: node - linkType: hard - -"is-buffer@npm:^1.1.5": - version: 1.1.6 - resolution: "is-buffer@npm:1.1.6" - checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707 - languageName: node - linkType: hard - -"is-callable@npm:^1.2.7": - version: 1.2.7 - resolution: "is-callable@npm:1.2.7" - checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac - languageName: node - linkType: hard - -"is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.1": - version: 2.16.1 - resolution: "is-core-module@npm:2.16.1" - dependencies: - hasown: ^2.0.2 - checksum: 6ec5b3c42d9cbf1ac23f164b16b8a140c3cec338bf8f884c076ca89950c7cc04c33e78f02b8cae7ff4751f3247e3174b2330f1fe4de194c7210deb8b1ea316a7 - languageName: node - linkType: hard - -"is-data-descriptor@npm:^1.0.1": - version: 1.0.1 - resolution: "is-data-descriptor@npm:1.0.1" - dependencies: - hasown: ^2.0.0 - checksum: fc6da5be5177149d554c5612cc382e9549418ed72f2d3ed5a3e6511b03dd119ae1b2258320ca94931df50b7e9ee012894eccd4ca45bbcadf0d5b27da6faeb15a - languageName: node - linkType: hard - -"is-data-view@npm:^1.0.1, is-data-view@npm:^1.0.2": - version: 1.0.2 - resolution: "is-data-view@npm:1.0.2" - dependencies: - call-bound: ^1.0.2 - get-intrinsic: ^1.2.6 - is-typed-array: ^1.1.13 - checksum: 31600dd19932eae7fd304567e465709ffbfa17fa236427c9c864148e1b54eb2146357fcf3aed9b686dee13c217e1bb5a649cb3b9c479e1004c0648e9febde1b2 - languageName: node - linkType: hard - -"is-date-object@npm:^1.0.5, is-date-object@npm:^1.1.0": - version: 1.1.0 - resolution: "is-date-object@npm:1.1.0" - dependencies: - call-bound: ^1.0.2 - has-tostringtag: ^1.0.2 - checksum: d6c36ab9d20971d65f3fc64cef940d57a4900a2ac85fb488a46d164c2072a33da1cb51eefcc039e3e5c208acbce343d3480b84ab5ff0983f617512da2742562a - languageName: node - linkType: hard - -"is-descriptor@npm:^0.1.0": - version: 0.1.7 - resolution: "is-descriptor@npm:0.1.7" - dependencies: - is-accessor-descriptor: ^1.0.1 - is-data-descriptor: ^1.0.1 - checksum: 45743109f0bb03f9fa989c34d31ece87cc15792649f147b896a7c4db2906a02fca685867619f4d312e024d7bbd53b945a47c6830d01f5e73efcc6388ac211963 - languageName: node - linkType: hard - -"is-descriptor@npm:^1.0.0, is-descriptor@npm:^1.0.2": - version: 1.0.3 - resolution: "is-descriptor@npm:1.0.3" - dependencies: - is-accessor-descriptor: ^1.0.1 - is-data-descriptor: ^1.0.1 - checksum: 316153b2fd86ac23b0a2f28b77744ae0a4e3c7a54fe52fa70b125d0971eb0a3bcfb562fa8e74537af0dad5bc405cc606726eb501fc748a241c10910deea89cfb - languageName: node - linkType: hard - -"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": - version: 2.2.1 - resolution: "is-docker@npm:2.2.1" - bin: - is-docker: cli.js - checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 - languageName: node - linkType: hard - -"is-extendable@npm:^0.1.0, is-extendable@npm:^0.1.1": - version: 0.1.1 - resolution: "is-extendable@npm:0.1.1" - checksum: 3875571d20a7563772ecc7a5f36cb03167e9be31ad259041b4a8f73f33f885441f778cee1f1fe0085eb4bc71679b9d8c923690003a36a6a5fdf8023e6e3f0672 - languageName: node - linkType: hard - -"is-extendable@npm:^1.0.1": - version: 1.0.1 - resolution: "is-extendable@npm:1.0.1" - dependencies: - is-plain-object: ^2.0.4 - checksum: db07bc1e9de6170de70eff7001943691f05b9d1547730b11be01c0ebfe67362912ba743cf4be6fd20a5e03b4180c685dad80b7c509fe717037e3eee30ad8e84f - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.0, is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 - languageName: node - linkType: hard - -"is-finalizationregistry@npm:^1.1.0": - version: 1.1.1 - resolution: "is-finalizationregistry@npm:1.1.1" - dependencies: - call-bound: ^1.0.3 - checksum: 38c646c506e64ead41a36c182d91639833311970b6b6c6268634f109eef0a1a9d2f1f2e499ef4cb43c744a13443c4cdd2f0812d5afdcee5e9b65b72b28c48557 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 - languageName: node - linkType: hard - -"is-generator-fn@npm:^2.0.0": - version: 2.1.0 - resolution: "is-generator-fn@npm:2.1.0" - checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 - languageName: node - linkType: hard - -"is-generator-function@npm:^1.0.10": - version: 1.1.2 - resolution: "is-generator-function@npm:1.1.2" - dependencies: - call-bound: ^1.0.4 - generator-function: ^2.0.0 - get-proto: ^1.0.1 - has-tostringtag: ^1.0.2 - safe-regex-test: ^1.1.0 - checksum: 0b81c613752a5e534939e5b3835ff722446837a5b94c3a3934af5ded36a651d9aa31c3f11f8a3453884b9658bf26dbfb7eb855e744d920b07f084bd890a43414 - languageName: node - linkType: hard - -"is-glob@npm:^3.1.0": - version: 3.1.0 - resolution: "is-glob@npm:3.1.0" - dependencies: - is-extglob: ^2.1.0 - checksum: 9d483bca84f16f01230f7c7c8c63735248fe1064346f292e0f6f8c76475fd20c6f50fc19941af5bec35f85d6bf26f4b7768f39a48a5f5fdc72b408dc74e07afc - languageName: node - linkType: hard - -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: ^2.1.1 - checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 - languageName: node - linkType: hard - -"is-in-browser@npm:^1.0.2, is-in-browser@npm:^1.1.3": - version: 1.1.3 - resolution: "is-in-browser@npm:1.1.3" - checksum: 178491f97f6663c0574565701b76f41633dbe065e4bd8d518ce017a8fa25e5109ecb6a3bd8bd55c0aba11b208f86b9f0f9c91f3664e148ebf618b74a74fcaf09 - languageName: node - linkType: hard - -"is-map@npm:^2.0.2, is-map@npm:^2.0.3": - version: 2.0.3 - resolution: "is-map@npm:2.0.3" - checksum: e6ce5f6380f32b141b3153e6ba9074892bbbbd655e92e7ba5ff195239777e767a976dcd4e22f864accaf30e53ebf961ab1995424aef91af68788f0591b7396cc - languageName: node - linkType: hard - -"is-module@npm:^1.0.0": - version: 1.0.0 - resolution: "is-module@npm:1.0.0" - checksum: 8cd5390730c7976fb4e8546dd0b38865ee6f7bacfa08dfbb2cc07219606755f0b01709d9361e01f13009bbbd8099fa2927a8ed665118a6105d66e40f1b838c3f - languageName: node - linkType: hard - -"is-negative-zero@npm:^2.0.3": - version: 2.0.3 - resolution: "is-negative-zero@npm:2.0.3" - checksum: c1e6b23d2070c0539d7b36022d5a94407132411d01aba39ec549af824231f3804b1aea90b5e4e58e807a65d23ceb538ed6e355ce76b267bdd86edb757ffcbdcd - languageName: node - linkType: hard - -"is-number-object@npm:^1.1.1": - version: 1.1.1 - resolution: "is-number-object@npm:1.1.1" - dependencies: - call-bound: ^1.0.3 - has-tostringtag: ^1.0.2 - checksum: 6517f0a0e8c4b197a21afb45cd3053dc711e79d45d8878aa3565de38d0102b130ca8732485122c7b336e98c27dacd5236854e3e6526e0eb30cae64956535662f - languageName: node - linkType: hard - -"is-number@npm:^3.0.0": - version: 3.0.0 - resolution: "is-number@npm:3.0.0" - dependencies: - kind-of: ^3.0.2 - checksum: 0c62bf8e9d72c4dd203a74d8cfc751c746e75513380fef420cda8237e619a988ee43e678ddb23c87ac24d91ac0fe9f22e4ffb1301a50310c697e9d73ca3994e9 - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a - languageName: node - linkType: hard - -"is-obj@npm:^1.0.1": - version: 1.0.1 - resolution: "is-obj@npm:1.0.1" - checksum: 3ccf0efdea12951e0b9c784e2b00e77e87b2f8bd30b42a498548a8afcc11b3287342a2030c308e473e93a7a19c9ea7854c99a8832a476591c727df2a9c79796c - languageName: node - linkType: hard - -"is-path-cwd@npm:^2.2.0": - version: 2.2.0 - resolution: "is-path-cwd@npm:2.2.0" - checksum: 46a840921bb8cc0dc7b5b423a14220e7db338072a4495743a8230533ce78812dc152548c86f4b828411fe98c5451959f07cf841c6a19f611e46600bd699e8048 - languageName: node - linkType: hard - -"is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 - languageName: node - linkType: hard - -"is-plain-obj@npm:^3.0.0": - version: 3.0.0 - resolution: "is-plain-obj@npm:3.0.0" - checksum: a6ebdf8e12ab73f33530641972a72a4b8aed6df04f762070d823808303e4f76d87d5ea5bd76f96a7bbe83d93f04ac7764429c29413bd9049853a69cb630fb21c - languageName: node - linkType: hard - -"is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": - version: 2.0.4 - resolution: "is-plain-object@npm:2.0.4" - dependencies: - isobject: ^3.0.1 - checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca - languageName: node - linkType: hard - -"is-potential-custom-element-name@npm:^1.0.1": - version: 1.0.1 - resolution: "is-potential-custom-element-name@npm:1.0.1" - checksum: ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab - languageName: node - linkType: hard - -"is-regex@npm:^1.1.4, is-regex@npm:^1.2.1": - version: 1.2.1 - resolution: "is-regex@npm:1.2.1" - dependencies: - call-bound: ^1.0.2 - gopd: ^1.2.0 - has-tostringtag: ^1.0.2 - hasown: ^2.0.2 - checksum: 99ee0b6d30ef1bb61fa4b22fae7056c6c9b3c693803c0c284ff7a8570f83075a7d38cda53b06b7996d441215c27895ea5d1af62124562e13d91b3dbec41a5e13 - languageName: node - linkType: hard - -"is-regexp@npm:^1.0.0": - version: 1.0.0 - resolution: "is-regexp@npm:1.0.0" - checksum: be692828e24cba479ec33644326fa98959ec68ba77965e0291088c1a741feaea4919d79f8031708f85fd25e39de002b4520622b55460660b9c369e6f7187faef - languageName: node - linkType: hard - -"is-root@npm:^2.1.0": - version: 2.1.0 - resolution: "is-root@npm:2.1.0" - checksum: 37eea0822a2a9123feb58a9d101558ba276771a6d830f87005683349a9acff15958a9ca590a44e778c6b335660b83e85c744789080d734f6081a935a4880aee2 - languageName: node - linkType: hard - -"is-set@npm:^2.0.2, is-set@npm:^2.0.3": - version: 2.0.3 - resolution: "is-set@npm:2.0.3" - checksum: 36e3f8c44bdbe9496c9689762cc4110f6a6a12b767c5d74c0398176aa2678d4467e3bf07595556f2dba897751bde1422480212b97d973c7b08a343100b0c0dfe - languageName: node - linkType: hard - -"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.4": - version: 1.0.4 - resolution: "is-shared-array-buffer@npm:1.0.4" - dependencies: - call-bound: ^1.0.3 - checksum: 1611fedc175796eebb88f4dfc393dd969a4a8e6c69cadaff424ee9d4464f9f026399a5f84a90f7c62d6d7ee04e3626a912149726de102b0bd6c1ee6a9868fa5a - languageName: node - linkType: hard - -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 - languageName: node - linkType: hard - -"is-string@npm:^1.0.7, is-string@npm:^1.1.1": - version: 1.1.1 - resolution: "is-string@npm:1.1.1" - dependencies: - call-bound: ^1.0.3 - has-tostringtag: ^1.0.2 - checksum: 2eeaaff605250f5e836ea3500d33d1a5d3aa98d008641d9d42fb941e929ffd25972326c2ef912987e54c95b6f10416281aaf1b35cdf81992cfb7524c5de8e193 - languageName: node - linkType: hard - -"is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1": - version: 1.1.1 - resolution: "is-symbol@npm:1.1.1" - dependencies: - call-bound: ^1.0.2 - has-symbols: ^1.1.0 - safe-regex-test: ^1.1.0 - checksum: bfafacf037af6f3c9d68820b74be4ae8a736a658a3344072df9642a090016e281797ba8edbeb1c83425879aae55d1cb1f30b38bf132d703692b2570367358032 - languageName: node - linkType: hard - -"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15": - version: 1.1.15 - resolution: "is-typed-array@npm:1.1.15" - dependencies: - which-typed-array: ^1.1.16 - checksum: ea7cfc46c282f805d19a9ab2084fd4542fed99219ee9dbfbc26284728bd713a51eac66daa74eca00ae0a43b61322920ba334793607dc39907465913e921e0892 - languageName: node - linkType: hard - -"is-typedarray@npm:^1.0.0": - version: 1.0.0 - resolution: "is-typedarray@npm:1.0.0" - checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 - languageName: node - linkType: hard - -"is-weakmap@npm:^2.0.2": - version: 2.0.2 - resolution: "is-weakmap@npm:2.0.2" - checksum: f36aef758b46990e0d3c37269619c0a08c5b29428c0bb11ecba7f75203442d6c7801239c2f31314bc79199217ef08263787f3837d9e22610ad1da62970d6616d - languageName: node - linkType: hard - -"is-weakref@npm:^1.0.2, is-weakref@npm:^1.1.1": - version: 1.1.1 - resolution: "is-weakref@npm:1.1.1" - dependencies: - call-bound: ^1.0.3 - checksum: 1769b9aed5d435a3a989ffc18fc4ad1947d2acdaf530eb2bd6af844861b545047ea51102f75901f89043bed0267ed61d914ee21e6e8b9aa734ec201cdfc0726f - languageName: node - linkType: hard - -"is-weakset@npm:^2.0.3": - version: 2.0.4 - resolution: "is-weakset@npm:2.0.4" - dependencies: - call-bound: ^1.0.3 - get-intrinsic: ^1.2.6 - checksum: 5c6c8415a06065d78bdd5e3a771483aa1cd928df19138aa73c4c51333226f203f22117b4325df55cc8b3085a6716870a320c2d757efee92d7a7091a039082041 - languageName: node - linkType: hard - -"is-windows@npm:^1.0.2": - version: 1.0.2 - resolution: "is-windows@npm:1.0.2" - checksum: 438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 - languageName: node - linkType: hard - -"is-wsl@npm:^1.1.0": - version: 1.1.0 - resolution: "is-wsl@npm:1.1.0" - checksum: ea157d232351e68c92bd62fc541771096942fe72f69dff452dd26dcc31466258c570a3b04b8cda2e01cd2968255b02951b8670d08ea4ed76d6b1a646061ac4fe - languageName: node - linkType: hard - -"is-wsl@npm:^2.2.0": - version: 2.2.0 - resolution: "is-wsl@npm:2.2.0" - dependencies: - is-docker: ^2.0.0 - checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 - languageName: node - linkType: hard - -"isarray@npm:1.0.0, isarray@npm:~1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab - languageName: node - linkType: hard - -"isarray@npm:^2.0.5": - version: 2.0.5 - resolution: "isarray@npm:2.0.5" - checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 - languageName: node - linkType: hard - -"isexe@npm:^3.1.1": - version: 3.1.1 - resolution: "isexe@npm:3.1.1" - checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e - languageName: node - linkType: hard - -"isobject@npm:^2.0.0": - version: 2.1.0 - resolution: "isobject@npm:2.1.0" - dependencies: - isarray: 1.0.0 - checksum: 811c6f5a866877d31f0606a88af4a45f282544de886bf29f6a34c46616a1ae2ed17076cc6bf34c0128f33eecf7e1fcaa2c82cf3770560d3e26810894e96ae79f - languageName: node - linkType: hard - -"isobject@npm:^3.0.0, isobject@npm:^3.0.1": - version: 3.0.1 - resolution: "isobject@npm:3.0.1" - checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 - languageName: node - linkType: hard - -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": - version: 3.2.2 - resolution: "istanbul-lib-coverage@npm:3.2.2" - checksum: 2367407a8d13982d8f7a859a35e7f8dd5d8f75aae4bb5484ede3a9ea1b426dc245aff28b976a2af48ee759fdd9be374ce2bd2669b644f31e76c5f46a2e29a831 - languageName: node - linkType: hard - -"istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": - version: 5.2.1 - resolution: "istanbul-lib-instrument@npm:5.2.1" - dependencies: - "@babel/core": ^7.12.3 - "@babel/parser": ^7.14.7 - "@istanbuljs/schema": ^0.1.2 - istanbul-lib-coverage: ^3.2.0 - semver: ^6.3.0 - checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 - languageName: node - linkType: hard - -"istanbul-lib-report@npm:^3.0.0": - version: 3.0.1 - resolution: "istanbul-lib-report@npm:3.0.1" - dependencies: - istanbul-lib-coverage: ^3.0.0 - make-dir: ^4.0.0 - supports-color: ^7.1.0 - checksum: fd17a1b879e7faf9bb1dc8f80b2a16e9f5b7b8498fe6ed580a618c34df0bfe53d2abd35bf8a0a00e628fb7405462576427c7df20bbe4148d19c14b431c974b21 - languageName: node - linkType: hard - -"istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.1 - resolution: "istanbul-lib-source-maps@npm:4.0.1" - dependencies: - debug: ^4.1.1 - istanbul-lib-coverage: ^3.0.0 - source-map: ^0.6.1 - checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 - languageName: node - linkType: hard - -"istanbul-reports@npm:^3.1.3": - version: 3.2.0 - resolution: "istanbul-reports@npm:3.2.0" - dependencies: - html-escaper: ^2.0.0 - istanbul-lib-report: ^3.0.0 - checksum: 72b4c8525276147908d28b0917bc675b1019836b638e50875521ca3b8ec63672681aa98dbab88a6f49ef798c08fe041d428abdcf84f4f3fcff5844eee54af65a - languageName: node - linkType: hard - -"iterator.prototype@npm:^1.1.4": - version: 1.1.5 - resolution: "iterator.prototype@npm:1.1.5" - dependencies: - define-data-property: ^1.1.4 - es-object-atoms: ^1.0.0 - get-intrinsic: ^1.2.6 - get-proto: ^1.0.0 - has-symbols: ^1.1.0 - set-function-name: ^2.0.2 - checksum: 7db23c42629ba4790e6e15f78b555f41dbd08818c85af306988364bd19d86716a1187cb333444f3a0036bfc078a0e9cb7ec67fef3a61662736d16410d7f77869 - languageName: node - linkType: hard - -"jake@npm:^10.8.5": - version: 10.9.4 - resolution: "jake@npm:10.9.4" - dependencies: - async: ^3.2.6 - filelist: ^1.0.4 - picocolors: ^1.1.1 - bin: - jake: bin/cli.js - checksum: 1ca6f6a6fe1f2385ed32df82fcb71f9c7378f7fb591ed0b183e9d79a1801221cfe96f3dd9174db2d1a9705a13ae659f2af7004ad23645c910121fc7086a137ef - languageName: node - linkType: hard - -"jest-changed-files@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-changed-files@npm:27.5.1" - dependencies: - "@jest/types": ^27.5.1 - execa: ^5.0.0 - throat: ^6.0.1 - checksum: 95e9dc74c3ca688ef85cfeab270f43f8902721a6c8ade6ac2459459a77890c85977f537d6fb809056deaa6d9c3f075fa7d2699ff5f3bf7d3fda17c3760b79b15 - languageName: node - linkType: hard - -"jest-circus@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-circus@npm:27.5.1" - dependencies: - "@jest/environment": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - dedent: ^0.7.0 - expect: ^27.5.1 - is-generator-fn: ^2.0.0 - jest-each: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - jest-runtime: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 - pretty-format: ^27.5.1 - slash: ^3.0.0 - stack-utils: ^2.0.3 - throat: ^6.0.1 - checksum: 6192dccbccb3a6acfa361cbb97bdbabe94864ccf3d885932cfd41f19534329d40698078cf9be1489415e8234255d6ea9f9aff5396b79ad842a6fca6e6fc08fd0 - languageName: node - linkType: hard - -"jest-cli@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-cli@npm:27.5.1" - dependencies: - "@jest/core": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 - chalk: ^4.0.0 - exit: ^0.1.2 - graceful-fs: ^4.2.9 - import-local: ^3.0.2 - jest-config: ^27.5.1 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 - prompts: ^2.0.1 - yargs: ^16.2.0 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: 6c0a69fb48e500241409e09ff743ed72bc6578d7769e2c994724e7ef1e5587f6c1f85dc429e93b98ae38a365222993ee70f0acc2199358992120900984f349e5 - languageName: node - linkType: hard - -"jest-config@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-config@npm:27.5.1" - dependencies: - "@babel/core": ^7.8.0 - "@jest/test-sequencer": ^27.5.1 - "@jest/types": ^27.5.1 - babel-jest: ^27.5.1 - chalk: ^4.0.0 - ci-info: ^3.2.0 - deepmerge: ^4.2.2 - glob: ^7.1.1 - graceful-fs: ^4.2.9 - jest-circus: ^27.5.1 - jest-environment-jsdom: ^27.5.1 - jest-environment-node: ^27.5.1 - jest-get-type: ^27.5.1 - jest-jasmine2: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-runner: ^27.5.1 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 - micromatch: ^4.0.4 - parse-json: ^5.2.0 - pretty-format: ^27.5.1 - slash: ^3.0.0 - strip-json-comments: ^3.1.1 - peerDependencies: - ts-node: ">=9.0.0" - peerDependenciesMeta: - ts-node: - optional: true - checksum: 1188fd46c0ed78cbe3175eb9ad6712ccf74a74be33d9f0d748e147c107f0889f8b701fbff1567f31836ae18597dacdc43d6a8fc30dd34ade6c9229cc6c7cb82d - languageName: node - linkType: hard - -"jest-diff@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-diff@npm:27.5.1" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^27.5.1 - jest-get-type: ^27.5.1 - pretty-format: ^27.5.1 - checksum: 8be27c1e1ee57b2bb2bef9c0b233c19621b4c43d53a3c26e2c00a4e805eb4ea11fe1694a06a9fb0e80ffdcfdc0d2b1cb0b85920b3f5c892327ecd1e7bd96b865 - languageName: node - linkType: hard - -"jest-docblock@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-docblock@npm:27.5.1" - dependencies: - detect-newline: ^3.0.0 - checksum: c0fed6d55b229d8bffdd8d03f121dd1a3be77c88f50552d374f9e1ea3bde57bf6bea017a0add04628d98abcb1bfb48b456438eeca8a74ef0053f4dae3b95d29c - languageName: node - linkType: hard - -"jest-each@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-each@npm:27.5.1" - dependencies: - "@jest/types": ^27.5.1 - chalk: ^4.0.0 - jest-get-type: ^27.5.1 - jest-util: ^27.5.1 - pretty-format: ^27.5.1 - checksum: b5a6d8730fd938982569c9e0b42bdf3c242f97b957ed8155a6473b5f7b540970f8685524e7f53963dc1805319f4b6602abfc56605590ca19d55bd7a87e467e63 - languageName: node - linkType: hard - -"jest-environment-jsdom@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-environment-jsdom@npm:27.5.1" - dependencies: - "@jest/environment": ^27.5.1 - "@jest/fake-timers": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/node": "*" - jest-mock: ^27.5.1 - jest-util: ^27.5.1 - jsdom: ^16.6.0 - checksum: bc104aef7d7530d0740402aa84ac812138b6d1e51fe58adecce679f82b99340ddab73e5ec68fa079f33f50c9ddec9728fc9f0ddcca2ad6f0b351eed2762cc555 - languageName: node - linkType: hard - -"jest-environment-node@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-environment-node@npm:27.5.1" - dependencies: - "@jest/environment": ^27.5.1 - "@jest/fake-timers": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/node": "*" - jest-mock: ^27.5.1 - jest-util: ^27.5.1 - checksum: 0f988330c4f3eec092e3fb37ea753b0c6f702e83cd8f4d770af9c2bf964a70bc45fbd34ec6fdb6d71ce98a778d9f54afd673e63f222e4667fff289e8069dba39 - languageName: node - linkType: hard - -"jest-get-type@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-get-type@npm:27.5.1" - checksum: 63064ab70195c21007d897c1157bf88ff94a790824a10f8c890392e7d17eda9c3900513cb291ca1c8d5722cad79169764e9a1279f7c8a9c4cd6e9109ff04bbc0 - languageName: node - linkType: hard - -"jest-haste-map@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-haste-map@npm:27.5.1" - dependencies: - "@jest/types": ^27.5.1 - "@types/graceful-fs": ^4.1.2 - "@types/node": "*" - anymatch: ^3.0.3 - fb-watchman: ^2.0.0 - fsevents: ^2.3.2 - graceful-fs: ^4.2.9 - jest-regex-util: ^27.5.1 - jest-serializer: ^27.5.1 - jest-util: ^27.5.1 - jest-worker: ^27.5.1 - micromatch: ^4.0.4 - walker: ^1.0.7 - dependenciesMeta: - fsevents: - optional: true - checksum: e092a1412829a9254b4725531ee72926de530f77fda7b0d9ea18008fb7623c16f72e772d8e93be71cac9e591b2c6843a669610887dd2c89bd9eb528856e3ab47 - languageName: node - linkType: hard - -"jest-jasmine2@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-jasmine2@npm:27.5.1" - dependencies: - "@jest/environment": ^27.5.1 - "@jest/source-map": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/node": "*" - chalk: ^4.0.0 - co: ^4.6.0 - expect: ^27.5.1 - is-generator-fn: ^2.0.0 - jest-each: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - jest-runtime: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 - pretty-format: ^27.5.1 - throat: ^6.0.1 - checksum: b716adf253ceb73db661936153394ab90d7f3a8ba56d6189b7cd4df8e4e2a4153b4e63ebb5d36e29ceb0f4c211d5a6f36ab7048c6abbd881c8646567e2ab8e6d - languageName: node - linkType: hard - -"jest-leak-detector@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-leak-detector@npm:27.5.1" - dependencies: - jest-get-type: ^27.5.1 - pretty-format: ^27.5.1 - checksum: 5c9689060960567ddaf16c570d87afa760a461885765d2c71ef4f4857bbc3af1482c34e3cce88e50beefde1bf35e33530b020480752057a7e3dbb1ca0bae359f - languageName: node - linkType: hard - -"jest-matcher-utils@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-matcher-utils@npm:27.5.1" - dependencies: - chalk: ^4.0.0 - jest-diff: ^27.5.1 - jest-get-type: ^27.5.1 - pretty-format: ^27.5.1 - checksum: bb2135fc48889ff3fe73888f6cc7168ddab9de28b51b3148f820c89fdfd2effdcad005f18be67d0b9be80eda208ad47290f62f03d0a33f848db2dd0273c8217a - languageName: node - linkType: hard - -"jest-message-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-message-util@npm:27.5.1" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^27.5.1 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^27.5.1 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: eb6d637d1411c71646de578c49826b6da8e33dd293e501967011de9d1916d53d845afbfb52a5b661ff1c495be7c13f751c48c7f30781fd94fbd64842e8195796 - languageName: node - linkType: hard - -"jest-message-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-message-util@npm:28.1.3" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^28.1.3 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^28.1.3 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: 1f266854166dcc6900d75a88b54a25225a2f3710d463063ff1c99021569045c35c7d58557b25447a17eb3a65ce763b2f9b25550248b468a9d4657db365f39e96 - languageName: node - linkType: hard - -"jest-mock@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-mock@npm:27.5.1" - dependencies: - "@jest/types": ^27.5.1 - "@types/node": "*" - checksum: f5b5904bb1741b4a1687a5f492535b7b1758dc26534c72a5423305f8711292e96a601dec966df81bb313269fb52d47227e29f9c2e08324d79529172f67311be0 - languageName: node - linkType: hard - -"jest-pnp-resolver@npm:^1.2.2": - version: 1.2.3 - resolution: "jest-pnp-resolver@npm:1.2.3" - peerDependencies: - jest-resolve: "*" - peerDependenciesMeta: - jest-resolve: - optional: true - checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 - languageName: node - linkType: hard - -"jest-regex-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-regex-util@npm:27.5.1" - checksum: d45ca7a9543616a34f7f3079337439cf07566e677a096472baa2810e274b9808b76767c97b0a4029b8a5b82b9d256dee28ef9ad4138b2b9e5933f6fac106c418 - languageName: node - linkType: hard - -"jest-regex-util@npm:^28.0.0": - version: 28.0.2 - resolution: "jest-regex-util@npm:28.0.2" - checksum: 0ea8c5c82ec88bc85e273c0ec82e0c0f35f7a1e2d055070e50f0cc2a2177f848eec55f73e37ae0d045c3db5014c42b2f90ac62c1ab3fdb354d2abd66a9e08add - languageName: node - linkType: hard - -"jest-resolve-dependencies@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-resolve-dependencies@npm:27.5.1" - dependencies: - "@jest/types": ^27.5.1 - jest-regex-util: ^27.5.1 - jest-snapshot: ^27.5.1 - checksum: c67af97afad1da88f5530317c732bbd1262d1225f6cd7f4e4740a5db48f90ab0bd8564738ac70d1a43934894f9aef62205c1b8f8ee89e5c7a737e6a121ee4c25 - languageName: node - linkType: hard - -"jest-resolve@npm:^27.4.2, jest-resolve@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-resolve@npm:27.5.1" - dependencies: - "@jest/types": ^27.5.1 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 - jest-pnp-resolver: ^1.2.2 - jest-util: ^27.5.1 - jest-validate: ^27.5.1 - resolve: ^1.20.0 - resolve.exports: ^1.1.0 - slash: ^3.0.0 - checksum: 735830e7265b20a348029738680bb2f6e37f80ecea86cda869a4c318ba3a45d39c7a3a873a22f7f746d86258c50ead6e7f501de043e201c095d7ba628a1c440f - languageName: node - linkType: hard - -"jest-runner@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-runner@npm:27.5.1" - dependencies: - "@jest/console": ^27.5.1 - "@jest/environment": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/node": "*" - chalk: ^4.0.0 - emittery: ^0.8.1 - graceful-fs: ^4.2.9 - jest-docblock: ^27.5.1 - jest-environment-jsdom: ^27.5.1 - jest-environment-node: ^27.5.1 - jest-haste-map: ^27.5.1 - jest-leak-detector: ^27.5.1 - jest-message-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-runtime: ^27.5.1 - jest-util: ^27.5.1 - jest-worker: ^27.5.1 - source-map-support: ^0.5.6 - throat: ^6.0.1 - checksum: 5bbe6cf847dd322b3332ec9d6977b54f91bd5f72ff620bc1a0192f0f129deda8aa7ca74c98922187a7aa87d8e0ce4f6c50e99a7ccb2a310bf4d94be2e0c3ce8e - languageName: node - linkType: hard - -"jest-runtime@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-runtime@npm:27.5.1" - dependencies: - "@jest/environment": ^27.5.1 - "@jest/fake-timers": ^27.5.1 - "@jest/globals": ^27.5.1 - "@jest/source-map": ^27.5.1 - "@jest/test-result": ^27.5.1 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 - chalk: ^4.0.0 - cjs-module-lexer: ^1.0.0 - collect-v8-coverage: ^1.0.0 - execa: ^5.0.0 - glob: ^7.1.3 - graceful-fs: ^4.2.9 - jest-haste-map: ^27.5.1 - jest-message-util: ^27.5.1 - jest-mock: ^27.5.1 - jest-regex-util: ^27.5.1 - jest-resolve: ^27.5.1 - jest-snapshot: ^27.5.1 - jest-util: ^27.5.1 - slash: ^3.0.0 - strip-bom: ^4.0.0 - checksum: 929e3df0c53dab43f831f2af4e2996b22aa8cb2d6d483919d6b0426cbc100098fd5b777b998c6568b77f8c4d860b2e83127514292ff61416064f5ef926492386 - languageName: node - linkType: hard - -"jest-serializer@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-serializer@npm:27.5.1" - dependencies: - "@types/node": "*" - graceful-fs: ^4.2.9 - checksum: 803e03a552278610edc6753c0dd9fa5bb5cd3ca47414a7b2918106efb62b79fd5e9ae785d0a21f12a299fa599fea8acc1fa6dd41283328cee43962cf7df9bb44 - languageName: node - linkType: hard - -"jest-snapshot@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-snapshot@npm:27.5.1" - dependencies: - "@babel/core": ^7.7.2 - "@babel/generator": ^7.7.2 - "@babel/plugin-syntax-typescript": ^7.7.2 - "@babel/traverse": ^7.7.2 - "@babel/types": ^7.0.0 - "@jest/transform": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/babel__traverse": ^7.0.4 - "@types/prettier": ^2.1.5 - babel-preset-current-node-syntax: ^1.0.0 - chalk: ^4.0.0 - expect: ^27.5.1 - graceful-fs: ^4.2.9 - jest-diff: ^27.5.1 - jest-get-type: ^27.5.1 - jest-haste-map: ^27.5.1 - jest-matcher-utils: ^27.5.1 - jest-message-util: ^27.5.1 - jest-util: ^27.5.1 - natural-compare: ^1.4.0 - pretty-format: ^27.5.1 - semver: ^7.3.2 - checksum: a5cfadf0d21cd76063925d1434bc076443ed6d87847d0e248f0b245f11db3d98ff13e45cc03b15404027dabecd712d925f47b6eae4f64986f688640a7d362514 - languageName: node - linkType: hard - -"jest-util@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-util@npm:27.5.1" - 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 - checksum: ac8d122f6daf7a035dcea156641fd3701aeba245417c40836a77e35b3341b9c02ddc5d904cfcd4ddbaa00ab854da76d3b911870cafdcdbaff90ea471de26c7d7 - languageName: node - linkType: hard - -"jest-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-util@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: fd6459742c941f070223f25e38a2ac0719aad92561591e9fb2a50d602a5d19d754750b79b4074327a42b00055662b95da3b006542ceb8b54309da44d4a62e721 - languageName: node - linkType: hard - -"jest-validate@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-validate@npm:27.5.1" - dependencies: - "@jest/types": ^27.5.1 - camelcase: ^6.2.0 - chalk: ^4.0.0 - jest-get-type: ^27.5.1 - leven: ^3.1.0 - pretty-format: ^27.5.1 - checksum: 82e870f8ee7e4fb949652711b1567f05ae31c54be346b0899e8353e5c20fad7692b511905b37966945e90af8dc0383eb41a74f3ffefb16140ea4f9164d841412 - languageName: node - linkType: hard - -"jest-watch-typeahead@npm:^1.0.0": - version: 1.1.0 - resolution: "jest-watch-typeahead@npm:1.1.0" - dependencies: - ansi-escapes: ^4.3.1 - chalk: ^4.0.0 - jest-regex-util: ^28.0.0 - jest-watcher: ^28.0.0 - slash: ^4.0.0 - string-length: ^5.0.1 - strip-ansi: ^7.0.1 - peerDependencies: - jest: ^27.0.0 || ^28.0.0 - checksum: 59b0a494ac01e3801c9ec586de3209153eedb024b981e25443111c5703711d23b67ebc71b072986c1758307e0bfb5bf1c92bd323f73f58602d6f4f609dce6a0c - languageName: node - linkType: hard - -"jest-watcher@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-watcher@npm:27.5.1" - dependencies: - "@jest/test-result": ^27.5.1 - "@jest/types": ^27.5.1 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - jest-util: ^27.5.1 - string-length: ^4.0.1 - checksum: 191c4e9c278c0902ade1a8a80883ac244963ba3e6e78607a3d5f729ccca9c6e71fb3b316f87883658132641c5d818aa84202585c76752e03c539e6cbecb820bd - languageName: node - linkType: hard - -"jest-watcher@npm:^28.0.0": - version: 28.1.3 - resolution: "jest-watcher@npm:28.1.3" - dependencies: - "@jest/test-result": ^28.1.3 - "@jest/types": ^28.1.3 - "@types/node": "*" - ansi-escapes: ^4.2.1 - chalk: ^4.0.0 - emittery: ^0.10.2 - jest-util: ^28.1.3 - string-length: ^4.0.1 - checksum: 8f6d674a4865e7df251f71544f1b51f06fd36b5a3a61f2ac81aeb81fa2a196be354fba51d0f97911c88f67cd254583b3a22ee124bf2c5b6ee2fadec27356c207 - languageName: node - linkType: hard - -"jest-worker@npm:^26.2.1": - version: 26.6.2 - resolution: "jest-worker@npm:26.6.2" - dependencies: - "@types/node": "*" - merge-stream: ^2.0.0 - supports-color: ^7.0.0 - checksum: f9afa3b88e3f12027901e4964ba3ff048285b5783b5225cab28fac25b4058cea8ad54001e9a1577ee2bed125fac3ccf5c80dc507b120300cc1bbcb368796533e - languageName: node - linkType: hard - -"jest-worker@npm:^27.0.2, jest-worker@npm:^27.4.5, jest-worker@npm:^27.5.1": - version: 27.5.1 - resolution: "jest-worker@npm:27.5.1" - dependencies: - "@types/node": "*" - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980 - languageName: node - linkType: hard - -"jest-worker@npm:^28.0.2": - version: 28.1.3 - resolution: "jest-worker@npm:28.1.3" - dependencies: - "@types/node": "*" - merge-stream: ^2.0.0 - supports-color: ^8.0.0 - checksum: e921c9a1b8f0909da9ea07dbf3592f95b653aef3a8bb0cbcd20fc7f9a795a1304adecac31eecb308992c167e8d7e75c522061fec38a5928ace0f9571c90169ca - languageName: node - linkType: hard - -"jest@npm:^27.4.3": - version: 27.5.1 - resolution: "jest@npm:27.5.1" - dependencies: - "@jest/core": ^27.5.1 - import-local: ^3.0.2 - jest-cli: ^27.5.1 - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - bin: - jest: bin/jest.js - checksum: 96f1d69042b3c6dfc695f2a4e4b0db38af6fb78582ad1a02beaa57cfcd77cbd31567d7d865c1c85709b7c3e176eefa3b2035ffecd646005f15d8ef528eccf205 - languageName: node - linkType: hard - -"jiti@npm:^1.21.7": - version: 1.21.7 - resolution: "jiti@npm:1.21.7" - bin: - jiti: bin/jiti.js - checksum: 9cd20dabf82e3a4cceecb746a69381da7acda93d34eed0cdb9c9bdff3bce07e4f2f4a016ca89924392c935297d9aedc58ff9f7d3281bc5293319ad244926e0b7 - languageName: node - linkType: hard - -"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": - version: 4.0.0 - resolution: "js-tokens@npm:4.0.0" - checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 - languageName: node - linkType: hard - -"js-yaml@npm:^3.13.1": - version: 3.14.2 - resolution: "js-yaml@npm:3.14.2" - dependencies: - argparse: ^1.0.7 - esprima: ^4.0.0 - bin: - js-yaml: bin/js-yaml.js - checksum: 626fc207734a3452d6ba84e1c8c226240e6d431426ed94d0ab043c50926d97c509629c08b1d636f5d27815833b7cfd225865631da9fb33cb957374490bf3e90b - languageName: node - linkType: hard - -"js-yaml@npm:^4.1.0": - version: 4.1.1 - resolution: "js-yaml@npm:4.1.1" - dependencies: - argparse: ^2.0.1 - bin: - js-yaml: bin/js-yaml.js - checksum: ea2339c6930fe048ec31b007b3c90be2714ab3e7defcc2c27ebf30c74fd940358f29070b4345af0019ef151875bf3bc3f8644bea1bab0372652b5044813ac02d - languageName: node - linkType: hard - -"jsdom@npm:^16.6.0": - version: 16.7.0 - resolution: "jsdom@npm:16.7.0" - 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 - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - checksum: 454b83371857000763ed31130a049acd1b113e3b927e6dcd75c67ddc30cdd242d7ebcac5c2294b7a1a6428155cb1398709c573b3c6d809218692ea68edd93370 - languageName: node - linkType: hard - -"jsesc@npm:^3.0.2, jsesc@npm:~3.1.0": - version: 3.1.0 - resolution: "jsesc@npm:3.1.0" - bin: - jsesc: bin/jsesc - checksum: 19c94095ea026725540c0d29da33ab03144f6bcf2d4159e4833d534976e99e0c09c38cefa9a575279a51fc36b31166f8d6d05c9fe2645d5f15851d690b41f17f - languageName: node - linkType: hard - -"json-buffer@npm:3.0.1": - version: 3.0.1 - resolution: "json-buffer@npm:3.0.1" - checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": - version: 2.3.1 - resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f - languageName: node - linkType: hard - -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b - languageName: node - linkType: hard - -"json-schema-traverse@npm:^1.0.0": - version: 1.0.0 - resolution: "json-schema-traverse@npm:1.0.0" - checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad - languageName: node - linkType: hard - -"json-schema@npm:^0.4.0": - version: 0.4.0 - resolution: "json-schema@npm:0.4.0" - checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72 - languageName: node - linkType: hard - -"json-stable-stringify-without-jsonify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" - checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 - languageName: node - linkType: hard - -"json5@npm:^1.0.2": - version: 1.0.2 - resolution: "json5@npm:1.0.2" - dependencies: - minimist: ^1.2.0 - bin: - json5: lib/cli.js - checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 - languageName: node - linkType: hard - -"json5@npm:^2.1.2, json5@npm:^2.2.0, json5@npm:^2.2.3": - version: 2.2.3 - resolution: "json5@npm:2.2.3" - bin: - json5: lib/cli.js - checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 - languageName: node - linkType: hard - -"jsonfile@npm:^6.0.1": - version: 6.2.0 - resolution: "jsonfile@npm:6.2.0" - dependencies: - graceful-fs: ^4.1.6 - universalify: ^2.0.0 - dependenciesMeta: - graceful-fs: - optional: true - checksum: c3028ec5c770bb41290c9bb9ca04bdd0a1b698ddbdf6517c9453d3f90fc9e000c9675959fb46891d317690a93c62de03ff1735d8dbe02be83e51168ce85815d3 - languageName: node - linkType: hard - -"jsonpath@npm:^1.1.1": - version: 1.1.1 - resolution: "jsonpath@npm:1.1.1" - dependencies: - esprima: 1.2.2 - static-eval: 2.0.2 - underscore: 1.12.1 - checksum: 5480d8e9e424fe2ed4ade6860b6e2cefddb21adb3a99abe0254cd9428e8ef9b0c9fb5729d6a5a514e90df50d645ccea9f3be48d627570e6222dd5dadc28eba7b - languageName: node - linkType: hard - -"jsonpointer@npm:^5.0.0": - version: 5.0.1 - resolution: "jsonpointer@npm:5.0.1" - checksum: 0b40f712900ad0c846681ea2db23b6684b9d5eedf55807b4708c656f5894b63507d0e28ae10aa1bddbea551241035afe62b6df0800fc94c2e2806a7f3adecd7c - languageName: node - linkType: hard - -"jss-plugin-camel-case@npm:^10.10.0": - version: 10.10.0 - resolution: "jss-plugin-camel-case@npm:10.10.0" - dependencies: - "@babel/runtime": ^7.3.1 - hyphenate-style-name: ^1.0.3 - jss: 10.10.0 - checksum: 693485b86f7a0e0bd0c16b8ddd057ca02a993fc088558c96501f9131e7e6261cc9f4b08047879a68441c688c40dceeb5219b1f15ade9043935aade4f37f5ca85 - languageName: node - linkType: hard - -"jss-plugin-default-unit@npm:^10.10.0": - version: 10.10.0 - resolution: "jss-plugin-default-unit@npm:10.10.0" - dependencies: - "@babel/runtime": ^7.3.1 - jss: 10.10.0 - checksum: 6e56213830753ad80bca3824973a667106defaef698d5996d45d03a0e2a3e035b33cd257aa8015040c41bd6669e7598dce72c36099d7ae69db758a7b2ca453fa - languageName: node - linkType: hard - -"jss-plugin-global@npm:^10.10.0": - version: 10.10.0 - resolution: "jss-plugin-global@npm:10.10.0" - dependencies: - "@babel/runtime": ^7.3.1 - jss: 10.10.0 - checksum: f3af4f40358e96cf89e0c7c84b6e441dc9b4d543cd6109fdf9314a9818fd780d252035f46cc526c3d3fb4393bc29effc6993cc22e04f4e67ec3c889ab760d580 - languageName: node - linkType: hard - -"jss-plugin-nested@npm:^10.10.0": - version: 10.10.0 - resolution: "jss-plugin-nested@npm:10.10.0" - dependencies: - "@babel/runtime": ^7.3.1 - jss: 10.10.0 - tiny-warning: ^1.0.2 - checksum: 190094375972b68eb8f683387c74e97dc8347e7cc4f2fbfd40b3baf077dfde83d70e57be56744690d22537c0390e0a398714d86736df820c64e498df95f937de - languageName: node - linkType: hard - -"jss-plugin-props-sort@npm:^10.10.0": - version: 10.10.0 - resolution: "jss-plugin-props-sort@npm:10.10.0" - dependencies: - "@babel/runtime": ^7.3.1 - jss: 10.10.0 - checksum: 274483444b6733bd58d229ebdcdb32b3c24172bc83cb2f6f8364926de19acd872758bcf06c7b3af11cf75504a67a7d67abba62b25081d144585a56b4df9512ba - languageName: node - linkType: hard - -"jss-plugin-rule-value-function@npm:^10.10.0": - version: 10.10.0 - resolution: "jss-plugin-rule-value-function@npm:10.10.0" - dependencies: - "@babel/runtime": ^7.3.1 - jss: 10.10.0 - tiny-warning: ^1.0.2 - checksum: 009c9593b9be8b9f1030b797e58e3c233d90e034e5c68b0cabd25bffc7da965c69dc1ccb1bb6a542d72bb824df89036b2264fe564e8538320ef99febaf2882ee - languageName: node - linkType: hard - -"jss-plugin-vendor-prefixer@npm:^10.10.0": - version: 10.10.0 - resolution: "jss-plugin-vendor-prefixer@npm:10.10.0" - dependencies: - "@babel/runtime": ^7.3.1 - css-vendor: ^2.0.8 - jss: 10.10.0 - checksum: 879b7233f9b0b571074dc2b88d97a05dbb949012ba2405f1481bbedd521167dc835133632adb3f2d8ffceddd337c8c13e3e8b1931590516c0664039598752dff - languageName: node - linkType: hard - -"jss@npm:10.10.0, jss@npm:^10.10.0": - version: 10.10.0 - resolution: "jss@npm:10.10.0" - dependencies: - "@babel/runtime": ^7.3.1 - csstype: ^3.0.2 - is-in-browser: ^1.1.3 - tiny-warning: ^1.0.2 - checksum: ecf71971df42729668c283e432e841349b7fdbe52e520f7704991cf4a738fd2451ec0feeb25c12cdc5addf7facecf838e74e62936fd461fb4c99f23d54a4792d - languageName: node - linkType: hard - -"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5": - version: 3.3.5 - resolution: "jsx-ast-utils@npm:3.3.5" - dependencies: - array-includes: ^3.1.6 - array.prototype.flat: ^1.3.1 - object.assign: ^4.1.4 - object.values: ^1.1.6 - checksum: f4b05fa4d7b5234230c905cfa88d36dc8a58a6666975a3891429b1a8cdc8a140bca76c297225cb7a499fad25a2c052ac93934449a2c31a44fc9edd06c773780a - languageName: node - linkType: hard - -"keyv@npm:^4.5.3": - version: 4.5.4 - resolution: "keyv@npm:4.5.4" - dependencies: - json-buffer: 3.0.1 - checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 - languageName: node - linkType: hard - -"kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": - version: 3.2.2 - resolution: "kind-of@npm:3.2.2" - dependencies: - is-buffer: ^1.1.5 - checksum: e898df8ca2f31038f27d24f0b8080da7be274f986bc6ed176f37c77c454d76627619e1681f6f9d2e8d2fd7557a18ecc419a6bb54e422abcbb8da8f1a75e4b386 - languageName: node - linkType: hard - -"kind-of@npm:^4.0.0": - version: 4.0.0 - resolution: "kind-of@npm:4.0.0" - dependencies: - is-buffer: ^1.1.5 - checksum: 1b9e7624a8771b5a2489026e820f3bbbcc67893e1345804a56b23a91e9069965854d2a223a7c6ee563c45be9d8c6ff1ef87f28ed5f0d1a8d00d9dcbb067c529f - languageName: node - linkType: hard - -"kind-of@npm:^6.0.2": - version: 6.0.3 - resolution: "kind-of@npm:6.0.3" - checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b - languageName: node - linkType: hard - -"kleur@npm:^3.0.3": - version: 3.0.3 - resolution: "kleur@npm:3.0.3" - checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 - languageName: node - linkType: hard - -"klona@npm:^2.0.4, klona@npm:^2.0.5": - version: 2.0.6 - resolution: "klona@npm:2.0.6" - checksum: ac9ee3732e42b96feb67faae4d27cf49494e8a3bf3fa7115ce242fe04786788e0aff4741a07a45a2462e2079aa983d73d38519c85d65b70ef11447bbc3c58ce7 - languageName: node - linkType: hard - -"language-subtag-registry@npm:^0.3.20": - version: 0.3.23 - resolution: "language-subtag-registry@npm:0.3.23" - checksum: 0b64c1a6c5431c8df648a6d25594ff280613c886f4a1a542d9b864e5472fb93e5c7856b9c41595c38fac31370328fc79fcc521712e89ea6d6866cbb8e0995d81 - languageName: node - linkType: hard - -"language-tags@npm:^1.0.9": - version: 1.0.9 - resolution: "language-tags@npm:1.0.9" - dependencies: - language-subtag-registry: ^0.3.20 - checksum: 57c530796dc7179914dee71bc94f3747fd694612480241d0453a063777265dfe3a951037f7acb48f456bf167d6eb419d4c00263745326b3ba1cdcf4657070e78 - languageName: node - linkType: hard - -"launch-editor@npm:^2.6.0": - version: 2.12.0 - resolution: "launch-editor@npm:2.12.0" - dependencies: - picocolors: ^1.1.1 - shell-quote: ^1.8.3 - checksum: b1aa1b92ef4e720d1edd7f80affb90b2fa1cc2c41641cf80158940698c18a4b6a67e2a7cb060547712e858f0ec1a7c8c39f605e0eb299f516a6184f4e680ffc8 - languageName: node - linkType: hard - -"leven@npm:^3.1.0": - version: 3.1.0 - resolution: "leven@npm:3.1.0" - checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 - languageName: node - linkType: hard - -"levn@npm:^0.4.1": - version: 0.4.1 - resolution: "levn@npm:0.4.1" - dependencies: - prelude-ls: ^1.2.1 - type-check: ~0.4.0 - checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 - languageName: node - linkType: hard - -"levn@npm:~0.3.0": - version: 0.3.0 - resolution: "levn@npm:0.3.0" - dependencies: - prelude-ls: ~1.1.2 - type-check: ~0.3.2 - checksum: 0d084a524231a8246bb10fec48cdbb35282099f6954838604f3c7fc66f2e16fa66fd9cc2f3f20a541a113c4dafdf181e822c887c8a319c9195444e6c64ac395e - languageName: node - linkType: hard - -"lilconfig@npm:^2.0.3": - version: 2.1.0 - resolution: "lilconfig@npm:2.1.0" - checksum: 8549bb352b8192375fed4a74694cd61ad293904eee33f9d4866c2192865c44c4eb35d10782966242634e0cbc1e91fe62b1247f148dc5514918e3a966da7ea117 - languageName: node - linkType: hard - -"lilconfig@npm:^3.1.1, lilconfig@npm:^3.1.3": - version: 3.1.3 - resolution: "lilconfig@npm:3.1.3" - checksum: 644eb10830350f9cdc88610f71a921f510574ed02424b57b0b3abb66ea725d7a082559552524a842f4e0272c196b88dfe1ff7d35ffcc6f45736777185cd67c9a - languageName: node - linkType: hard - -"lines-and-columns@npm:^1.1.6": - version: 1.2.4 - resolution: "lines-and-columns@npm:1.2.4" - checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 - languageName: node - linkType: hard - -"live-server@npm:^1.2.2": - version: 1.2.2 - resolution: "live-server@npm:1.2.2" - dependencies: - chokidar: ^2.0.4 - colors: 1.4.0 - connect: ^3.6.6 - cors: latest - event-stream: 3.3.4 - faye-websocket: 0.11.x - http-auth: 3.1.x - morgan: ^1.9.1 - object-assign: latest - opn: latest - proxy-middleware: latest - send: latest - serve-index: ^1.9.1 - bin: - live-server: live-server.js - checksum: 6758421223a97a602d427fe048bb867ed4743e8ed2299c37ab67e72dd98a24abe6756157795e4f6fa11d164dc97ba3c9a7e9be8c9aff786bf4ec84c807ec2d7b - languageName: node - linkType: hard - -"loader-runner@npm:^4.3.1": - version: 4.3.1 - resolution: "loader-runner@npm:4.3.1" - checksum: 14689a39a79b286d3d15f2199384d6132d62ea707abd6c7e50dc8a1f80c20cbfdd5344f7e6b4a7346974696689ab1a96f8ec7d1e8bf206c5264561502658bd3c - languageName: node - linkType: hard - -"loader-utils@npm:^2.0.0, loader-utils@npm:^2.0.4": - version: 2.0.4 - resolution: "loader-utils@npm:2.0.4" - dependencies: - big.js: ^5.2.2 - emojis-list: ^3.0.0 - json5: ^2.1.2 - checksum: a5281f5fff1eaa310ad5e1164095689443630f3411e927f95031ab4fb83b4a98f388185bb1fe949e8ab8d4247004336a625e9255c22122b815bb9a4c5d8fc3b7 - languageName: node - linkType: hard - -"loader-utils@npm:^3.2.0": - version: 3.3.1 - resolution: "loader-utils@npm:3.3.1" - checksum: d35808e081635e5bc50228a52ed79f83e2c82bd8f7578818c12b1b4cf0b7f409d72d9b93a683ec36b9eaa93346693d3f3c8380183ba2ff81599b0829d685de39 - languageName: node - linkType: hard - -"locate-path@npm:^3.0.0": - version: 3.0.0 - resolution: "locate-path@npm:3.0.0" - dependencies: - p-locate: ^3.0.0 - path-exists: ^3.0.0 - checksum: 53db3996672f21f8b0bf2a2c645ae2c13ffdae1eeecfcd399a583bce8516c0b88dcb4222ca6efbbbeb6949df7e46860895be2c02e8d3219abd373ace3bfb4e11 - languageName: node - linkType: hard - -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: ^4.1.0 - checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 - languageName: node - linkType: hard - -"locate-path@npm:^6.0.0": - version: 6.0.0 - resolution: "locate-path@npm:6.0.0" - dependencies: - p-locate: ^5.0.0 - checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a - languageName: node - linkType: hard - -"lodash.debounce@npm:^4.0.8": - version: 4.0.8 - resolution: "lodash.debounce@npm:4.0.8" - checksum: a3f527d22c548f43ae31c861ada88b2637eb48ac6aa3eb56e82d44917971b8aa96fbb37aa60efea674dc4ee8c42074f90f7b1f772e9db375435f6c83a19b3bc6 - languageName: node - linkType: hard - -"lodash.memoize@npm:^4.1.2": - version: 4.1.2 - resolution: "lodash.memoize@npm:4.1.2" - checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 - languageName: node - linkType: hard - -"lodash.merge@npm:^4.6.2": - version: 4.6.2 - resolution: "lodash.merge@npm:4.6.2" - checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 - languageName: node - linkType: hard - -"lodash.sortby@npm:^4.7.0": - version: 4.7.0 - resolution: "lodash.sortby@npm:4.7.0" - checksum: db170c9396d29d11fe9a9f25668c4993e0c1331bcb941ddbd48fb76f492e732add7f2a47cfdf8e9d740fa59ac41bbfaf931d268bc72aab3ab49e9f89354d718c - languageName: node - linkType: hard - -"lodash.uniq@npm:^4.5.0": - version: 4.5.0 - resolution: "lodash.uniq@npm:4.5.0" - checksum: a4779b57a8d0f3c441af13d9afe7ecff22dd1b8ce1129849f71d9bbc8e8ee4e46dfb4b7c28f7ad3d67481edd6e51126e4e2a6ee276e25906d10f7140187c392d - languageName: node - linkType: hard - -"lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.7.0": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 - languageName: node - linkType: hard - -"loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": - version: 1.4.0 - resolution: "loose-envify@npm:1.4.0" - dependencies: - js-tokens: ^3.0.0 || ^4.0.0 - bin: - loose-envify: cli.js - checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 - languageName: node - linkType: hard - -"lower-case@npm:^2.0.2": - version: 2.0.2 - resolution: "lower-case@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: 83a0a5f159ad7614bee8bf976b96275f3954335a84fad2696927f609ddae902802c4f3312d86668722e668bef41400254807e1d3a7f2e8c3eede79691aa1f010 - languageName: node - linkType: hard - -"lru-cache@npm:^11.0.0, lru-cache@npm:^11.1.0, lru-cache@npm:^11.2.1": - version: 11.2.2 - resolution: "lru-cache@npm:11.2.2" - checksum: 052b3d0b81a02dd017e8b6d82422bed273732c89c9c63762f538e0a75b7018247896b365c19d9392cc7de9c6a304cde3ac11eb7376f96a4885d0ab32b5c46d5b - languageName: node - linkType: hard - -"lru-cache@npm:^5.1.1": - version: 5.1.1 - resolution: "lru-cache@npm:5.1.1" - dependencies: - yallist: ^3.0.2 - checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb - languageName: node - linkType: hard - -"lz-string@npm:^1.5.0": - version: 1.5.0 - resolution: "lz-string@npm:1.5.0" - bin: - lz-string: bin/bin.js - checksum: 1ee98b4580246fd90dd54da6e346fb1caefcf05f677c686d9af237a157fdea3fd7c83a4bc58f858cd5b10a34d27afe0fdcbd0505a47e0590726a873dc8b8f65d - languageName: node - linkType: hard - -"magic-string@npm:^0.25.0, magic-string@npm:^0.25.3, magic-string@npm:^0.25.7": - version: 0.25.9 - resolution: "magic-string@npm:0.25.9" - dependencies: - sourcemap-codec: ^1.4.8 - checksum: 9a0e55a15c7303fc360f9572a71cffba1f61451bc92c5602b1206c9d17f492403bf96f946dfce7483e66822d6b74607262e24392e87b0ac27b786e69a40e9b1a - languageName: node - linkType: hard - -"make-dir@npm:^3.0.2, make-dir@npm:^3.1.0": - version: 3.1.0 - resolution: "make-dir@npm:3.1.0" - dependencies: - semver: ^6.0.0 - checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 - languageName: node - linkType: hard - -"make-dir@npm:^4.0.0": - version: 4.0.0 - resolution: "make-dir@npm:4.0.0" - dependencies: - semver: ^7.5.3 - checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a - languageName: node - linkType: hard - -"make-fetch-happen@npm:^15.0.0": - version: 15.0.3 - resolution: "make-fetch-happen@npm:15.0.3" - dependencies: - "@npmcli/agent": ^4.0.0 - cacache: ^20.0.1 - http-cache-semantics: ^4.1.1 - minipass: ^7.0.2 - minipass-fetch: ^5.0.0 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^1.0.0 - proc-log: ^6.0.0 - promise-retry: ^2.0.1 - ssri: ^13.0.0 - checksum: 4fb9dbb739b33565c85dacdcff7eb9388d8f36f326a59dc13375f01af809c42c48aa5d1f4840ee36623b2461a15476e1e79e4548ca1af30b42e1e324705ac8b3 - languageName: node - linkType: hard - -"makeerror@npm:1.0.12": - version: 1.0.12 - resolution: "makeerror@npm:1.0.12" - dependencies: - tmpl: 1.0.5 - checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 - languageName: node - linkType: hard - -"map-cache@npm:^0.2.2": - version: 0.2.2 - resolution: "map-cache@npm:0.2.2" - checksum: 3067cea54285c43848bb4539f978a15dedc63c03022abeec6ef05c8cb6829f920f13b94bcaf04142fc6a088318e564c4785704072910d120d55dbc2e0c421969 - languageName: node - linkType: hard - -"map-stream@npm:~0.1.0": - version: 0.1.0 - resolution: "map-stream@npm:0.1.0" - checksum: 38abbe4eb883888031e6b2fc0630bc583c99396be16b8ace5794b937b682a8a081f03e8b15bfd4914d1bc88318f0e9ac73ba3512ae65955cd449f63256ddb31d - languageName: node - linkType: hard - -"map-visit@npm:^1.0.0": - version: 1.0.0 - resolution: "map-visit@npm:1.0.0" - dependencies: - object-visit: ^1.0.0 - checksum: c27045a5021c344fc19b9132eb30313e441863b2951029f8f8b66f79d3d8c1e7e5091578075a996f74e417479506fe9ede28c44ca7bc351a61c9d8073daec36a - languageName: node - linkType: hard - -"math-intrinsics@npm:^1.1.0": - version: 1.1.0 - resolution: "math-intrinsics@npm:1.1.0" - checksum: 0e513b29d120f478c85a70f49da0b8b19bc638975eca466f2eeae0071f3ad00454c621bf66e16dd435896c208e719fc91ad79bbfba4e400fe0b372e7c1c9c9a2 - languageName: node - linkType: hard - -"mdn-data@npm:2.0.14": - version: 2.0.14 - resolution: "mdn-data@npm:2.0.14" - checksum: 9d0128ed425a89f4cba8f787dca27ad9408b5cb1b220af2d938e2a0629d17d879a34d2cb19318bdb26c3f14c77dd5dfbae67211f5caaf07b61b1f2c5c8c7dc16 - languageName: node - linkType: hard - -"mdn-data@npm:2.0.4": - version: 2.0.4 - resolution: "mdn-data@npm:2.0.4" - checksum: add3c95e6d03d301b8a8bcfee3de33f4d07e4c5eee5b79f18d6d737de717e22472deadf67c1a8563983c0b603e10d7df40aa8e5fddf18884dfe118ccec7ae329 - languageName: node - linkType: hard - -"media-typer@npm:0.3.0": - version: 0.3.0 - resolution: "media-typer@npm:0.3.0" - checksum: af1b38516c28ec95d6b0826f6c8f276c58aec391f76be42aa07646b4e39d317723e869700933ca6995b056db4b09a78c92d5440dc23657e6764be5d28874bba1 - languageName: node - linkType: hard - -"memfs@npm:^3.1.2, memfs@npm:^3.4.3": - version: 3.5.3 - resolution: "memfs@npm:3.5.3" - dependencies: - fs-monkey: ^1.0.4 - checksum: 18dfdeacad7c8047b976a6ccd58bc98ba76e122ad3ca0e50a21837fe2075fc0d9aafc58ab9cf2576c2b6889da1dd2503083f2364191b695273f40969db2ecc44 - languageName: node - linkType: hard - -"merge-descriptors@npm:1.0.3": - version: 1.0.3 - resolution: "merge-descriptors@npm:1.0.3" - checksum: 52117adbe0313d5defa771c9993fe081e2d2df9b840597e966aadafde04ae8d0e3da46bac7ca4efc37d4d2b839436582659cd49c6a43eacb3fe3050896a105d1 - languageName: node - linkType: hard - -"merge-stream@npm:^2.0.0": - version: 2.0.0 - resolution: "merge-stream@npm:2.0.0" - checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 - languageName: node - linkType: hard - -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 - languageName: node - linkType: hard - -"methods@npm:~1.1.2": - version: 1.1.2 - resolution: "methods@npm:1.1.2" - checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a - languageName: node - linkType: hard - -"micromatch@npm:^3.1.10, micromatch@npm:^3.1.4": - version: 3.1.10 - resolution: "micromatch@npm:3.1.10" - 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 - checksum: ad226cba4daa95b4eaf47b2ca331c8d2e038d7b41ae7ed0697cde27f3f1d6142881ab03d4da51b65d9d315eceb5e4cdddb3fbb55f5f72cfa19cf3ea469d054dc - languageName: node - linkType: hard - -"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5, micromatch@npm:^4.0.8": - version: 4.0.8 - resolution: "micromatch@npm:4.0.8" - dependencies: - braces: ^3.0.3 - picomatch: ^2.3.1 - checksum: 79920eb634e6f400b464a954fcfa589c4e7c7143209488e44baf627f9affc8b1e306f41f4f0deedde97e69cb725920879462d3e750ab3bd3c1aed675bb3a8966 - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f - languageName: node - linkType: hard - -"mime-db@npm:>= 1.43.0 < 2, mime-db@npm:^1.54.0": - version: 1.54.0 - resolution: "mime-db@npm:1.54.0" - checksum: e99aaf2f23f5bd607deb08c83faba5dd25cf2fec90a7cc5b92d8260867ee08dab65312e1a589e60093dc7796d41e5fae013268418482f1db4c7d52d0a0960ac9 - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:^2.1.35, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: 1.52.0 - checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 - languageName: node - linkType: hard - -"mime-types@npm:^3.0.1": - version: 3.0.2 - resolution: "mime-types@npm:3.0.2" - dependencies: - mime-db: ^1.54.0 - checksum: 70b74794f408419e4b6a8e3c93ccbed79b6a6053973a3957c5cc04ff4ad8d259f0267da179e3ecae34c3edfb4bfd7528db23a101e32d21ad8e196178c8b7b75a - languageName: node - linkType: hard - -"mime@npm:1.6.0": - version: 1.6.0 - resolution: "mime@npm:1.6.0" - bin: - mime: cli.js - checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 - languageName: node - linkType: hard - -"mimic-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a - languageName: node - linkType: hard - -"mini-css-extract-plugin@npm:^2.4.5": - version: 2.9.4 - resolution: "mini-css-extract-plugin@npm:2.9.4" - dependencies: - schema-utils: ^4.0.0 - tapable: ^2.2.1 - peerDependencies: - webpack: ^5.0.0 - checksum: 4ec46ebdcb5dae4b1c012debca90fea27b1e8e7790d408154232d77d25f56f839e7b1ec5401a962d6356e7b9301c760d2ef62e1cb0d4d7b6ec8209f812733dda - languageName: node - linkType: hard - -"minimalistic-assert@npm:^1.0.0": - version: 1.0.1 - resolution: "minimalistic-assert@npm:1.0.1" - checksum: cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7 - languageName: node - linkType: hard - -"minimatch@npm:^10.1.1": - version: 10.1.1 - resolution: "minimatch@npm:10.1.1" - dependencies: - "@isaacs/brace-expansion": ^5.0.0 - checksum: 8820c0be92994f57281f0a7a2cc4268dcc4b610f9a1ab666685716b4efe4b5898b43c835a8f22298875b31c7a278a5e3b7e253eee7c886546bb0b61fb94bca6b - languageName: node - linkType: hard - -"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: ^1.1.7 - checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a - languageName: node - linkType: hard - -"minimatch@npm:^5.0.1": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" - dependencies: - brace-expansion: ^2.0.1 - checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 - languageName: node - linkType: hard - -"minimist@npm:^1.2.0, minimist@npm:^1.2.6": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 - languageName: node - linkType: hard - -"minipass-collect@npm:^2.0.1": - version: 2.0.1 - resolution: "minipass-collect@npm:2.0.1" - dependencies: - minipass: ^7.0.3 - checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 - languageName: node - linkType: hard - -"minipass-fetch@npm:^5.0.0": - version: 5.0.0 - resolution: "minipass-fetch@npm:5.0.0" - dependencies: - encoding: ^0.1.13 - minipass: ^7.0.3 - minipass-sized: ^1.0.3 - minizlib: ^3.0.1 - dependenciesMeta: - encoding: - optional: true - checksum: 416645d1e54c09fdfe64ec1676541ac2f6f2af3abc7ad25f2f22c4518535997c1ecd2c0c586ea8a5c6499ad7d8f97671f50ff38488ada54bf61fde309f731379 - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: ^3.0.0 - checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: ^3.0.0 - checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: ^3.0.0 - checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 - languageName: node - linkType: hard - -"minipass@npm:^3.0.0": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: ^4.0.0 - checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 - languageName: node - linkType: hard - -"minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": - version: 7.1.2 - resolution: "minipass@npm:7.1.2" - checksum: 2bfd325b95c555f2b4d2814d49325691c7bee937d753814861b0b49d5edcda55cbbf22b6b6a60bb91eddac8668771f03c5ff647dcd9d0f798e9548b9cdc46ee3 - languageName: node - linkType: hard - -"minizlib@npm:^3.0.1, minizlib@npm:^3.1.0": - version: 3.1.0 - resolution: "minizlib@npm:3.1.0" - dependencies: - minipass: ^7.1.2 - checksum: a15e6f0128f514b7d41a1c68ce531155447f4669e32d279bba1c1c071ef6c2abd7e4d4579bb59ccc2ed1531346749665968fdd7be8d83eb6b6ae2fe1f3d370a7 - languageName: node - linkType: hard - -"mixin-deep@npm:^1.2.0": - version: 1.3.2 - resolution: "mixin-deep@npm:1.3.2" - dependencies: - for-in: ^1.0.2 - is-extendable: ^1.0.1 - checksum: 820d5a51fcb7479f2926b97f2c3bb223546bc915e6b3a3eb5d906dda871bba569863595424a76682f2b15718252954644f3891437cb7e3f220949bed54b1750d - languageName: node - linkType: hard - -"mkdirp@npm:~0.5.1": - version: 0.5.6 - resolution: "mkdirp@npm:0.5.6" - dependencies: - minimist: ^1.2.6 - bin: - mkdirp: bin/cmd.js - checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 - languageName: node - linkType: hard - -"morgan@npm:^1.9.1": - version: 1.10.1 - resolution: "morgan@npm:1.10.1" - dependencies: - basic-auth: ~2.0.1 - debug: 2.6.9 - depd: ~2.0.0 - on-finished: ~2.3.0 - on-headers: ~1.1.0 - checksum: 8e637a2795d0f6dafb7dbc6a3ef6870731d160123cd56c496d305f1a185c9b0831699c456081328c107b3be49f25fade40519fa1b4990546040595fa44312fe3 - languageName: node - linkType: hard - -"ms@npm:2.0.0": - version: 2.0.0 - resolution: "ms@npm:2.0.0" - checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 - languageName: node - linkType: hard - -"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d - languageName: node - linkType: hard - -"multicast-dns@npm:^7.2.5": - version: 7.2.5 - resolution: "multicast-dns@npm:7.2.5" - dependencies: - dns-packet: ^5.2.2 - thunky: ^1.0.2 - bin: - multicast-dns: cli.js - checksum: 00b8a57df152d4cd0297946320a94b7c3cdf75a46a2247f32f958a8927dea42958177f9b7fdae69fab2e4e033fb3416881af1f5e9055a3e1542888767139e2fb - languageName: node - linkType: hard - -"mz@npm:^2.7.0": - version: 2.7.0 - resolution: "mz@npm:2.7.0" - dependencies: - any-promise: ^1.0.0 - object-assign: ^4.0.1 - thenify-all: ^1.0.0 - checksum: 8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 - languageName: node - linkType: hard - -"nan@npm:^2.12.1": - version: 2.23.1 - resolution: "nan@npm:2.23.1" - dependencies: - node-gyp: latest - checksum: 93b39c8ef832bd4794c8ee4ae06c1017f9e0d313025f075922d549d31326e6b3e53eeea1edccae7a307eb61107aa7cd4238f7612f3ffc1d043c2da9724bb3a67 - languageName: node - linkType: hard - -"nanoid@npm:^3.3.11": - version: 3.3.11 - resolution: "nanoid@npm:3.3.11" - bin: - nanoid: bin/nanoid.cjs - checksum: 3be20d8866a57a6b6d218e82549711c8352ed969f9ab3c45379da28f405363ad4c9aeb0b39e9abc101a529ca65a72ff9502b00bf74a912c4b64a9d62dfd26c29 - languageName: node - linkType: hard - -"nanomatch@npm:^1.2.9": - version: 1.2.13 - resolution: "nanomatch@npm:1.2.13" - 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 - checksum: 54d4166d6ef08db41252eb4e96d4109ebcb8029f0374f9db873bd91a1f896c32ec780d2a2ea65c0b2d7caf1f28d5e1ea33746a470f32146ac8bba821d80d38d8 - languageName: node - linkType: hard - -"natural-compare-lite@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare-lite@npm:1.4.0" - checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 - languageName: node - linkType: hard - -"natural-compare@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare@npm:1.4.0" - checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d - languageName: node - linkType: hard - -"negotiator@npm:0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 - languageName: node - linkType: hard - -"negotiator@npm:^1.0.0": - version: 1.0.0 - resolution: "negotiator@npm:1.0.0" - checksum: 20ebfe79b2d2e7cf9cbc8239a72662b584f71164096e6e8896c8325055497c96f6b80cd22c258e8a2f2aa382a787795ec3ee8b37b422a302c7d4381b0d5ecfbb - languageName: node - linkType: hard - -"negotiator@npm:~0.6.4": - version: 0.6.4 - resolution: "negotiator@npm:0.6.4" - checksum: 7ded10aa02a0707d1d12a9973fdb5954f98547ca7beb60e31cb3a403cc6e8f11138db7a3b0128425cf836fc85d145ec4ce983b2bdf83dca436af879c2d683510 - languageName: node - linkType: hard - -"neo-async@npm:^2.6.2": - version: 2.6.2 - resolution: "neo-async@npm:2.6.2" - checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 - languageName: node - linkType: hard - -"no-case@npm:^3.0.4": - version: 3.0.4 - resolution: "no-case@npm:3.0.4" - dependencies: - lower-case: ^2.0.2 - tslib: ^2.0.3 - checksum: 0b2ebc113dfcf737d48dde49cfebf3ad2d82a8c3188e7100c6f375e30eafbef9e9124aadc3becef237b042fd5eb0aad2fd78669c20972d045bbe7fea8ba0be5c - languageName: node - linkType: hard - -"node-forge@npm:^1": - version: 1.3.1 - resolution: "node-forge@npm:1.3.1" - checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 12.1.0 - resolution: "node-gyp@npm:12.1.0" - dependencies: - env-paths: ^2.2.0 - exponential-backoff: ^3.1.1 - graceful-fs: ^4.2.6 - make-fetch-happen: ^15.0.0 - nopt: ^9.0.0 - proc-log: ^6.0.0 - semver: ^7.3.5 - tar: ^7.5.2 - tinyglobby: ^0.2.12 - which: ^6.0.0 - bin: - node-gyp: bin/node-gyp.js - checksum: 198d91c535fe9940bcdc0db4e578f94cf9872e0d068e88ef2f4656924248bb67245b270b48eded6634c7513841c0cd42f3da3ac9d77c8e16437fcd90703b9ef3 - languageName: node - linkType: hard - -"node-int64@npm:^0.4.0": - version: 0.4.0 - resolution: "node-int64@npm:0.4.0" - checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e - languageName: node - linkType: hard - -"node-releases@npm:^2.0.27": - version: 2.0.27 - resolution: "node-releases@npm:2.0.27" - checksum: a9a54079d894704c2ec728a690b41fbc779a710f5d47b46fa3e460acff08a3e7dfa7108e5599b2db390aa31dac062c47c5118317201f12784188dc5b415f692d - languageName: node - linkType: hard - -"nopt@npm:^9.0.0": - version: 9.0.0 - resolution: "nopt@npm:9.0.0" - dependencies: - abbrev: ^4.0.0 - bin: - nopt: bin/nopt.js - checksum: 7a5d9ab0629eaec1944a95438cc4efa6418ed2834aa8eb21a1bea579a7d8ac3e30120131855376a96ef59ab0e23ad8e0bc94d3349770a95e5cb7119339f7c7fb - languageName: node - linkType: hard - -"normalize-path@npm:^2.1.1": - version: 2.1.1 - resolution: "normalize-path@npm:2.1.1" - dependencies: - remove-trailing-separator: ^1.0.1 - checksum: 7e9cbdcf7f5b8da7aa191fbfe33daf290cdcd8c038f422faf1b8a83c972bf7a6d94c5be34c4326cb00fb63bc0fd97d9fbcfaf2e5d6142332c2cd36d2e1b86cea - languageName: node - linkType: hard - -"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": - version: 3.0.0 - resolution: "normalize-path@npm:3.0.0" - checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 - languageName: node - linkType: hard - -"normalize-range@npm:^0.1.2": - version: 0.1.2 - resolution: "normalize-range@npm:0.1.2" - checksum: 9b2f14f093593f367a7a0834267c24f3cb3e887a2d9809c77d8a7e5fd08738bcd15af46f0ab01cc3a3d660386f015816b5c922cea8bf2ee79777f40874063184 - languageName: node - linkType: hard - -"normalize-url@npm:^6.0.1": - version: 6.1.0 - resolution: "normalize-url@npm:6.1.0" - checksum: 4a4944631173e7d521d6b80e4c85ccaeceb2870f315584fa30121f505a6dfd86439c5e3fdd8cd9e0e291290c41d0c3599f0cb12ab356722ed242584c30348e50 - languageName: node - linkType: hard - -"npm-run-path@npm:^4.0.1": - version: 4.0.1 - resolution: "npm-run-path@npm:4.0.1" - dependencies: - path-key: ^3.0.0 - checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 - languageName: node - linkType: hard - -"nth-check@npm:^1.0.2": - version: 1.0.2 - resolution: "nth-check@npm:1.0.2" - dependencies: - boolbase: ~1.0.0 - checksum: 59e115fdd75b971d0030f42ada3aac23898d4c03aa13371fa8b3339d23461d1badf3fde5aad251fb956aaa75c0a3b9bfcd07c08a34a83b4f9dadfdce1d19337c - languageName: node - linkType: hard - -"nth-check@npm:^2.0.1": - version: 2.1.1 - resolution: "nth-check@npm:2.1.1" - dependencies: - boolbase: ^1.0.0 - checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 - languageName: node - linkType: hard - -"nwsapi@npm:^2.2.0": - version: 2.2.22 - resolution: "nwsapi@npm:2.2.22" - checksum: 9491f0396d8aaf7fd1f9ebbbbff5d9bb9090e5d200263cf31b117bbaad7eb79da86b4c9b9bcd64c4b35f6d7e1630d14ee21c0959c01131e89c1c5e22d72530bf - languageName: node - linkType: hard - -"object-assign@npm:^4, object-assign@npm:^4.0.1, object-assign@npm:^4.1.1, object-assign@npm:latest": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f - languageName: node - linkType: hard - -"object-copy@npm:^0.1.0": - version: 0.1.0 - resolution: "object-copy@npm:0.1.0" - dependencies: - copy-descriptor: ^0.1.0 - define-property: ^0.2.5 - kind-of: ^3.0.3 - checksum: a9e35f07e3a2c882a7e979090360d1a20ab51d1fa19dfdac3aa8873b328a7c4c7683946ee97c824ae40079d848d6740a3788fa14f2185155dab7ed970a72c783 - languageName: node - linkType: hard - -"object-hash@npm:^3.0.0": - version: 3.0.0 - resolution: "object-hash@npm:3.0.0" - checksum: 80b4904bb3857c52cc1bfd0b52c0352532ca12ed3b8a6ff06a90cd209dfda1b95cee059a7625eb9da29537027f68ac4619363491eedb2f5d3dddbba97494fd6c - languageName: node - linkType: hard - -"object-inspect@npm:^1.13.3, object-inspect@npm:^1.13.4": - version: 1.13.4 - resolution: "object-inspect@npm:1.13.4" - checksum: 582810c6a8d2ef988ea0a39e69e115a138dad8f42dd445383b394877e5816eb4268489f316a6f74ee9c4e0a984b3eab1028e3e79d62b1ed67c726661d55c7a8b - languageName: node - linkType: hard - -"object-is@npm:^1.1.5": - version: 1.1.6 - resolution: "object-is@npm:1.1.6" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - checksum: 3ea22759967e6f2380a2cbbd0f737b42dc9ddb2dfefdb159a1b927fea57335e1b058b564bfa94417db8ad58cddab33621a035de6f5e5ad56d89f2dd03e66c6a1 - languageName: node - linkType: hard - -"object-keys@npm:^1.1.1": - version: 1.1.1 - resolution: "object-keys@npm:1.1.1" - checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a - languageName: node - linkType: hard - -"object-visit@npm:^1.0.0": - version: 1.0.1 - resolution: "object-visit@npm:1.0.1" - dependencies: - isobject: ^3.0.0 - checksum: b0ee07f5bf3bb881b881ff53b467ebbde2b37ebb38649d6944a6cd7681b32eedd99da9bd1e01c55facf81f54ed06b13af61aba6ad87f0052982995e09333f790 - languageName: node - linkType: hard - -"object.assign@npm:^4.1.4, object.assign@npm:^4.1.7": - version: 4.1.7 - resolution: "object.assign@npm:4.1.7" - dependencies: - call-bind: ^1.0.8 - call-bound: ^1.0.3 - define-properties: ^1.2.1 - es-object-atoms: ^1.0.0 - has-symbols: ^1.1.0 - object-keys: ^1.1.1 - checksum: 60e07d2651cf4f5528c485f1aa4dbded9b384c47d80e8187cefd11320abb1aebebf78df5483451dfa549059f8281c21f7b4bf7d19e9e5e97d8d617df0df298de - languageName: node - linkType: hard - -"object.entries@npm:^1.1.9": - version: 1.1.9 - resolution: "object.entries@npm:1.1.9" - dependencies: - call-bind: ^1.0.8 - call-bound: ^1.0.4 - define-properties: ^1.2.1 - es-object-atoms: ^1.1.1 - checksum: 0ab2ef331c4d6a53ff600a5d69182948d453107c3a1f7fd91bc29d387538c2aba21d04949a74f57c21907208b1f6fb175567fd1f39f1a7a4046ba1bca762fb41 - languageName: node - linkType: hard - -"object.fromentries@npm:^2.0.8": - version: 2.0.8 - resolution: "object.fromentries@npm:2.0.8" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-object-atoms: ^1.0.0 - checksum: 29b2207a2db2782d7ced83f93b3ff5d425f901945f3665ffda1821e30a7253cd1fd6b891a64279976098137ddfa883d748787a6fea53ecdb51f8df8b8cec0ae1 - languageName: node - linkType: hard - -"object.getownpropertydescriptors@npm:^2.1.0": - version: 2.1.8 - resolution: "object.getownpropertydescriptors@npm:2.1.8" - dependencies: - array.prototype.reduce: ^1.0.6 - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-object-atoms: ^1.0.0 - gopd: ^1.0.1 - safe-array-concat: ^1.1.2 - checksum: 073e492700a7f61ff6c471a2ed96e72473b030a7a105617f03cab192fb4bbc0e6068ef76534ec56afd34baf26b5dc5408de59cb0140ec8abde781e00faa3e63e - languageName: node - linkType: hard - -"object.groupby@npm:^1.0.3": - version: 1.0.3 - resolution: "object.groupby@npm:1.0.3" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - checksum: 0d30693ca3ace29720bffd20b3130451dca7a56c612e1926c0a1a15e4306061d84410bdb1456be2656c5aca53c81b7a3661eceaa362db1bba6669c2c9b6d1982 - languageName: node - linkType: hard - -"object.pick@npm:^1.3.0": - version: 1.3.0 - resolution: "object.pick@npm:1.3.0" - dependencies: - isobject: ^3.0.1 - checksum: 77fb6eed57c67adf75e9901187e37af39f052ef601cb4480386436561357eb9e459e820762f01fd02c5c1b42ece839ad393717a6d1850d848ee11fbabb3e580a - languageName: node - linkType: hard - -"object.values@npm:^1.1.0, object.values@npm:^1.1.6, object.values@npm:^1.2.1": - version: 1.2.1 - resolution: "object.values@npm:1.2.1" - dependencies: - call-bind: ^1.0.8 - call-bound: ^1.0.3 - define-properties: ^1.2.1 - es-object-atoms: ^1.0.0 - checksum: f9b9a2a125ccf8ded29414d7c056ae0d187b833ee74919821fc60d7e216626db220d9cb3cf33f965c84aaaa96133626ca13b80f3c158b673976dc8cfcfcd26bb - languageName: node - linkType: hard - -"obuf@npm:^1.0.0, obuf@npm:^1.1.2": - version: 1.1.2 - resolution: "obuf@npm:1.1.2" - checksum: 41a2ba310e7b6f6c3b905af82c275bf8854896e2e4c5752966d64cbcd2f599cfffd5932006bcf3b8b419dfdacebb3a3912d5d94e10f1d0acab59876c8757f27f - languageName: node - linkType: hard - -"on-finished@npm:2.4.1, on-finished@npm:^2.4.1": - version: 2.4.1 - resolution: "on-finished@npm:2.4.1" - dependencies: - ee-first: 1.1.1 - checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0 - languageName: node - linkType: hard - -"on-finished@npm:~2.3.0": - version: 2.3.0 - resolution: "on-finished@npm:2.3.0" - dependencies: - ee-first: 1.1.1 - checksum: 1db595bd963b0124d6fa261d18320422407b8f01dc65863840f3ddaaf7bcad5b28ff6847286703ca53f4ec19595bd67a2f1253db79fc4094911ec6aa8df1671b - languageName: node - linkType: hard - -"on-headers@npm:~1.1.0": - version: 1.1.0 - resolution: "on-headers@npm:1.1.0" - checksum: 98aa64629f986fb8cc4517dd8bede73c980e31208cba97f4442c330959f60ced3dc6214b83420491f5111fc7c4f4343abe2ea62c85f505cf041d67850f238776 - languageName: node - linkType: hard - -"once@npm:^1.3.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: 1 - checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 - languageName: node - linkType: hard - -"onetime@npm:^5.1.2": - version: 5.1.2 - resolution: "onetime@npm:5.1.2" - dependencies: - mimic-fn: ^2.1.0 - checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 - languageName: node - linkType: hard - -"open@npm:^8.0.9, open@npm:^8.4.0": - version: 8.4.2 - resolution: "open@npm:8.4.2" - dependencies: - define-lazy-prop: ^2.0.0 - is-docker: ^2.1.1 - is-wsl: ^2.2.0 - checksum: 6388bfff21b40cb9bd8f913f9130d107f2ed4724ea81a8fd29798ee322b361ca31fa2cdfb491a5c31e43a3996cfe9566741238c7a741ada8d7af1cb78d85cf26 - languageName: node - linkType: hard - -"opn@npm:latest": - version: 6.0.0 - resolution: "opn@npm:6.0.0" - dependencies: - is-wsl: ^1.1.0 - checksum: aa49c7ffb13d886611d3d74ddca42e132b0437ecde2e86c626fe52eaf223d9cf63c35f01da46b1a91187f275306375c914525c7b98685396d60019861f05b032 - languageName: node - linkType: hard - -"optionator@npm:^0.8.1": - version: 0.8.3 - resolution: "optionator@npm:0.8.3" - 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 - checksum: b8695ddf3d593203e25ab0900e265d860038486c943ff8b774f596a310f8ceebdb30c6832407a8198ba3ec9debe1abe1f51d4aad94843612db3b76d690c61d34 - languageName: node - linkType: hard - -"optionator@npm:^0.9.3": - version: 0.9.4 - resolution: "optionator@npm:0.9.4" - 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.5 - checksum: ecbd010e3dc73e05d239976422d9ef54a82a13f37c11ca5911dff41c98a6c7f0f163b27f922c37e7f8340af9d36febd3b6e9cef508f3339d4c393d7276d716bb - languageName: node - linkType: hard - -"own-keys@npm:^1.0.1": - version: 1.0.1 - resolution: "own-keys@npm:1.0.1" - dependencies: - get-intrinsic: ^1.2.6 - object-keys: ^1.1.1 - safe-push-apply: ^1.0.0 - checksum: cc9dd7d85c4ccfbe8109fce307d581ac7ede7b26de892b537873fbce2dc6a206d89aea0630dbb98e47ce0873517cefeaa7be15fcf94aaf4764a3b34b474a5b61 - languageName: node - linkType: hard - -"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: ^2.0.0 - checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 - languageName: node - linkType: hard - -"p-limit@npm:^3.0.2": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: ^0.1.0 - checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 - languageName: node - linkType: hard - -"p-locate@npm:^3.0.0": - version: 3.0.0 - resolution: "p-locate@npm:3.0.0" - dependencies: - p-limit: ^2.0.0 - checksum: 83991734a9854a05fe9dbb29f707ea8a0599391f52daac32b86f08e21415e857ffa60f0e120bfe7ce0cc4faf9274a50239c7895fc0d0579d08411e513b83a4ae - languageName: node - linkType: hard - -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: ^2.2.0 - checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 - languageName: node - linkType: hard - -"p-locate@npm:^5.0.0": - version: 5.0.0 - resolution: "p-locate@npm:5.0.0" - dependencies: - p-limit: ^3.0.2 - checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 - languageName: node - linkType: hard - -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: ^3.0.0 - checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c - languageName: node - linkType: hard - -"p-map@npm:^7.0.2": - version: 7.0.4 - resolution: "p-map@npm:7.0.4" - checksum: 4be2097e942f2fd3a4f4b0c6585c721f23851de8ad6484d20c472b3ea4937d5cd9a59914c832b1bceac7bf9d149001938036b82a52de0bc381f61ff2d35d26a5 - languageName: node - linkType: hard - -"p-retry@npm:^4.5.0": - version: 4.6.2 - resolution: "p-retry@npm:4.6.2" - dependencies: - "@types/retry": 0.12.0 - retry: ^0.13.1 - checksum: 45c270bfddaffb4a895cea16cb760dcc72bdecb6cb45fef1971fa6ea2e91ddeafddefe01e444ac73e33b1b3d5d29fb0dd18a7effb294262437221ddc03ce0f2e - languageName: node - linkType: hard - -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae - languageName: node - linkType: hard - -"param-case@npm:^3.0.4": - version: 3.0.4 - resolution: "param-case@npm:3.0.4" - dependencies: - dot-case: ^3.0.4 - tslib: ^2.0.3 - checksum: b34227fd0f794e078776eb3aa6247442056cb47761e9cd2c4c881c86d84c64205f6a56ef0d70b41ee7d77da02c3f4ed2f88e3896a8fefe08bdfb4deca037c687 - languageName: node - linkType: hard - -"parent-module@npm:^1.0.0": - version: 1.0.1 - resolution: "parent-module@npm:1.0.1" - dependencies: - callsites: ^3.0.0 - checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff - languageName: node - linkType: hard - -"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": - version: 5.2.0 - resolution: "parse-json@npm:5.2.0" - dependencies: - "@babel/code-frame": ^7.0.0 - error-ex: ^1.3.1 - json-parse-even-better-errors: ^2.3.0 - lines-and-columns: ^1.1.6 - checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 - languageName: node - linkType: hard - -"parse5@npm:6.0.1": - version: 6.0.1 - resolution: "parse5@npm:6.0.1" - checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd - languageName: node - linkType: hard - -"parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": - version: 1.3.3 - resolution: "parseurl@npm:1.3.3" - checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 - languageName: node - linkType: hard - -"pascal-case@npm:^3.1.2": - version: 3.1.2 - resolution: "pascal-case@npm:3.1.2" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - checksum: ba98bfd595fc91ef3d30f4243b1aee2f6ec41c53b4546bfa3039487c367abaa182471dcfc830a1f9e1a0df00c14a370514fa2b3a1aacc68b15a460c31116873e - languageName: node - linkType: hard - -"pascalcase@npm:^0.1.1": - version: 0.1.1 - resolution: "pascalcase@npm:0.1.1" - checksum: f83681c3c8ff75fa473a2bb2b113289952f802ff895d435edd717e7cb898b0408cbdb247117a938edcbc5d141020909846cc2b92c47213d764e2a94d2ad2b925 - languageName: node - linkType: hard - -"path-dirname@npm:^1.0.0": - version: 1.0.2 - resolution: "path-dirname@npm:1.0.2" - checksum: 0d2f6604ae05a252a0025318685f290e2764ecf9c5436f203cdacfc8c0b17c24cdedaa449d766beb94ab88cc7fc70a09ec21e7933f31abc2b719180883e5e33f - languageName: node - linkType: hard - -"path-exists@npm:^3.0.0": - version: 3.0.0 - resolution: "path-exists@npm:3.0.0" - checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 - languageName: node - linkType: hard - -"path-key@npm:^3.0.0, path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 - languageName: node - linkType: hard - -"path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a - languageName: node - linkType: hard - -"path-scurry@npm:^2.0.0": - version: 2.0.1 - resolution: "path-scurry@npm:2.0.1" - dependencies: - lru-cache: ^11.0.0 - minipass: ^7.1.2 - checksum: a022c6c38fed836079d03f96540eafd4cd989acf287b99613c82300107f366e889513ad8b671a2039a9d251122621f9c6fa649f0bd4d50acf95a6943a6692dbf - languageName: node - linkType: hard - -"path-to-regexp@npm:0.1.12": - version: 0.1.12 - resolution: "path-to-regexp@npm:0.1.12" - checksum: ab237858bee7b25ecd885189f175ab5b5161e7b712b360d44f5c4516b8d271da3e4bf7bf0a7b9153ecb04c7d90ce8ff5158614e1208819cf62bac2b08452722e - languageName: node - linkType: hard - -"path-type@npm:^4.0.0": - version: 4.0.0 - resolution: "path-type@npm:4.0.0" - checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 - languageName: node - linkType: hard - -"pause-stream@npm:0.0.11": - version: 0.0.11 - resolution: "pause-stream@npm:0.0.11" - dependencies: - through: ~2.3 - checksum: 3c4a14052a638b92e0c96eb00c0d7977df7f79ea28395250c525d197f1fc02d34ce1165d5362e2e6ebbb251524b94a76f3f0d4abc39ab8b016d97449fe15583c - languageName: node - linkType: hard - -"performance-now@npm:^2.1.0": - version: 2.1.0 - resolution: "performance-now@npm:2.1.0" - checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 - languageName: node - linkType: hard - -"picocolors@npm:^0.2.1": - version: 0.2.1 - resolution: "picocolors@npm:0.2.1" - checksum: 3b0f441f0062def0c0f39e87b898ae7461c3a16ffc9f974f320b44c799418cabff17780ee647fda42b856a1dc45897e2c62047e1b546d94d6d5c6962f45427b2 - languageName: node - linkType: hard - -"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": - version: 1.1.1 - resolution: "picocolors@npm:1.1.1" - checksum: e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 - languageName: node - linkType: hard - -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf - languageName: node - linkType: hard - -"picomatch@npm:^4.0.3": - version: 4.0.3 - resolution: "picomatch@npm:4.0.3" - checksum: 6817fb74eb745a71445debe1029768de55fd59a42b75606f478ee1d0dc1aa6e78b711d041a7c9d5550e042642029b7f373dc1a43b224c4b7f12d23436735dba0 - languageName: node - linkType: hard - -"pify@npm:^2.3.0": - version: 2.3.0 - resolution: "pify@npm:2.3.0" - checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba - languageName: node - linkType: hard - -"pirates@npm:^4.0.1, pirates@npm:^4.0.4": - version: 4.0.7 - resolution: "pirates@npm:4.0.7" - checksum: 3dcbaff13c8b5bc158416feb6dc9e49e3c6be5fddc1ea078a05a73ef6b85d79324bbb1ef59b954cdeff000dbf000c1d39f32dc69310c7b78fbada5171b583e40 - languageName: node - linkType: hard - -"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": - version: 4.2.0 - resolution: "pkg-dir@npm:4.2.0" - dependencies: - find-up: ^4.0.0 - checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 - languageName: node - linkType: hard - -"pkg-up@npm:^3.1.0": - version: 3.1.0 - resolution: "pkg-up@npm:3.1.0" - dependencies: - find-up: ^3.0.0 - checksum: 5bac346b7c7c903613c057ae3ab722f320716199d753f4a7d053d38f2b5955460f3e6ab73b4762c62fd3e947f58e04f1343e92089e7bb6091c90877406fcd8c8 - languageName: node - linkType: hard - -"posix-character-classes@npm:^0.1.0": - version: 0.1.1 - resolution: "posix-character-classes@npm:0.1.1" - checksum: dedb99913c60625a16050cfed2fb5c017648fc075be41ac18474e1c6c3549ef4ada201c8bd9bd006d36827e289c571b6092e1ef6e756cdbab2fd7046b25c6442 - languageName: node - linkType: hard - -"possible-typed-array-names@npm:^1.0.0": - version: 1.1.0 - resolution: "possible-typed-array-names@npm:1.1.0" - checksum: cfcd4f05264eee8fd184cd4897a17890561d1d473434b43ab66ad3673d9c9128981ec01e0cb1d65a52cd6b1eebfb2eae1e53e39b2e0eca86afc823ede7a4f41b - languageName: node - linkType: hard - -"postcss-attribute-case-insensitive@npm:^5.0.2": - version: 5.0.2 - resolution: "postcss-attribute-case-insensitive@npm:5.0.2" - dependencies: - postcss-selector-parser: ^6.0.10 - peerDependencies: - postcss: ^8.2 - checksum: c0b8139f37e68dba372724cba03a53c30716224f0085f98485cada99489beb7c3da9d598ffc1d81519b59d9899291712c9041c250205e6ec0b034bb2c144dcf9 - languageName: node - linkType: hard - -"postcss-browser-comments@npm:^4": - version: 4.0.0 - resolution: "postcss-browser-comments@npm:4.0.0" - peerDependencies: - browserslist: ">=4" - postcss: ">=8" - checksum: 9b8e7094838c2d7bd1ab3ca9cb8d0a78a9a6c8e22f43133ba02db8862fb6c141630e9f590e46f7125cfa4723cacd27b74fa00c05a9907b364dc1f6f17cf13f6f - languageName: node - linkType: hard - -"postcss-calc@npm:^8.2.3": - version: 8.2.4 - resolution: "postcss-calc@npm:8.2.4" - dependencies: - postcss-selector-parser: ^6.0.9 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2.2 - checksum: 314b4cebb0c4ed0cf8356b4bce71eca78f5a7842e6a3942a3bba49db168d5296b2bd93c3f735ae1c616f2651d94719ade33becc03c73d2d79c7394fb7f73eabb - languageName: node - linkType: hard - -"postcss-clamp@npm:^4.1.0": - version: 4.1.0 - resolution: "postcss-clamp@npm:4.1.0" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.4.6 - checksum: 118eec936b3b035dc8d75c89973408f15c5a3de3d1ee210a2b3511e3e431d9c56e6f354b509a90540241e2225ffe3caaa2fdf25919c63348ce4583a28ada642c - languageName: node - linkType: hard - -"postcss-color-functional-notation@npm:^4.2.4": - version: 4.2.4 - resolution: "postcss-color-functional-notation@npm:4.2.4" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: b763e164fe3577a1de96f75e4bf451585c4f80b8ce60799763a51582cc9402d76faed57324a5d5e5556d90ca7ea0ebde565acb820c95e04bee6f36a91b019831 - languageName: node - linkType: hard - -"postcss-color-hex-alpha@npm:^8.0.4": - version: 8.0.4 - resolution: "postcss-color-hex-alpha@npm:8.0.4" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.4 - checksum: a2f3173a60176cf0aea3b7ebbc799b2cb08229127f0fff708fa31efa14e4ded47ca49aff549d8ed92e74ffe24adee32d5b9d557dbde0524fde5fe389bc520b4e - languageName: node - linkType: hard - -"postcss-color-rebeccapurple@npm:^7.1.1": - version: 7.1.1 - resolution: "postcss-color-rebeccapurple@npm:7.1.1" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: 03482f9b8170da0fa014c41a5d88bce7b987471fb73fc456d397222a2455c89ac7f974dd6ddf40fd31907e768aad158057164b7c5f62cee63a6ecf29d47d7467 - languageName: node - linkType: hard - -"postcss-colormin@npm:^5.3.1": - version: 5.3.1 - resolution: "postcss-colormin@npm:5.3.1" - dependencies: - browserslist: ^4.21.4 - caniuse-api: ^3.0.0 - colord: ^2.9.1 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2.15 - checksum: e5778baab30877cd1f51e7dc9d2242a162aeca6360a52956acd7f668c5bc235c2ccb7e4df0370a804d65ebe00c5642366f061db53aa823f9ed99972cebd16024 - languageName: node - linkType: hard - -"postcss-convert-values@npm:^5.1.3": - version: 5.1.3 - resolution: "postcss-convert-values@npm:5.1.3" - dependencies: - browserslist: ^4.21.4 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2.15 - checksum: df48cdaffabf9737f9cfdc58a3dc2841cf282506a7a944f6c70236cff295d3a69f63de6e0935eeb8a9d3f504324e5b4e240abc29e21df9e35a02585d3060aeb5 - languageName: node - linkType: hard - -"postcss-custom-media@npm:^8.0.2": - version: 8.0.2 - resolution: "postcss-custom-media@npm:8.0.2" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.3 - checksum: 887bbbacf6f8fab688123796e5dc1e8283b99f21e4c674235bd929dc8018c50df8634ea08932033ec93baaca32670ef2b87e6632863e0b4d84847375dbde9366 - languageName: node - linkType: hard - -"postcss-custom-properties@npm:^12.1.10": - version: 12.1.11 - resolution: "postcss-custom-properties@npm:12.1.11" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: 421f9d8d6b9c9066919f39251859232efc4dc5dd406c01e62e08734319a6ccda6d03dd6b46063ba0971053ac6ad3f7abade56d67650b3e370851b2291e8e45e6 - languageName: node - linkType: hard - -"postcss-custom-selectors@npm:^6.0.3": - version: 6.0.3 - resolution: "postcss-custom-selectors@npm:6.0.3" - dependencies: - postcss-selector-parser: ^6.0.4 - peerDependencies: - postcss: ^8.3 - checksum: 18080d60a8a77a76d8ddff185104d65418fffd02bbf9824499f807ced7941509ba63828ab8fe3ec1d6b0d6c72a482bb90a79d79cdef58e5f4b30113cca16e69b - languageName: node - linkType: hard - -"postcss-dir-pseudo-class@npm:^6.0.5": - version: 6.0.5 - resolution: "postcss-dir-pseudo-class@npm:6.0.5" - dependencies: - postcss-selector-parser: ^6.0.10 - peerDependencies: - postcss: ^8.2 - checksum: 7810c439d8d1a9072c00f8ab39261a1492873ad170425745bd2819c59767db2f352f906588fc2a7d814e91117900563d7e569ecd640367c7332b26b9829927ef - languageName: node - linkType: hard - -"postcss-discard-comments@npm:^5.1.2": - version: 5.1.2 - resolution: "postcss-discard-comments@npm:5.1.2" - peerDependencies: - postcss: ^8.2.15 - checksum: abfd064ebc27aeaf5037643dd51ffaff74d1fa4db56b0523d073ace4248cbb64ffd9787bd6924b0983a9d0bd0e9bf9f10d73b120e50391dc236e0d26c812fa2a - languageName: node - linkType: hard - -"postcss-discard-duplicates@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-discard-duplicates@npm:5.1.0" - peerDependencies: - postcss: ^8.2.15 - checksum: 88d6964201b1f4ed6bf7a32cefe68e86258bb6e42316ca01d9b32bdb18e7887d02594f89f4a2711d01b51ea6e3fcca8c54be18a59770fe5f4521c61d3eb6ca35 - languageName: node - linkType: hard - -"postcss-discard-empty@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-discard-empty@npm:5.1.1" - peerDependencies: - postcss: ^8.2.15 - checksum: 970adb12fae5c214c0768236ad9a821552626e77dedbf24a8213d19cc2c4a531a757cd3b8cdd3fc22fb1742471b8692a1db5efe436a71236dec12b1318ee8ff4 - languageName: node - linkType: hard - -"postcss-discard-overridden@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-discard-overridden@npm:5.1.0" - peerDependencies: - postcss: ^8.2.15 - checksum: d64d4a545aa2c81b22542895cfcddc787d24119f294d35d29b0599a1c818b3cc51f4ee80b80f5a0a09db282453dd5ac49f104c2117cc09112d0ac9b40b499a41 - languageName: node - linkType: hard - -"postcss-double-position-gradients@npm:^3.1.2": - version: 3.1.2 - resolution: "postcss-double-position-gradients@npm:3.1.2" - dependencies: - "@csstools/postcss-progressive-custom-properties": ^1.1.0 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: ca09bf2aefddc180f1c1413f379eef30d492b8147543413f7251216f23f413c394b2ed10b7cd255e87b18e0c8efe36087ea8b9bfb26a09813f9607a0b8e538b6 - languageName: node - linkType: hard - -"postcss-env-function@npm:^4.0.6": - version: 4.0.6 - resolution: "postcss-env-function@npm:4.0.6" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.4 - checksum: 645b2363cfa21be9dcce7fe4a0f172f0af70c00d6a4c1eb3d7ff7e9cfe26d569e291ec2533114d77b12d610023cd168a92d62c38f2fc969fa333b5ae2bff5ffe - languageName: node - linkType: hard - -"postcss-flexbugs-fixes@npm:^5.0.2": - version: 5.0.2 - resolution: "postcss-flexbugs-fixes@npm:5.0.2" - peerDependencies: - postcss: ^8.1.4 - checksum: 022ddbcca8987303b9be75ff259e9de81b98643adac87a5fc6b52a0fcbbf95e1ac9fd508c4ed67cad76ac5d039b7123de8a0832329481b3c626f5d63f7a28f47 - languageName: node - linkType: hard - -"postcss-focus-visible@npm:^6.0.4": - version: 6.0.4 - resolution: "postcss-focus-visible@npm:6.0.4" - dependencies: - postcss-selector-parser: ^6.0.9 - peerDependencies: - postcss: ^8.4 - checksum: acd010b9ddef9b86ffb5fa604c13515ba83e18bc5118dad0a1281150f412aa0ece056c2c5ac56b55e2599f53ab0f740f5ebfdc51e1f5cfe43b8130bac0096fcc - languageName: node - linkType: hard - -"postcss-focus-within@npm:^5.0.4": - version: 5.0.4 - resolution: "postcss-focus-within@npm:5.0.4" - dependencies: - postcss-selector-parser: ^6.0.9 - peerDependencies: - postcss: ^8.4 - checksum: f23d8ab757345a6deaa807d76e10c88caf4b771c38b60e1593b24aee161c503b5823620e89302226a6ae5e7afdb6ac31809241291912e4176eb594a7ddcc9521 - languageName: node - linkType: hard - -"postcss-font-variant@npm:^5.0.0": - version: 5.0.0 - resolution: "postcss-font-variant@npm:5.0.0" - peerDependencies: - postcss: ^8.1.0 - checksum: a19286589261c2bc3e20470486e1ee3b4daf34271c5020167f30856c9b30c26f23264307cb97a184d503814e1b8c5d8a1f9f64a14fd4fd9551c173dca9424695 - languageName: node - linkType: hard - -"postcss-gap-properties@npm:^3.0.5": - version: 3.0.5 - resolution: "postcss-gap-properties@npm:3.0.5" - peerDependencies: - postcss: ^8.2 - checksum: aed559d6d375203a08a006c9ae8cf5ae90d9edaec5cadd20fe65c1b8ce63c2bc8dfe752d4331880a6e24a300541cde61058be790b7bd9b5d04d470c250fbcd39 - languageName: node - linkType: hard - -"postcss-image-set-function@npm:^4.0.7": - version: 4.0.7 - resolution: "postcss-image-set-function@npm:4.0.7" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: 7e509330986de14250ead1a557e8da8baaf66ebe8a40354a5dff60ab40d99a483d92aa57d52713251ca1adbf0055ef476c5702b0d0ba5f85a4f407367cdabac0 - languageName: node - linkType: hard - -"postcss-import@npm:^15.1.0": - version: 15.1.0 - resolution: "postcss-import@npm:15.1.0" - dependencies: - postcss-value-parser: ^4.0.0 - read-cache: ^1.0.0 - resolve: ^1.1.7 - peerDependencies: - postcss: ^8.0.0 - checksum: 7bd04bd8f0235429009d0022cbf00faebc885de1d017f6d12ccb1b021265882efc9302006ba700af6cab24c46bfa2f3bc590be3f9aee89d064944f171b04e2a3 - languageName: node - linkType: hard - -"postcss-initial@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-initial@npm:4.0.1" - peerDependencies: - postcss: ^8.0.0 - checksum: 6956953853865de79c39d11533a2860e9f38b770bb284d0010d98a00b9469e22de344e4e5fd8208614d797030487e8918dd2f2c37d9e24d4dd59d565d4fc3e12 - languageName: node - linkType: hard - -"postcss-js@npm:^4.0.1": - version: 4.1.0 - resolution: "postcss-js@npm:4.1.0" - dependencies: - camelcase-css: ^2.0.1 - peerDependencies: - postcss: ^8.4.21 - checksum: 1fe3d51770f66d301e63103c15830d26875b1ae9bbe3ba6bf61256860edde3d9c0de5aa0c3e34d34b80c099f5d95b589cfcc92dac718253c8351aa8e05a8d80a - languageName: node - linkType: hard - -"postcss-lab-function@npm:^4.2.1": - version: 4.2.1 - resolution: "postcss-lab-function@npm:4.2.1" - dependencies: - "@csstools/postcss-progressive-custom-properties": ^1.1.0 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: 26ac74b430011271b5581beba69b2cd788f56375fcb64c90f6ec1577379af85f6022dc38c410ff471dac520c7ddc289160a6a16cca3c7ff76f5af7e90d31eaa3 - languageName: node - linkType: hard - -"postcss-load-config@npm:^4.0.2 || ^5.0 || ^6.0": - version: 6.0.1 - resolution: "postcss-load-config@npm:6.0.1" - dependencies: - lilconfig: ^3.1.1 - peerDependencies: - jiti: ">=1.21.0" - postcss: ">=8.0.9" - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true - tsx: - optional: true - yaml: - optional: true - checksum: 701061264cce7646e53e4cecd14aa95432a9bd508f30520a31dfa4c86fe9252d5d8d0204fdbfbddc1559c9b8791556e9c4b92c56070f5fca0a6c60e5ee9ad0fd - languageName: node - linkType: hard - -"postcss-loader@npm:^6.2.1": - version: 6.2.1 - resolution: "postcss-loader@npm:6.2.1" - dependencies: - cosmiconfig: ^7.0.0 - klona: ^2.0.5 - semver: ^7.3.5 - peerDependencies: - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 - checksum: e40ae79c3e39df37014677a817b001bd115d8b10dedf53a07b97513d93b1533cd702d7a48831bdd77b9a9484b1ec84a5d4a723f80e83fb28682c75b5e65e8a90 - languageName: node - linkType: hard - -"postcss-logical@npm:^5.0.4": - version: 5.0.4 - resolution: "postcss-logical@npm:5.0.4" - peerDependencies: - postcss: ^8.4 - checksum: 17c71291ed6a03883a5aa54b9923b874c32710707d041a0f0752e6febdb09dee5d2abf4ef271978d932e4a4c948f349bb23edf633c03e3427ba15e71bfc66ac7 - languageName: node - linkType: hard - -"postcss-media-minmax@npm:^5.0.0": - version: 5.0.0 - resolution: "postcss-media-minmax@npm:5.0.0" - peerDependencies: - postcss: ^8.1.0 - checksum: 2cd7283e07a1ac1acdcc3ecbaa0e9932f8d1e7647e7aeb14d91845fcb890d60d7257ec70c825cae8d48ae80a08cc77ebc4021a0dfa32360e0cd991e2bc021607 - languageName: node - linkType: hard - -"postcss-merge-longhand@npm:^5.1.7": - version: 5.1.7 - resolution: "postcss-merge-longhand@npm:5.1.7" - dependencies: - postcss-value-parser: ^4.2.0 - stylehacks: ^5.1.1 - peerDependencies: - postcss: ^8.2.15 - checksum: 81c3fc809f001b9b71a940148e242bdd6e2d77713d1bfffa15eb25c1f06f6648d5e57cb21645746d020a2a55ff31e1740d2b27900442913a9d53d8a01fb37e1b - languageName: node - linkType: hard - -"postcss-merge-rules@npm:^5.1.4": - version: 5.1.4 - resolution: "postcss-merge-rules@npm:5.1.4" - dependencies: - browserslist: ^4.21.4 - caniuse-api: ^3.0.0 - cssnano-utils: ^3.1.0 - postcss-selector-parser: ^6.0.5 - peerDependencies: - postcss: ^8.2.15 - checksum: 8ab6a569babe6cb412d6612adee74f053cea7edb91fa013398515ab36754b1fec830d68782ed8cdfb44cffdc6b78c79eab157bff650f428aa4460d3f3857447e - languageName: node - linkType: hard - -"postcss-minify-font-values@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-minify-font-values@npm:5.1.0" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2.15 - checksum: 35e858fa41efa05acdeb28f1c76579c409fdc7eabb1744c3bd76e895bb9fea341a016746362a67609688ab2471f587202b9a3e14ea28ad677754d663a2777ece - languageName: node - linkType: hard - -"postcss-minify-gradients@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-minify-gradients@npm:5.1.1" - dependencies: - colord: ^2.9.1 - cssnano-utils: ^3.1.0 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2.15 - checksum: 27354072a07c5e6dab36731103b94ca2354d4ed3c5bc6aacfdf2ede5a55fa324679d8fee5450800bc50888dbb5e9ed67569c0012040c2be128143d0cebb36d67 - languageName: node - linkType: hard - -"postcss-minify-params@npm:^5.1.4": - version: 5.1.4 - resolution: "postcss-minify-params@npm:5.1.4" - dependencies: - browserslist: ^4.21.4 - cssnano-utils: ^3.1.0 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2.15 - checksum: bd63e2cc89edcf357bb5c2a16035f6d02ef676b8cede4213b2bddd42626b3d428403849188f95576fc9f03e43ebd73a29bf61d33a581be9a510b13b7f7f100d5 - languageName: node - linkType: hard - -"postcss-minify-selectors@npm:^5.2.1": - version: 5.2.1 - resolution: "postcss-minify-selectors@npm:5.2.1" - dependencies: - postcss-selector-parser: ^6.0.5 - peerDependencies: - postcss: ^8.2.15 - checksum: 6fdbc84f99a60d56b43df8930707da397775e4c36062a106aea2fd2ac81b5e24e584a1892f4baa4469fa495cb87d1422560eaa8f6c9d500f9f0b691a5f95bab5 - languageName: node - linkType: hard - -"postcss-modules-extract-imports@npm:^3.1.0": - version: 3.1.0 - resolution: "postcss-modules-extract-imports@npm:3.1.0" - peerDependencies: - postcss: ^8.1.0 - checksum: b9192e0f4fb3d19431558be6f8af7ca45fc92baaad9b2778d1732a5880cd25c3df2074ce5484ae491e224f0d21345ffc2d419bd51c25b019af76d7a7af88c17f - languageName: node - linkType: hard - -"postcss-modules-local-by-default@npm:^4.0.5": - version: 4.2.0 - resolution: "postcss-modules-local-by-default@npm:4.2.0" - dependencies: - icss-utils: ^5.0.0 - postcss-selector-parser: ^7.0.0 - postcss-value-parser: ^4.1.0 - peerDependencies: - postcss: ^8.1.0 - checksum: 720d145453f82ad5f1c1d0ff7386d64722f0812808e4132e573c1a49909745e109fcce3792a0b0cb18770dbeb3d9741867e81c698dc8353a18bc664b7d6d9533 - languageName: node - linkType: hard - -"postcss-modules-scope@npm:^3.2.0": - version: 3.2.1 - resolution: "postcss-modules-scope@npm:3.2.1" - dependencies: - postcss-selector-parser: ^7.0.0 - peerDependencies: - postcss: ^8.1.0 - checksum: 085f65863bb7d8bf08209a979ceb22b2b07bb466574e0e698d34aaad832d614957bb05f2418348a14e4035f65e23b2be2951369d26ea429dd5762c6a020f0f7c - languageName: node - linkType: hard - -"postcss-modules-values@npm:^4.0.0": - version: 4.0.0 - resolution: "postcss-modules-values@npm:4.0.0" - dependencies: - icss-utils: ^5.0.0 - peerDependencies: - postcss: ^8.1.0 - checksum: f7f2cdf14a575b60e919ad5ea52fed48da46fe80db2733318d71d523fc87db66c835814940d7d05b5746b0426e44661c707f09bdb83592c16aea06e859409db6 - languageName: node - linkType: hard - -"postcss-nested@npm:^6.2.0": - version: 6.2.0 - resolution: "postcss-nested@npm:6.2.0" - dependencies: - postcss-selector-parser: ^6.1.1 - peerDependencies: - postcss: ^8.2.14 - checksum: 2c86ecf2d0ce68f27c87c7e24ae22dc6dd5515a89fcaf372b2627906e11f5c1f36e4a09e4c15c20fd4a23d628b3d945c35839f44496fbee9a25866258006671b - languageName: node - linkType: hard - -"postcss-nesting@npm:^10.2.0": - version: 10.2.0 - resolution: "postcss-nesting@npm:10.2.0" - dependencies: - "@csstools/selector-specificity": ^2.0.0 - postcss-selector-parser: ^6.0.10 - peerDependencies: - postcss: ^8.2 - checksum: 25e6e66186bd7f18bc4628cf0f43e02189268f28a449aa4a63b33b8f2c33745af99acfcd4ce2ac69319dc850e83b28dbaabcf517e3977dfe20e37fed0e032c7d - languageName: node - linkType: hard - -"postcss-normalize-charset@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-charset@npm:5.1.0" - peerDependencies: - postcss: ^8.2.15 - checksum: e79d92971fc05b8b3c9b72f3535a574e077d13c69bef68156a0965f397fdf157de670da72b797f57b0e3bac8f38155b5dd1735ecab143b9cc4032d72138193b4 - languageName: node - linkType: hard - -"postcss-normalize-display-values@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-display-values@npm:5.1.0" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2.15 - checksum: b6eb7b9b02c3bdd62bbc54e01e2b59733d73a1c156905d238e178762962efe0c6f5104544da39f32cade8a4fb40f10ff54b63a8ebfbdff51e8780afb9fbdcf86 - languageName: node - linkType: hard - -"postcss-normalize-positions@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-normalize-positions@npm:5.1.1" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2.15 - checksum: d9afc233729c496463c7b1cdd06732469f401deb387484c3a2422125b46ec10b4af794c101f8c023af56f01970b72b535e88373b9058ecccbbf88db81662b3c4 - languageName: node - linkType: hard - -"postcss-normalize-repeat-style@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-normalize-repeat-style@npm:5.1.1" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2.15 - checksum: 2c6ad2b0ae10a1fda156b948c34f78c8f1e185513593de4d7e2480973586675520edfec427645fa168c337b0a6b3ceca26f92b96149741ca98a9806dad30d534 - languageName: node - linkType: hard - -"postcss-normalize-string@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-string@npm:5.1.0" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2.15 - checksum: 6e549c6e5b2831e34c7bdd46d8419e2278f6af1d5eef6d26884a37c162844e60339340c57e5e06058cdbe32f27fc6258eef233e811ed2f71168ef2229c236ada - languageName: node - linkType: hard - -"postcss-normalize-timing-functions@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-timing-functions@npm:5.1.0" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2.15 - checksum: da550f50e90b0b23e17b67449a7d1efd1aa68288e66d4aa7614ca6f5cc012896be1972b7168eee673d27da36504faccf7b9f835c0f7e81243f966a42c8c030aa - languageName: node - linkType: hard - -"postcss-normalize-unicode@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-normalize-unicode@npm:5.1.1" - dependencies: - browserslist: ^4.21.4 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2.15 - checksum: 4c24d26cc9f4b19a9397db4e71dd600dab690f1de8e14a3809e2aa1452dbc3791c208c38a6316bbc142f29e934fdf02858e68c94038c06174d78a4937e0f273c - languageName: node - linkType: hard - -"postcss-normalize-url@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-url@npm:5.1.0" - dependencies: - normalize-url: ^6.0.1 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2.15 - checksum: 3bd4b3246d6600230bc827d1760b24cb3101827ec97570e3016cbe04dc0dd28f4dbe763245d1b9d476e182c843008fbea80823061f1d2219b96f0d5c724a24c0 - languageName: node - linkType: hard - -"postcss-normalize-whitespace@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-normalize-whitespace@npm:5.1.1" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2.15 - checksum: 12d8fb6d1c1cba208cc08c1830959b7d7ad447c3f5581873f7e185f99a9a4230c43d3af21ca12c818e4690a5085a95b01635b762ad4a7bef69d642609b4c0e19 - languageName: node - linkType: hard - -"postcss-normalize@npm:^10.0.1": - version: 10.0.1 - resolution: "postcss-normalize@npm:10.0.1" - dependencies: - "@csstools/normalize.css": "*" - postcss-browser-comments: ^4 - sanitize.css: "*" - peerDependencies: - browserslist: ">= 4" - postcss: ">= 8" - checksum: af67ade84e5d65de0cf84cde479840da96ffb2037fe6bf86737788216f67e414622e718e7d84182885ad65fa948150e4a0c3e454ca63e619dd5c7b4eb4224c39 - languageName: node - linkType: hard - -"postcss-opacity-percentage@npm:^1.1.2": - version: 1.1.3 - resolution: "postcss-opacity-percentage@npm:1.1.3" - peerDependencies: - postcss: ^8.2 - checksum: 54d1b8ca68035bc1a5788aaabdbc3b66ffee34b5a2412cecf073627dad7e3f2bae07c01fac3bc7f46bbac5da3291ac9ddcf74bfee26dfd86f9f96c847a0afc13 - languageName: node - linkType: hard - -"postcss-ordered-values@npm:^5.1.3": - version: 5.1.3 - resolution: "postcss-ordered-values@npm:5.1.3" - dependencies: - cssnano-utils: ^3.1.0 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2.15 - checksum: 6f3ca85b6ceffc68aadaf319d9ee4c5ac16d93195bf8cba2d1559b631555ad61941461cda6d3909faab86e52389846b2b36345cff8f0c3f4eb345b1b8efadcf9 - languageName: node - linkType: hard - -"postcss-overflow-shorthand@npm:^3.0.4": - version: 3.0.4 - resolution: "postcss-overflow-shorthand@npm:3.0.4" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: 74009022491e3901263f8f5811630393480323e51f5d23ef17f3fdc7e03bf9c2502a632f3ba8fe6a468b57590f13b2fa3b17a68ef19653589e76277607696743 - languageName: node - linkType: hard - -"postcss-page-break@npm:^3.0.4": - version: 3.0.4 - resolution: "postcss-page-break@npm:3.0.4" - peerDependencies: - postcss: ^8 - checksum: a7d08c945fc691f62c77ac701e64722218b14ec5c8fc1972b8af9c21553492d40808cf95e61b9697b1dacaf7e6180636876d7fee314f079e6c9e39ac1b1edc6f - languageName: node - linkType: hard - -"postcss-place@npm:^7.0.5": - version: 7.0.5 - resolution: "postcss-place@npm:7.0.5" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: 903fec0c313bb7ec20f2c8f0a125866fb7804aa3186b5b2c7c2d58cb9039ff301461677a060e9db643d1aaffaf80a0ff71e900a6da16705dad6b49c804cb3c73 - languageName: node - linkType: hard - -"postcss-preset-env@npm:^7.0.1": - version: 7.8.3 - resolution: "postcss-preset-env@npm:7.8.3" - dependencies: - "@csstools/postcss-cascade-layers": ^1.1.1 - "@csstools/postcss-color-function": ^1.1.1 - "@csstools/postcss-font-format-keywords": ^1.0.1 - "@csstools/postcss-hwb-function": ^1.0.2 - "@csstools/postcss-ic-unit": ^1.0.1 - "@csstools/postcss-is-pseudo-class": ^2.0.7 - "@csstools/postcss-nested-calc": ^1.0.0 - "@csstools/postcss-normalize-display-values": ^1.0.1 - "@csstools/postcss-oklab-function": ^1.1.1 - "@csstools/postcss-progressive-custom-properties": ^1.3.0 - "@csstools/postcss-stepped-value-functions": ^1.0.1 - "@csstools/postcss-text-decoration-shorthand": ^1.0.0 - "@csstools/postcss-trigonometric-functions": ^1.0.2 - "@csstools/postcss-unset-value": ^1.0.2 - autoprefixer: ^10.4.13 - browserslist: ^4.21.4 - css-blank-pseudo: ^3.0.3 - css-has-pseudo: ^3.0.4 - css-prefers-color-scheme: ^6.0.3 - cssdb: ^7.1.0 - postcss-attribute-case-insensitive: ^5.0.2 - postcss-clamp: ^4.1.0 - postcss-color-functional-notation: ^4.2.4 - postcss-color-hex-alpha: ^8.0.4 - postcss-color-rebeccapurple: ^7.1.1 - postcss-custom-media: ^8.0.2 - postcss-custom-properties: ^12.1.10 - postcss-custom-selectors: ^6.0.3 - postcss-dir-pseudo-class: ^6.0.5 - postcss-double-position-gradients: ^3.1.2 - postcss-env-function: ^4.0.6 - postcss-focus-visible: ^6.0.4 - postcss-focus-within: ^5.0.4 - postcss-font-variant: ^5.0.0 - postcss-gap-properties: ^3.0.5 - postcss-image-set-function: ^4.0.7 - postcss-initial: ^4.0.1 - postcss-lab-function: ^4.2.1 - postcss-logical: ^5.0.4 - postcss-media-minmax: ^5.0.0 - postcss-nesting: ^10.2.0 - postcss-opacity-percentage: ^1.1.2 - postcss-overflow-shorthand: ^3.0.4 - postcss-page-break: ^3.0.4 - postcss-place: ^7.0.5 - postcss-pseudo-class-any-link: ^7.1.6 - postcss-replace-overflow-wrap: ^4.0.0 - postcss-selector-not: ^6.0.1 - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2 - checksum: 71bfb697ffc55e27895b2bf3a579dd9b4c1321872816091935e33d6f659cab60795a03bb022dc8a4cab48fd5680a419fe9ae5d61a3a3d8c785ec9308f323e787 - languageName: node - linkType: hard - -"postcss-pseudo-class-any-link@npm:^7.1.6": - version: 7.1.6 - resolution: "postcss-pseudo-class-any-link@npm:7.1.6" - dependencies: - postcss-selector-parser: ^6.0.10 - peerDependencies: - postcss: ^8.2 - checksum: 43aa18ea1ef1b168f61310856dd92f46ceb3dc60b6cf820e079ca1a849df5cc0f12a1511bdc1811a23f03d60ddcc959200c80c3f9a7b57feebe32bab226afb39 - languageName: node - linkType: hard - -"postcss-reduce-initial@npm:^5.1.2": - version: 5.1.2 - resolution: "postcss-reduce-initial@npm:5.1.2" - dependencies: - browserslist: ^4.21.4 - caniuse-api: ^3.0.0 - peerDependencies: - postcss: ^8.2.15 - checksum: 55db697f85231a81f1969d54c894e4773912d9ddb914f9b03d2e73abc4030f2e3bef4d7465756d0c1acfcc2c2d69974bfb50a972ab27546a7d68b5a4fc90282b - languageName: node - linkType: hard - -"postcss-reduce-transforms@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-reduce-transforms@npm:5.1.0" - dependencies: - postcss-value-parser: ^4.2.0 - peerDependencies: - postcss: ^8.2.15 - checksum: 0c6af2cba20e3ff63eb9ad045e634ddfb9c3e5c0e614c020db2a02f3aa20632318c4ede9e0c995f9225d9a101e673de91c0a6e10bb2fa5da6d6c75d15a55882f - languageName: node - linkType: hard - -"postcss-replace-overflow-wrap@npm:^4.0.0": - version: 4.0.0 - resolution: "postcss-replace-overflow-wrap@npm:4.0.0" - peerDependencies: - postcss: ^8.0.3 - checksum: 3ffe20b300a4c377a11c588b142740d8557e03c707474c45234c934190ac374750ddc92c7906c373471d273a20504a429c2062c21fdcaff830fb28e0a81ac1dc - languageName: node - linkType: hard - -"postcss-selector-not@npm:^6.0.1": - version: 6.0.1 - resolution: "postcss-selector-not@npm:6.0.1" - dependencies: - postcss-selector-parser: ^6.0.10 - peerDependencies: - postcss: ^8.2 - checksum: fe523a0219e4bd34f04498534bb9e8aec3193f3585eafe4c388d086955b41201cae71fd20980ca465acade7f182029b43dbd5ca7e9d50bf34bbcaf1d19fe3ee6 - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9, postcss-selector-parser@npm:^6.1.1, postcss-selector-parser@npm:^6.1.2": - version: 6.1.2 - resolution: "postcss-selector-parser@npm:6.1.2" - dependencies: - cssesc: ^3.0.0 - util-deprecate: ^1.0.2 - checksum: ce9440fc42a5419d103f4c7c1847cb75488f3ac9cbe81093b408ee9701193a509f664b4d10a2b4d82c694ee7495e022f8f482d254f92b7ffd9ed9dea696c6f84 - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^7.0.0": - version: 7.1.0 - resolution: "postcss-selector-parser@npm:7.1.0" - dependencies: - cssesc: ^3.0.0 - util-deprecate: ^1.0.2 - checksum: 1300e7871dd60a5132ee5462cc6e94edd4f3df28462b2495ca9ff025bd83768a908e892a18fde62cae63ff63524641baa6d58c64120f04fe6884b916663ce737 - languageName: node - linkType: hard - -"postcss-svgo@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-svgo@npm:5.1.0" - dependencies: - postcss-value-parser: ^4.2.0 - svgo: ^2.7.0 - peerDependencies: - postcss: ^8.2.15 - checksum: d86eb5213d9f700cf5efe3073799b485fb7cacae0c731db3d7749c9c2b1c9bc85e95e0baeca439d699ff32ea24815fc916c4071b08f67ed8219df229ce1129bd - languageName: node - linkType: hard - -"postcss-unique-selectors@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-unique-selectors@npm:5.1.1" - dependencies: - postcss-selector-parser: ^6.0.5 - peerDependencies: - postcss: ^8.2.15 - checksum: 637e7b786e8558265775c30400c54b6b3b24d4748923f4a39f16a65fd0e394f564ccc9f0a1d3c0e770618a7637a7502ea1d0d79f731d429cb202255253c23278 - languageName: node - linkType: hard - -"postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": - version: 4.2.0 - resolution: "postcss-value-parser@npm:4.2.0" - checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f - languageName: node - linkType: hard - -"postcss@npm:^7.0.35": - version: 7.0.39 - resolution: "postcss@npm:7.0.39" - dependencies: - picocolors: ^0.2.1 - source-map: ^0.6.1 - checksum: 4ac793f506c23259189064bdc921260d869a115a82b5e713973c5af8e94fbb5721a5cc3e1e26840500d7e1f1fa42a209747c5b1a151918a9bc11f0d7ed9048e3 - languageName: node - linkType: hard - -"postcss@npm:^8.3.5, postcss@npm:^8.4.33, postcss@npm:^8.4.4, postcss@npm:^8.4.47": - version: 8.5.6 - resolution: "postcss@npm:8.5.6" - dependencies: - nanoid: ^3.3.11 - picocolors: ^1.1.1 - source-map-js: ^1.2.1 - checksum: 20f3b5d673ffeec2b28d65436756d31ee33f65b0a8bedb3d32f556fbd5973be38c3a7fb5b959a5236c60a5db7b91b0a6b14ffaac0d717dce1b903b964ee1c1bb - languageName: node - linkType: hard - -"prelude-ls@npm:^1.2.1": - version: 1.2.1 - resolution: "prelude-ls@npm:1.2.1" - checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a - languageName: node - linkType: hard - -"prelude-ls@npm:~1.1.2": - version: 1.1.2 - resolution: "prelude-ls@npm:1.1.2" - checksum: c4867c87488e4a0c233e158e4d0d5565b609b105d75e4c05dc760840475f06b731332eb93cc8c9cecb840aa8ec323ca3c9a56ad7820ad2e63f0261dadcb154e4 - languageName: node - linkType: hard - -"pretty-bytes@npm:^5.3.0, pretty-bytes@npm:^5.4.1": - version: 5.6.0 - resolution: "pretty-bytes@npm:5.6.0" - checksum: 9c082500d1e93434b5b291bd651662936b8bd6204ec9fa17d563116a192d6d86b98f6d328526b4e8d783c07d5499e2614a807520249692da9ec81564b2f439cd - languageName: node - linkType: hard - -"pretty-error@npm:^4.0.0": - version: 4.0.0 - resolution: "pretty-error@npm:4.0.0" - dependencies: - lodash: ^4.17.20 - renderkid: ^3.0.0 - checksum: a5b9137365690104ded6947dca2e33360bf55e62a4acd91b1b0d7baa3970e43754c628cc9e16eafbdd4e8f8bcb260a5865475d4fc17c3106ff2d61db4e72cdf3 - languageName: node - linkType: hard - -"pretty-format@npm:^27.0.2, pretty-format@npm:^27.5.1": - version: 27.5.1 - resolution: "pretty-format@npm:27.5.1" - dependencies: - ansi-regex: ^5.0.1 - ansi-styles: ^5.0.0 - react-is: ^17.0.1 - checksum: cf610cffcb793885d16f184a62162f2dd0df31642d9a18edf4ca298e909a8fe80bdbf556d5c9573992c102ce8bf948691da91bf9739bee0ffb6e79c8a8a6e088 - languageName: node - linkType: hard - -"pretty-format@npm:^28.1.3": - version: 28.1.3 - resolution: "pretty-format@npm:28.1.3" - dependencies: - "@jest/schemas": ^28.1.3 - ansi-regex: ^5.0.1 - ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: e69f857358a3e03d271252d7524bec758c35e44680287f36c1cb905187fbc82da9981a6eb07edfd8a03bc3cbeebfa6f5234c13a3d5b59f2bbdf9b4c4053e0a7f - languageName: node - linkType: hard - -"proc-log@npm:^6.0.0": - version: 6.0.0 - resolution: "proc-log@npm:6.0.0" - checksum: 005a2aa24b8cbc98ca24fc49ccbdbbefb1f7932fcc96664e1008c59459ea66e8cc8bd463716d6c67e39327d45e8e080eb73bf32be70461425593b0f0d6acb91f - languageName: node - linkType: hard - -"process-nextick-args@npm:~2.0.0": - version: 2.0.1 - resolution: "process-nextick-args@npm:2.0.1" - checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: ^2.0.2 - retry: ^0.12.0 - checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 - languageName: node - linkType: hard - -"promise@npm:^8.1.0": - version: 8.3.0 - resolution: "promise@npm:8.3.0" - dependencies: - asap: ~2.0.6 - checksum: a69f0ddbddf78ffc529cffee7ad950d307347615970564b17988ce43fbe767af5c738a9439660b24a9a8cbea106c0dcbb6c2b20e23b7e96a8e89e5c2679e94d5 - languageName: node - linkType: hard - -"prompts@npm:^2.0.1, prompts@npm:^2.4.2": - version: 2.4.2 - resolution: "prompts@npm:2.4.2" - dependencies: - kleur: ^3.0.3 - sisteransi: ^1.0.5 - checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d - languageName: node - linkType: hard - -"prop-types@npm:^15.6.2, prop-types@npm:^15.8.1": - version: 15.8.1 - resolution: "prop-types@npm:15.8.1" - dependencies: - loose-envify: ^1.4.0 - object-assign: ^4.1.1 - react-is: ^16.13.1 - checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 - languageName: node - linkType: hard - -"proxy-addr@npm:~2.0.7": - version: 2.0.7 - resolution: "proxy-addr@npm:2.0.7" - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - checksum: 29c6990ce9364648255454842f06f8c46fcd124d3e6d7c5066df44662de63cdc0bad032e9bf5a3d653ff72141cc7b6019873d685708ac8210c30458ad99f2b74 - languageName: node - linkType: hard - -"proxy-from-env@npm:^1.1.0": - version: 1.1.0 - resolution: "proxy-from-env@npm:1.1.0" - checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 - languageName: node - linkType: hard - -"proxy-middleware@npm:latest": - version: 0.15.0 - resolution: "proxy-middleware@npm:0.15.0" - checksum: 6f537739fb99dc4118daa353795ed2244d11bd24fe89d1ca4570f70e7447f6355296411d965d818d7eacb6737e599d5d875bade8b40fdfe44581fff0fcaf4900 - languageName: node - linkType: hard - -"psl@npm:^1.1.33": - version: 1.15.0 - resolution: "psl@npm:1.15.0" - dependencies: - punycode: ^2.3.1 - checksum: 6f777d82eecfe1c2406dadbc15e77467b186fec13202ec887a45d0209a2c6fca530af94a462a477c3c4a767ad892ec9ede7c482d98f61f653dd838b50e89dc15 - languageName: node - linkType: hard - -"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1": - version: 2.3.1 - resolution: "punycode@npm:2.3.1" - checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 - languageName: node - linkType: hard - -"q@npm:^1.1.2": - version: 1.5.1 - resolution: "q@npm:1.5.1" - checksum: 147baa93c805bc1200ed698bdf9c72e9e42c05f96d007e33a558b5fdfd63e5ea130e99313f28efc1783e90e6bdb4e48b67a36fcc026b7b09202437ae88a1fb12 - languageName: node - linkType: hard - -"qs@npm:6.13.0": - version: 6.13.0 - resolution: "qs@npm:6.13.0" - dependencies: - side-channel: ^1.0.6 - checksum: e9404dc0fc2849245107108ce9ec2766cde3be1b271de0bf1021d049dc5b98d1a2901e67b431ac5509f865420a7ed80b7acb3980099fe1c118a1c5d2e1432ad8 - languageName: node - linkType: hard - -"querystringify@npm:^2.1.1": - version: 2.2.0 - resolution: "querystringify@npm:2.2.0" - checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 - languageName: node - linkType: hard - -"raf@npm:^3.4.1": - version: 3.4.1 - resolution: "raf@npm:3.4.1" - dependencies: - performance-now: ^2.1.0 - checksum: 50ba284e481c8185dbcf45fc4618ba3aec580bb50c9121385d5698cb6012fe516d2015b1df6dd407a7b7c58d44be8086108236affbce1861edd6b44637c8cd52 - languageName: node - linkType: hard - -"randombytes@npm:^2.1.0": - version: 2.1.0 - resolution: "randombytes@npm:2.1.0" - dependencies: - safe-buffer: ^5.1.0 - checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 - languageName: node - linkType: hard - -"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": - version: 1.2.1 - resolution: "range-parser@npm:1.2.1" - checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 - languageName: node - linkType: hard - -"raw-body@npm:2.5.2": - version: 2.5.2 - resolution: "raw-body@npm:2.5.2" - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676 - languageName: node - linkType: hard - -"react-app-polyfill@npm:^3.0.0": - version: 3.0.0 - resolution: "react-app-polyfill@npm:3.0.0" - dependencies: - core-js: ^3.19.2 - object-assign: ^4.1.1 - promise: ^8.1.0 - raf: ^3.4.1 - regenerator-runtime: ^0.13.9 - whatwg-fetch: ^3.6.2 - checksum: 1bb031080af15397d6eb9c69a0c2e93799991f7197a086e4409ba719398f1256b542a3d6c9a34673d516c684eef3e8226c99b335982593851f58f65f6e43571b - languageName: node - linkType: hard - -"react-dev-utils@npm:^12.0.1": - version: 12.0.1 - resolution: "react-dev-utils@npm:12.0.1" - 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 - checksum: 2c6917e47f03d9595044770b0f883a61c6b660fcaa97b8ba459a1d57c9cca9aa374cd51296b22d461ff5e432105dbe6f04732dab128e52729c79239e1c23ab56 - languageName: node - linkType: hard - -"react-dom@npm:^17.0.2": - version: 17.0.2 - resolution: "react-dom@npm:17.0.2" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - scheduler: ^0.20.2 - peerDependencies: - react: 17.0.2 - checksum: 1c1eaa3bca7c7228d24b70932e3d7c99e70d1d04e13bb0843bbf321582bc25d7961d6b8a6978a58a598af2af496d1cedcfb1bf65f6b0960a0a8161cb8dab743c - languageName: node - linkType: hard - -"react-error-overlay@npm:^6.0.11": - version: 6.1.0 - resolution: "react-error-overlay@npm:6.1.0" - checksum: 4f0785ea14390e333d040e7d7d6f8b915ad9bd4b8ae6eb28e1a5338f23a0325798d20deea7572c3c129bd1d32c432b01e7a4d40ca99710e2fa1f8157929e6cda - languageName: node - linkType: hard - -"react-is@npm:^16.13.1, react-is@npm:^16.7.0": - version: 16.13.1 - resolution: "react-is@npm:16.13.1" - checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f - languageName: node - linkType: hard - -"react-is@npm:^17.0.1": - version: 17.0.2 - resolution: "react-is@npm:17.0.2" - checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 - languageName: node - linkType: hard - -"react-is@npm:^18.0.0": - version: 18.3.1 - resolution: "react-is@npm:18.3.1" - checksum: e20fe84c86ff172fc8d898251b7cc2c43645d108bf96d0b8edf39b98f9a2cae97b40520ee7ed8ee0085ccc94736c4886294456033304151c3f94978cec03df21 - languageName: node - linkType: hard - -"react-is@npm:^19.0.0": - version: 19.2.0 - resolution: "react-is@npm:19.2.0" - checksum: 9a23e1c2d0bbc13b383bc59a05f54e6eb95dd87e01aec8aa92a88618364b7b0ee8a5b057ad813cf61e2f7ae7d24503b624706acb609d07c54754e5ad2c522568 - languageName: node - linkType: hard - -"react-refresh@npm:^0.11.0": - version: 0.11.0 - resolution: "react-refresh@npm:0.11.0" - checksum: 112178a05b1e0ffeaf5d9fb4e56b4410a34a73adeb04dbf13abdc50d9ac9df2ada83e81485156cca0b3fa296aa3612751b3d6cd13be4464642a43679b819cbc7 - languageName: node - linkType: hard - -"react-router-dom@npm:^6.24.0": - version: 6.30.2 - resolution: "react-router-dom@npm:6.30.2" - dependencies: - "@remix-run/router": 1.23.1 - react-router: 6.30.2 - peerDependencies: - react: ">=16.8" - react-dom: ">=16.8" - checksum: 8b6d27d2014293d9fc171e68dbffc4acd5fe89a534a42596071448dbe0d6b5576f35615ac586e889bc340cd017f693f45b79121c28f0046f19cd92a9d27b30f3 - languageName: node - linkType: hard - -"react-router@npm:6.30.2": - version: 6.30.2 - resolution: "react-router@npm:6.30.2" - dependencies: - "@remix-run/router": 1.23.1 - peerDependencies: - react: ">=16.8" - checksum: 680705e386a4356f4c4faaee3cc517fcebb0dc467a8dfeb7f34f5b6df1ca6572807f8e20061db30a4dc32a1a9c44fe3541366aeb9912defbeab25fffadb603f7 - languageName: node - linkType: hard - -"react-scripts@npm:5.0.1": - version: 5.0.1 - resolution: "react-scripts@npm:5.0.1" - dependencies: - "@babel/core": ^7.16.0 - "@pmmmwh/react-refresh-webpack-plugin": ^0.5.3 - "@svgr/webpack": ^5.5.0 - babel-jest: ^27.4.2 - babel-loader: ^8.2.3 - babel-plugin-named-asset-import: ^0.3.8 - babel-preset-react-app: ^10.0.1 - bfj: ^7.0.2 - browserslist: ^4.18.1 - camelcase: ^6.2.1 - case-sensitive-paths-webpack-plugin: ^2.4.0 - css-loader: ^6.5.1 - css-minimizer-webpack-plugin: ^3.2.0 - dotenv: ^10.0.0 - dotenv-expand: ^5.1.0 - eslint: ^8.3.0 - eslint-config-react-app: ^7.0.1 - eslint-webpack-plugin: ^3.1.1 - file-loader: ^6.2.0 - fs-extra: ^10.0.0 - fsevents: ^2.3.2 - html-webpack-plugin: ^5.5.0 - identity-obj-proxy: ^3.0.0 - jest: ^27.4.3 - jest-resolve: ^27.4.2 - jest-watch-typeahead: ^1.0.0 - mini-css-extract-plugin: ^2.4.5 - postcss: ^8.4.4 - postcss-flexbugs-fixes: ^5.0.2 - postcss-loader: ^6.2.1 - postcss-normalize: ^10.0.1 - postcss-preset-env: ^7.0.1 - prompts: ^2.4.2 - react-app-polyfill: ^3.0.0 - react-dev-utils: ^12.0.1 - react-refresh: ^0.11.0 - resolve: ^1.20.0 - resolve-url-loader: ^4.0.0 - sass-loader: ^12.3.0 - semver: ^7.3.5 - source-map-loader: ^3.0.0 - style-loader: ^3.3.1 - tailwindcss: ^3.0.2 - terser-webpack-plugin: ^5.2.5 - webpack: ^5.64.4 - webpack-dev-server: ^4.6.0 - webpack-manifest-plugin: ^4.0.2 - workbox-webpack-plugin: ^6.4.1 - peerDependencies: - react: ">= 16" - typescript: ^3.2.1 || ^4 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - typescript: - optional: true - bin: - react-scripts: bin/react-scripts.js - checksum: 92afa2f245c7092ccc97d5609dc7a2130616262e34da7f15072d9442e2d2e1d4909a91022abd1faac1336eb17c5525a10d9bd43e1ae374c7ec941ca20addca68 - languageName: node - linkType: hard - -"react-transition-group@npm:^4.4.5": - version: 4.4.5 - resolution: "react-transition-group@npm:4.4.5" - dependencies: - "@babel/runtime": ^7.5.5 - dom-helpers: ^5.0.1 - loose-envify: ^1.4.0 - prop-types: ^15.6.2 - peerDependencies: - react: ">=16.6.0" - react-dom: ">=16.6.0" - checksum: 75602840106aa9c6545149d6d7ae1502fb7b7abadcce70a6954c4b64a438ff1cd16fc77a0a1e5197cdd72da398f39eb929ea06f9005c45b132ed34e056ebdeb1 - languageName: node - linkType: hard - -"react@npm:^17.0.2": - version: 17.0.2 - resolution: "react@npm:17.0.2" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - checksum: b254cc17ce3011788330f7bbf383ab653c6848902d7936a87b09d835d091e3f295f7e9dd1597c6daac5dc80f90e778c8230218ba8ad599f74adcc11e33b9d61b - languageName: node - linkType: hard - -"read-cache@npm:^1.0.0": - version: 1.0.0 - resolution: "read-cache@npm:1.0.0" - dependencies: - pify: ^2.3.0 - checksum: cffc728b9ede1e0667399903f9ecaf3789888b041c46ca53382fa3a06303e5132774dc0a96d0c16aa702dbac1ea0833d5a868d414f5ab2af1e1438e19e6657c6 - languageName: node - linkType: hard - -"readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2": - version: 2.3.8 - resolution: "readable-stream@npm:2.3.8" - dependencies: - core-util-is: ~1.0.0 - inherits: ~2.0.3 - isarray: ~1.0.0 - process-nextick-args: ~2.0.0 - safe-buffer: ~5.1.1 - string_decoder: ~1.1.1 - util-deprecate: ~1.0.1 - checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 - languageName: node - linkType: hard - -"readable-stream@npm:^3.0.6": - version: 3.6.2 - resolution: "readable-stream@npm:3.6.2" - dependencies: - inherits: ^2.0.3 - string_decoder: ^1.1.1 - util-deprecate: ^1.0.1 - checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d - languageName: node - linkType: hard - -"readdirp@npm:^2.2.1": - version: 2.2.1 - resolution: "readdirp@npm:2.2.1" - dependencies: - graceful-fs: ^4.1.11 - micromatch: ^3.1.10 - readable-stream: ^2.0.2 - checksum: 3879b20f1a871e0e004a14fbf1776e65ee0b746a62f5a416010808b37c272ac49b023c47042c7b1e281cba75a449696635bc64c397ed221ea81d853a8f2ed79a - languageName: node - linkType: hard - -"readdirp@npm:~3.6.0": - version: 3.6.0 - resolution: "readdirp@npm:3.6.0" - dependencies: - picomatch: ^2.2.1 - checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 - languageName: node - linkType: hard - -"recursive-readdir@npm:^2.2.2": - version: 2.2.3 - resolution: "recursive-readdir@npm:2.2.3" - dependencies: - minimatch: ^3.0.5 - checksum: 88ec96e276237290607edc0872b4f9842837b95cfde0cdbb1e00ba9623dfdf3514d44cdd14496ab60a0c2dd180a6ef8a3f1c34599e6cf2273afac9b72a6fb2b5 - languageName: node - linkType: hard - -"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9": - version: 1.0.10 - resolution: "reflect.getprototypeof@npm:1.0.10" - dependencies: - call-bind: ^1.0.8 - define-properties: ^1.2.1 - es-abstract: ^1.23.9 - es-errors: ^1.3.0 - es-object-atoms: ^1.0.0 - get-intrinsic: ^1.2.7 - get-proto: ^1.0.1 - which-builtin-type: ^1.2.1 - checksum: ccc5debeb66125e276ae73909cecb27e47c35d9bb79d9cc8d8d055f008c58010ab8cb401299786e505e4aab733a64cba9daf5f312a58e96a43df66adad221870 - languageName: node - linkType: hard - -"regenerate-unicode-properties@npm:^10.2.2": - version: 10.2.2 - resolution: "regenerate-unicode-properties@npm:10.2.2" - dependencies: - regenerate: ^1.4.2 - checksum: 7ae4c1c32460c4360e3118c45eec0621424908f430fdd6f162c9172067786bf2b1682fbc885a33b26bc85e76e06f4d3f398b52425e801b0bb0cbae147dafb0b2 - languageName: node - linkType: hard - -"regenerate@npm:^1.4.2": - version: 1.4.2 - resolution: "regenerate@npm:1.4.2" - checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0 - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.13.9": - version: 0.13.11 - resolution: "regenerator-runtime@npm:0.13.11" - checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 - languageName: node - linkType: hard - -"regex-not@npm:^1.0.0, regex-not@npm:^1.0.2": - version: 1.0.2 - resolution: "regex-not@npm:1.0.2" - dependencies: - extend-shallow: ^3.0.2 - safe-regex: ^1.1.0 - checksum: 3081403de79559387a35ef9d033740e41818a559512668cef3d12da4e8a29ef34ee13c8ed1256b07e27ae392790172e8a15c8a06b72962fd4550476cde3d8f77 - languageName: node - linkType: hard - -"regex-parser@npm:^2.2.11": - version: 2.3.1 - resolution: "regex-parser@npm:2.3.1" - checksum: 37d5549040782207b98a5c007b739f85bf43f70249cbf813954d3fab370b93f3c8029534c62ca7c56e7a61e24848118b1bae15668b80ab7e67b4bb98465d54cc - languageName: node - linkType: hard - -"regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.3, regexp.prototype.flags@npm:^1.5.4": - version: 1.5.4 - resolution: "regexp.prototype.flags@npm:1.5.4" - dependencies: - call-bind: ^1.0.8 - define-properties: ^1.2.1 - es-errors: ^1.3.0 - get-proto: ^1.0.1 - gopd: ^1.2.0 - set-function-name: ^2.0.2 - checksum: 18cb667e56cb328d2dda569d7f04e3ea78f2683135b866d606538cf7b1d4271f7f749f09608c877527799e6cf350e531368f3c7a20ccd1bb41048a48926bdeeb - languageName: node - linkType: hard - -"regexpu-core@npm:^6.3.1": - version: 6.4.0 - resolution: "regexpu-core@npm:6.4.0" - dependencies: - regenerate: ^1.4.2 - regenerate-unicode-properties: ^10.2.2 - regjsgen: ^0.8.0 - regjsparser: ^0.13.0 - unicode-match-property-ecmascript: ^2.0.0 - unicode-match-property-value-ecmascript: ^2.2.1 - checksum: a316eb988599b7fb9d77f4adb937c41c022504dc91ddd18175c11771addc7f1d9dce550f34e36038395e459a2cf9ffc0d663bfe8d3c6c186317ca000ba79a8cf - languageName: node - linkType: hard - -"regjsgen@npm:^0.8.0": - version: 0.8.0 - resolution: "regjsgen@npm:0.8.0" - checksum: a1d925ff14a4b2be774e45775ee6b33b256f89c42d480e6d85152d2133f18bd3d6af662161b226fa57466f7efec367eaf7ccd2a58c0ec2a1306667ba2ad07b0d - languageName: node - linkType: hard - -"regjsparser@npm:^0.13.0": - version: 0.13.0 - resolution: "regjsparser@npm:0.13.0" - dependencies: - jsesc: ~3.1.0 - bin: - regjsparser: bin/parser - checksum: 1cf09f6afde2b2d1c1e89e1ce3034e3ee8d9433912728dbaa48e123f5f43ce34e263b2a8ab228817dce85d676ee0c801a512101b015ac9ab80ed449cf7329d3a - languageName: node - linkType: hard - -"relateurl@npm:^0.2.7": - version: 0.2.7 - resolution: "relateurl@npm:0.2.7" - checksum: 5891e792eae1dfc3da91c6fda76d6c3de0333a60aa5ad848982ebb6dccaa06e86385fb1235a1582c680a3d445d31be01c6bfc0804ebbcab5aaf53fa856fde6b6 - languageName: node - linkType: hard - -"remove-trailing-separator@npm:^1.0.1": - version: 1.1.0 - resolution: "remove-trailing-separator@npm:1.1.0" - checksum: d3c20b5a2d987db13e1cca9385d56ecfa1641bae143b620835ac02a6b70ab88f68f117a0021838db826c57b31373d609d52e4f31aca75fc490c862732d595419 - languageName: node - linkType: hard - -"renderkid@npm:^3.0.0": - version: 3.0.0 - resolution: "renderkid@npm:3.0.0" - dependencies: - css-select: ^4.1.3 - dom-converter: ^0.2.0 - htmlparser2: ^6.1.0 - lodash: ^4.17.21 - strip-ansi: ^6.0.1 - checksum: 77162b62d6f33ab81f337c39efce0439ff0d1f6d441e29c35183151f83041c7850774fb904da163d6c844264d440d10557714e6daa0b19e4561a5cd4ef305d41 - languageName: node - linkType: hard - -"repeat-element@npm:^1.1.2": - version: 1.1.4 - resolution: "repeat-element@npm:1.1.4" - checksum: 1edd0301b7edad71808baad226f0890ba709443f03a698224c9ee4f2494c317892dc5211b2ba8cbea7194a9ddbcac01e283bd66de0467ab24ee1fc1a3711d8a9 - languageName: node - linkType: hard - -"repeat-string@npm:^1.6.1": - version: 1.6.1 - resolution: "repeat-string@npm:1.6.1" - checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 - languageName: node - linkType: hard - -"require-from-string@npm:^2.0.2": - version: 2.0.2 - resolution: "require-from-string@npm:2.0.2" - checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b - languageName: node - linkType: hard - -"requires-port@npm:^1.0.0": - version: 1.0.0 - resolution: "requires-port@npm:1.0.0" - checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff - languageName: node - linkType: hard - -"resolve-cwd@npm:^3.0.0": - version: 3.0.0 - resolution: "resolve-cwd@npm:3.0.0" - dependencies: - resolve-from: ^5.0.0 - checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 - languageName: node - linkType: hard - -"resolve-from@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-from@npm:4.0.0" - checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f - languageName: node - linkType: hard - -"resolve-from@npm:^5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf - languageName: node - linkType: hard - -"resolve-url-loader@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-url-loader@npm:4.0.0" - dependencies: - adjust-sourcemap-loader: ^4.0.0 - convert-source-map: ^1.7.0 - loader-utils: ^2.0.0 - postcss: ^7.0.35 - source-map: 0.6.1 - peerDependencies: - rework: 1.0.1 - rework-visit: 1.0.0 - peerDependenciesMeta: - rework: - optional: true - rework-visit: - optional: true - checksum: 8e5bcf97867a5e128b6b86988d445b7fbd1214f7c5c0214332f835e8607438e153d9b3899799a03ddd03540254bb591e572feb330981a4478be934f6f045c925 - languageName: node - linkType: hard - -"resolve-url@npm:^0.2.1": - version: 0.2.1 - resolution: "resolve-url@npm:0.2.1" - checksum: 7b7035b9ed6e7bc7d289e90aef1eab5a43834539695dac6416ca6e91f1a94132ae4796bbd173cdacfdc2ade90b5f38a3fb6186bebc1b221cd157777a23b9ad14 - languageName: node - linkType: hard - -"resolve.exports@npm:^1.1.0": - version: 1.1.1 - resolution: "resolve.exports@npm:1.1.1" - checksum: 485aa10082eb388a569d696e17ad7b16f4186efc97dd34eadd029d95b811f21ffee13b1b733198bb4584dbb3cb296aa6f141835221fb7613b9606b84f1386655 - languageName: node - linkType: hard - -"resolve@npm:^1.1.7, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.10, resolve@npm:^1.22.4, resolve@npm:^1.22.8": - version: 1.22.11 - resolution: "resolve@npm:1.22.11" - dependencies: - is-core-module: ^2.16.1 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: 6d5baa2156b95a65ac431e7642e21106584e9f4194da50871cae8bc1bbd2b53bb7cee573c92543d83bb999620b224a087f62379d800ed1ccb189da6df5d78d50 - languageName: node - linkType: hard - -"resolve@npm:^2.0.0-next.5": - version: 2.0.0-next.5 - resolution: "resolve@npm:2.0.0-next.5" - dependencies: - is-core-module: ^2.13.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: a73ac69a1c4bd34c56b213d91f5b17ce390688fdb4a1a96ed3025cc7e08e7bfb90b3a06fcce461780cb0b589c958afcb0080ab802c71c01a7ecc8c64feafc89f - languageName: node - linkType: hard - -"resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.10#~builtin, resolve@patch:resolve@^1.22.4#~builtin, resolve@patch:resolve@^1.22.8#~builtin": - version: 1.22.11 - resolution: "resolve@patch:resolve@npm%3A1.22.11#~builtin::version=1.22.11&hash=07638b" - dependencies: - is-core-module: ^2.16.1 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: 1462da84ac3410d7c2e12e4f5f25c1423d8a174c3b4245c43eafea85e7bbe6af3eb7ec10a4850b5e518e8531608604742b8cbd761e1acd7ad1035108b7c98013 - languageName: node - linkType: hard - -"resolve@patch:resolve@^2.0.0-next.5#~builtin": - version: 2.0.0-next.5 - resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#~builtin::version=2.0.0-next.5&hash=07638b" - dependencies: - is-core-module: ^2.13.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: 064d09c1808d0c51b3d90b5d27e198e6d0c5dad0eb57065fd40803d6a20553e5398b07f76739d69cbabc12547058bec6b32106ea66622375fb0d7e8fca6a846c - languageName: node - linkType: hard - -"ret@npm:~0.1.10": - version: 0.1.15 - resolution: "ret@npm:0.1.15" - checksum: d76a9159eb8c946586567bd934358dfc08a36367b3257f7a3d7255fdd7b56597235af23c6afa0d7f0254159e8051f93c918809962ebd6df24ca2a83dbe4d4151 - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c - languageName: node - linkType: hard - -"retry@npm:^0.13.1": - version: 0.13.1 - resolution: "retry@npm:0.13.1" - checksum: 47c4d5be674f7c13eee4cfe927345023972197dbbdfba5d3af7e461d13b44de1bfd663bfc80d2f601f8ef3fc8164c16dd99655a221921954a65d044a2fc1233b - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.1.0 - resolution: "reusify@npm:1.1.0" - checksum: 64cb3142ac5e9ad689aca289585cb41d22521f4571f73e9488af39f6b1bd62f0cbb3d65e2ecc768ec6494052523f473f1eb4b55c3e9014b3590c17fc6a03e22a - languageName: node - linkType: hard - -"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: ^7.1.3 - bin: - rimraf: bin.js - checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 - languageName: node - linkType: hard - -"rollup-plugin-inject@npm:^3.0.0": - version: 3.0.2 - resolution: "rollup-plugin-inject@npm:3.0.2" - dependencies: - estree-walker: ^0.6.1 - magic-string: ^0.25.3 - rollup-pluginutils: ^2.8.1 - checksum: a014972c80fe34b8c8154056fa2533a8440066a31de831e3793fc21b15d108d92c22d8f7f472397bd5783d7c5e04d8cbf112fb72c5a26e997726e4eb090edad1 - languageName: node - linkType: hard - -"rollup-plugin-node-polyfills@npm:^0.2.1": - version: 0.2.1 - resolution: "rollup-plugin-node-polyfills@npm:0.2.1" - dependencies: - rollup-plugin-inject: ^3.0.0 - checksum: e84645212c443aca3cfae2ba69f01c6d8c5c250f0bf651416b69a4572b60aae9da7cdd687de3ab9b903f7a1ab96b06b71f0c4927d1b02a37485360d2b563937b - languageName: node - linkType: hard - -"rollup-plugin-terser@npm:^7.0.0": - version: 7.0.2 - resolution: "rollup-plugin-terser@npm:7.0.2" - dependencies: - "@babel/code-frame": ^7.10.4 - jest-worker: ^26.2.1 - serialize-javascript: ^4.0.0 - terser: ^5.0.0 - peerDependencies: - rollup: ^2.0.0 - checksum: af84bb7a7a894cd00852b6486528dfb8653cf94df4c126f95f389a346f401d054b08c46bee519a2ab6a22b33804d1d6ac6d8c90b1b2bf8fffb097eed73fc3c72 - languageName: node - linkType: hard - -"rollup-pluginutils@npm:^2.8.1": - version: 2.8.2 - resolution: "rollup-pluginutils@npm:2.8.2" - dependencies: - estree-walker: ^0.6.1 - checksum: 339fdf866d8f4ff6e408fa274c0525412f7edb01dc46b5ccda51f575b7e0d20ad72965773376fb5db95a77a7fcfcab97bf841ec08dbadf5d6b08af02b7a2cf5e - languageName: node - linkType: hard - -"rollup@npm:^2.43.1": - version: 2.79.2 - resolution: "rollup@npm:2.79.2" - dependencies: - fsevents: ~2.3.2 - dependenciesMeta: - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: df7aa4c8b95245dede157b06ab71e1921de6080757d30e9bf31f8fb142064d12dda865e2bafbab4349588f43425b2965a290c9a5da1c048246a70fc21734ebd7 - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: ^1.2.2 - checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d - languageName: node - linkType: hard - -"rxjs@npm:^7.8.1": - version: 7.8.2 - resolution: "rxjs@npm:7.8.2" - dependencies: - tslib: ^2.1.0 - checksum: 2f233d7c832a6c255dabe0759014d7d9b1c9f1cb2f2f0d59690fd11c883c9826ea35a51740c06ab45b6ade0d9087bde9192f165cba20b6730d344b831ef80744 - languageName: node - linkType: hard - -"safe-array-concat@npm:^1.1.2, safe-array-concat@npm:^1.1.3": - version: 1.1.3 - resolution: "safe-array-concat@npm:1.1.3" - dependencies: - call-bind: ^1.0.8 - call-bound: ^1.0.2 - get-intrinsic: ^1.2.6 - has-symbols: ^1.1.0 - isarray: ^2.0.5 - checksum: 00f6a68140e67e813f3ad5e73e6dedcf3e42a9fa01f04d44b0d3f7b1f4b257af876832a9bfc82ac76f307e8a6cc652e3cf95876048a26cbec451847cf6ae3707 - languageName: node - linkType: hard - -"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c - languageName: node - linkType: hard - -"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 - languageName: node - linkType: hard - -"safe-push-apply@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-push-apply@npm:1.0.0" - dependencies: - es-errors: ^1.3.0 - isarray: ^2.0.5 - checksum: 8c11cbee6dc8ff5cc0f3d95eef7052e43494591384015902e4292aef4ae9e539908288520ed97179cee17d6ffb450fe5f05a46ce7a1749685f7524fd568ab5db - languageName: node - linkType: hard - -"safe-regex-test@npm:^1.0.3, safe-regex-test@npm:^1.1.0": - version: 1.1.0 - resolution: "safe-regex-test@npm:1.1.0" - dependencies: - call-bound: ^1.0.2 - es-errors: ^1.3.0 - is-regex: ^1.2.1 - checksum: 3c809abeb81977c9ed6c869c83aca6873ea0f3ab0f806b8edbba5582d51713f8a6e9757d24d2b4b088f563801475ea946c8e77e7713e8c65cdd02305b6caedab - languageName: node - linkType: hard - -"safe-regex@npm:^1.1.0": - version: 1.1.0 - resolution: "safe-regex@npm:1.1.0" - dependencies: - ret: ~0.1.10 - checksum: 9a8bba57c87a841f7997b3b951e8e403b1128c1a4fd1182f40cc1a20e2d490593d7c2a21030fadfea320c8e859219019e136f678c6689ed5960b391b822f01d5 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 - languageName: node - linkType: hard - -"sanitize.css@npm:*": - version: 13.0.0 - resolution: "sanitize.css@npm:13.0.0" - checksum: a99ca77c4d135800a4a93c3555e5aa4a2eb040a833df716dbe9132e1f2086fbf9acdb8021a579f40dcf77166d2d50f3358b4b6121a247d26fed5a0e6f5af3bb7 - languageName: node - linkType: hard - -"sass-loader@npm:^12.3.0": - version: 12.6.0 - resolution: "sass-loader@npm:12.6.0" - dependencies: - klona: ^2.0.4 - neo-async: ^2.6.2 - peerDependencies: - fibers: ">= 3.1.0" - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - sass: ^1.3.0 - sass-embedded: "*" - webpack: ^5.0.0 - peerDependenciesMeta: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - sass-embedded: - optional: true - checksum: 5d73a428588150f704016aa27397941bb9246cecd2ee083b573e95d969fc080ac6a16f2fe1cc64aca08f6e70da6f3c586ee68f0efc9f527fecc360e5f1c299ec - languageName: node - linkType: hard - -"sax@npm:~1.2.4": - version: 1.2.4 - resolution: "sax@npm:1.2.4" - checksum: d3df7d32b897a2c2f28e941f732c71ba90e27c24f62ee918bd4d9a8cfb3553f2f81e5493c7f0be94a11c1911b643a9108f231dd6f60df3fa9586b5d2e3e9e1fe - languageName: node - linkType: hard - -"saxes@npm:^5.0.1": - version: 5.0.1 - resolution: "saxes@npm:5.0.1" - dependencies: - xmlchars: ^2.2.0 - checksum: 5636b55cf15f7cf0baa73f2797bf992bdcf75d1b39d82c0aa4608555c774368f6ac321cb641fd5f3d3ceb87805122cd47540da6a7b5960fe0dbdb8f8c263f000 - languageName: node - linkType: hard - -"scheduler@npm:^0.20.2": - version: 0.20.2 - resolution: "scheduler@npm:0.20.2" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - checksum: c4b35cf967c8f0d3e65753252d0f260271f81a81e427241295c5a7b783abf4ea9e905f22f815ab66676f5313be0a25f47be582254db8f9241b259213e999b8fc - languageName: node - linkType: hard - -"schema-utils@npm:2.7.0": - version: 2.7.0 - resolution: "schema-utils@npm:2.7.0" - dependencies: - "@types/json-schema": ^7.0.4 - ajv: ^6.12.2 - ajv-keywords: ^3.4.1 - checksum: 8889325b0ee1ae6a8f5d6aaa855c71e136ebbb7fd731b01a9d3ec8225dcb245f644c47c50104db4c741983b528cdff8558570021257d4d397ec6aaecd9172a8e - languageName: node - linkType: hard - -"schema-utils@npm:^2.6.5": - version: 2.7.1 - resolution: "schema-utils@npm:2.7.1" - dependencies: - "@types/json-schema": ^7.0.5 - ajv: ^6.12.4 - ajv-keywords: ^3.5.2 - checksum: 32c62fc9e28edd101e1bd83453a4216eb9bd875cc4d3775e4452b541908fa8f61a7bbac8ffde57484f01d7096279d3ba0337078e85a918ecbeb72872fb09fb2b - languageName: node - linkType: hard - -"schema-utils@npm:^3.0.0": - version: 3.3.0 - resolution: "schema-utils@npm:3.3.0" - dependencies: - "@types/json-schema": ^7.0.8 - ajv: ^6.12.5 - ajv-keywords: ^3.5.2 - checksum: ea56971926fac2487f0757da939a871388891bc87c6a82220d125d587b388f1704788f3706e7f63a7b70e49fc2db974c41343528caea60444afd5ce0fe4b85c0 - languageName: node - linkType: hard - -"schema-utils@npm:^4.0.0, schema-utils@npm:^4.2.0, schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.3": - version: 4.3.3 - resolution: "schema-utils@npm:4.3.3" - dependencies: - "@types/json-schema": ^7.0.9 - ajv: ^8.9.0 - ajv-formats: ^2.1.1 - ajv-keywords: ^5.1.0 - checksum: 4e20404962fd45d5feb5942f7c9ab334a3d3dab94e15001049bd49e2959015f2c59089353953d4976fe664462c79121dea50392968182d4e2c4b75803f822fa3 - languageName: node - linkType: hard - -"select-hose@npm:^2.0.0": - version: 2.0.0 - resolution: "select-hose@npm:2.0.0" - checksum: d7e5fcc695a4804209d232a1b18624a5134be334d4e1114b0721f7a5e72bd73da483dcf41528c1af4f4f4892ad7cfd6a1e55c8ffb83f9c9fe723b738db609dbb - languageName: node - linkType: hard - -"selfsigned@npm:^2.1.1": - version: 2.4.1 - resolution: "selfsigned@npm:2.4.1" - dependencies: - "@types/node-forge": ^1.3.0 - node-forge: ^1 - checksum: 38b91c56f1d7949c0b77f9bbe4545b19518475cae15e7d7f0043f87b1626710b011ce89879a88969651f650a19d213bb15b7d5b4c2877df9eeeff7ba8f8b9bfa - languageName: node - linkType: hard - -"semver@npm:^6.0.0, semver@npm:^6.3.0, semver@npm:^6.3.1": - version: 6.3.1 - resolution: "semver@npm:6.3.1" - bin: - semver: bin/semver.js - checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 - languageName: node - linkType: hard - -"semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.5.4": - version: 7.7.3 - resolution: "semver@npm:7.7.3" - bin: - semver: bin/semver.js - checksum: f013a3ee4607857bcd3503b6ac1d80165f7f8ea94f5d55e2d3e33df82fce487aa3313b987abf9b39e0793c83c9fc67b76c36c067625141a9f6f704ae0ea18db2 - languageName: node - linkType: hard - -"send@npm:0.19.0": - version: 0.19.0 - resolution: "send@npm:0.19.0" - 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 - checksum: 5ae11bd900c1c2575525e2aa622e856804e2f96a09281ec1e39610d089f53aa69e13fd8db84b52f001d0318cf4bb0b3b904ad532fc4c0014eb90d32db0cff55f - languageName: node - linkType: hard - -"send@npm:latest": - version: 1.2.0 - resolution: "send@npm:1.2.0" - dependencies: - debug: ^4.3.5 - encodeurl: ^2.0.0 - escape-html: ^1.0.3 - etag: ^1.8.1 - fresh: ^2.0.0 - http-errors: ^2.0.0 - mime-types: ^3.0.1 - ms: ^2.1.3 - on-finished: ^2.4.1 - range-parser: ^1.2.1 - statuses: ^2.0.1 - checksum: 7557ee6c1c257a1c53b402b4fba8ed88c95800b08abe085fc79e0824869274f213491be2efb2df3de228c70e4d40ce2019e5f77b58c42adb97149135420c3f34 - languageName: node - linkType: hard - -"serialize-javascript@npm:^4.0.0": - version: 4.0.0 - resolution: "serialize-javascript@npm:4.0.0" - dependencies: - randombytes: ^2.1.0 - checksum: 3273b3394b951671fcf388726e9577021870dfbf85e742a1183fb2e91273e6101bdccea81ff230724f6659a7ee4cef924b0ff9baca32b79d9384ec37caf07302 - languageName: node - linkType: hard - -"serialize-javascript@npm:^6.0.0, serialize-javascript@npm:^6.0.2": - version: 6.0.2 - resolution: "serialize-javascript@npm:6.0.2" - dependencies: - randombytes: ^2.1.0 - checksum: c4839c6206c1d143c0f80763997a361310305751171dd95e4b57efee69b8f6edd8960a0b7fbfc45042aadff98b206d55428aee0dc276efe54f100899c7fa8ab7 - languageName: node - linkType: hard - -"serve-index@npm:^1.9.1": - version: 1.9.1 - resolution: "serve-index@npm:1.9.1" - 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 - checksum: e2647ce13379485b98a53ba2ea3fbad4d44b57540d00663b02b976e426e6194d62ac465c0d862cb7057f65e0de8ab8a684aa095427a4b8612412eca0d300d22f - languageName: node - linkType: hard - -"serve-static@npm:1.16.2": - version: 1.16.2 - resolution: "serve-static@npm:1.16.2" - dependencies: - encodeurl: ~2.0.0 - escape-html: ~1.0.3 - parseurl: ~1.3.3 - send: 0.19.0 - checksum: dffc52feb4cc5c68e66d0c7f3c1824d4e989f71050aefc9bd5f822a42c54c9b814f595fc5f2b717f4c7cc05396145f3e90422af31186a93f76cf15f707019759 - languageName: node - linkType: hard - -"set-function-length@npm:^1.2.2": - version: 1.2.2 - resolution: "set-function-length@npm:1.2.2" - dependencies: - define-data-property: ^1.1.4 - es-errors: ^1.3.0 - function-bind: ^1.1.2 - get-intrinsic: ^1.2.4 - gopd: ^1.0.1 - has-property-descriptors: ^1.0.2 - checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72 - languageName: node - linkType: hard - -"set-function-name@npm:^2.0.2": - version: 2.0.2 - resolution: "set-function-name@npm:2.0.2" - dependencies: - define-data-property: ^1.1.4 - es-errors: ^1.3.0 - functions-have-names: ^1.2.3 - has-property-descriptors: ^1.0.2 - checksum: d6229a71527fd0404399fc6227e0ff0652800362510822a291925c9d7b48a1ca1a468b11b281471c34cd5a2da0db4f5d7ff315a61d26655e77f6e971e6d0c80f - languageName: node - linkType: hard - -"set-proto@npm:^1.0.0": - version: 1.0.0 - resolution: "set-proto@npm:1.0.0" - dependencies: - dunder-proto: ^1.0.1 - es-errors: ^1.3.0 - es-object-atoms: ^1.0.0 - checksum: ec27cbbe334598547e99024403e96da32aca3e530583e4dba7f5db1c43cbc4affa9adfbd77c7b2c210b9b8b2e7b2e600bad2a6c44fd62e804d8233f96bbb62f4 - languageName: node - linkType: hard - -"set-value@npm:^2.0.0, set-value@npm:^2.0.1": - version: 2.0.1 - resolution: "set-value@npm:2.0.1" - dependencies: - extend-shallow: ^2.0.1 - is-extendable: ^0.1.1 - is-plain-object: ^2.0.3 - split-string: ^3.0.1 - checksum: 09a4bc72c94641aeae950eb60dc2755943b863780fcc32e441eda964b64df5e3f50603d5ebdd33394ede722528bd55ed43aae26e9df469b4d32e2292b427b601 - languageName: node - linkType: hard - -"setprototypeof@npm:1.1.0": - version: 1.1.0 - resolution: "setprototypeof@npm:1.1.0" - checksum: 27cb44304d6c9e1a23bc6c706af4acaae1a7aa1054d4ec13c05f01a99fd4887109a83a8042b67ad90dbfcd100d43efc171ee036eb080667172079213242ca36e - languageName: node - linkType: hard - -"setprototypeof@npm:1.2.0, setprototypeof@npm:~1.2.0": - version: 1.2.0 - resolution: "setprototypeof@npm:1.2.0" - checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89 - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: ^3.0.0 - checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 - languageName: node - linkType: hard - -"shell-quote@npm:^1.7.3, shell-quote@npm:^1.8.1, shell-quote@npm:^1.8.3": - version: 1.8.3 - resolution: "shell-quote@npm:1.8.3" - checksum: 550dd84e677f8915eb013d43689c80bb114860649ec5298eb978f40b8f3d4bc4ccb072b82c094eb3548dc587144bb3965a8676f0d685c1cf4c40b5dc27166242 - languageName: node - linkType: hard - -"side-channel-list@npm:^1.0.0": - version: 1.0.0 - resolution: "side-channel-list@npm:1.0.0" - dependencies: - es-errors: ^1.3.0 - object-inspect: ^1.13.3 - checksum: 603b928997abd21c5a5f02ae6b9cc36b72e3176ad6827fab0417ead74580cc4fb4d5c7d0a8a2ff4ead34d0f9e35701ed7a41853dac8a6d1a664fcce1a044f86f - languageName: node - linkType: hard - -"side-channel-map@npm:^1.0.1": - version: 1.0.1 - resolution: "side-channel-map@npm:1.0.1" - dependencies: - call-bound: ^1.0.2 - es-errors: ^1.3.0 - get-intrinsic: ^1.2.5 - object-inspect: ^1.13.3 - checksum: 42501371cdf71f4ccbbc9c9e2eb00aaaab80a4c1c429d5e8da713fd4d39ef3b8d4a4b37ed4f275798a65260a551a7131fd87fe67e922dba4ac18586d6aab8b06 - languageName: node - linkType: hard - -"side-channel-weakmap@npm:^1.0.2": - version: 1.0.2 - resolution: "side-channel-weakmap@npm:1.0.2" - dependencies: - call-bound: ^1.0.2 - es-errors: ^1.3.0 - get-intrinsic: ^1.2.5 - object-inspect: ^1.13.3 - side-channel-map: ^1.0.1 - checksum: a815c89bc78c5723c714ea1a77c938377ea710af20d4fb886d362b0d1f8ac73a17816a5f6640f354017d7e292a43da9c5e876c22145bac00b76cfb3468001736 - languageName: node - linkType: hard - -"side-channel@npm:^1.0.4, side-channel@npm:^1.0.6, side-channel@npm:^1.1.0": - version: 1.1.0 - resolution: "side-channel@npm:1.1.0" - dependencies: - es-errors: ^1.3.0 - object-inspect: ^1.13.3 - side-channel-list: ^1.0.0 - side-channel-map: ^1.0.1 - side-channel-weakmap: ^1.0.2 - checksum: bf73d6d6682034603eb8e99c63b50155017ed78a522d27c2acec0388a792c3ede3238b878b953a08157093b85d05797217d270b7666ba1f111345fbe933380ff - languageName: node - linkType: hard - -"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 - languageName: node - linkType: hard - -"sisteransi@npm:^1.0.5": - version: 1.0.5 - resolution: "sisteransi@npm:1.0.5" - checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 - languageName: node - linkType: hard - -"slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c - languageName: node - linkType: hard - -"slash@npm:^4.0.0": - version: 4.0.0 - resolution: "slash@npm:4.0.0" - checksum: da8e4af73712253acd21b7853b7e0dbba776b786e82b010a5bfc8b5051a1db38ed8aba8e1e8f400dd2c9f373be91eb1c42b66e91abb407ff42b10feece5e1d2d - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b - languageName: node - linkType: hard - -"snapdragon-node@npm:^2.0.1": - version: 2.1.1 - resolution: "snapdragon-node@npm:2.1.1" - dependencies: - define-property: ^1.0.0 - isobject: ^3.0.0 - snapdragon-util: ^3.0.1 - checksum: 9bb57d759f9e2a27935dbab0e4a790137adebace832b393e350a8bf5db461ee9206bb642d4fe47568ee0b44080479c8b4a9ad0ebe3712422d77edf9992a672fd - languageName: node - linkType: hard - -"snapdragon-util@npm:^3.0.1": - version: 3.0.1 - resolution: "snapdragon-util@npm:3.0.1" - dependencies: - kind-of: ^3.2.0 - checksum: 684997dbe37ec995c03fd3f412fba2b711fc34cb4010452b7eb668be72e8811a86a12938b511e8b19baf853b325178c56d8b78d655305e5cfb0bb8b21677e7b7 - languageName: node - linkType: hard - -"snapdragon@npm:^0.8.1": - version: 0.8.2 - resolution: "snapdragon@npm:0.8.2" - 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 - checksum: a197f242a8f48b11036563065b2487e9b7068f50a20dd81d9161eca6af422174fc158b8beeadbe59ce5ef172aa5718143312b3aebaae551c124b7824387c8312 - languageName: node - linkType: hard - -"sockjs@npm:^0.3.24": - version: 0.3.24 - resolution: "sockjs@npm:0.3.24" - dependencies: - faye-websocket: ^0.11.3 - uuid: ^8.3.2 - websocket-driver: ^0.7.4 - checksum: 355309b48d2c4e9755349daa29cea1c0d9ee23e49b983841c6bf7a20276b00d3c02343f9f33f26d2ee8b261a5a02961b52a25c8da88b2538c5b68d3071b4934c - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^8.0.3": - version: 8.0.5 - resolution: "socks-proxy-agent@npm:8.0.5" - dependencies: - agent-base: ^7.1.2 - debug: ^4.3.4 - socks: ^2.8.3 - checksum: b4fbcdb7ad2d6eec445926e255a1fb95c975db0020543fbac8dfa6c47aecc6b3b619b7fb9c60a3f82c9b2969912a5e7e174a056ae4d98cb5322f3524d6036e1d - languageName: node - linkType: hard - -"socks@npm:^2.8.3": - version: 2.8.7 - resolution: "socks@npm:2.8.7" - dependencies: - ip-address: ^10.0.1 - smart-buffer: ^4.2.0 - checksum: 4bbe2c88cf0eeaf49f94b7f11564a99b2571bde6fd1e714ff95b38f89e1f97858c19e0ab0e6d39eb7f6a984fa67366825895383ed563fe59962a1d57a1d55318 - languageName: node - linkType: hard - -"source-list-map@npm:^2.0.0, source-list-map@npm:^2.0.1": - version: 2.0.1 - resolution: "source-list-map@npm:2.0.1" - checksum: 806efc6f75e7cd31e4815e7a3aaf75a45c704871ea4075cb2eb49882c6fca28998f44fc5ac91adb6de03b2882ee6fb02f951fdc85e6a22b338c32bfe19557938 - languageName: node - linkType: hard - -"source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.1": - version: 1.2.1 - resolution: "source-map-js@npm:1.2.1" - checksum: 4eb0cd997cdf228bc253bcaff9340afeb706176e64868ecd20efbe6efea931465f43955612346d6b7318789e5265bdc419bc7669c1cebe3db0eb255f57efa76b - languageName: node - linkType: hard - -"source-map-loader@npm:^3.0.0": - version: 3.0.2 - resolution: "source-map-loader@npm:3.0.2" - dependencies: - abab: ^2.0.5 - iconv-lite: ^0.6.3 - source-map-js: ^1.0.1 - peerDependencies: - webpack: ^5.0.0 - checksum: d5a4e2ab190c93ae5cba68c247fbaa9fd560333c91060602b634c399a8a4b3205b8c07714c3bcdb0a11c6cc5476c06256bd8e824e71fbbb7981e8fad5cba4a00 - languageName: node - linkType: hard - -"source-map-resolve@npm:^0.5.0": - version: 0.5.3 - resolution: "source-map-resolve@npm:0.5.3" - 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 - checksum: c73fa44ac00783f025f6ad9e038ab1a2e007cd6a6b86f47fe717c3d0765b4a08d264f6966f3bd7cd9dbcd69e4832783d5472e43247775b2a550d6f2155d24bae - languageName: node - linkType: hard - -"source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.20": - version: 0.5.21 - resolution: "source-map-support@npm:0.5.21" - dependencies: - buffer-from: ^1.0.0 - source-map: ^0.6.0 - checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 - languageName: node - linkType: hard - -"source-map-url@npm:^0.4.0": - version: 0.4.1 - resolution: "source-map-url@npm:0.4.1" - checksum: 64c5c2c77aff815a6e61a4120c309ae4cac01298d9bcbb3deb1b46a4dd4c46d4a1eaeda79ec9f684766ae80e8dc86367b89326ce9dd2b89947bd9291fc1ac08c - languageName: node - linkType: hard - -"source-map@npm:0.6.1, source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0, source-map@npm:~0.6.1": - version: 0.6.1 - resolution: "source-map@npm:0.6.1" - checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 - languageName: node - linkType: hard - -"source-map@npm:^0.5.6, source-map@npm:^0.5.7": - version: 0.5.7 - resolution: "source-map@npm:0.5.7" - checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d - languageName: node - linkType: hard - -"source-map@npm:^0.7.3": - version: 0.7.6 - resolution: "source-map@npm:0.7.6" - checksum: 932f4a2390aa7100e91357d88cc272de984ad29139ac09eedfde8cc78d46da35f389065d0c5343c5d71d054a6ebd4939a8c0f2c98d5df64fe97bb8a730596c2d - languageName: node - linkType: hard - -"source-map@npm:^0.8.0-beta.0": - version: 0.8.0-beta.0 - resolution: "source-map@npm:0.8.0-beta.0" - dependencies: - whatwg-url: ^7.0.0 - checksum: e94169be6461ab0ac0913313ad1719a14c60d402bd22b0ad96f4a6cffd79130d91ab5df0a5336a326b04d2df131c1409f563c9dc0d21a6ca6239a44b6c8dbd92 - languageName: node - linkType: hard - -"sourcemap-codec@npm:^1.4.8": - version: 1.4.8 - resolution: "sourcemap-codec@npm:1.4.8" - checksum: b57981c05611afef31605732b598ccf65124a9fcb03b833532659ac4d29ac0f7bfacbc0d6c5a28a03e84c7510e7e556d758d0bb57786e214660016fb94279316 - languageName: node - linkType: hard - -"spawn-command@npm:0.0.2": - version: 0.0.2 - resolution: "spawn-command@npm:0.0.2" - checksum: e35c5d28177b4d461d33c88cc11f6f3a5079e2b132c11e1746453bbb7a0c0b8a634f07541a2a234fa4758239d88203b758def509161b651e81958894c0b4b64b - languageName: node - linkType: hard - -"spdy-transport@npm:^3.0.0": - version: 3.0.0 - resolution: "spdy-transport@npm:3.0.0" - 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 - checksum: 0fcaad3b836fb1ec0bdd39fa7008b9a7a84a553f12be6b736a2512613b323207ffc924b9551cef0378f7233c85916cff1118652e03a730bdb97c0e042243d56c - languageName: node - linkType: hard - -"spdy@npm:^4.0.2": - version: 4.0.2 - resolution: "spdy@npm:4.0.2" - 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 - checksum: 2c739d0ff6f56ad36d2d754d0261d5ec358457bea7cbf77b1b05b0c6464f2ce65b85f196305f50b7bd9120723eb94bae9933466f28e67e5cd8cde4e27f1d75f8 - languageName: node - linkType: hard - -"split-string@npm:^3.0.1, split-string@npm:^3.0.2": - version: 3.1.0 - resolution: "split-string@npm:3.1.0" - dependencies: - extend-shallow: ^3.0.0 - checksum: ae5af5c91bdc3633628821bde92fdf9492fa0e8a63cf6a0376ed6afde93c701422a1610916f59be61972717070119e848d10dfbbd5024b7729d6a71972d2a84c - languageName: node - linkType: hard - -"split@npm:0.3": - version: 0.3.3 - resolution: "split@npm:0.3.3" - dependencies: - through: 2 - checksum: 2e076634c9637cfdc54ab4387b6a243b8c33b360874a25adf6f327a5647f07cb3bf1c755d515248eb3afee4e382278d01f62c62d87263c118f28065b86f74f02 - languageName: node - linkType: hard - -"sprintf-js@npm:~1.0.2": - version: 1.0.3 - resolution: "sprintf-js@npm:1.0.3" - checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 - languageName: node - linkType: hard - -"ssri@npm:^13.0.0": - version: 13.0.0 - resolution: "ssri@npm:13.0.0" - dependencies: - minipass: ^7.0.3 - checksum: 9705dff9e686b11f3035fb4c3d44ce690359a15a54adcd6a18951f2763f670877321178dc72c37a2b804dba3287ecaa48726dbd0cff79b2715b1cc24521b3af3 - languageName: node - linkType: hard - -"stable@npm:^0.1.8": - version: 0.1.8 - resolution: "stable@npm:0.1.8" - checksum: 2ff482bb100285d16dd75cd8f7c60ab652570e8952c0bfa91828a2b5f646a0ff533f14596ea4eabd48bb7f4aeea408dce8f8515812b975d958a4cc4fa6b9dfeb - languageName: node - linkType: hard - -"stack-utils@npm:^2.0.3": - version: 2.0.6 - resolution: "stack-utils@npm:2.0.6" - dependencies: - escape-string-regexp: ^2.0.0 - checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 - languageName: node - linkType: hard - -"stackframe@npm:^1.3.4": - version: 1.3.4 - resolution: "stackframe@npm:1.3.4" - checksum: bae1596873595c4610993fa84f86a3387d67586401c1816ea048c0196800c0646c4d2da98c2ee80557fd9eff05877efe33b91ba6cd052658ed96ddc85d19067d - languageName: node - linkType: hard - -"static-eval@npm:2.0.2": - version: 2.0.2 - resolution: "static-eval@npm:2.0.2" - dependencies: - escodegen: ^1.8.1 - checksum: 335a923c5ccb29add404ac23d0a55c0da6cee3071f6f67a7053aeac0dedc6dbfc53ac9269e9c25f403f5b7603a291ef47d7114f99bde241184f7aa3f9286dc32 - languageName: node - linkType: hard - -"static-extend@npm:^0.1.1": - version: 0.1.2 - resolution: "static-extend@npm:0.1.2" - dependencies: - define-property: ^0.2.5 - object-copy: ^0.1.0 - checksum: 8657485b831f79e388a437260baf22784540417a9b29e11572c87735df24c22b84eda42107403a64b30861b2faf13df9f7fc5525d51f9d1d2303aba5cbf4e12c - languageName: node - linkType: hard - -"statuses@npm:2.0.1": - version: 2.0.1 - resolution: "statuses@npm:2.0.1" - checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb - languageName: node - linkType: hard - -"statuses@npm:>= 1.4.0 < 2, statuses@npm:~1.5.0": - version: 1.5.0 - resolution: "statuses@npm:1.5.0" - checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c - languageName: node - linkType: hard - -"statuses@npm:^2.0.1, statuses@npm:~2.0.2": - version: 2.0.2 - resolution: "statuses@npm:2.0.2" - checksum: 6927feb50c2a75b2a4caab2c565491f7a93ad3d8dbad7b1398d52359e9243a20e2ebe35e33726dee945125ef7a515e9097d8a1b910ba2bbd818265a2f6c39879 - languageName: node - linkType: hard - -"stop-iteration-iterator@npm:^1.0.0, stop-iteration-iterator@npm:^1.1.0": - version: 1.1.0 - resolution: "stop-iteration-iterator@npm:1.1.0" - dependencies: - es-errors: ^1.3.0 - internal-slot: ^1.1.0 - checksum: be944489d8829fb3bdec1a1cc4a2142c6b6eb317305eeace1ece978d286d6997778afa1ae8cb3bd70e2b274b9aa8c69f93febb1e15b94b1359b11058f9d3c3a1 - languageName: node - linkType: hard - -"stream-combiner@npm:~0.0.4": - version: 0.0.4 - resolution: "stream-combiner@npm:0.0.4" - dependencies: - duplexer: ~0.1.1 - checksum: 844b622cfe8b9de45a6007404f613b60aaf85200ab9862299066204242f89a7c8033b1c356c998aa6cfc630f6cd9eba119ec1c6dc1f93e245982be4a847aee7d - languageName: node - linkType: hard - -"string-length@npm:^4.0.1": - version: 4.0.2 - resolution: "string-length@npm:4.0.2" - dependencies: - char-regex: ^1.0.2 - strip-ansi: ^6.0.0 - checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 - languageName: node - linkType: hard - -"string-length@npm:^5.0.1": - version: 5.0.1 - resolution: "string-length@npm:5.0.1" - dependencies: - char-regex: ^2.0.0 - strip-ansi: ^7.0.1 - checksum: 71f73b8c8a743e01dcd001bcf1b197db78d5e5e53b12bd898cddaf0961be09f947dfd8c429783db3694b55b05cb5a51de6406c5085ff1aaa10c4771440c8396d - languageName: node - linkType: hard - -"string-natural-compare@npm:^3.0.1": - version: 3.0.1 - resolution: "string-natural-compare@npm:3.0.1" - checksum: 65910d9995074086e769a68728395effbba9b7186be5b4c16a7fad4f4ef50cae95ca16e3e9086e019cbb636ae8daac9c7b8fe91b5f21865c5c0f26e3c0725406 - languageName: node - linkType: hard - -"string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: ^8.0.0 - is-fullwidth-code-point: ^3.0.0 - strip-ansi: ^6.0.1 - checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb - languageName: node - linkType: hard - -"string.prototype.includes@npm:^2.0.1": - version: 2.0.1 - resolution: "string.prototype.includes@npm:2.0.1" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.3 - checksum: ed4b7058b092f30d41c4df1e3e805eeea92479d2c7a886aa30f42ae32fde8924a10cc99cccc99c29b8e18c48216608a0fe6bf887f8b4aadf9559096a758f313a - languageName: node - linkType: hard - -"string.prototype.matchall@npm:^4.0.12, string.prototype.matchall@npm:^4.0.6": - version: 4.0.12 - resolution: "string.prototype.matchall@npm:4.0.12" - dependencies: - call-bind: ^1.0.8 - call-bound: ^1.0.3 - define-properties: ^1.2.1 - es-abstract: ^1.23.6 - es-errors: ^1.3.0 - es-object-atoms: ^1.0.0 - get-intrinsic: ^1.2.6 - gopd: ^1.2.0 - has-symbols: ^1.1.0 - internal-slot: ^1.1.0 - regexp.prototype.flags: ^1.5.3 - set-function-name: ^2.0.2 - side-channel: ^1.1.0 - checksum: 98a09d6af91bfc6ee25556f3d7cd6646d02f5f08bda55d45528ed273d266d55a71af7291fe3fc76854deffb9168cc1a917d0b07a7d5a178c7e9537c99e6d2b57 - languageName: node - linkType: hard - -"string.prototype.repeat@npm:^1.0.0": - version: 1.0.0 - resolution: "string.prototype.repeat@npm:1.0.0" - dependencies: - define-properties: ^1.1.3 - es-abstract: ^1.17.5 - checksum: 95dfc514ed7f328d80a066dabbfbbb1615c3e51490351085409db2eb7cbfed7ea29fdadaf277647fbf9f4a1e10e6dd9e95e78c0fd2c4e6bb6723ea6e59401004 - languageName: node - linkType: hard - -"string.prototype.trim@npm:^1.2.10": - version: 1.2.10 - resolution: "string.prototype.trim@npm:1.2.10" - dependencies: - call-bind: ^1.0.8 - call-bound: ^1.0.2 - define-data-property: ^1.1.4 - define-properties: ^1.2.1 - es-abstract: ^1.23.5 - es-object-atoms: ^1.0.0 - has-property-descriptors: ^1.0.2 - checksum: 87659cd8561237b6c69f5376328fda934693aedde17bb7a2c57008e9d9ff992d0c253a391c7d8d50114e0e49ff7daf86a362f7961cf92f7564cd01342ca2e385 - languageName: node - linkType: hard - -"string.prototype.trimend@npm:^1.0.9": - version: 1.0.9 - resolution: "string.prototype.trimend@npm:1.0.9" - dependencies: - call-bind: ^1.0.8 - call-bound: ^1.0.2 - define-properties: ^1.2.1 - es-object-atoms: ^1.0.0 - checksum: cb86f639f41d791a43627784be2175daa9ca3259c7cb83e7a207a729909b74f2ea0ec5d85de5761e6835e5f443e9420c6ff3f63a845378e4a61dd793177bc287 - languageName: node - linkType: hard - -"string.prototype.trimstart@npm:^1.0.8": - version: 1.0.8 - resolution: "string.prototype.trimstart@npm:1.0.8" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-object-atoms: ^1.0.0 - checksum: df1007a7f580a49d692375d996521dc14fd103acda7f3034b3c558a60b82beeed3a64fa91e494e164581793a8ab0ae2f59578a49896a7af6583c1f20472bce96 - languageName: node - linkType: hard - -"string_decoder@npm:^1.1.1": - version: 1.3.0 - resolution: "string_decoder@npm:1.3.0" - dependencies: - safe-buffer: ~5.2.0 - checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 - languageName: node - linkType: hard - -"string_decoder@npm:~1.1.1": - version: 1.1.1 - resolution: "string_decoder@npm:1.1.1" - dependencies: - safe-buffer: ~5.1.0 - checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b - languageName: node - linkType: hard - -"stringify-object@npm:^3.3.0": - version: 3.3.0 - resolution: "stringify-object@npm:3.3.0" - dependencies: - get-own-enumerable-property-symbols: ^3.0.0 - is-obj: ^1.0.1 - is-regexp: ^1.0.0 - checksum: 6827a3f35975cfa8572e8cd3ed4f7b262def260af18655c6fde549334acdac49ddba69f3c861ea5a6e9c5a4990fe4ae870b9c0e6c31019430504c94a83b7a154 - languageName: node - linkType: hard - -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: ^5.0.1 - checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c - languageName: node - linkType: hard - -"strip-ansi@npm:^7.0.1": - version: 7.1.2 - resolution: "strip-ansi@npm:7.1.2" - dependencies: - ansi-regex: ^6.0.1 - checksum: db0e3f9654e519c8a33c50fc9304d07df5649388e7da06d3aabf66d29e5ad65d5e6315d8519d409c15b32fa82c1df7e11ed6f8cd50b0e4404463f0c9d77c8d0b - languageName: node - linkType: hard - -"strip-bom@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-bom@npm:3.0.0" - checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b - languageName: node - linkType: hard - -"strip-bom@npm:^4.0.0": - version: 4.0.0 - resolution: "strip-bom@npm:4.0.0" - checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 - languageName: node - linkType: hard - -"strip-comments@npm:^2.0.1": - version: 2.0.1 - resolution: "strip-comments@npm:2.0.1" - checksum: 36cd122e1c27b5be69df87e1687770a62fe183bdee9f3ff5cf85d30bbc98280afc012581f2fd50c7ad077c90f656f272560c9d2e520d28604b8b7ea3bc87d6f9 - languageName: node - linkType: hard - -"strip-final-newline@npm:^2.0.0": - version: 2.0.0 - resolution: "strip-final-newline@npm:2.0.0" - checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 - languageName: node - linkType: hard - -"strip-json-comments@npm:^3.1.1": - version: 3.1.1 - resolution: "strip-json-comments@npm:3.1.1" - checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 - languageName: node - linkType: hard - -"style-loader@npm:^3.3.1": - version: 3.3.4 - resolution: "style-loader@npm:3.3.4" - peerDependencies: - webpack: ^5.0.0 - checksum: caac3f2fe2c3c89e49b7a2a9329e1cfa515ecf5f36b9c4885f9b218019fda207a9029939b2c35821dec177a264a007e7c391ccdd3ff7401881ce6287b9c8f38b - languageName: node - linkType: hard - -"stylehacks@npm:^5.1.1": - version: 5.1.1 - resolution: "stylehacks@npm:5.1.1" - dependencies: - browserslist: ^4.21.4 - postcss-selector-parser: ^6.0.4 - peerDependencies: - postcss: ^8.2.15 - checksum: 11175366ef52de65bf06cefba0ddc9db286dc3a1451fd2989e74c6ea47091a02329a4bf6ce10b1a36950056927b6bbbe47c5ab3a1f4c7032df932d010fbde5a2 - languageName: node - linkType: hard - -"stylis@npm:4.2.0": - version: 4.2.0 - resolution: "stylis@npm:4.2.0" - checksum: 0eb6cc1b866dc17a6037d0a82ac7fa877eba6a757443e79e7c4f35bacedbf6421fadcab4363b39667b43355cbaaa570a3cde850f776498e5450f32ed2f9b7584 - languageName: node - linkType: hard - -"sucrase@npm:^3.35.0": - version: 3.35.1 - resolution: "sucrase@npm:3.35.1" - dependencies: - "@jridgewell/gen-mapping": ^0.3.2 - commander: ^4.0.0 - lines-and-columns: ^1.1.6 - mz: ^2.7.0 - pirates: ^4.0.1 - tinyglobby: ^0.2.11 - ts-interface-checker: ^0.1.9 - bin: - sucrase: bin/sucrase - sucrase-node: bin/sucrase-node - checksum: 9a3ae3900f85ede60468bdaebc07a32691d5e44c80bb008734088dcde49cd0e05ead854786d90fbb6e63ed1c50592146cb50536321212773f6d72d1c85b2a51b - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: ^3.0.0 - checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac - languageName: node - linkType: hard - -"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": - version: 7.2.0 - resolution: "supports-color@npm:7.2.0" - dependencies: - has-flag: ^4.0.0 - checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a - languageName: node - linkType: hard - -"supports-color@npm:^8.0.0, supports-color@npm:^8.1.1": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: ^4.0.0 - checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 - languageName: node - linkType: hard - -"supports-hyperlinks@npm:^2.0.0": - version: 2.3.0 - resolution: "supports-hyperlinks@npm:2.3.0" - dependencies: - has-flag: ^4.0.0 - supports-color: ^7.0.0 - checksum: 9ee0de3c8ce919d453511b2b1588a8205bd429d98af94a01df87411391010fe22ca463f268c84b2ce2abad019dfff8452aa02806eeb5c905a8d7ad5c4f4c52b8 - languageName: node - linkType: hard - -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae - languageName: node - linkType: hard - -"svg-parser@npm:^2.0.2, svg-parser@npm:^2.0.4": - version: 2.0.4 - resolution: "svg-parser@npm:2.0.4" - checksum: b3de6653048212f2ae7afe4a423e04a76ec6d2d06e1bf7eacc618a7c5f7df7faa5105561c57b94579ec831fbbdbf5f190ba56a9205ff39ed13eabdf8ab086ddf - languageName: node - linkType: hard - -"svgo@npm:^1.2.2": - version: 1.3.2 - resolution: "svgo@npm:1.3.2" - 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 - checksum: 28a5680a61245eb4a1603bc03459095bb01ad5ebd23e95882d886c3c81752313c0a9a9fe48dd0bcbb9a27c52e11c603640df952971573b2b550d9e15a9ee6116 - languageName: node - linkType: hard - -"svgo@npm:^2.7.0": - version: 2.8.0 - resolution: "svgo@npm:2.8.0" - dependencies: - "@trysound/sax": 0.2.0 - commander: ^7.2.0 - css-select: ^4.1.3 - css-tree: ^1.1.3 - csso: ^4.2.0 - picocolors: ^1.0.0 - stable: ^0.1.8 - bin: - svgo: bin/svgo - checksum: b92f71a8541468ffd0b81b8cdb36b1e242eea320bf3c1a9b2c8809945853e9d8c80c19744267eb91cabf06ae9d5fff3592d677df85a31be4ed59ff78534fa420 - languageName: node - linkType: hard - -"symbol-tree@npm:^3.2.4": - version: 3.2.4 - resolution: "symbol-tree@npm:3.2.4" - checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d - languageName: node - linkType: hard - -"tailwindcss@npm:^3.0.2": - version: 3.4.18 - resolution: "tailwindcss@npm:3.4.18" - dependencies: - "@alloc/quick-lru": ^5.2.0 - arg: ^5.0.2 - chokidar: ^3.6.0 - didyoumean: ^1.2.2 - dlv: ^1.1.3 - fast-glob: ^3.3.2 - glob-parent: ^6.0.2 - is-glob: ^4.0.3 - jiti: ^1.21.7 - lilconfig: ^3.1.3 - micromatch: ^4.0.8 - normalize-path: ^3.0.0 - object-hash: ^3.0.0 - picocolors: ^1.1.1 - postcss: ^8.4.47 - postcss-import: ^15.1.0 - postcss-js: ^4.0.1 - postcss-load-config: ^4.0.2 || ^5.0 || ^6.0 - postcss-nested: ^6.2.0 - postcss-selector-parser: ^6.1.2 - resolve: ^1.22.8 - sucrase: ^3.35.0 - bin: - tailwind: lib/cli.js - tailwindcss: lib/cli.js - checksum: 78f5811353a0afbed1f92a3fd7e8fa89b3a8de4a52c852de0be7e08d482135a0295abf99c8680d41d6eeb4df1799ed2a03ef9e01c3c8d0ab9e5a0b2c36f3e415 - languageName: node - linkType: hard - -"tapable@npm:^1.0.0": - version: 1.1.3 - resolution: "tapable@npm:1.1.3" - checksum: 53ff4e7c3900051c38cc4faab428ebfd7e6ad0841af5a7ac6d5f3045c5b50e88497bfa8295b4b3fbcadd94993c9e358868b78b9fb249a76cb8b018ac8dccafd7 - languageName: node - linkType: hard - -"tapable@npm:^2.0.0, tapable@npm:^2.2.0, tapable@npm:^2.2.1, tapable@npm:^2.3.0": - version: 2.3.0 - resolution: "tapable@npm:2.3.0" - checksum: ada1194219ad550e3626d15019d87a2b8e77521d8463ab1135f46356e987a4c37eff1e87ffdd5acd573590962e519cc81e8ea6f7ed632c66bb58c0f12bd772a4 - languageName: node - linkType: hard - -"tar@npm:^7.5.2": - version: 7.5.2 - resolution: "tar@npm:7.5.2" - dependencies: - "@isaacs/fs-minipass": ^4.0.0 - chownr: ^3.0.0 - minipass: ^7.1.2 - minizlib: ^3.1.0 - yallist: ^5.0.0 - checksum: 192559b0e7af17d57c7747592ef22c14d5eba2d9c35996320ccd20c3e2038160fe8d928fc5c08b2aa1b170c4d0a18c119441e81eae8f227ca2028d5bcaa6bf23 - languageName: node - linkType: hard - -"temp-dir@npm:^2.0.0": - version: 2.0.0 - resolution: "temp-dir@npm:2.0.0" - checksum: cc4f0404bf8d6ae1a166e0e64f3f409b423f4d1274d8c02814a59a5529f07db6cd070a749664141b992b2c1af337fa9bb451a460a43bb9bcddc49f235d3115aa - languageName: node - linkType: hard - -"tempy@npm:^0.6.0": - version: 0.6.0 - resolution: "tempy@npm:0.6.0" - dependencies: - is-stream: ^2.0.0 - temp-dir: ^2.0.0 - type-fest: ^0.16.0 - unique-string: ^2.0.0 - checksum: dd09c8b6615e4b785ea878e9a18b17ac0bfe5dccf5a0e205ebd274bb356356aff3f5c90a6c917077d51c75efb7648b113a78b0492e2ffc81a7c9912eb872ac52 - languageName: node - linkType: hard - -"terminal-link@npm:^2.0.0": - version: 2.1.1 - resolution: "terminal-link@npm:2.1.1" - dependencies: - ansi-escapes: ^4.2.1 - supports-hyperlinks: ^2.0.0 - checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f - languageName: node - linkType: hard - -"terser-webpack-plugin@npm:^5.2.5, terser-webpack-plugin@npm:^5.3.11": - version: 5.3.14 - resolution: "terser-webpack-plugin@npm:5.3.14" - dependencies: - "@jridgewell/trace-mapping": ^0.3.25 - jest-worker: ^27.4.5 - schema-utils: ^4.3.0 - serialize-javascript: ^6.0.2 - terser: ^5.31.1 - peerDependencies: - webpack: ^5.1.0 - peerDependenciesMeta: - "@swc/core": - optional: true - esbuild: - optional: true - uglify-js: - optional: true - checksum: 13a1e67f1675a473b18d25cb0ce65c3f0a19b5e9a93213a99ea61dc4ca996ea93aa17a221965b526f5788d242836a8249ad00538fbb322e25cb69076eb55feab - languageName: node - linkType: hard - -"terser@npm:^5.0.0, terser@npm:^5.10.0, terser@npm:^5.31.1": - version: 5.44.1 - resolution: "terser@npm:5.44.1" - dependencies: - "@jridgewell/source-map": ^0.3.3 - acorn: ^8.15.0 - commander: ^2.20.0 - source-map-support: ~0.5.20 - bin: - terser: bin/terser - checksum: 1113c5711bb53127f9886e3c906fde8a93a665b532db9c7e36ff7bf287e032ed48ea0e5a3a1a27f6a27c3c0f934e47e7590fcd15c76b7b7bd44ad751b8a9ede4 - languageName: node - linkType: hard - -"test-exclude@npm:^6.0.0": - version: 6.0.0 - resolution: "test-exclude@npm:6.0.0" - dependencies: - "@istanbuljs/schema": ^0.1.2 - glob: ^7.1.4 - minimatch: ^3.0.4 - checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 - languageName: node - linkType: hard - -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a - languageName: node - linkType: hard - -"thenify-all@npm:^1.0.0": - version: 1.6.0 - resolution: "thenify-all@npm:1.6.0" - dependencies: - thenify: ">= 3.1.0 < 4" - checksum: dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e - languageName: node - linkType: hard - -"thenify@npm:>= 3.1.0 < 4": - version: 3.3.1 - resolution: "thenify@npm:3.3.1" - dependencies: - any-promise: ^1.0.0 - checksum: 84e1b804bfec49f3531215f17b4a6e50fd4397b5f7c1bccc427b9c656e1ecfb13ea79d899930184f78bc2f57285c54d9a50a590c8868f4f0cef5c1d9f898b05e - languageName: node - linkType: hard - -"throat@npm:^6.0.1": - version: 6.0.2 - resolution: "throat@npm:6.0.2" - checksum: 463093768d4884772020bb18b0f33d3fec8a2b4173f7da3958dfbe88ff0f1e686ffadf0f87333bf6f6db7306b1450efc7855df69c78bf0bfa61f6d84a3361fe8 - languageName: node - linkType: hard - -"through@npm:2, through@npm:~2.3, through@npm:~2.3.1": - version: 2.3.8 - resolution: "through@npm:2.3.8" - checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd - languageName: node - linkType: hard - -"thunky@npm:^1.0.2": - version: 1.1.0 - resolution: "thunky@npm:1.1.0" - checksum: 993096c472b6b8f30e29dc777a8d17720e4cab448375041f20c0cb802a09a7fb2217f2a3e8cdc11851faa71c957e2db309357367fc9d7af3cb7a4d00f4b66034 - languageName: node - linkType: hard - -"tiny-warning@npm:^1.0.2": - version: 1.0.3 - resolution: "tiny-warning@npm:1.0.3" - checksum: da62c4acac565902f0624b123eed6dd3509bc9a8d30c06e017104bedcf5d35810da8ff72864400ad19c5c7806fc0a8323c68baf3e326af7cb7d969f846100d71 - languageName: node - linkType: hard - -"tinyglobby@npm:^0.2.11, tinyglobby@npm:^0.2.12": - version: 0.2.15 - resolution: "tinyglobby@npm:0.2.15" - dependencies: - fdir: ^6.5.0 - picomatch: ^4.0.3 - checksum: 0e33b8babff966c6ab86e9b825a350a6a98a63700fa0bb7ae6cf36a7770a508892383adc272f7f9d17aaf46a9d622b455e775b9949a3f951eaaf5dfb26331d44 - languageName: node - linkType: hard - -"tmpl@npm:1.0.5": - version: 1.0.5 - resolution: "tmpl@npm:1.0.5" - checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 - languageName: node - linkType: hard - -"to-object-path@npm:^0.3.0": - version: 0.3.0 - resolution: "to-object-path@npm:0.3.0" - dependencies: - kind-of: ^3.0.2 - checksum: 9425effee5b43e61d720940fa2b889623f77473d459c2ce3d4a580a4405df4403eec7be6b857455908070566352f9e2417304641ed158dda6f6a365fe3e66d70 - languageName: node - linkType: hard - -"to-regex-range@npm:^2.1.0": - version: 2.1.1 - resolution: "to-regex-range@npm:2.1.1" - dependencies: - is-number: ^3.0.0 - repeat-string: ^1.6.1 - checksum: 46093cc14be2da905cc931e442d280b2e544e2bfdb9a24b3cf821be8d342f804785e5736c108d5be026021a05d7b38144980a61917eee3c88de0a5e710e10320 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: ^7.0.0 - checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed - languageName: node - linkType: hard - -"to-regex@npm:^3.0.1, to-regex@npm:^3.0.2": - version: 3.0.2 - resolution: "to-regex@npm:3.0.2" - dependencies: - define-property: ^2.0.2 - extend-shallow: ^3.0.2 - regex-not: ^1.0.2 - safe-regex: ^1.1.0 - checksum: 4ed4a619059b64e204aad84e4e5f3ea82d97410988bcece7cf6cbfdbf193d11bff48cf53842d88b8bb00b1bfc0d048f61f20f0709e6f393fd8fe0122662d9db4 - languageName: node - linkType: hard - -"toidentifier@npm:1.0.1, toidentifier@npm:~1.0.1": - version: 1.0.1 - resolution: "toidentifier@npm:1.0.1" - checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 - languageName: node - linkType: hard - -"tough-cookie@npm:^4.0.0": - version: 4.1.4 - resolution: "tough-cookie@npm:4.1.4" - dependencies: - psl: ^1.1.33 - punycode: ^2.1.1 - universalify: ^0.2.0 - url-parse: ^1.5.3 - checksum: 5815059f014c31179a303c673f753f7899a6fce94ac93712c88ea5f3c26e0c042b5f0c7a599a00f8e0feeca4615dba75c3dffc54f3c1a489978aa8205e09307c - languageName: node - linkType: hard - -"tr46@npm:^1.0.1": - version: 1.0.1 - resolution: "tr46@npm:1.0.1" - dependencies: - punycode: ^2.1.0 - checksum: 96d4ed46bc161db75dbf9247a236ea0bfcaf5758baae6749e92afab0bc5a09cb59af21788ede7e55080f2bf02dce3e4a8f2a484cc45164e29f4b5e68f7cbcc1a - languageName: node - linkType: hard - -"tr46@npm:^2.1.0": - version: 2.1.0 - resolution: "tr46@npm:2.1.0" - dependencies: - punycode: ^2.1.1 - checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3 - languageName: node - linkType: hard - -"tree-kill@npm:^1.2.2": - version: 1.2.2 - resolution: "tree-kill@npm:1.2.2" - bin: - tree-kill: cli.js - checksum: 49117f5f410d19c84b0464d29afb9642c863bc5ba40fcb9a245d474c6d5cc64d1b177a6e6713129eb346b40aebb9d4631d967517f9fbe8251c35b21b13cd96c7 - languageName: node - linkType: hard - -"tryer@npm:^1.0.1": - version: 1.0.1 - resolution: "tryer@npm:1.0.1" - checksum: 1cf14d7f67c79613f054b569bfc9a89c7020d331573a812dfcf7437244e8f8e6eb6893b210cbd9cc217f67c1d72617f89793df231e4fe7d53634ed91cf3a89d1 - languageName: node - linkType: hard - -"ts-interface-checker@npm:^0.1.9": - version: 0.1.13 - resolution: "ts-interface-checker@npm:0.1.13" - checksum: 20c29189c2dd6067a8775e07823ddf8d59a33e2ffc47a1bd59a5cb28bb0121a2969a816d5e77eda2ed85b18171aa5d1c4005a6b88ae8499ec7cc49f78571cb5e - languageName: node - linkType: hard - -"tsconfig-paths@npm:^3.15.0": - version: 3.15.0 - resolution: "tsconfig-paths@npm:3.15.0" - dependencies: - "@types/json5": ^0.0.29 - json5: ^1.0.2 - minimist: ^1.2.6 - strip-bom: ^3.0.0 - checksum: 59f35407a390d9482b320451f52a411a256a130ff0e7543d18c6f20afab29ac19fbe55c360a93d6476213cc335a4d76ce90f67df54c4e9037f7d240920832201 - languageName: node - linkType: hard - -"tslib@npm:^1.8.1": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd - languageName: node - linkType: hard - -"tslib@npm:^2.0.3, tslib@npm:^2.1.0": - version: 2.8.1 - resolution: "tslib@npm:2.8.1" - checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a - languageName: node - linkType: hard - -"tsutils@npm:^3.21.0": - version: 3.21.0 - resolution: "tsutils@npm:3.21.0" - dependencies: - tslib: ^1.8.1 - 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" - checksum: 1843f4c1b2e0f975e08c4c21caa4af4f7f65a12ac1b81b3b8489366826259323feb3fc7a243123453d2d1a02314205a7634e048d4a8009921da19f99755cdc48 - languageName: node - linkType: hard - -"type-check@npm:^0.4.0, type-check@npm:~0.4.0": - version: 0.4.0 - resolution: "type-check@npm:0.4.0" - dependencies: - prelude-ls: ^1.2.1 - checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a - languageName: node - linkType: hard - -"type-check@npm:~0.3.2": - version: 0.3.2 - resolution: "type-check@npm:0.3.2" - dependencies: - prelude-ls: ~1.1.2 - checksum: dd3b1495642731bc0e1fc40abe5e977e0263005551ac83342ecb6f4f89551d106b368ec32ad3fb2da19b3bd7b2d1f64330da2ea9176d8ddbfe389fb286eb5124 - languageName: node - linkType: hard - -"type-detect@npm:4.0.8": - version: 4.0.8 - resolution: "type-detect@npm:4.0.8" - checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 - languageName: node - linkType: hard - -"type-fest@npm:^0.16.0": - version: 0.16.0 - resolution: "type-fest@npm:0.16.0" - checksum: 1a4102c06dc109db00418c753062e206cab65befd469d000ece4452ee649bf2a9cf57686d96fb42326bc9d918d9a194d4452897b486dcc41989e5c99e4e87094 - languageName: node - linkType: hard - -"type-fest@npm:^0.20.2": - version: 0.20.2 - resolution: "type-fest@npm:0.20.2" - checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 - languageName: node - linkType: hard - -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 - languageName: node - linkType: hard - -"type-is@npm:~1.6.18": - version: 1.6.18 - resolution: "type-is@npm:1.6.18" - dependencies: - media-typer: 0.3.0 - mime-types: ~2.1.24 - checksum: 2c8e47675d55f8b4e404bcf529abdf5036c537a04c2b20177bcf78c9e3c1da69da3942b1346e6edb09e823228c0ee656ef0e033765ec39a70d496ef601a0c657 - languageName: node - linkType: hard - -"typed-array-buffer@npm:^1.0.3": - version: 1.0.3 - resolution: "typed-array-buffer@npm:1.0.3" - dependencies: - call-bound: ^1.0.3 - es-errors: ^1.3.0 - is-typed-array: ^1.1.14 - checksum: 3fb91f0735fb413b2bbaaca9fabe7b8fc14a3fa5a5a7546bab8a57e755be0e3788d893195ad9c2b842620592de0e68d4c077d4c2c41f04ec25b8b5bb82fa9a80 - languageName: node - linkType: hard - -"typed-array-byte-length@npm:^1.0.3": - version: 1.0.3 - resolution: "typed-array-byte-length@npm:1.0.3" - dependencies: - call-bind: ^1.0.8 - for-each: ^0.3.3 - gopd: ^1.2.0 - has-proto: ^1.2.0 - is-typed-array: ^1.1.14 - checksum: cda9352178ebeab073ad6499b03e938ebc30c4efaea63a26839d89c4b1da9d2640b0d937fc2bd1f049eb0a38def6fbe8a061b601292ae62fe079a410ce56e3a6 - languageName: node - linkType: hard - -"typed-array-byte-offset@npm:^1.0.4": - version: 1.0.4 - resolution: "typed-array-byte-offset@npm:1.0.4" - dependencies: - available-typed-arrays: ^1.0.7 - call-bind: ^1.0.8 - for-each: ^0.3.3 - gopd: ^1.2.0 - has-proto: ^1.2.0 - is-typed-array: ^1.1.15 - reflect.getprototypeof: ^1.0.9 - checksum: 670b7e6bb1d3c2cf6160f27f9f529e60c3f6f9611c67e47ca70ca5cfa24ad95415694c49d1dbfeda016d3372cab7dfc9e38c7b3e1bb8d692cae13a63d3c144d7 - languageName: node - linkType: hard - -"typed-array-length@npm:^1.0.7": - version: 1.0.7 - resolution: "typed-array-length@npm:1.0.7" - dependencies: - call-bind: ^1.0.7 - for-each: ^0.3.3 - gopd: ^1.0.1 - is-typed-array: ^1.1.13 - possible-typed-array-names: ^1.0.0 - reflect.getprototypeof: ^1.0.6 - checksum: deb1a4ffdb27cd930b02c7030cb3e8e0993084c643208e52696e18ea6dd3953dfc37b939df06ff78170423d353dc8b10d5bae5796f3711c1b3abe52872b3774c - languageName: node - linkType: hard - -"typedarray-to-buffer@npm:^3.1.5": - version: 3.1.5 - resolution: "typedarray-to-buffer@npm:3.1.5" - dependencies: - is-typedarray: ^1.0.0 - checksum: 99c11aaa8f45189fcfba6b8a4825fd684a321caa9bd7a76a27cf0c7732c174d198b99f449c52c3818107430b5f41c0ccbbfb75cb2ee3ca4a9451710986d61a60 - languageName: node - linkType: hard - -"typescript@npm:^4.9.5": - version: 4.9.5 - resolution: "typescript@npm:4.9.5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db - languageName: node - linkType: hard - -"typescript@patch:typescript@^4.9.5#~builtin": - version: 4.9.5 - resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=a1c5e5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 2eee5c37cad4390385db5db5a8e81470e42e8f1401b0358d7390095d6f681b410f2c4a0c496c6ff9ebd775423c7785cdace7bcdad76c7bee283df3d9718c0f20 - languageName: node - linkType: hard - -"unbox-primitive@npm:^1.1.0": - version: 1.1.0 - resolution: "unbox-primitive@npm:1.1.0" - dependencies: - call-bound: ^1.0.3 - has-bigints: ^1.0.2 - has-symbols: ^1.1.0 - which-boxed-primitive: ^1.1.1 - checksum: 729f13b84a5bfa3fead1d8139cee5c38514e63a8d6a437819a473e241ba87eeb593646568621c7fc7f133db300ef18d65d1a5a60dc9c7beb9000364d93c581df - languageName: node - linkType: hard - -"underscore@npm:1.12.1": - version: 1.12.1 - resolution: "underscore@npm:1.12.1" - checksum: ec327603aa112b99fe9d74cd9bf3b3b7451465a9d2610ceab269a532e3f191650ab017903be34dc86fe406a11d04d8905a3b04dd4c129493e51bee09a3f3074c - languageName: node - linkType: hard - -"undici-types@npm:~7.16.0": - version: 7.16.0 - resolution: "undici-types@npm:7.16.0" - checksum: 1ef68fc6c5bad200c8b6f17de8e5bc5cfdcadc164ba8d7208cd087cfa8583d922d8316a7fd76c9a658c22b4123d3ff847429185094484fbc65377d695c905857 - languageName: node - linkType: hard - -"unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.1 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" - checksum: 3c3dabdb1d22aef4904399f9e810d0b71c0b12b3815169d96fac97e56d5642840c6071cf709adcace2252bc6bb80242396c2ec74b37224eb015c5f7aca40bad7 - languageName: node - linkType: hard - -"unicode-match-property-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-match-property-ecmascript@npm:2.0.0" - dependencies: - unicode-canonical-property-names-ecmascript: ^2.0.0 - unicode-property-aliases-ecmascript: ^2.0.0 - checksum: 1f34a7434a23df4885b5890ac36c5b2161a809887000be560f56ad4b11126d433c0c1c39baf1016bdabed4ec54829a6190ee37aa24919aa116dc1a5a8a62965a - languageName: node - linkType: hard - -"unicode-match-property-value-ecmascript@npm:^2.2.1": - version: 2.2.1 - resolution: "unicode-match-property-value-ecmascript@npm:2.2.1" - checksum: e6c73e07bb4dc4aa399797a14b170e84a30ed290bcf97cc4305cf67dde8744119721ce17cef03f4f9d4ff48654bfa26eadc7fe1e8dd4b71b8f3b2e9a9742f013 - languageName: node - linkType: hard - -"unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.2.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.2.0" - checksum: 0dd0f6e70130c59b4a841bac206758f70227b113145e4afe238161e3e8540e8eb79963e7a228cd90ad13d499e96f7ef4ee8940835404b2181ad9bf9c174818e3 - languageName: node - linkType: hard - -"union-value@npm:^1.0.0": - version: 1.0.1 - resolution: "union-value@npm:1.0.1" - dependencies: - arr-union: ^3.1.0 - get-value: ^2.0.6 - is-extendable: ^0.1.1 - set-value: ^2.0.1 - checksum: a3464097d3f27f6aa90cf103ed9387541bccfc006517559381a10e0dffa62f465a9d9a09c9b9c3d26d0f4cbe61d4d010e2fbd710fd4bf1267a768ba8a774b0ba - languageName: node - linkType: hard - -"unique-filename@npm:^5.0.0": - version: 5.0.0 - resolution: "unique-filename@npm:5.0.0" - dependencies: - unique-slug: ^6.0.0 - checksum: a5f67085caef74bdd2a6869a200ed5d68d171f5cc38435a836b5fd12cce4e4eb55e6a190298035c325053a5687ed7a3c96f0a91e82215fd14729769d9ac57d9b - languageName: node - linkType: hard - -"unique-slug@npm:^6.0.0": - version: 6.0.0 - resolution: "unique-slug@npm:6.0.0" - dependencies: - imurmurhash: ^0.1.4 - checksum: ad6cf238b10292d944521714d31bc9f3ca79fa80cb7a154aad183056493f98e85de669412c6bbfe527ffa9bdeff36d3dd4d5bccaf562c794f2580ab11932b691 - languageName: node - linkType: hard - -"unique-string@npm:^2.0.0": - version: 2.0.0 - resolution: "unique-string@npm:2.0.0" - dependencies: - crypto-random-string: ^2.0.0 - checksum: ef68f639136bcfe040cf7e3cd7a8dff076a665288122855148a6f7134092e6ed33bf83a7f3a9185e46c98dddc445a0da6ac25612afa1a7c38b8b654d6c02498e - languageName: node - linkType: hard - -"universalify@npm:^0.2.0": - version: 0.2.0 - resolution: "universalify@npm:0.2.0" - checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 - languageName: node - linkType: hard - -"universalify@npm:^2.0.0": - version: 2.0.1 - resolution: "universalify@npm:2.0.1" - checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 - languageName: node - linkType: hard - -"unix-crypt-td-js@npm:^1.1.4": - version: 1.1.4 - resolution: "unix-crypt-td-js@npm:1.1.4" - checksum: c1bfcd699fa0fa15eac087760e34fdf7e2e686de1c40dde7f550c2429389fd7ef68bf83ce804ce7882551573330832aae32e80be3ce991f7080aabd98f8bd554 - languageName: node - linkType: hard - -"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": - version: 1.0.0 - resolution: "unpipe@npm:1.0.0" - checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 - languageName: node - linkType: hard - -"unquote@npm:~1.1.1": - version: 1.1.1 - resolution: "unquote@npm:1.1.1" - checksum: 71745867d09cba44ba2d26cb71d6dda7045a98b14f7405df4faaf2b0c90d24703ad027a9d90ba9a6e0d096de2c8d56f864fd03f1c0498c0b7a3990f73b4c8f5f - languageName: node - linkType: hard - -"unset-value@npm:^1.0.0": - version: 1.0.0 - resolution: "unset-value@npm:1.0.0" - dependencies: - has-value: ^0.3.1 - isobject: ^3.0.0 - checksum: 5990ecf660672be2781fc9fb322543c4aa592b68ed9a3312fa4df0e9ba709d42e823af090fc8f95775b4cd2c9a5169f7388f0cec39238b6d0d55a69fc2ab6b29 - languageName: node - linkType: hard - -"upath@npm:^1.1.1, upath@npm:^1.2.0": - version: 1.2.0 - resolution: "upath@npm:1.2.0" - checksum: 4c05c094797cb733193a0784774dbea5b1889d502fc9f0572164177e185e4a59ba7099bf0b0adf945b232e2ac60363f9bf18aac9b2206fb99cbef971a8455445 - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.1.4": - version: 1.1.4 - resolution: "update-browserslist-db@npm:1.1.4" - dependencies: - escalade: ^3.2.0 - picocolors: ^1.1.1 - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: b757805a63d7954985753c97a48e313abd2d35f2bb10d2bffa65d73a4b81ec9e1305a7b06296819bac8a6b4db8e7be88582487fae2ad7e24731e4ee372b919a6 - languageName: node - linkType: hard - -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: ^2.1.0 - checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 - languageName: node - linkType: hard - -"urix@npm:^0.1.0": - version: 0.1.0 - resolution: "urix@npm:0.1.0" - checksum: 4c076ecfbf3411e888547fe844e52378ab5ada2d2f27625139011eada79925e77f7fbf0e4016d45e6a9e9adb6b7e64981bd49b22700c7c401c5fc15f423303b3 - languageName: node - linkType: hard - -"url-parse@npm:^1.5.3": - version: 1.5.10 - resolution: "url-parse@npm:1.5.10" - dependencies: - querystringify: ^2.1.1 - requires-port: ^1.0.0 - checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf - languageName: node - linkType: hard - -"use@npm:^3.1.0": - version: 3.1.1 - resolution: "use@npm:3.1.1" - checksum: 08a130289f5238fcbf8f59a18951286a6e660d17acccc9d58d9b69dfa0ee19aa038e8f95721b00b432c36d1629a9e32a464bf2e7e0ae6a244c42ddb30bdd8b33 - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 - languageName: node - linkType: hard - -"util.promisify@npm:~1.0.0": - version: 1.0.1 - resolution: "util.promisify@npm:1.0.1" - dependencies: - define-properties: ^1.1.3 - es-abstract: ^1.17.2 - has-symbols: ^1.0.1 - object.getownpropertydescriptors: ^2.1.0 - checksum: d823c75b3fc66510018596f128a6592c98991df38bc0464a633bdf9134e2de0a1a33199c5c21cc261048a3982d7a19e032ecff8835b3c587f843deba96063e37 - languageName: node - linkType: hard - -"utila@npm:~0.4": - version: 0.4.0 - resolution: "utila@npm:0.4.0" - checksum: 97ffd3bd2bb80c773429d3fb8396469115cd190dded1e733f190d8b602bd0a1bcd6216b7ce3c4395ee3c79e3c879c19d268dbaae3093564cb169ad1212d436f4 - languageName: node - linkType: hard - -"utils-merge@npm:1.0.1": - version: 1.0.1 - resolution: "utils-merge@npm:1.0.1" - checksum: c81095493225ecfc28add49c106ca4f09cdf56bc66731aa8dabc2edbbccb1e1bfe2de6a115e5c6a380d3ea166d1636410b62ef216bb07b3feb1cfde1d95d5080 - languageName: node - linkType: hard - -"uuid@npm:^3.0.0": - version: 3.4.0 - resolution: "uuid@npm:3.4.0" - bin: - uuid: ./bin/uuid - checksum: 58de2feed61c59060b40f8203c0e4ed7fd6f99d42534a499f1741218a1dd0c129f4aa1de797bcf822c8ea5da7e4137aa3673431a96dae729047f7aca7b27866f - languageName: node - linkType: hard - -"uuid@npm:^8.3.2": - version: 8.3.2 - resolution: "uuid@npm:8.3.2" - bin: - uuid: dist/bin/uuid - checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df - languageName: node - linkType: hard - -"v8-to-istanbul@npm:^8.1.0": - version: 8.1.1 - resolution: "v8-to-istanbul@npm:8.1.1" - dependencies: - "@types/istanbul-lib-coverage": ^2.0.1 - convert-source-map: ^1.6.0 - source-map: ^0.7.3 - checksum: 54ce92bec2727879626f623d02c8d193f0c7e919941fa373ec135189a8382265117f5316ea317a1e12a5f9c13d84d8449052a731fe3306fa4beaafbfa4cab229 - languageName: node - linkType: hard - -"vary@npm:^1, vary@npm:~1.1.2": - version: 1.1.2 - resolution: "vary@npm:1.1.2" - checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b - languageName: node - linkType: hard - -"w3c-hr-time@npm:^1.0.2": - version: 1.0.2 - resolution: "w3c-hr-time@npm:1.0.2" - dependencies: - browser-process-hrtime: ^1.0.0 - checksum: ec3c2dacbf8050d917bbf89537a101a08c2e333b4c19155f7d3bedde43529d4339db6b3d049d9610789cb915f9515f8be037e0c54c079e9d4735c50b37ed52b9 - languageName: node - linkType: hard - -"w3c-xmlserializer@npm:^2.0.0": - version: 2.0.0 - resolution: "w3c-xmlserializer@npm:2.0.0" - dependencies: - xml-name-validator: ^3.0.0 - checksum: ae25c51cf71f1fb2516df1ab33a481f83461a117565b95e3d0927432522323f93b1b2846cbb60196d337970c421adb604fc2d0d180c6a47a839da01db5b9973b - languageName: node - linkType: hard - -"walker@npm:^1.0.7": - version: 1.0.8 - resolution: "walker@npm:1.0.8" - dependencies: - makeerror: 1.0.12 - checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c - languageName: node - linkType: hard - -"watchpack@npm:^2.4.4": - version: 2.4.4 - resolution: "watchpack@npm:2.4.4" - dependencies: - glob-to-regexp: ^0.4.1 - graceful-fs: ^4.1.2 - checksum: 469514a04bcdd7ea77d4b3c62d1f087eafbce64cbc728c89355d5710ee01311533456122da7c585d3654d5bfcf09e6085db1a6eb274c4762a18e370526d17561 - languageName: node - linkType: hard - -"wbuf@npm:^1.1.0, wbuf@npm:^1.7.3": - version: 1.7.3 - resolution: "wbuf@npm:1.7.3" - dependencies: - minimalistic-assert: ^1.0.0 - checksum: 2abc306c96930b757972a1c4650eb6b25b5d99f24088714957f88629e137db569368c5de0e57986c89ea70db2f1df9bba11a87cb6d0c8694b6f53a0159fab3bf - languageName: node - linkType: hard - -"webidl-conversions@npm:^4.0.2": - version: 4.0.2 - resolution: "webidl-conversions@npm:4.0.2" - checksum: c93d8dfe908a0140a4ae9c0ebc87a33805b416a33ee638a605b551523eec94a9632165e54632f6d57a39c5f948c4bab10e0e066525e9a4b87a79f0d04fbca374 - languageName: node - linkType: hard - -"webidl-conversions@npm:^5.0.0": - version: 5.0.0 - resolution: "webidl-conversions@npm:5.0.0" - checksum: ccf1ec2ca7c0b5671e5440ace4a66806ae09c49016ab821481bec0c05b1b82695082dc0a27d1fe9d804d475a408ba0c691e6803fd21be608e710955d4589cd69 - languageName: node - linkType: hard - -"webidl-conversions@npm:^6.1.0": - version: 6.1.0 - resolution: "webidl-conversions@npm:6.1.0" - checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb - languageName: node - linkType: hard - -"webpack-dev-middleware@npm:^5.3.4": - version: 5.3.4 - resolution: "webpack-dev-middleware@npm:5.3.4" - dependencies: - colorette: ^2.0.10 - memfs: ^3.4.3 - mime-types: ^2.1.31 - range-parser: ^1.2.1 - schema-utils: ^4.0.0 - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - checksum: 90cf3e27d0714c1a745454a1794f491b7076434939340605b9ee8718ba2b85385b120939754e9fdbd6569811e749dee53eec319e0d600e70e0b0baffd8e3fb13 - languageName: node - linkType: hard - -"webpack-dev-server@npm:^4.6.0": - version: 4.15.2 - resolution: "webpack-dev-server@npm:4.15.2" - 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.5 - 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 - launch-editor: ^2.6.0 - 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.4 - ws: ^8.13.0 - peerDependencies: - webpack: ^4.37.0 || ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - bin: - webpack-dev-server: bin/webpack-dev-server.js - checksum: 123507129cb4d55fdc5fabdd177574f31133605748372bb11353307b7a583ef25c6fd27b6addf56bf070ba44c88d5da861771c2ec55f52405082ec9efd01f039 - languageName: node - linkType: hard - -"webpack-manifest-plugin@npm:^4.0.2": - version: 4.1.1 - resolution: "webpack-manifest-plugin@npm:4.1.1" - dependencies: - tapable: ^2.0.0 - webpack-sources: ^2.2.0 - peerDependencies: - webpack: ^4.44.2 || ^5.47.0 - checksum: 426982030d3b0ef26432d98960ee1fa33889d8f0ed79b3d2c8e37be9b4e4beba7524c60631297ea557c642a340b76d70b0eb6a1e08b86a769409037185795038 - languageName: node - linkType: hard - -"webpack-sources@npm:^1.4.3": - version: 1.4.3 - resolution: "webpack-sources@npm:1.4.3" - dependencies: - source-list-map: ^2.0.0 - source-map: ~0.6.1 - checksum: 37463dad8d08114930f4bc4882a9602941f07c9f0efa9b6bc78738cd936275b990a596d801ef450d022bb005b109b9f451dd087db2f3c9baf53e8e22cf388f79 - languageName: node - linkType: hard - -"webpack-sources@npm:^2.2.0": - version: 2.3.1 - resolution: "webpack-sources@npm:2.3.1" - dependencies: - source-list-map: ^2.0.1 - source-map: ^0.6.1 - checksum: 6fd67f2274a84c5f51ad89767112ec8b47727134bf0f2ba0cff458c970f18966939a24128bdbddba621cd66eeb2bef0552642a9333cd8e54514f7b2a71776346 - languageName: node - linkType: hard - -"webpack-sources@npm:^3.3.3": - version: 3.3.3 - resolution: "webpack-sources@npm:3.3.3" - checksum: 243d438ec4dfe805cca20fa66d111114b1f277b8ecfa95bb6ee0a6c7d996aee682539952028c2b203a6c170e6ef56f71ecf3e366e90bf1cb58b0ae982176b651 - languageName: node - linkType: hard - -"webpack@npm:^5.64.4": - version: 5.103.0 - resolution: "webpack@npm:5.103.0" - dependencies: - "@types/eslint-scope": ^3.7.7 - "@types/estree": ^1.0.8 - "@types/json-schema": ^7.0.15 - "@webassemblyjs/ast": ^1.14.1 - "@webassemblyjs/wasm-edit": ^1.14.1 - "@webassemblyjs/wasm-parser": ^1.14.1 - acorn: ^8.15.0 - acorn-import-phases: ^1.0.3 - browserslist: ^4.26.3 - chrome-trace-event: ^1.0.2 - enhanced-resolve: ^5.17.3 - es-module-lexer: ^1.2.1 - eslint-scope: 5.1.1 - events: ^3.2.0 - glob-to-regexp: ^0.4.1 - graceful-fs: ^4.2.11 - json-parse-even-better-errors: ^2.3.1 - loader-runner: ^4.3.1 - mime-types: ^2.1.27 - neo-async: ^2.6.2 - schema-utils: ^4.3.3 - tapable: ^2.3.0 - terser-webpack-plugin: ^5.3.11 - watchpack: ^2.4.4 - webpack-sources: ^3.3.3 - peerDependenciesMeta: - webpack-cli: - optional: true - bin: - webpack: bin/webpack.js - checksum: dd73cb519423b4a59088e76f446f6a9c51344c53867609790e46a0bd68325033440e3dff24c1f9acd2fa985b703dc01e208b41b889e58dc5642566a9234f9260 - languageName: node - linkType: hard - -"websocket-driver@npm:>=0.5.1, websocket-driver@npm:^0.7.4": - version: 0.7.4 - resolution: "websocket-driver@npm:0.7.4" - dependencies: - http-parser-js: ">=0.5.1" - safe-buffer: ">=5.1.0" - websocket-extensions: ">=0.1.1" - checksum: fffe5a33fe8eceafd21d2a065661d09e38b93877eae1de6ab5d7d2734c6ed243973beae10ae48c6613cfd675f200e5a058d1e3531bc9e6c5d4f1396ff1f0bfb9 - languageName: node - linkType: hard - -"websocket-extensions@npm:>=0.1.1": - version: 0.1.4 - resolution: "websocket-extensions@npm:0.1.4" - checksum: 5976835e68a86afcd64c7a9762ed85f2f27d48c488c707e67ba85e717b90fa066b98ab33c744d64255c9622d349eedecf728e65a5f921da71b58d0e9591b9038 - languageName: node - linkType: hard - -"whatwg-encoding@npm:^1.0.5": - version: 1.0.5 - resolution: "whatwg-encoding@npm:1.0.5" - dependencies: - iconv-lite: 0.4.24 - checksum: 5be4efe111dce29ddee3448d3915477fcc3b28f991d9cf1300b4e50d6d189010d47bca2f51140a844cf9b726e8f066f4aee72a04d687bfe4f2ee2767b2f5b1e6 - languageName: node - linkType: hard - -"whatwg-fetch@npm:^3.6.2": - version: 3.6.20 - resolution: "whatwg-fetch@npm:3.6.20" - checksum: c58851ea2c4efe5c2235f13450f426824cf0253c1d45da28f45900290ae602a20aff2ab43346f16ec58917d5562e159cd691efa368354b2e82918c2146a519c5 - languageName: node - linkType: hard - -"whatwg-mimetype@npm:^2.3.0": - version: 2.3.0 - resolution: "whatwg-mimetype@npm:2.3.0" - checksum: 23eb885940bcbcca4ff841c40a78e9cbb893ec42743993a42bf7aed16085b048b44b06f3402018931687153550f9a32d259dfa524e4f03577ab898b6965e5383 - languageName: node - linkType: hard - -"whatwg-url@npm:^7.0.0": - version: 7.1.0 - resolution: "whatwg-url@npm:7.1.0" - dependencies: - lodash.sortby: ^4.7.0 - tr46: ^1.0.1 - webidl-conversions: ^4.0.2 - checksum: fecb07c87290b47d2ec2fb6d6ca26daad3c9e211e0e531dd7566e7ff95b5b3525a57d4f32640ad4adf057717e0c215731db842ad761e61d947e81010e05cf5fd - languageName: node - linkType: hard - -"whatwg-url@npm:^8.0.0, whatwg-url@npm:^8.5.0": - version: 8.7.0 - resolution: "whatwg-url@npm:8.7.0" - dependencies: - lodash: ^4.7.0 - tr46: ^2.1.0 - webidl-conversions: ^6.1.0 - checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e - languageName: node - linkType: hard - -"which-boxed-primitive@npm:^1.0.2, which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": - version: 1.1.1 - resolution: "which-boxed-primitive@npm:1.1.1" - dependencies: - is-bigint: ^1.1.0 - is-boolean-object: ^1.2.1 - is-number-object: ^1.1.1 - is-string: ^1.1.1 - is-symbol: ^1.1.1 - checksum: ee41d0260e4fd39551ad77700c7047d3d281ec03d356f5e5c8393fe160ba0db53ef446ff547d05f76ffabfd8ad9df7c9a827e12d4cccdbc8fccf9239ff8ac21e - languageName: node - linkType: hard - -"which-builtin-type@npm:^1.2.1": - version: 1.2.1 - resolution: "which-builtin-type@npm:1.2.1" - dependencies: - call-bound: ^1.0.2 - function.prototype.name: ^1.1.6 - has-tostringtag: ^1.0.2 - is-async-function: ^2.0.0 - is-date-object: ^1.1.0 - is-finalizationregistry: ^1.1.0 - is-generator-function: ^1.0.10 - is-regex: ^1.2.1 - is-weakref: ^1.0.2 - isarray: ^2.0.5 - which-boxed-primitive: ^1.1.0 - which-collection: ^1.0.2 - which-typed-array: ^1.1.16 - checksum: 7a3617ba0e7cafb795f74db418df889867d12bce39a477f3ee29c6092aa64d396955bf2a64eae3726d8578440e26777695544057b373c45a8bcf5fbe920bf633 - languageName: node - linkType: hard - -"which-collection@npm:^1.0.1, which-collection@npm:^1.0.2": - version: 1.0.2 - resolution: "which-collection@npm:1.0.2" - dependencies: - is-map: ^2.0.3 - is-set: ^2.0.3 - is-weakmap: ^2.0.2 - is-weakset: ^2.0.3 - checksum: c51821a331624c8197916598a738fc5aeb9a857f1e00d89f5e4c03dc7c60b4032822b8ec5696d28268bb83326456a8b8216344fb84270d18ff1d7628051879d9 - languageName: node - linkType: hard - -"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.19": - version: 1.1.19 - resolution: "which-typed-array@npm:1.1.19" - dependencies: - available-typed-arrays: ^1.0.7 - call-bind: ^1.0.8 - call-bound: ^1.0.4 - for-each: ^0.3.5 - get-proto: ^1.0.1 - gopd: ^1.2.0 - has-tostringtag: ^1.0.2 - checksum: 162d2a07f68ea323f88ed9419861487ce5d02cb876f2cf9dd1e428d04a63133f93a54f89308f337b27cabd312ee3d027cae4a79002b2f0a85b79b9ef4c190670 - languageName: node - linkType: hard - -"which@npm:^1.3.1": - version: 1.3.1 - resolution: "which@npm:1.3.1" - dependencies: - isexe: ^2.0.0 - bin: - which: ./bin/which - checksum: f2e185c6242244b8426c9df1510e86629192d93c1a986a7d2a591f2c24869e7ffd03d6dac07ca863b2e4c06f59a4cc9916c585b72ee9fa1aa609d0124df15e04 - languageName: node - linkType: hard - -"which@npm:^2.0.1": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: ^2.0.0 - bin: - node-which: ./bin/node-which - checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 - languageName: node - linkType: hard - -"which@npm:^6.0.0": - version: 6.0.0 - resolution: "which@npm:6.0.0" - dependencies: - isexe: ^3.1.1 - bin: - node-which: bin/which.js - checksum: df19b2cd8aac94b333fa29b42e8e371a21e634a742a3b156716f7752a5afe1d73fb5d8bce9b89326f453d96879e8fe626eb421e0117eb1a3ce9fd8c97f6b7db9 - languageName: node - linkType: hard - -"word-wrap@npm:^1.2.5, word-wrap@npm:~1.2.3": - version: 1.2.5 - resolution: "word-wrap@npm:1.2.5" - checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb - languageName: node - linkType: hard - -"workbox-background-sync@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-background-sync@npm:6.6.0" - dependencies: - idb: ^7.0.1 - workbox-core: 6.6.0 - checksum: ac2990110643aef62ca0be54e962296de7b09593b0262bd09fe4893978a42fa1f256c6d989ed472a31ae500b2255b80c6678530a6024eafb0b2f3a93a3c94a5f - languageName: node - linkType: hard - -"workbox-broadcast-update@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-broadcast-update@npm:6.6.0" - dependencies: - workbox-core: 6.6.0 - checksum: 46a74b3b703244eb363e1731a2d6fe1fb2cd9b82d454733dfc6941fd35b76a852685f56db92408383ac50d564c2fd4282f0c6c4db60ba9beb5f311ea8f944dc7 - languageName: node - linkType: hard - -"workbox-build@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-build@npm:6.6.0" - dependencies: - "@apideck/better-ajv-errors": ^0.3.1 - "@babel/core": ^7.11.1 - "@babel/preset-env": ^7.11.0 - "@babel/runtime": ^7.11.2 - "@rollup/plugin-babel": ^5.2.0 - "@rollup/plugin-node-resolve": ^11.2.1 - "@rollup/plugin-replace": ^2.4.1 - "@surma/rollup-plugin-off-main-thread": ^2.2.3 - ajv: ^8.6.0 - common-tags: ^1.8.0 - fast-json-stable-stringify: ^2.1.0 - fs-extra: ^9.0.1 - glob: ^7.1.6 - lodash: ^4.17.20 - pretty-bytes: ^5.3.0 - rollup: ^2.43.1 - rollup-plugin-terser: ^7.0.0 - source-map: ^0.8.0-beta.0 - stringify-object: ^3.3.0 - strip-comments: ^2.0.1 - tempy: ^0.6.0 - upath: ^1.2.0 - workbox-background-sync: 6.6.0 - workbox-broadcast-update: 6.6.0 - workbox-cacheable-response: 6.6.0 - workbox-core: 6.6.0 - workbox-expiration: 6.6.0 - workbox-google-analytics: 6.6.0 - workbox-navigation-preload: 6.6.0 - workbox-precaching: 6.6.0 - workbox-range-requests: 6.6.0 - workbox-recipes: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - workbox-streams: 6.6.0 - workbox-sw: 6.6.0 - workbox-window: 6.6.0 - checksum: cd1a6c413659c2fd66f4438012f65b211cc748bb594c79bf0d9a60de0cefff3f8a4a23ab06f32c62064c37397ffffc1b77d3328658b7556ea7ff88e57f6ee4fd - languageName: node - linkType: hard - -"workbox-cacheable-response@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-cacheable-response@npm:6.6.0" - dependencies: - workbox-core: 6.6.0 - checksum: 9e4e00c53679fd2020874cbdf54bb17560fd12353120ea08ca6213e5a11bf08139072616d79f5f8ab80d09f00efde94b003fe9bf5b6e23815be30d7aca760835 - languageName: node - linkType: hard - -"workbox-core@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-core@npm:6.6.0" - checksum: 7d773a866b73a733780c52b895f9cf7bec926c9187395c307174deefba9a0a2fcd1edce0d1ca12b8a6c95ca9cf7755ccc1885b03bc82ebcfc4843e015bd84d7b - languageName: node - linkType: hard - -"workbox-expiration@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-expiration@npm:6.6.0" - dependencies: - idb: ^7.0.1 - workbox-core: 6.6.0 - checksum: b100b9c512754bc3e1a9c7c7d20d215d72c601a7b956333ca7753704a771a9f00e1732e9b774da4549bae390dd3cd138c6392f6a25fd67f7dcd84f89b0df7e9c - languageName: node - linkType: hard - -"workbox-google-analytics@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-google-analytics@npm:6.6.0" - dependencies: - workbox-background-sync: 6.6.0 - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - checksum: 7b287da7517ae416aae8ea1494830bb517a29ab9786b2a8b8bf98971377b83715070e784399065ab101d4bba381ab0abbb8bd0962b3010bc01f54fdafb0b6702 - languageName: node - linkType: hard - -"workbox-navigation-preload@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-navigation-preload@npm:6.6.0" - dependencies: - workbox-core: 6.6.0 - checksum: d254465648e45ec6b6d7c3471354336501901d3872622ea9ba1aa1f935d4d52941d0f92fa6c06e7363e10dbac4874d5d4bff7d99cbe094925046f562a37e88cc - languageName: node - linkType: hard - -"workbox-precaching@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-precaching@npm:6.6.0" - dependencies: - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - checksum: 62e5ee2e40568a56d4131bba461623579f56b9bd273aa7d2805e43151057f413c2ef32fb3d007aff0a5ac3ad84d5feae87408284249a487a5d51c3775c46c816 - languageName: node - linkType: hard - -"workbox-range-requests@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-range-requests@npm:6.6.0" - dependencies: - workbox-core: 6.6.0 - checksum: a55d1a364b2155548695dc8f6f85baade196d7d1bec980bcdbda80236803b14167995a81b944cffe932a94c4d556466773121afe3661a6f0a13403cbe96d8d9f - languageName: node - linkType: hard - -"workbox-recipes@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-recipes@npm:6.6.0" - dependencies: - workbox-cacheable-response: 6.6.0 - workbox-core: 6.6.0 - workbox-expiration: 6.6.0 - workbox-precaching: 6.6.0 - workbox-routing: 6.6.0 - workbox-strategies: 6.6.0 - checksum: f2ecf38502260703e4b0dcef67e3ac26d615f2c90f6d863ca7308db52454f67934ba842fd577ee807d9f510f1a277fd66af7caf57d39e50a181d05dbb3e550a7 - languageName: node - linkType: hard - -"workbox-routing@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-routing@npm:6.6.0" - dependencies: - workbox-core: 6.6.0 - checksum: 7a70b836196eb67332d33a94c0b57859781fe869e81a9c95452d3f4f368d3199f8c3da632dbc10425fde902a1930cf8cfd83f6434ad2b586904ce68cd9f35c6d - languageName: node - linkType: hard - -"workbox-strategies@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-strategies@npm:6.6.0" - dependencies: - workbox-core: 6.6.0 - checksum: 236232a77fb4a4847d1e9ae6c7c9bd9c6b9449209baab9d8d90f78240326a9c0f69551b408ebf9e76610d86da15563bf27439b7e885a7bac01dfd08047c0dd7b - languageName: node - linkType: hard - -"workbox-streams@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-streams@npm:6.6.0" - dependencies: - workbox-core: 6.6.0 - workbox-routing: 6.6.0 - checksum: 64a295e48e44e3fa4743b5baec646fc9117428e7592033475e38c461e45c294910712f322c32417d354b22999902ef8035119e070e61e159e531d878d991fc33 - languageName: node - linkType: hard - -"workbox-sw@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-sw@npm:6.6.0" - checksum: bb5f8695de02f89c7955465dcbd568299915565008dc8a068c5d19c1347f75d417640b9f61590e16b169b703e77d02f8b1e10c4b241f74f43cfe76175bfa5fed - languageName: node - linkType: hard - -"workbox-webpack-plugin@npm:^6.4.1": - version: 6.6.0 - resolution: "workbox-webpack-plugin@npm:6.6.0" - dependencies: - fast-json-stable-stringify: ^2.1.0 - pretty-bytes: ^5.4.1 - upath: ^1.2.0 - webpack-sources: ^1.4.3 - workbox-build: 6.6.0 - peerDependencies: - webpack: ^4.4.0 || ^5.9.0 - checksum: b8e04a342f2d45086f28ae56e4806d74dd153c3b750855533a55954f4e85752113e76a6d79a32206eb697a342725897834c9e7976894374d8698cd950477d37a - languageName: node - linkType: hard - -"workbox-window@npm:6.6.0": - version: 6.6.0 - resolution: "workbox-window@npm:6.6.0" - dependencies: - "@types/trusted-types": ^2.0.2 - workbox-core: 6.6.0 - checksum: bb1dd031c1525317ceffbdc3e4f502a70dce461fd6355146e1050c1090f3c640bf65edf42a5d2a3b91b4d0c313df32c1405d88bf701d44c0e3ebc492cd77fe14 - languageName: node - linkType: hard - -"wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: ^4.0.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 - languageName: node - linkType: hard - -"write-file-atomic@npm:^3.0.0": - version: 3.0.3 - resolution: "write-file-atomic@npm:3.0.3" - dependencies: - imurmurhash: ^0.1.4 - is-typedarray: ^1.0.0 - signal-exit: ^3.0.2 - typedarray-to-buffer: ^3.1.5 - checksum: c55b24617cc61c3a4379f425fc62a386cc51916a9b9d993f39734d005a09d5a4bb748bc251f1304e7abd71d0a26d339996c275955f527a131b1dcded67878280 - languageName: node - linkType: hard - -"ws@npm:^7.4.6": - version: 7.5.10 - resolution: "ws@npm:7.5.10" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: f9bb062abf54cc8f02d94ca86dcd349c3945d63851f5d07a3a61c2fcb755b15a88e943a63cf580cbdb5b74436d67ef6b67f745b8f7c0814e411379138e1863cb - languageName: node - linkType: hard - -"ws@npm:^8.13.0": - version: 8.18.3 - resolution: "ws@npm:8.18.3" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: d64ef1631227bd0c5fe21b3eb3646c9c91229402fb963d12d87b49af0a1ef757277083af23a5f85742bae1e520feddfb434cb882ea59249b15673c16dc3f36e0 - languageName: node - linkType: hard - -"xml-name-validator@npm:^3.0.0": - version: 3.0.0 - resolution: "xml-name-validator@npm:3.0.0" - checksum: b3ac459afed783c285bb98e4960bd1f3ba12754fd4f2320efa0f9181ca28928c53cc75ca660d15d205e81f92304419afe94c531c7cfb3e0649aa6d140d53ecb0 - languageName: node - linkType: hard - -"xmlchars@npm:^2.2.0": - version: 2.2.0 - resolution: "xmlchars@npm:2.2.0" - checksum: 8c70ac94070ccca03f47a81fcce3b271bd1f37a591bf5424e787ae313fcb9c212f5f6786e1fa82076a2c632c0141552babcd85698c437506dfa6ae2d58723062 - languageName: node - linkType: hard - -"y18n@npm:^5.0.5": - version: 5.0.8 - resolution: "y18n@npm:5.0.8" - checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 - languageName: node - linkType: hard - -"yallist@npm:^3.0.2": - version: 3.1.1 - resolution: "yallist@npm:3.1.1" - checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 - languageName: node - linkType: hard - -"yallist@npm:^5.0.0": - version: 5.0.0 - resolution: "yallist@npm:5.0.0" - checksum: eba51182400b9f35b017daa7f419f434424410691bbc5de4f4240cc830fdef906b504424992700dc047f16b4d99100a6f8b8b11175c193f38008e9c96322b6a5 - languageName: node - linkType: hard - -"yaml@npm:^1.10.0, yaml@npm:^1.10.2, yaml@npm:^1.7.2": - version: 1.10.2 - resolution: "yaml@npm:1.10.2" - checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f - languageName: node - linkType: hard - -"yargs-parser@npm:^20.2.2": - version: 20.2.9 - resolution: "yargs-parser@npm:20.2.9" - checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 - languageName: node - linkType: hard - -"yargs-parser@npm:^21.1.1": - version: 21.1.1 - resolution: "yargs-parser@npm:21.1.1" - checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c - languageName: node - linkType: hard - -"yargs@npm:^16.2.0": - version: 16.2.0 - resolution: "yargs@npm:16.2.0" - 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 - checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 - languageName: node - linkType: hard - -"yargs@npm:^17.7.2": - version: 17.7.2 - resolution: "yargs@npm:17.7.2" - dependencies: - cliui: ^8.0.1 - escalade: ^3.1.1 - get-caller-file: ^2.0.5 - require-directory: ^2.1.1 - string-width: ^4.2.3 - y18n: ^5.0.5 - yargs-parser: ^21.1.1 - checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 - languageName: node - linkType: hard diff --git a/aws-proxy/aws_proxy/server/__init__.py b/aws-proxy/aws_proxy/server/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/aws-proxy/aws_proxy/server/aws_request_forwarder.py b/aws-proxy/aws_proxy/server/aws_request_forwarder.py deleted file mode 100644 index 59e6b11c..00000000 --- a/aws-proxy/aws_proxy/server/aws_request_forwarder.py +++ /dev/null @@ -1,379 +0,0 @@ -# Note/disclosure: This file has been partially modified by an AI agent. -import json -import logging -import re -from typing import Dict, Optional -from urllib.parse import urlencode - -import requests -from botocore.serialize import create_serializer -from localstack.aws.api import RequestContext -from localstack.aws.chain import Handler, HandlerChain -from localstack.constants import APPLICATION_JSON, LOCALHOST, LOCALHOST_HOSTNAME -from localstack.http import Response -from localstack.utils.aws import arns -from localstack.utils.aws.arns import secretsmanager_secret_arn, sqs_queue_arn -from localstack.utils.aws.aws_stack import get_valid_regions -from localstack.utils.aws.request_context import mock_aws_request_headers -from localstack.utils.collections import ensure_list -from localstack.utils.net import get_addressable_container_host -from localstack.utils.strings import to_str, truncate -from requests.structures import CaseInsensitiveDict - -try: - from localstack.testing.config import TEST_AWS_ACCESS_KEY_ID -except ImportError: - from localstack.constants import TEST_AWS_ACCESS_KEY_ID - -from aws_proxy.shared.constants import HEADER_HOST_ORIGINAL, SERVICE_NAME_MAPPING -from aws_proxy.shared.models import ProxyInstance, ProxyServiceConfig - -LOG = logging.getLogger(__name__) - - -class AwsProxyHandler(Handler): - # maps port numbers to proxy instances - PROXY_INSTANCES: Dict[int, ProxyInstance] = {} - - def __call__( - self, chain: HandlerChain, context: RequestContext, response: Response - ): - proxy = self.select_proxy(context) - if not proxy: - return - - # forward request to proxy - response = self.forward_request(context, proxy) - - if response is None: - return - - # set response details, then stop handler chain to return response - chain.response.data = response.raw_content - chain.response.status_code = response.status_code - chain.response.headers.update(dict(response.headers)) - chain.stop() - - def select_proxy(self, context: RequestContext) -> Optional[ProxyInstance]: - """select a proxy responsible to forward a request to real AWS""" - if not context.service: - # this doesn't look like an AWS service invocation -> return - return - - # reverse the list, to start with more recently added proxies first ... - proxy_ports = reversed(self.PROXY_INSTANCES.keys()) - - # find a matching proxy for this request - for port in proxy_ports: - proxy = self.PROXY_INSTANCES[port] - proxy_config = proxy.get("config") or {} - services = proxy_config.get("services") or {} - service_name = self._get_canonical_service_name( - context.service.service_name - ) - service_config = services.get(service_name) - if not service_config: - continue - - # get resource name patterns - resource_names = self._get_resource_names(service_config) - - # check if any resource name pattern matches - resource_name_matches = any( - self._request_matches_resource(context, resource_name_pattern) - for resource_name_pattern in resource_names - ) - if not resource_name_matches: - continue - - # check if only read requests should be forwarded - read_only = service_config.get("read_only") - if read_only: - allow_execute = service_config.get("execute") - if not self._is_read_request(context) and not ( - allow_execute and self._is_execute_request(context) - ): - return - - # check if any operation name pattern matches - operation_names = ensure_list(service_config.get("operations", [])) - operation_name_matches = any( - re.match(op_name_pattern, context.operation.name) - for op_name_pattern in operation_names - ) - if operation_names and not operation_name_matches: - continue - - # all checks passed -> return and use this proxy - return proxy - - def _request_matches_resource( - self, context: RequestContext, resource_name_pattern: str - ) -> bool: - try: - service_name = self._get_canonical_service_name( - context.service.service_name - ) - if service_name == "s3": - bucket_name = context.service_request.get("Bucket") or "" - s3_bucket_arn = arns.s3_bucket_arn(bucket_name) - return bool(re.match(resource_name_pattern, s3_bucket_arn)) - if service_name == "sqs": - queue_name = context.service_request.get("QueueName") or "" - queue_url = context.service_request.get("QueueUrl") or "" - queue_name = queue_name or queue_url.split("/")[-1] - candidates = ( - queue_name, - queue_url, - sqs_queue_arn( - queue_name, - account_id=context.account_id, - region_name=context.region, - ), - ) - for candidate in candidates: - if re.match(resource_name_pattern, candidate): - return True - return False - if service_name == "secretsmanager": - secret_id = context.service_request.get("SecretId") or "" - secret_arn = secretsmanager_secret_arn( - secret_id, account_id=context.account_id, region_name=context.region - ) - return bool(re.match(resource_name_pattern, secret_arn)) - if service_name == "cloudwatch": - # CloudWatch alarm ARN format: arn:aws:cloudwatch:{region}:{account}:alarm:{alarm_name} - alarm_name = context.service_request.get("AlarmName") or "" - alarm_names = context.service_request.get("AlarmNames") or [] - if alarm_name: - alarm_names = [alarm_name] - if alarm_names: - for name in alarm_names: - alarm_arn = f"arn:aws:cloudwatch:{context.region}:{context.account_id}:alarm:{name}" - if re.match(resource_name_pattern, alarm_arn): - return True - return False - # For metric operations without alarm names, check if pattern is generic - return bool(re.match(resource_name_pattern, ".*")) - if service_name == "lambda": - # Lambda function ARN format: arn:aws:lambda:{region}:{account}:function:{name} - function_name = context.service_request.get("FunctionName") or "" - if function_name: - if ":function:" not in function_name: - function_arn = f"arn:aws:lambda:{context.region}:{context.account_id}:function:{function_name}" - else: - function_arn = function_name - return bool(re.match(resource_name_pattern, function_arn)) - # For operations without FunctionName (e.g., ListFunctions), check if pattern is generic - return bool(re.match(resource_name_pattern, ".*")) - if service_name == "logs": - # CloudWatch Logs ARN format: arn:aws:logs:{region}:{account}:log-group:{name}:* - log_group_name = context.service_request.get("logGroupName") or "" - log_group_prefix = ( - context.service_request.get("logGroupNamePrefix") or "" - ) - name = log_group_name or log_group_prefix - if name: - log_group_arn = f"arn:aws:logs:{context.region}:{context.account_id}:log-group:{name}:*" - return bool(re.match(resource_name_pattern, log_group_arn)) - # Operations that don't have a log group name but should still be proxied - # (e.g., GetQueryResults uses queryId, not logGroupName) - operation_name = context.operation.name if context.operation else "" - if operation_name in { - "GetQueryResults", - "StopQuery", - "DescribeQueries", - }: - return True - # No log group name specified - check if pattern is generic - return bool(re.match(resource_name_pattern, ".*")) - except re.error as e: - raise Exception( - "Error evaluating regular expression - please verify proxy configuration" - ) from e - return True - - def forward_request( - self, context: RequestContext, proxy: ProxyInstance - ) -> requests.Response: - """Forward the given request to the proxy instance, and return the response.""" - port = proxy["port"] - request = context.request - target_host = get_addressable_container_host(default_local_hostname=LOCALHOST) - url = ( - f"http://{target_host}:{port}{request.path}?{to_str(request.query_string)}" - ) - - # inject Auth header, to ensure we're passing the right region to the proxy (e.g., for Cognito InitiateAuth) - self._extract_region_from_domain(context) - headers = CaseInsensitiveDict(dict(request.headers)) - - result = None - try: - headers[HEADER_HOST_ORIGINAL] = headers.pop("Host", None) - headers.pop("Content-Length", None) - ctype = headers.get("Content-Type") - data = b"" - if ctype == APPLICATION_JSON: - data = json.dumps(request.json) - elif request.form: - data = request.form - elif request.data: - data = request.data - - # Fallback: if data is empty and we have parsed service_request, - # reconstruct the request body (handles cases where form data was consumed) - if not data and context.service_request: - data = self._reconstruct_request_body(context, ctype) - - LOG.debug( - "Forward request: %s %s - %s - %s", - request.method, - url, - dict(headers), - data, - ) - # construct response - result = requests.request( - method=request.method, - url=url, - data=data, - headers=dict(headers), - stream=True, - ) - # TODO: ugly hack for now, simply attaching an additional attribute for raw response content - result.raw_content = result.raw.read() - # make sure we're removing any transfer-encoding headers - result.headers.pop("Transfer-Encoding", None) - LOG.debug( - "Returned response: %s %s - %s", - result.status_code, - dict(result.headers), - truncate(result.raw_content, max_length=500), - ) - except requests.exceptions.ConnectionError: - # remove unreachable proxy - LOG.info( - "Removing unreachable AWS forward proxy due to connection issue: %s", - url, - ) - self.PROXY_INSTANCES.pop(port, None) - return result - - def _is_read_request(self, context: RequestContext) -> bool: - """ - Function to determine whether a request is a read request. - Note: Uses only simple heuristics, and may not be accurate for all services and operations! - """ - operation_name = context.service_operation.operation - if operation_name.lower().startswith(("describe", "get", "list", "query")): - return True - # service-specific rules - if ( - context.service.service_name == "cognito-idp" - and operation_name == "InitiateAuth" - ): - return True - if context.service.service_name == "dynamodb" and operation_name in { - "Scan", - "Query", - "BatchGetItem", - "PartiQLSelect", - }: - return True - if context.service.service_name == "appsync" and operation_name in { - "EvaluateCode", - "EvaluateMappingTemplate", - }: - return True - if context.service.service_name == "logs" and operation_name in { - "FilterLogEvents", - "StartQuery", - "GetQueryResults", - "TestMetricFilter", - }: - return True - if context.service.service_name == "monitoring" and operation_name in { - "BatchGetServiceLevelObjectiveBudgetReport", - "BatchGetServiceLevelIndicatorReport", - }: - return True - if context.service.service_name == "apigatewayv2" and operation_name in { - "ExportApi", - }: - return True - # TODO: add more rules - return False - - def _is_execute_request(self, context: RequestContext) -> bool: - """ - Function to determine whether a request is an invoke/execute request. - Invoke operations have side-effects and are not considered read operations. - They can be explicitly allowed alongside read_only mode via the 'execute' config flag. - """ - operation_name = context.service_operation.operation - if context.service.service_name == "lambda" and operation_name in { - "Invoke", - "InvokeAsync", - "InvokeWithResponseStream", - }: - return True - return False - - def _extract_region_from_domain(self, context: RequestContext): - """ - If the request domain name contains a valid region name (e.g., "us-east-2.cognito.localhost.localstack.cloud"), - extract the region and inject an Authorization header with this region into the request. - """ - headers = CaseInsensitiveDict(dict(context.request.headers)) - host_header = headers.get("Host") or "" - if LOCALHOST_HOSTNAME not in host_header: - return - parts = re.split("[.:/]+", host_header) - valid_regions = get_valid_regions() - for part in parts: - if part in valid_regions: - context.request.headers["Authorization"] = mock_aws_request_headers( - context.service.service_name, - region_name=part, - aws_access_key_id=TEST_AWS_ACCESS_KEY_ID, - ) - return - - @classmethod - def _get_resource_names(cls, service_config: ProxyServiceConfig) -> list[str]: - """Get name patterns of resources to proxy from service config.""" - # match all by default - default_names = [".*"] - result = service_config.get("resources") or default_names - return ensure_list(result) - - @classmethod - def _get_canonical_service_name(cls, service_name: str) -> str: - return SERVICE_NAME_MAPPING.get(service_name, service_name) - - def _reconstruct_request_body( - self, context: RequestContext, content_type: str - ) -> bytes: - """ - Reconstruct the request body from the parsed service_request. - This is used when the original request body was consumed during parsing. - """ - try: - protocol = context.service.protocol - if protocol == "query" or "x-www-form-urlencoded" in (content_type or ""): - # For Query protocol, serialize using botocore serializer - serializer = create_serializer(protocol) - operation_model = context.operation - serialized = serializer.serialize_to_request( - context.service_request, operation_model - ) - body = serialized.get("body", {}) - if isinstance(body, dict): - return urlencode(body, doseq=True) - return body - elif protocol == "json" or protocol == "rest-json": - return json.dumps(context.service_request) - except Exception as e: - LOG.debug("Failed to reconstruct request body: %s", e) - return b"" diff --git a/aws-proxy/aws_proxy/server/extension.py b/aws-proxy/aws_proxy/server/extension.py deleted file mode 100644 index e12c3e9e..00000000 --- a/aws-proxy/aws_proxy/server/extension.py +++ /dev/null @@ -1,41 +0,0 @@ -import logging - -from localstack import config -from localstack.aws.chain import CompositeHandler -from localstack.extensions.api import http -from localstack.extensions.patterns.webapp import WebAppExtension -import typing as t - -from localstack.services.internal import get_internal_apis - -from aws_proxy.server.aws_request_forwarder import AwsProxyHandler -from aws_proxy.server.request_handler import RequestHandler, WebApp - -LOG = logging.getLogger(__name__) - - -class AwsProxyExtension(WebAppExtension): - name = "aws-proxy" - - def __init__(self): - super().__init__(template_package_path=None) - - def on_extension_load(self): - if config.GATEWAY_SERVER == "twisted": - LOG.warning( - "AWS Proxy: The aws-proxy extension currently requires hypercorn as " - "gateway server. Please start localstack with GATEWAY_SERVER=hypercorn" - ) - - def update_gateway_routes(self, router: http.Router[http.RouteHandler]): - super().update_gateway_routes(router) - - LOG.info("AWS Proxy: adding routes to activate extension") - get_internal_apis().add(RequestHandler()) - - def collect_routes(self, routes: list[t.Any]): - routes.append(WebApp()) - - def update_request_handlers(self, handlers: CompositeHandler): - LOG.debug("AWS Proxy: adding AWS proxy handler to the request chain") - handlers.handlers.append(AwsProxyHandler()) diff --git a/aws-proxy/aws_proxy/server/request_handler.py b/aws-proxy/aws_proxy/server/request_handler.py deleted file mode 100644 index 481da6d3..00000000 --- a/aws-proxy/aws_proxy/server/request_handler.py +++ /dev/null @@ -1,138 +0,0 @@ -# Note/disclosure: This file has been partially modified by an AI agent. -import json -import logging -import os.path -from typing import Dict, List - -import yaml -from localstack.constants import ( - LOCALHOST_HOSTNAME, -) -from localstack.http import Request, Response, route -from localstack.utils.docker_utils import ( - DOCKER_CLIENT, - reserve_available_container_port, -) -from localstack.utils.files import load_file, new_tmp_file, rm_rf -from localstack.utils.json import parse_json_or_yaml -from localstack.utils.strings import to_str -from localstack.utils.threads import start_worker_thread - -from aws_proxy import config as repl_config -from aws_proxy.client.auth_proxy import ( - CONTAINER_CONFIG_FILE, - CONTAINER_NAME_PREFIX, - start_aws_auth_proxy_in_container, -) -from aws_proxy.config import HANDLER_PATH_PROXIES -from aws_proxy.server.aws_request_forwarder import AwsProxyHandler -from aws_proxy.shared.models import AddProxyRequest - -from . import static - -LOG = logging.getLogger(__name__) - -DOMAIN_NAME = f"aws-proxy.{LOCALHOST_HOSTNAME}" -ROUTE_HOST = f"{DOMAIN_NAME}" - - -class RequestHandler: - @route(HANDLER_PATH_PROXIES, methods=["POST"]) - def add_proxy(self, request: Request, **kwargs): - payload = _get_json(request) - req = AddProxyRequest(**payload) - result = handle_proxies_request(req) - return result or {} - - @route(f"{HANDLER_PATH_PROXIES}/", methods=["DELETE"]) - def delete_proxy(self, request: Request, port: int, **kwargs): - removed = AwsProxyHandler.PROXY_INSTANCES.pop(port, None) - return {"removed": removed is not None} - - @route(f"{HANDLER_PATH_PROXIES}/status", methods=["GET"]) - def get_status(self, request: Request, **kwargs): - containers = get_proxy_containers() - status = "enabled" if containers else "disabled" - config = None - if containers: - tmp_file = new_tmp_file() - container_name = containers[0]["name"] - try: - DOCKER_CLIENT.copy_from_container( - container_name, tmp_file, CONTAINER_CONFIG_FILE - ) - config = load_file(tmp_file) - config = to_str(yaml.dump(json.loads(config))) - except Exception as e: - LOG.debug( - "Unable to get config from container %s: %s", container_name, e - ) - rm_rf(tmp_file) - return {"status": status, "config": config} - - @route(f"{HANDLER_PATH_PROXIES}/status", methods=["POST"]) - def set_status(self, request: Request, **kwargs): - payload = _get_json(request) or {} - if payload.get("status") == "disabled": - stop_proxy_containers() - return {} - - -class WebApp: - @route("/") - def index(self, request: Request, *args, **kwargs): - return Response.for_resource(static, "index.html") - - @route("/") - def index2(self, request: Request, path: str, **kwargs): - try: - return Response.for_resource(static, path) - except Exception: - LOG.debug(f"File {path} not found, serving index.html") - return Response.for_resource(static, "index.html") - - -def handle_proxies_request(request: AddProxyRequest): - port = request.get("port") - if not port: - # this request is coming from the Web UI (not from the CLI) - choose a new port at random - port = request["port"] = reserve_available_container_port() - # simple approach for now: managing a single proxy container (might become multiple in future) - stop_proxy_containers() - - env_vars = dict(os.environ) - env_vars.update(request.get("env_vars") or {}) - config = request["config"] - if isinstance(config, str): - request["config"] = config = parse_json_or_yaml(config) or {} - - def _start(*_): - start_aws_auth_proxy_in_container( - config, env_vars=env_vars, port=port, quiet=True - ) - - start_worker_thread(_start) - - AwsProxyHandler.PROXY_INSTANCES[port] = request - return {} - - -def get_proxy_containers() -> List[Dict]: - return DOCKER_CLIENT.list_containers(filter=f"name={CONTAINER_NAME_PREFIX}*") - - -def stop_proxy_containers(): - for container in get_proxy_containers(): - try: - DOCKER_CLIENT.stop_container(container["name"]) - if repl_config.CLEANUP_PROXY_CONTAINERS: - DOCKER_CLIENT.remove_container(container["name"], force=True) - except Exception as e: - LOG.debug("Unable to remove container %s: %s", container["name"], e) - - -def _get_json(request: Request) -> dict: - try: - return request.json - except Exception: - return json.loads(to_str(request.data)) diff --git a/aws-proxy/aws_proxy/shared/__init__.py b/aws-proxy/aws_proxy/shared/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/aws-proxy/aws_proxy/shared/constants.py b/aws-proxy/aws_proxy/shared/constants.py deleted file mode 100644 index fe86f61c..00000000 --- a/aws-proxy/aws_proxy/shared/constants.py +++ /dev/null @@ -1,8 +0,0 @@ -# header name for the original request host name forwarded in the request to the target proxy handler -HEADER_HOST_ORIGINAL = "x-ls-host-original" - -# Mapping from AWS service signing names to boto3 client names -SERVICE_NAME_MAPPING = { - "monitoring": "cloudwatch", - "sqs-query": "sqs", -} diff --git a/aws-proxy/aws_proxy/shared/models.py b/aws-proxy/aws_proxy/shared/models.py deleted file mode 100644 index 6cc96832..00000000 --- a/aws-proxy/aws_proxy/shared/models.py +++ /dev/null @@ -1,40 +0,0 @@ -import logging -from typing import Dict, List, TypedDict, Union - -LOG = logging.getLogger(__name__) - - -class ProxyServiceConfig(TypedDict, total=False): - # list of regexes identifying resources to be proxied requests to - resources: Union[str, List[str]] - # list of operation names (regexes) that should be proxied - operations: List[str] - # whether only read requests should be forwarded - read_only: bool - # whether invoke/execute operations (e.g., Lambda invocations) should be forwarded - # (only relevant when read_only is True, since execute has side-effects and is not a read operation) - execute: bool - - -class ProxyConfig(TypedDict, total=False): - # maps service name to service proxy configs - services: Dict[str, ProxyServiceConfig] - # bind host for the proxy (defaults to 127.0.0.1) - bind_host: str - - -class ProxyInstance(TypedDict): - """Represents a proxy instance""" - - # port of the proxy on the host - port: int - # configuration for the proxy - config: ProxyConfig - - -class AddProxyRequest(ProxyInstance): - """ - Represents a request to register a new local proxy instance with the extension inside LocalStack. - """ - - env_vars: dict diff --git a/aws-proxy/aws_proxy/shared/utils.py b/aws-proxy/aws_proxy/shared/utils.py deleted file mode 100644 index 24f2b178..00000000 --- a/aws-proxy/aws_proxy/shared/utils.py +++ /dev/null @@ -1,34 +0,0 @@ -from typing import Any, Callable, Dict, Optional - - -def list_all_resources( - page_function: Callable[[dict], Any], - last_token_attr_name: str, - list_attr_name: str, - next_token_attr_name: Optional[str] = None, - max_pages=None, -) -> list: - if next_token_attr_name is None: - next_token_attr_name = last_token_attr_name - - result = None - collected_items = [] - last_evaluated_token = None - - pages = 0 - while not result or last_evaluated_token: - if max_pages and pages >= max_pages: - break - kwargs = ( - {next_token_attr_name: last_evaluated_token} if last_evaluated_token else {} - ) - result = page_function(kwargs) - last_evaluated_token = result.get(last_token_attr_name) - collected_items += result.get(list_attr_name, []) - pages += 1 - - return collected_items - - -def get_resource_type(resource: Dict) -> str: - return resource.get("Type") or resource.get("TypeName") diff --git a/aws-proxy/etc/aws-replicate-overview.png b/aws-proxy/etc/aws-replicate-overview.png deleted file mode 100644 index cdcd6d96..00000000 Binary files a/aws-proxy/etc/aws-replicate-overview.png and /dev/null differ diff --git a/aws-proxy/etc/proxy-settings.png b/aws-proxy/etc/proxy-settings.png deleted file mode 100644 index 373e0607..00000000 Binary files a/aws-proxy/etc/proxy-settings.png and /dev/null differ diff --git a/aws-proxy/example/Makefile b/aws-proxy/example/Makefile deleted file mode 100644 index ef686fba..00000000 --- a/aws-proxy/example/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -usage: ## Show this help - @fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | sed -e 's/:.*##\s*/##/g' | awk -F'##' '{ printf "%-15s %s\n", $$1, $$2 }' - -test: ## Run the end-to-end test with a simple sample app - echo "Deploying sample application ..."; \ - echo "Creating SQS queue in real AWS"; \ - aws sqs create-queue --queue-name test-queue1; \ - queueUrl=$$(aws sqs get-queue-url --queue-name test-queue1 | jq -r .QueueUrl); \ - echo "Starting AWS Proxy"; \ - (DEBUG=1 localstack aws proxy -s s3,sqs --host 0.0.0.0 & ); \ - echo "Deploying Terraform template locally"; \ - tflocal init; \ - tflocal apply -auto-approve; \ - echo "Putting a message to the queue in real AWS"; \ - aws sqs send-message --queue-url $$queueUrl --message-body '{"test":"foobar 123"}'; \ - echo "Waiting a bit for Lambda to be triggered by SQS message ..."; \ - sleep 7 # ; \ - # TODO: Lambda invocation currently failing in CI: - # [lambda e4cbf96395d8b7d8a94596f96de9ef7d] time="2023-09-16T22:12:04Z" level=panic msg="Post - # \"http://172.17.0.2:443/_localstack_lambda/e4cbf96395d8b7d8a94596f96de9ef7d/status/e4cbf96395d8b7d8a94596f96de9ef7d/ready\": - # dial tcp 172.17.0.2:443: connect: connection refused" func=go.amzn.com/lambda/rapid.handleStart - # file="/home/runner/work/lambda-runtime-init/lambda-runtime-init/lambda/rapid/start.go:473" -# logStream=$$(awslocal logs describe-log-streams --log-group-name /aws/lambda/func1 | jq -r '.logStreams[0].logStreamName'); \ -# awslocal logs get-log-events --log-stream-name "$$logStream" --log-group-name /aws/lambda/func1 | grep "foobar 123"; \ -# exitCode=$$?; \ -# echo "Cleaning up ..."; \ -# aws sqs delete-queue --queue-url $$queueUrl; \ -# exit $$exitCode - -.PHONY: usage test diff --git a/aws-proxy/example/README.md b/aws-proxy/example/README.md deleted file mode 100644 index ca1ca918..00000000 --- a/aws-proxy/example/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# AWS Proxy Example - -This simple example illustrates how to use the AWS proxy in this extension to transparently run API requests against real AWS. - -1. First, make sure that the extension is installed and LocalStack is up and running - -2. Open a new terminal, configure the AWS credentials of your real AWS account, then start the proxy to forward requests for S3 and SQS to real AWS: -``` -$ DEBUG=1 localstack aws proxy -s s3,sqs -``` - -3. In another terminal, again configure the credentials to point to real AWS, then create an SQS queue (alternatively you can create the queue via the AWS Web console): -``` -$ aws sqs create-queue --queue-name test-queue1 -``` - -4. Use `tflocal` to deploy the sample Terraform script against LocalStack: -``` -$ tflocal init -$ tflocal apply -``` - -5. Open the AWS console (or use the CLI) and put a new message to the `test-queue1` SQS queue. - -6. The last command should have triggered a Lambda function invocation in LocalStack, via the SQS event source mapping defined in the Terraform script. If we take a close look at the Lambda output, it should print the S3 buckets of the real AWs account (as S3 requests are also forwarded by the proxy). -``` ->START RequestId: 4692b634-ccf1-1e23-0cd1-8831ddf8c35f Version: $LATEST -> [{'Name': 'my-bucket-1', ...}, {'Name': 'my-bucket-2', ...}] -> END RequestId: 4692b634-ccf1-1e23-0cd1-8831ddf8c35f -``` \ No newline at end of file diff --git a/aws-proxy/example/lambda.py b/aws-proxy/example/lambda.py deleted file mode 100644 index aa58f919..00000000 --- a/aws-proxy/example/lambda.py +++ /dev/null @@ -1,10 +0,0 @@ -import boto3 - - -def handler(event, context): - s3 = boto3.client("s3") - buckets = s3.list_buckets().get("Buckets") - print("event:", event) - print("buckets:", buckets) - bucket_names = [b["Name"] for b in buckets] - return {"buckets": bucket_names} diff --git a/aws-proxy/example/main.tf b/aws-proxy/example/main.tf deleted file mode 100644 index a5bd932e..00000000 --- a/aws-proxy/example/main.tf +++ /dev/null @@ -1,20 +0,0 @@ - -resource "aws_lambda_function" "test" { - function_name = "func1" - role = "arn:aws:iam::000000000000:role/test-role" - - s3_bucket = "hot-reload" - s3_key = path.cwd - - handler = "lambda.handler" - runtime = "python3.8" -} - -resource "aws_sqs_queue" "test" { - name = "test-queue1" -} - -resource "aws_lambda_event_source_mapping" "test" { - event_source_arn = aws_sqs_queue.test.arn - function_name = aws_lambda_function.test.arn -} diff --git a/aws-proxy/example/proxy_config.yml b/aws-proxy/example/proxy_config.yml deleted file mode 100644 index 736dd794..00000000 --- a/aws-proxy/example/proxy_config.yml +++ /dev/null @@ -1,5 +0,0 @@ -services: - s3: - resources: - # list of ARNs of S3 buckets to proxy to real AWS - - '.*:bucket1' diff --git a/aws-proxy/pyproject.toml b/aws-proxy/pyproject.toml deleted file mode 100644 index dcd6e7b2..00000000 --- a/aws-proxy/pyproject.toml +++ /dev/null @@ -1,45 +0,0 @@ -# general build configuration -[build-system] -requires = ['setuptools>65', 'wheel', 'plux>=1.10', "setuptools_scm>=8"] -build-backend = "setuptools.build_meta" - -[project] -name = "localstack-extension-aws-proxy" -readme = "README.md" -version = "0.2.4" -description = "LocalStack extension that proxies AWS resources into your LocalStack instance" -authors = [ - { name = "LocalStack Team", email = "info@localstack.cloud"} -] - -dependencies = [ - "localstack" -] - -[project.optional-dependencies] -test=[ - # couple of dependencies required to import localstack test tools - "localstack-core[base-runtime]>4.9", - "moto-ext", - "quart", - # pytest and other test utils - "hypercorn", - "pytest", - "pytest-httpserver", - "ruff", - # build tools - "build", - "setuptools", - "setuptools_scm", - "wheel" -] - - -[tool.setuptools] -include-package-data = true - -[tool.setuptools.packages.find] -include = ["aws_proxy*"] - -[tool.setuptools.package-data] -"*" = ["static/*"] diff --git a/aws-proxy/tests/__init__.py b/aws-proxy/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/aws-proxy/tests/conftest.py b/aws-proxy/tests/conftest.py deleted file mode 100644 index d686c8a7..00000000 --- a/aws-proxy/tests/conftest.py +++ /dev/null @@ -1,57 +0,0 @@ -# Note/disclosure: This file has been partially modified by an AI agent. -import os - -import pytest -from localstack.testing.aws.util import ( - base_aws_client_factory, - base_aws_session, - base_testing_aws_client, -) -from localstack.utils.net import wait_for_port_open - -from aws_proxy.client.auth_proxy import start_aws_auth_proxy - -pytest_plugins = [ - "localstack.testing.pytest.fixtures", -] - -# binding proxy to 0.0.0.0 to enable testing in CI -PROXY_BIND_HOST = "0.0.0.0" - -# run tests in us-east-1 region by default -os.environ.setdefault("AWS_DEFAULT_REGION", "us-east-1") - - -@pytest.fixture(scope="session") -def aws_session(): - return base_aws_session() - - -@pytest.fixture(scope="session") -def aws_client_factory(aws_session): - return base_aws_client_factory(aws_session) - - -@pytest.fixture(scope="session") -def aws_client(aws_client_factory): - return base_testing_aws_client(aws_client_factory) - - -@pytest.fixture -def start_aws_proxy(): - proxies = [] - - def _start(config: dict = None): - config = config or {} - config.setdefault("bind_host", PROXY_BIND_HOST) - proxy = start_aws_auth_proxy(config) - wait_for_port_open(proxy.port) - proxies.append(proxy) - return proxy - - yield _start - - for proxy in proxies: - # Deregister from LocalStack instance before shutting down - proxy.deregister_from_instance() - proxy.shutdown() diff --git a/aws-proxy/tests/proxy/__init__.py b/aws-proxy/tests/proxy/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/aws-proxy/tests/proxy/test_apigateway.py b/aws-proxy/tests/proxy/test_apigateway.py deleted file mode 100644 index 2cd7dd48..00000000 --- a/aws-proxy/tests/proxy/test_apigateway.py +++ /dev/null @@ -1,289 +0,0 @@ -# Note: This file has been (partially or fully) generated by an AI agent. -import boto3 -import pytest -from botocore.exceptions import ClientError -from localstack.aws.connect import connect_to -from localstack.utils.strings import short_uid - -from aws_proxy.shared.models import ProxyConfig - - -def test_apigateway_rest_api_requests(start_aws_proxy, cleanups): - api_name_aws = f"test-api-aws-{short_uid()}" - - # start proxy - forwarding all API Gateway requests - config = ProxyConfig(services={"apigateway": {"resources": ".*"}}) - start_aws_proxy(config) - - # create clients - region_name = "us-east-1" - apigw_client = connect_to(region_name=region_name).apigateway - apigw_client_aws = boto3.client("apigateway", region_name=region_name) - - # create REST API in AWS - create_response_aws = apigw_client_aws.create_rest_api( - name=api_name_aws, description="Test API for proxy testing" - ) - api_id_aws = create_response_aws["id"] - cleanups.append(lambda: apigw_client_aws.delete_rest_api(restApiId=api_id_aws)) - - # assert that local call for this API is proxied - get_api_local = apigw_client.get_rest_api(restApiId=api_id_aws) - get_api_aws = apigw_client_aws.get_rest_api(restApiId=api_id_aws) - assert get_api_local["name"] == get_api_aws["name"] == api_name_aws - assert get_api_local["id"] == get_api_aws["id"] == api_id_aws - - # negative test: verify that requesting a non-existent API fails - with pytest.raises(ClientError) as ctx: - apigw_client_aws.get_rest_api(restApiId="nonexistent123") - assert ctx.value.response["Error"]["Code"] == "NotFoundException" - - # list APIs from AWS should include the created API - apis_aws = apigw_client_aws.get_rest_apis() - aws_api_ids = [api["id"] for api in apis_aws.get("items", [])] - assert api_id_aws in aws_api_ids - - # update API description via LocalStack client (should proxy to AWS) - updated_description = "Updated description via proxy" - apigw_client.update_rest_api( - restApiId=api_id_aws, - patchOperations=[ - {"op": "replace", "path": "/description", "value": updated_description} - ], - ) - - # verify update is reflected in AWS - get_api_aws = apigw_client_aws.get_rest_api(restApiId=api_id_aws) - assert get_api_aws["description"] == updated_description - - -def test_apigateway_resources_and_methods(start_aws_proxy, cleanups): - api_name_aws = f"test-api-resources-{short_uid()}" - - # start proxy - forwarding all API Gateway requests - config = ProxyConfig(services={"apigateway": {"resources": ".*"}}) - start_aws_proxy(config) - - # create clients - region_name = "us-east-1" - apigw_client = connect_to(region_name=region_name).apigateway - apigw_client_aws = boto3.client("apigateway", region_name=region_name) - - # create REST API in AWS - create_response_aws = apigw_client_aws.create_rest_api(name=api_name_aws) - api_id_aws = create_response_aws["id"] - cleanups.append(lambda: apigw_client_aws.delete_rest_api(restApiId=api_id_aws)) - - # get root resource from AWS - resources_response = apigw_client_aws.get_resources(restApiId=api_id_aws) - root_resource_id = resources_response["items"][0]["id"] - - # create a new resource via AWS client - resource_response = apigw_client_aws.create_resource( - restApiId=api_id_aws, parentId=root_resource_id, pathPart="users" - ) - resource_id = resource_response["id"] - - # create a method via AWS client - apigw_client_aws.put_method( - restApiId=api_id_aws, - resourceId=resource_id, - httpMethod="GET", - authorizationType="NONE", - ) - - # verify method exists via LocalStack client (should proxy to AWS) - method_local = apigw_client.get_method( - restApiId=api_id_aws, resourceId=resource_id, httpMethod="GET" - ) - assert method_local["httpMethod"] == "GET" - assert method_local["authorizationType"] == "NONE" - - # create method response via AWS client - apigw_client_aws.put_method_response( - restApiId=api_id_aws, - resourceId=resource_id, - httpMethod="GET", - statusCode="200", - ) - - # verify method response via LocalStack (proxied) - method_response_local = apigw_client.get_method_response( - restApiId=api_id_aws, resourceId=resource_id, httpMethod="GET", statusCode="200" - ) - assert method_response_local["statusCode"] == "200" - - # create integration via AWS client - apigw_client_aws.put_integration( - restApiId=api_id_aws, - resourceId=resource_id, - httpMethod="GET", - type="MOCK", - requestTemplates={"application/json": '{"statusCode": 200}'}, - ) - - # verify integration via LocalStack (proxied) - integration_local = apigw_client.get_integration( - restApiId=api_id_aws, resourceId=resource_id, httpMethod="GET" - ) - assert integration_local["type"] == "MOCK" - - # delete method via AWS client - apigw_client_aws.delete_method( - restApiId=api_id_aws, resourceId=resource_id, httpMethod="GET" - ) - - # verify method is deleted via LocalStack (proxied) - with pytest.raises(ClientError) as ctx: - apigw_client.get_method( - restApiId=api_id_aws, resourceId=resource_id, httpMethod="GET" - ) - assert ctx.value.response["Error"]["Code"] in ["NotFoundException", "404"] - - -def test_apigateway_deployments(start_aws_proxy, cleanups): - api_name_aws = f"test-api-deploy-{short_uid()}" - - # start proxy - forwarding all API Gateway requests - config = ProxyConfig(services={"apigateway": {"resources": ".*"}}) - start_aws_proxy(config) - - # create clients - region_name = "us-east-1" - apigw_client = connect_to(region_name=region_name).apigateway - apigw_client_aws = boto3.client("apigateway", region_name=region_name) - - # create REST API in AWS - create_response_aws = apigw_client_aws.create_rest_api(name=api_name_aws) - api_id_aws = create_response_aws["id"] - cleanups.append(lambda: apigw_client_aws.delete_rest_api(restApiId=api_id_aws)) - - # get root resource and create a simple method - resources_response = apigw_client_aws.get_resources(restApiId=api_id_aws) - root_resource_id = resources_response["items"][0]["id"] - - apigw_client_aws.put_method( - restApiId=api_id_aws, - resourceId=root_resource_id, - httpMethod="GET", - authorizationType="NONE", - ) - apigw_client_aws.put_integration( - restApiId=api_id_aws, - resourceId=root_resource_id, - httpMethod="GET", - type="MOCK", - ) - - # create deployment via LocalStack client (should proxy to AWS) - stage_name = "test" - deployment_response = apigw_client.create_deployment( - restApiId=api_id_aws, stageName=stage_name, description="Test deployment" - ) - deployment_id = deployment_response["id"] - - # verify deployment exists in AWS - deployment_aws = apigw_client_aws.get_deployment( - restApiId=api_id_aws, deploymentId=deployment_id - ) - assert deployment_aws["id"] == deployment_id - assert deployment_aws["description"] == "Test deployment" - - # get stage via LocalStack client - stage_local = apigw_client.get_stage(restApiId=api_id_aws, stageName=stage_name) - stage_aws = apigw_client_aws.get_stage(restApiId=api_id_aws, stageName=stage_name) - assert stage_local["stageName"] == stage_aws["stageName"] == stage_name - assert stage_local["deploymentId"] == stage_aws["deploymentId"] == deployment_id - - # list deployments via AWS client (verify deployment exists) - deployments_aws = apigw_client_aws.get_deployments(restApiId=api_id_aws) - aws_deployment_ids = [d["id"] for d in deployments_aws.get("items", [])] - assert deployment_id in aws_deployment_ids - - -def test_apigateway_read_only_mode(start_aws_proxy, cleanups): - api_name_aws = f"test-api-readonly-{short_uid()}" - - # create REST API in AWS first (before starting proxy) - region_name = "us-east-1" - apigw_client_aws = boto3.client("apigateway", region_name=region_name) - create_response_aws = apigw_client_aws.create_rest_api(name=api_name_aws) - api_id_aws = create_response_aws["id"] - cleanups.append(lambda: apigw_client_aws.delete_rest_api(restApiId=api_id_aws)) - - # start proxy in read-only mode - config = ProxyConfig( - services={"apigateway": {"resources": ".*", "read_only": True}} - ) - start_aws_proxy(config) - - # create LocalStack client - apigw_client = connect_to(region_name=region_name).apigateway - - # read operations should work (proxied to AWS) - get_api_local = apigw_client.get_rest_api(restApiId=api_id_aws) - assert get_api_local["name"] == api_name_aws - assert get_api_local["id"] == api_id_aws - - # verify the API can also be read directly from AWS - get_api_aws = apigw_client_aws.get_rest_api(restApiId=api_id_aws) - assert get_api_local["name"] == get_api_aws["name"] - - # write operations should fail (not allowed in read-only mode) - # In read-only mode, the API exists in AWS but LocalStack should not - # allow write operations to be proxied - original_description = get_api_aws.get("description", "") - - # Attempt write operation - should be blocked in read-only mode - with pytest.raises(Exception): - apigw_client.update_rest_api( - restApiId=api_id_aws, - patchOperations=[ - { - "op": "replace", - "path": "/description", - "value": "Should not reach AWS", - } - ], - ) - - # Verify the API description was not changed in AWS - get_api_aws_after = apigw_client_aws.get_rest_api(restApiId=api_id_aws) - assert get_api_aws_after.get("description", "") == original_description - - -def test_apigateway_selective_resource_matching(start_aws_proxy, cleanups): - api_name_aws = f"test-api-selective-{short_uid()}" - - # start proxy - forwarding all API Gateway requests - config = ProxyConfig(services={"apigateway": {"resources": ".*"}}) - start_aws_proxy(config) - - # create clients - region_name = "us-east-1" - apigw_client = connect_to(region_name=region_name).apigateway - apigw_client_aws = boto3.client("apigateway", region_name=region_name) - - # create API in AWS - create_response_aws = apigw_client_aws.create_rest_api(name=api_name_aws) - api_id_aws = create_response_aws["id"] - cleanups.append(lambda: apigw_client_aws.delete_rest_api(restApiId=api_id_aws)) - - # accessing the API via LocalStack should be proxied - get_api_local = apigw_client.get_rest_api(restApiId=api_id_aws) - assert get_api_local["name"] == api_name_aws - - # verify the API details match between LocalStack and AWS - get_api_aws = apigw_client_aws.get_rest_api(restApiId=api_id_aws) - assert get_api_local["id"] == get_api_aws["id"] - assert get_api_local["name"] == get_api_aws["name"] - - # negative test: verify that requesting a non-existent API ID fails - with pytest.raises(ClientError) as ctx: - apigw_client_aws.get_rest_api(restApiId="nonexistent123456") - assert ctx.value.response["Error"]["Code"] == "NotFoundException" - - # verify LocalStack also returns error for non-existent API - with pytest.raises(ClientError) as ctx: - apigw_client.get_rest_api(restApiId="nonexistent123456") - assert ctx.value.response["Error"]["Code"] in ["NotFoundException", "404"] diff --git a/aws-proxy/tests/proxy/test_apigatewayv2.py b/aws-proxy/tests/proxy/test_apigatewayv2.py deleted file mode 100644 index 2ea22c1e..00000000 --- a/aws-proxy/tests/proxy/test_apigatewayv2.py +++ /dev/null @@ -1,275 +0,0 @@ -# Note: This file has been (partially or fully) generated by an AI agent. - -import boto3 -import pytest -from botocore.exceptions import ClientError -from localstack.aws.connect import connect_to -from localstack.utils.strings import short_uid - -from aws_proxy.shared.models import ProxyConfig - - -def test_apigatewayv2_http_api_requests(start_aws_proxy, cleanups): - """Test basic API Gateway v2 HTTP API operations with proxy.""" - api_name_aws = f"test-http-api-{short_uid()}" - - # start proxy - forwarding all API Gateway v2 requests - config = ProxyConfig(services={"apigatewayv2": {"resources": ".*"}}) - start_aws_proxy(config) - - # create clients - region_name = "us-east-1" - apigwv2_client = connect_to(region_name=region_name).apigatewayv2 - apigwv2_client_aws = boto3.client("apigatewayv2", region_name=region_name) - - # create HTTP API in AWS - create_response_aws = apigwv2_client_aws.create_api( - Name=api_name_aws, ProtocolType="HTTP", Description="Test HTTP API for proxy" - ) - api_id_aws = create_response_aws["ApiId"] - cleanups.append(lambda: apigwv2_client_aws.delete_api(ApiId=api_id_aws)) - - # assert that local call for this API is proxied - get_api_local = apigwv2_client.get_api(ApiId=api_id_aws) - get_api_aws = apigwv2_client_aws.get_api(ApiId=api_id_aws) - assert get_api_local["Name"] == get_api_aws["Name"] == api_name_aws - assert get_api_local["ApiId"] == get_api_aws["ApiId"] == api_id_aws - - # negative test: verify that requesting a non-existent API fails - with pytest.raises(ClientError) as ctx: - apigwv2_client_aws.get_api(ApiId="nonexistent123") - assert ctx.value.response["Error"]["Code"] == "NotFoundException" - - # list APIs from AWS should include the created API - apis_aws = apigwv2_client_aws.get_apis() - aws_api_ids = [api["ApiId"] for api in apis_aws.get("Items", [])] - assert api_id_aws in aws_api_ids - - # update API description via LocalStack client (should proxy to AWS) - updated_description = "Updated description via proxy" - apigwv2_client.update_api(ApiId=api_id_aws, Description=updated_description) - - # verify update is reflected in AWS - get_api_aws = apigwv2_client_aws.get_api(ApiId=api_id_aws) - assert get_api_aws["Description"] == updated_description - - -def test_apigatewayv2_routes_and_integrations(start_aws_proxy, cleanups): - """Test API Gateway v2 routes and integrations with proxy.""" - api_name_aws = f"test-http-api-routes-{short_uid()}" - - # start proxy - forwarding all API Gateway v2 requests - config = ProxyConfig(services={"apigatewayv2": {"resources": ".*"}}) - start_aws_proxy(config) - - # create clients - region_name = "us-east-1" - apigwv2_client = connect_to(region_name=region_name).apigatewayv2 - apigwv2_client_aws = boto3.client("apigatewayv2", region_name=region_name) - - # create HTTP API in AWS - create_response_aws = apigwv2_client_aws.create_api( - Name=api_name_aws, ProtocolType="HTTP" - ) - api_id_aws = create_response_aws["ApiId"] - cleanups.append(lambda: apigwv2_client_aws.delete_api(ApiId=api_id_aws)) - - # create integration via AWS client - integration_response = apigwv2_client_aws.create_integration( - ApiId=api_id_aws, - IntegrationType="HTTP_PROXY", - IntegrationMethod="GET", - IntegrationUri="https://httpbin.org/get", - PayloadFormatVersion="1.0", - ) - integration_id = integration_response["IntegrationId"] - - # verify integration via LocalStack (proxied) - integration_local = apigwv2_client.get_integration( - ApiId=api_id_aws, IntegrationId=integration_id - ) - assert integration_local["IntegrationType"] == "HTTP_PROXY" - assert integration_local["IntegrationId"] == integration_id - - # create route via AWS client - route_response = apigwv2_client_aws.create_route( - ApiId=api_id_aws, - RouteKey="GET /users", - Target=f"integrations/{integration_id}", - ) - route_id = route_response["RouteId"] - - # verify route via LocalStack (proxied) - route_local = apigwv2_client.get_route(ApiId=api_id_aws, RouteId=route_id) - assert route_local["RouteKey"] == "GET /users" - assert route_local["RouteId"] == route_id - - # list routes via LocalStack (should proxy to AWS) - routes_local = apigwv2_client.get_routes(ApiId=api_id_aws) - route_ids_local = [r["RouteId"] for r in routes_local.get("Items", [])] - assert route_id in route_ids_local - - # delete route via AWS client - apigwv2_client_aws.delete_route(ApiId=api_id_aws, RouteId=route_id) - - # verify route is deleted via LocalStack (proxied) - with pytest.raises(ClientError) as ctx: - apigwv2_client.get_route(ApiId=api_id_aws, RouteId=route_id) - assert ctx.value.response["Error"]["Code"] == "NotFoundException" - - -def test_apigatewayv2_stages_and_deployments(start_aws_proxy, cleanups): - """Test API Gateway v2 stages and deployments with proxy.""" - api_name_aws = f"test-http-api-deploy-{short_uid()}" - - # start proxy - forwarding all API Gateway v2 requests - config = ProxyConfig(services={"apigatewayv2": {"resources": ".*"}}) - start_aws_proxy(config) - - # create clients - region_name = "us-east-1" - apigwv2_client = connect_to(region_name=region_name).apigatewayv2 - apigwv2_client_aws = boto3.client("apigatewayv2", region_name=region_name) - - # create HTTP API in AWS - create_response_aws = apigwv2_client_aws.create_api( - Name=api_name_aws, ProtocolType="HTTP" - ) - api_id_aws = create_response_aws["ApiId"] - cleanups.append(lambda: apigwv2_client_aws.delete_api(ApiId=api_id_aws)) - - # create a simple integration and route (required for deployment) - integration_response = apigwv2_client_aws.create_integration( - ApiId=api_id_aws, - IntegrationType="HTTP_PROXY", - IntegrationMethod="GET", - IntegrationUri="https://httpbin.org/get", - PayloadFormatVersion="1.0", - ) - integration_id = integration_response["IntegrationId"] - - apigwv2_client_aws.create_route( - ApiId=api_id_aws, - RouteKey="GET /test", - Target=f"integrations/{integration_id}", - ) - - # create stage via LocalStack client (should proxy to AWS) - stage_name = "test" - apigwv2_client.create_stage( - ApiId=api_id_aws, StageName=stage_name, Description="Test stage" - ) - - # verify stage exists in AWS - stage_aws = apigwv2_client_aws.get_stage(ApiId=api_id_aws, StageName=stage_name) - assert stage_aws["StageName"] == stage_name - assert stage_aws["Description"] == "Test stage" - - # get stage via LocalStack client - stage_local = apigwv2_client.get_stage(ApiId=api_id_aws, StageName=stage_name) - assert stage_local["StageName"] == stage_aws["StageName"] - - # create deployment via AWS client - deployment_response = apigwv2_client_aws.create_deployment( - ApiId=api_id_aws, StageName=stage_name, Description="Test deployment" - ) - deployment_id = deployment_response["DeploymentId"] - - # verify deployment via LocalStack (proxied) - deployment_local = apigwv2_client.get_deployment( - ApiId=api_id_aws, DeploymentId=deployment_id - ) - assert deployment_local["DeploymentId"] == deployment_id - - # list stages via AWS client - stages_aws = apigwv2_client_aws.get_stages(ApiId=api_id_aws) - stage_names_aws = [s["StageName"] for s in stages_aws.get("Items", [])] - assert stage_name in stage_names_aws - - -def test_apigatewayv2_read_only_mode(start_aws_proxy, cleanups): - """Test API Gateway v2 operations in read-only proxy mode.""" - api_name_aws = f"test-http-api-readonly-{short_uid()}" - - # create HTTP API in AWS first (before starting proxy) - region_name = "us-east-1" - apigwv2_client_aws = boto3.client("apigatewayv2", region_name=region_name) - create_response_aws = apigwv2_client_aws.create_api( - Name=api_name_aws, ProtocolType="HTTP" - ) - api_id_aws = create_response_aws["ApiId"] - cleanups.append(lambda: apigwv2_client_aws.delete_api(ApiId=api_id_aws)) - - # start proxy in read-only mode - config = ProxyConfig( - services={"apigatewayv2": {"resources": ".*", "read_only": True}} - ) - start_aws_proxy(config) - - # create LocalStack client - apigwv2_client = connect_to(region_name=region_name).apigatewayv2 - - # read operations should work (proxied to AWS) - get_api_local = apigwv2_client.get_api(ApiId=api_id_aws) - assert get_api_local["Name"] == api_name_aws - assert get_api_local["ApiId"] == api_id_aws - - # verify the API can also be read directly from AWS - get_api_aws = apigwv2_client_aws.get_api(ApiId=api_id_aws) - assert get_api_local["Name"] == get_api_aws["Name"] - - # write operations should not be proxied in read-only mode - original_description = get_api_aws.get("Description", "") - - # Attempt write operation - should be blocked in read-only mode - with pytest.raises(Exception): - apigwv2_client.update_api(ApiId=api_id_aws, Description="Should not reach AWS") - - # Verify the API description was not changed in AWS - get_api_aws_after = apigwv2_client_aws.get_api(ApiId=api_id_aws) - assert get_api_aws_after.get("Description", "") == original_description - - -def test_apigatewayv2_websocket_api(start_aws_proxy, cleanups): - """Test API Gateway v2 WebSocket API operations with proxy.""" - api_name_aws = f"test-websocket-api-{short_uid()}" - - # start proxy - forwarding all API Gateway v2 requests - config = ProxyConfig(services={"apigatewayv2": {"resources": ".*"}}) - start_aws_proxy(config) - - # create clients - region_name = "us-east-1" - apigwv2_client = connect_to(region_name=region_name).apigatewayv2 - apigwv2_client_aws = boto3.client("apigatewayv2", region_name=region_name) - - # create WebSocket API in AWS - create_response_aws = apigwv2_client_aws.create_api( - Name=api_name_aws, - ProtocolType="WEBSOCKET", - RouteSelectionExpression="$request.body.action", - ) - api_id_aws = create_response_aws["ApiId"] - cleanups.append(lambda: apigwv2_client_aws.delete_api(ApiId=api_id_aws)) - - # assert that local call for this API is proxied - get_api_local = apigwv2_client.get_api(ApiId=api_id_aws) - get_api_aws = apigwv2_client_aws.get_api(ApiId=api_id_aws) - assert get_api_local["Name"] == get_api_aws["Name"] == api_name_aws - assert get_api_local["ProtocolType"] == "WEBSOCKET" - - # create a route for WebSocket API via AWS client - route_response = apigwv2_client_aws.create_route( - ApiId=api_id_aws, RouteKey="$connect" - ) - route_id = route_response["RouteId"] - - # verify route via LocalStack (proxied) - route_local = apigwv2_client.get_route(ApiId=api_id_aws, RouteId=route_id) - assert route_local["RouteKey"] == "$connect" - assert route_local["RouteId"] == route_id - - # list routes should include the $connect route - routes_local = apigwv2_client.get_routes(ApiId=api_id_aws) - route_keys = [r["RouteKey"] for r in routes_local.get("Items", [])] - assert "$connect" in route_keys diff --git a/aws-proxy/tests/proxy/test_appsync.py b/aws-proxy/tests/proxy/test_appsync.py deleted file mode 100644 index a1f5f5b2..00000000 --- a/aws-proxy/tests/proxy/test_appsync.py +++ /dev/null @@ -1,471 +0,0 @@ -# Note/disclosure: This file has been (partially or fully) generated by an AI agent. -import logging - -import boto3 -import pytest -from botocore.exceptions import ClientError -from localstack.aws.connect import connect_to -from localstack.utils.strings import short_uid -from localstack.utils.sync import retry - -from aws_proxy.shared.models import ProxyConfig - -LOG = logging.getLogger(__name__) - - -@pytest.fixture -def appsync_client_aws(): - """Create a boto3 AppSync client for direct AWS access.""" - return boto3.client("appsync") - - -@pytest.fixture -def create_graphql_api_aws(appsync_client_aws): - """ - Fixture to create GraphQL APIs in AWS with automatic cleanup. - Returns a factory function that creates APIs and tracks them for cleanup. - """ - created_apis = [] - - def _create_api(name: str = None, authentication_type: str = "API_KEY", **kwargs): - if name is None: - name = f"test-api-{short_uid()}" - response = appsync_client_aws.create_graphql_api( - name=name, authenticationType=authentication_type, **kwargs - ) - api_id = response["graphqlApi"]["apiId"] - created_apis.append(api_id) - return response["graphqlApi"] - - yield _create_api - - # Cleanup all created APIs - for api_id in created_apis: - try: - appsync_client_aws.delete_graphql_api(apiId=api_id) - except ClientError as e: - # Ignore if already deleted - if e.response["Error"]["Code"] != "NotFoundException": - LOG.warning("Failed to delete GraphQL API %s: %s", api_id, e) - - -def _compare_api_lists(apis_aws: list, apis_proxied: list): - """Helper to compare GraphQL API lists, ignoring some dynamic attributes.""" - - def normalize_api(api): - normalized = api.copy() - # Remove dynamic fields that may differ - for field in [ - "uris", - "tags", - "userPoolConfig", - "additionalAuthenticationProviders", - ]: - normalized.pop(field, None) - return normalized - - normalized_aws = sorted( - [normalize_api(api) for api in apis_aws], key=lambda x: x["apiId"] - ) - normalized_proxied = sorted( - [normalize_api(api) for api in apis_proxied], key=lambda x: x["apiId"] - ) - - assert normalized_proxied == normalized_aws - - -def test_appsync_graphql_api_operations( - start_aws_proxy, appsync_client_aws, create_graphql_api_aws -): - """Test basic AppSync GraphQL API operations with proxy.""" - api_name = f"test-api-{short_uid()}" - - # Start proxy for appsync service - config = ProxyConfig(services={"appsync": {"resources": ".*"}}) - start_aws_proxy(config) - - # Create clients - appsync_client = connect_to().appsync - - # List APIs initially to establish baseline - apis_proxied_initial = appsync_client.list_graphql_apis().get("graphqlApis", []) - apis_aws_initial = appsync_client_aws.list_graphql_apis().get("graphqlApis", []) - _compare_api_lists(apis_aws_initial, apis_proxied_initial) - - # Create a GraphQL API via proxied client (will be cleaned up by fixture) - api = create_graphql_api_aws(name=api_name) - api_id = api["apiId"] - - # Verify the API exists in AWS - api_aws = appsync_client_aws.get_graphql_api(apiId=api_id)["graphqlApi"] - assert api_aws["name"] == api_name - assert api_aws["apiId"] == api_id - - # Get API via proxied client and compare - api_proxied = appsync_client.get_graphql_api(apiId=api_id)["graphqlApi"] - assert api_proxied["name"] == api_aws["name"] - assert api_proxied["apiId"] == api_aws["apiId"] - assert api_proxied["authenticationType"] == api_aws["authenticationType"] - - # List APIs and verify the new API appears in both - apis_proxied_after = appsync_client.list_graphql_apis().get("graphqlApis", []) - apis_aws_after = appsync_client_aws.list_graphql_apis().get("graphqlApis", []) - _compare_api_lists(apis_aws_after, apis_proxied_after) - - # Verify our API is in the list - api_ids_proxied = [api["apiId"] for api in apis_proxied_after] - assert api_id in api_ids_proxied - - # Update the API - updated_name = f"updated-api-{short_uid()}" - appsync_client.update_graphql_api( - apiId=api_id, name=updated_name, authenticationType="API_KEY" - ) - - # Verify update in AWS - api_aws_updated = appsync_client_aws.get_graphql_api(apiId=api_id)["graphqlApi"] - assert api_aws_updated["name"] == updated_name - - -def test_appsync_graphql_api_delete( - start_aws_proxy, appsync_client_aws, create_graphql_api_aws -): - """Test AppSync GraphQL API deletion with proxy.""" - api_name = f"test-api-delete-{short_uid()}" - - # Start proxy for appsync service - config = ProxyConfig(services={"appsync": {"resources": ".*"}}) - start_aws_proxy(config) - - # Create clients - appsync_client = connect_to().appsync - - # Create a GraphQL API via fixture - api = create_graphql_api_aws(name=api_name) - api_id = api["apiId"] - - # Verify it exists - api_aws = appsync_client_aws.get_graphql_api(apiId=api_id)["graphqlApi"] - assert api_aws["apiId"] == api_id - - # Delete the API via proxied client - appsync_client.delete_graphql_api(apiId=api_id) - - # Verify deletion - def _assert_api_deleted(): - with pytest.raises(ClientError) as exc: - appsync_client_aws.get_graphql_api(apiId=api_id) - assert exc.value.response["Error"]["Code"] == "NotFoundException" - - retry(_assert_api_deleted, retries=5, sleep=2) - - -def test_appsync_api_key_operations( - start_aws_proxy, appsync_client_aws, create_graphql_api_aws -): - """Test AppSync API key operations with proxy.""" - # Start proxy for appsync service - config = ProxyConfig(services={"appsync": {"resources": ".*"}}) - start_aws_proxy(config) - - # Create clients - appsync_client = connect_to().appsync - - # Create a GraphQL API via fixture - api = create_graphql_api_aws() - api_id = api["apiId"] - - # Create an API key via proxied client - api_key_response = appsync_client.create_api_key(apiId=api_id) - api_key_id = api_key_response["apiKey"]["id"] - - # List API keys via both clients - keys_aws = appsync_client_aws.list_api_keys(apiId=api_id).get("apiKeys", []) - keys_proxied = appsync_client.list_api_keys(apiId=api_id).get("apiKeys", []) - - assert len(keys_aws) == len(keys_proxied) - assert keys_aws[0]["id"] == keys_proxied[0]["id"] - - # Delete API key via proxied client - appsync_client.delete_api_key(apiId=api_id, id=api_key_id) - - # Verify deletion - keys_aws_after = appsync_client_aws.list_api_keys(apiId=api_id).get("apiKeys", []) - assert api_key_id not in [k["id"] for k in keys_aws_after] - - -def test_appsync_readonly_mode( - start_aws_proxy, appsync_client_aws, create_graphql_api_aws -): - """Test AppSync operations in read-only proxy mode.""" - api_name = f"test-readonly-api-{short_uid()}" - - # Start proxy in read-only mode - config = ProxyConfig(services={"appsync": {"resources": ".*", "read_only": True}}) - start_aws_proxy(config) - - # Create clients - appsync_client = connect_to().appsync - - # Create a GraphQL API in AWS directly via fixture - api = create_graphql_api_aws(name=api_name) - api_id = api["apiId"] - - # Read operations should work via proxy - api_proxied = appsync_client.get_graphql_api(apiId=api_id)["graphqlApi"] - assert api_proxied["apiId"] == api_id - assert api_proxied["name"] == api_name - - # List APIs should work via proxy - apis_proxied = appsync_client.list_graphql_apis().get("graphqlApis", []) - api_ids_proxied = [api["apiId"] for api in apis_proxied] - assert api_id in api_ids_proxied - - # Write operations should NOT be proxied - create a new API locally - local_api_name = f"local-only-api-{short_uid()}" - local_response = appsync_client.create_graphql_api( - name=local_api_name, authenticationType="API_KEY" - ) - local_api_id = local_response["graphqlApi"]["apiId"] - - # Verify this API does NOT exist in AWS - apis_aws = appsync_client_aws.list_graphql_apis().get("graphqlApis", []) - aws_api_ids = [api["apiId"] for api in apis_aws] - assert local_api_id not in aws_api_ids - - -def test_appsync_readonly_evaluate_operations( - start_aws_proxy, appsync_client_aws, create_graphql_api_aws -): - """Test that EvaluateCode and EvaluateMappingTemplate work in read-only proxy mode. - - These operations are functionally read-only (they evaluate code/templates without - modifying state) but don't follow the standard Describe*/Get*/List* naming convention. - This test ensures they are correctly identified as read operations. - """ - # Start proxy in read-only mode - config = ProxyConfig(services={"appsync": {"resources": ".*", "read_only": True}}) - start_aws_proxy(config) - - # Create clients - appsync_client = connect_to().appsync - - # EvaluateCode - test with a simple APPSYNC_JS function - # This should work in read-only mode since it's a read operation - code = """ - export function request(ctx) { - return { version: "2018-05-29", payload: ctx.arguments }; - } - export function response(ctx) { - return ctx.result; - } - """ - context = ( - '{"arguments": {"id": "123", "name": "test"}, "result": {"success": true}}' - ) - - evaluate_code_response = appsync_client.evaluate_code( - runtime={"name": "APPSYNC_JS", "runtimeVersion": "1.0.0"}, - code=code, - context=context, - function="request", - ) - - # Verify the response - EvaluateCode should return evaluation result - assert "evaluationResult" in evaluate_code_response - # The error field should be None or not present for successful evaluation - assert evaluate_code_response.get("error") is None - - # Compare with direct AWS call to verify proxy is forwarding correctly - evaluate_code_response_aws = appsync_client_aws.evaluate_code( - runtime={"name": "APPSYNC_JS", "runtimeVersion": "1.0.0"}, - code=code, - context=context, - function="request", - ) - assert evaluate_code_response_aws.get("error") is None - - # EvaluateMappingTemplate - test with a simple VTL template - # This should also work in read-only mode - template = '{"version": "2018-05-29", "payload": $util.toJson($context.arguments)}' - context_vtl = '{"arguments": {"id": "456", "value": "test-value"}}' - - evaluate_template_response = appsync_client.evaluate_mapping_template( - template=template, - context=context_vtl, - ) - - # Verify the response - assert "evaluationResult" in evaluate_template_response - assert evaluate_template_response.get("error") is None - - # Compare with direct AWS call - evaluate_template_response_aws = appsync_client_aws.evaluate_mapping_template( - template=template, - context=context_vtl, - ) - assert evaluate_template_response_aws.get("error") is None - - -def test_appsync_operations_filtering( - start_aws_proxy, appsync_client_aws, create_graphql_api_aws -): - """Test that proxy forwards only specified operations.""" - api_name = f"test-ops-filter-api-{short_uid()}" - - # Start proxy - only forwarding GetGraphqlApi and ListGraphqlApis operations - config = ProxyConfig( - services={ - "appsync": { - "resources": ".*", - "operations": ["GetGraphqlApi", "ListGraphqlApis"], - } - } - ) - start_aws_proxy(config) - - # Create clients - appsync_client = connect_to().appsync - - # Create API directly in AWS via fixture (not via proxy since CreateGraphqlApi is not proxied) - api = create_graphql_api_aws(name=api_name) - api_id = api["apiId"] - - # GetGraphqlApi should be proxied - should return AWS data - api_proxied = appsync_client.get_graphql_api(apiId=api_id)["graphqlApi"] - assert api_proxied["apiId"] == api_id - assert api_proxied["name"] == api_name - - # ListGraphqlApis should be proxied - should include the AWS API - apis_proxied = appsync_client.list_graphql_apis().get("graphqlApis", []) - api_ids_proxied = [api["apiId"] for api in apis_proxied] - assert api_id in api_ids_proxied - - # CreateGraphqlApi is NOT proxied - creating via local client should stay local - local_api_name = f"local-only-api-{short_uid()}" - local_response = appsync_client.create_graphql_api( - name=local_api_name, authenticationType="API_KEY" - ) - local_api_id = local_response["graphqlApi"]["apiId"] - - # Verify local API does NOT exist in AWS - apis_aws = appsync_client_aws.list_graphql_apis().get("graphqlApis", []) - aws_api_ids = [api["apiId"] for api in apis_aws] - assert local_api_id not in aws_api_ids - - -def test_appsync_schema_operations( - start_aws_proxy, appsync_client_aws, create_graphql_api_aws -): - """Test AppSync schema operations with proxy.""" - # Start proxy for appsync service - config = ProxyConfig(services={"appsync": {"resources": ".*"}}) - start_aws_proxy(config) - - # Create clients - appsync_client = connect_to().appsync - - # Create a GraphQL API via fixture - api = create_graphql_api_aws() - api_id = api["apiId"] - - # Define a simple schema - schema_definition = b""" - type Query { - getItem(id: ID!): Item - listItems: [Item] - } - - type Item { - id: ID! - name: String - description: String - } - - type Mutation { - createItem(name: String!, description: String): Item - deleteItem(id: ID!): Item - } - """ - - # Start schema creation via proxied client - appsync_client.start_schema_creation(apiId=api_id, definition=schema_definition) - - # Wait for schema creation to complete - def _assert_schema_active(): - status = appsync_client.get_schema_creation_status(apiId=api_id) - assert status["status"] == "SUCCESS", f"Schema status: {status['status']}" - - retry(_assert_schema_active, retries=10, sleep=2) - - # Get introspection schema via both clients and compare - schema_aws = appsync_client_aws.get_introspection_schema(apiId=api_id, format="SDL") - schema_proxied = appsync_client.get_introspection_schema(apiId=api_id, format="SDL") - - # Schema content should be the same - assert schema_aws["schema"].read() == schema_proxied["schema"].read() - - -def test_appsync_data_source_operations( - start_aws_proxy, appsync_client_aws, create_graphql_api_aws -): - """Test AppSync data source operations with proxy.""" - # Data source names must be alphanumeric only - data_source_name = f"testdatasource{short_uid().replace('-', '')}" - - # Start proxy for appsync service - config = ProxyConfig(services={"appsync": {"resources": ".*"}}) - start_aws_proxy(config) - - # Create clients - appsync_client = connect_to().appsync - - # Create a GraphQL API via fixture - api = create_graphql_api_aws() - api_id = api["apiId"] - - # Create a NONE data source via proxied client - ds_response = appsync_client.create_data_source( - apiId=api_id, name=data_source_name, type="NONE" - ) - assert ds_response["dataSource"]["name"] == data_source_name - - # List data sources via both clients - ds_aws = appsync_client_aws.list_data_sources(apiId=api_id).get("dataSources", []) - ds_proxied = appsync_client.list_data_sources(apiId=api_id).get("dataSources", []) - - assert len(ds_aws) == len(ds_proxied) - assert ds_aws[0]["name"] == ds_proxied[0]["name"] - - # Get data source via both clients - ds_aws_get = appsync_client_aws.get_data_source( - apiId=api_id, name=data_source_name - )["dataSource"] - ds_proxied_get = appsync_client.get_data_source( - apiId=api_id, name=data_source_name - )["dataSource"] - - assert ds_aws_get["name"] == ds_proxied_get["name"] - assert ds_aws_get["type"] == ds_proxied_get["type"] - - # Update data source via proxied client - appsync_client.update_data_source( - apiId=api_id, - name=data_source_name, - type="NONE", - description="Updated description", - ) - - # Verify update - ds_aws_updated = appsync_client_aws.get_data_source( - apiId=api_id, name=data_source_name - )["dataSource"] - assert ds_aws_updated["description"] == "Updated description" - - # Delete data source via proxied client - appsync_client.delete_data_source(apiId=api_id, name=data_source_name) - - # Verify deletion - with pytest.raises(ClientError) as exc: - appsync_client_aws.get_data_source(apiId=api_id, name=data_source_name) - assert exc.value.response["Error"]["Code"] == "NotFoundException" diff --git a/aws-proxy/tests/proxy/test_cloudwatch.py b/aws-proxy/tests/proxy/test_cloudwatch.py deleted file mode 100644 index ead4f702..00000000 --- a/aws-proxy/tests/proxy/test_cloudwatch.py +++ /dev/null @@ -1,705 +0,0 @@ -# Note/disclosure: This file has been (partially or fully) generated by an AI agent. -import time -from datetime import datetime, timezone - -import boto3 -from localstack.aws.connect import connect_to -from localstack.utils.strings import short_uid -from localstack.utils.sync import retry - -from aws_proxy.shared.models import ProxyConfig - - -# ============================================================================= -# CloudWatch Metrics Tests -# ============================================================================= - - -def test_cloudwatch_metric_operations(start_aws_proxy, cleanups): - """Test basic CloudWatch metric operations with proxy. - - Note: CloudWatch metrics have significant eventual consistency delays (2-5 minutes). - This test focuses on verifying the proxy functionality by testing PutMetricData - and ListMetrics operations rather than waiting for GetMetricData to return values. - """ - namespace = f"TestNamespace/{short_uid()}" - metric_name = f"TestMetric-{short_uid()}" - - # start proxy - forwarding requests for CloudWatch metrics - config = ProxyConfig(services={"cloudwatch": {"resources": [".*"]}}) - start_aws_proxy(config) - - # create clients - cw_client = connect_to().cloudwatch - cw_client_aws = boto3.client("cloudwatch") - - # put metric data to AWS directly - timestamp = datetime.now(timezone.utc) - cw_client_aws.put_metric_data( - Namespace=namespace, - MetricData=[ - { - "MetricName": metric_name, - "Value": 42.0, - "Unit": "Count", - "Timestamp": timestamp, - } - ], - ) - - # put metric data through local client (proxied) to verify proxy forwards correctly - metric_name_2 = f"TestMetric2-{short_uid()}" - cw_client.put_metric_data( - Namespace=namespace, - MetricData=[ - { - "MetricName": metric_name_2, - "Value": 100.0, - "Unit": "Count", - "Timestamp": datetime.now(timezone.utc), - } - ], - ) - - # verify metrics exist via list_metrics (faster than get_metric_data for new metrics) - def _verify_metrics_aws(): - response = cw_client_aws.list_metrics(Namespace=namespace) - metric_names = [m["MetricName"] for m in response.get("Metrics", [])] - if metric_name not in metric_names or metric_name_2 not in metric_names: - raise AssertionError(f"Metrics not found in AWS yet. Found: {metric_names}") - return response - - metrics_aws = retry(_verify_metrics_aws, retries=20, sleep=5) - metric_names = [m["MetricName"] for m in metrics_aws["Metrics"]] - assert metric_name in metric_names - assert metric_name_2 in metric_names # This proves the proxy forwarded the request - - # verify list_metrics through proxy returns the same data - metrics_local = cw_client.list_metrics(Namespace=namespace) - metric_names_local = [m["MetricName"] for m in metrics_local.get("Metrics", [])] - assert metric_name in metric_names_local - assert metric_name_2 in metric_names_local - - -def test_cloudwatch_alarm_operations(start_aws_proxy, cleanups): - """Test CloudWatch alarm operations with proxy.""" - test_id = short_uid() - alarm_name = f"test-alarm-{test_id}" - namespace = f"TestNamespace/{short_uid()}" - metric_name = f"TestMetric-{short_uid()}" - - # start proxy - forwarding requests for CloudWatch alarms matching "test-alarm-{test_id}*" - config = ProxyConfig( - services={"cloudwatch": {"resources": [f".*:alarm:test-alarm-{test_id}.*"]}} - ) - start_aws_proxy(config) - - # create clients - cw_client = connect_to().cloudwatch - cw_client_aws = boto3.client("cloudwatch") - - # create alarm in AWS - cw_client_aws.put_metric_alarm( - AlarmName=alarm_name, - MetricName=metric_name, - Namespace=namespace, - Statistic="Average", - Period=60, - EvaluationPeriods=1, - Threshold=50.0, - ComparisonOperator="GreaterThanThreshold", - ) - cleanups.append(lambda: cw_client_aws.delete_alarms(AlarmNames=[alarm_name])) - - # describe alarm through local client (proxied) - alarms_local = cw_client.describe_alarms(AlarmNames=[alarm_name]) - alarms_aws = cw_client_aws.describe_alarms(AlarmNames=[alarm_name]) - - assert len(alarms_local["MetricAlarms"]) == 1 - assert len(alarms_aws["MetricAlarms"]) == 1 - assert alarms_local["MetricAlarms"][0]["AlarmName"] == alarm_name - assert ( - alarms_local["MetricAlarms"][0]["AlarmArn"] - == alarms_aws["MetricAlarms"][0]["AlarmArn"] - ) - - # create alarm through local client (proxied) - alarm_name_2 = f"test-alarm-{test_id}-2" - cw_client.put_metric_alarm( - AlarmName=alarm_name_2, - MetricName=metric_name, - Namespace=namespace, - Statistic="Sum", - Period=300, - EvaluationPeriods=2, - Threshold=100.0, - ComparisonOperator="LessThanThreshold", - ) - cleanups.append(lambda: cw_client_aws.delete_alarms(AlarmNames=[alarm_name_2])) - - # verify alarm exists in AWS - alarms_aws_2 = cw_client_aws.describe_alarms(AlarmNames=[alarm_name_2]) - assert len(alarms_aws_2["MetricAlarms"]) == 1 - assert alarms_aws_2["MetricAlarms"][0]["AlarmName"] == alarm_name_2 - - -def test_cloudwatch_readonly_operations(start_aws_proxy, cleanups): - """Test CloudWatch operations in read-only proxy mode.""" - alarm_name = f"test-readonly-alarm-{short_uid()}" - namespace = f"TestNamespace/{short_uid()}" - metric_name = f"TestMetric-{short_uid()}" - - # start proxy - forwarding requests for CloudWatch in read-only mode - config = ProxyConfig( - services={ - "cloudwatch": {"resources": [f".*:alarm:{alarm_name}"], "read_only": True} - } - ) - start_aws_proxy(config) - - # create clients - cw_client = connect_to().cloudwatch - cw_client_aws = boto3.client("cloudwatch") - - # create alarm in AWS (this should succeed as it's direct AWS client) - cw_client_aws.put_metric_alarm( - AlarmName=alarm_name, - MetricName=metric_name, - Namespace=namespace, - Statistic="Average", - Period=60, - EvaluationPeriods=1, - Threshold=50.0, - ComparisonOperator="GreaterThanThreshold", - ) - cleanups.append(lambda: cw_client_aws.delete_alarms(AlarmNames=[alarm_name])) - - # assert that local call for describe_alarms is proxied and results are consistent - alarms_local = cw_client.describe_alarms(AlarmNames=[alarm_name]) - alarms_aws = cw_client_aws.describe_alarms(AlarmNames=[alarm_name]) - assert ( - alarms_local["MetricAlarms"][0]["AlarmArn"] - == alarms_aws["MetricAlarms"][0]["AlarmArn"] - ) - - # Negative test: attempt write operations with proxied client in read-only mode - # Create a new alarm using the proxied client (should succeed in LocalStack locally) - new_alarm_name = f"no-proxy-alarm-{short_uid()}" - cw_client.put_metric_alarm( - AlarmName=new_alarm_name, - MetricName=metric_name, - Namespace=namespace, - Statistic="Average", - Period=60, - EvaluationPeriods=1, - Threshold=50.0, - ComparisonOperator="GreaterThanThreshold", - ) - cleanups.append(lambda: cw_client.delete_alarms(AlarmNames=[new_alarm_name])) - - # Verify that this new alarm does NOT exist in real AWS - alarms_aws_new = cw_client_aws.describe_alarms(AlarmNames=[new_alarm_name]) - assert len(alarms_aws_new["MetricAlarms"]) == 0 - - -def test_cloudwatch_resource_name_matching(start_aws_proxy, cleanups): - """Test that proxy forwards requests for specific CloudWatch alarms matching ARN pattern.""" - alarm_name_match = f"proxy-alarm-{short_uid()}" - alarm_name_nomatch = f"local-alarm-{short_uid()}" - namespace = f"TestNamespace/{short_uid()}" - metric_name = f"TestMetric-{short_uid()}" - - # start proxy - only forwarding requests for alarms starting with "proxy-" - config = ProxyConfig(services={"cloudwatch": {"resources": ".*:alarm:proxy-.*"}}) - start_aws_proxy(config) - - # create clients - cw_client = connect_to().cloudwatch - cw_client_aws = boto3.client("cloudwatch") - - # create alarm in AWS that matches the pattern - cw_client_aws.put_metric_alarm( - AlarmName=alarm_name_match, - MetricName=metric_name, - Namespace=namespace, - Statistic="Average", - Period=60, - EvaluationPeriods=1, - Threshold=50.0, - ComparisonOperator="GreaterThanThreshold", - ) - cleanups.append(lambda: cw_client_aws.delete_alarms(AlarmNames=[alarm_name_match])) - - # assert that the matching alarm is proxied - alarms_local = cw_client.describe_alarms(AlarmNames=[alarm_name_match]) - alarms_aws = cw_client_aws.describe_alarms(AlarmNames=[alarm_name_match]) - assert len(alarms_local["MetricAlarms"]) == 1 - assert ( - alarms_local["MetricAlarms"][0]["AlarmArn"] - == alarms_aws["MetricAlarms"][0]["AlarmArn"] - ) - - # create a local alarm that doesn't match the pattern - cw_client.put_metric_alarm( - AlarmName=alarm_name_nomatch, - MetricName=metric_name, - Namespace=namespace, - Statistic="Average", - Period=60, - EvaluationPeriods=1, - Threshold=50.0, - ComparisonOperator="GreaterThanThreshold", - ) - cleanups.append(lambda: cw_client.delete_alarms(AlarmNames=[alarm_name_nomatch])) - - # verify that the non-matching alarm was created locally but NOT in AWS - alarms_aws_nomatch = cw_client_aws.describe_alarms(AlarmNames=[alarm_name_nomatch]) - assert len(alarms_aws_nomatch["MetricAlarms"]) == 0 - - -# ============================================================================= -# CloudWatch Logs Tests -# ============================================================================= - - -def test_logs_group_operations(start_aws_proxy, cleanups): - """Test basic CloudWatch Logs group operations with proxy.""" - log_group_name = f"/test/logs/{short_uid()}" - - # start proxy - forwarding requests for CloudWatch Logs - config = ProxyConfig( - services={"logs": {"resources": [f".*:log-group:{log_group_name}:.*"]}} - ) - start_aws_proxy(config) - - # create clients - logs_client = connect_to().logs - logs_client_aws = boto3.client("logs") - - # create log group in AWS - logs_client_aws.create_log_group(logGroupName=log_group_name) - cleanups.append( - lambda: logs_client_aws.delete_log_group(logGroupName=log_group_name) - ) - - # describe log groups through local client (proxied) - groups_local = logs_client.describe_log_groups(logGroupNamePrefix=log_group_name) - groups_aws = logs_client_aws.describe_log_groups(logGroupNamePrefix=log_group_name) - - assert len(groups_local["logGroups"]) == 1 - assert len(groups_aws["logGroups"]) == 1 - assert groups_local["logGroups"][0]["logGroupName"] == log_group_name - assert groups_local["logGroups"][0]["arn"] == groups_aws["logGroups"][0]["arn"] - - -def test_logs_stream_and_events(start_aws_proxy, cleanups): - """Test CloudWatch Logs stream and event operations with proxy.""" - log_group_name = f"/test/logs/{short_uid()}" - log_stream_name = f"test-stream-{short_uid()}" - - # start proxy - forwarding requests for CloudWatch Logs - config = ProxyConfig( - services={"logs": {"resources": [f".*:log-group:{log_group_name}:.*"]}} - ) - start_aws_proxy(config) - - # create clients - logs_client = connect_to().logs - logs_client_aws = boto3.client("logs") - - # create log group and stream in AWS - logs_client_aws.create_log_group(logGroupName=log_group_name) - cleanups.append( - lambda: logs_client_aws.delete_log_group(logGroupName=log_group_name) - ) - - logs_client_aws.create_log_stream( - logGroupName=log_group_name, logStreamName=log_stream_name - ) - - # put log events through AWS client - timestamp = int(time.time() * 1000) - logs_client_aws.put_log_events( - logGroupName=log_group_name, - logStreamName=log_stream_name, - logEvents=[ - {"timestamp": timestamp, "message": "Test message from AWS"}, - ], - ) - - # get log events through local client (proxied) - def _get_log_events(): - response = logs_client.get_log_events( - logGroupName=log_group_name, - logStreamName=log_stream_name, - startFromHead=True, - ) - if not response["events"]: - raise AssertionError("Log events not available yet") - return response - - events_local = retry(_get_log_events, retries=10, sleep=2) - assert len(events_local["events"]) >= 1 - assert events_local["events"][0]["message"] == "Test message from AWS" - - # put log events through local client (proxied) - timestamp_2 = int(time.time() * 1000) - logs_client.put_log_events( - logGroupName=log_group_name, - logStreamName=log_stream_name, - logEvents=[ - {"timestamp": timestamp_2, "message": "Test message from LocalStack"}, - ], - ) - - # verify via AWS client - def _verify_events_aws(): - response = logs_client_aws.get_log_events( - logGroupName=log_group_name, - logStreamName=log_stream_name, - startFromHead=True, - ) - messages = [e["message"] for e in response["events"]] - if "Test message from LocalStack" not in messages: - raise AssertionError("Log event from LocalStack not found in AWS") - return response - - events_aws = retry(_verify_events_aws, retries=10, sleep=2) - messages = [e["message"] for e in events_aws["events"]] - assert "Test message from AWS" in messages - assert "Test message from LocalStack" in messages - - -def test_logs_readonly_operations(start_aws_proxy, cleanups): - """Test CloudWatch Logs operations in read-only proxy mode.""" - log_group_name = f"/test/readonly/{short_uid()}" - log_stream_name = f"test-stream-{short_uid()}" - - # start proxy - forwarding requests for CloudWatch Logs in read-only mode - config = ProxyConfig( - services={ - "logs": { - "resources": [f".*:log-group:{log_group_name}:.*"], - "read_only": True, - } - } - ) - start_aws_proxy(config) - - # create clients - logs_client = connect_to().logs - logs_client_aws = boto3.client("logs") - - # create log group and stream in AWS (this should succeed as it's direct AWS client) - logs_client_aws.create_log_group(logGroupName=log_group_name) - cleanups.append( - lambda: logs_client_aws.delete_log_group(logGroupName=log_group_name) - ) - - logs_client_aws.create_log_stream( - logGroupName=log_group_name, logStreamName=log_stream_name - ) - - # put log events through AWS client - timestamp = int(time.time() * 1000) - logs_client_aws.put_log_events( - logGroupName=log_group_name, - logStreamName=log_stream_name, - logEvents=[ - {"timestamp": timestamp, "message": "Test message from AWS"}, - ], - ) - - # assert that local call for describe_log_groups is proxied and results are consistent - groups_local = logs_client.describe_log_groups(logGroupNamePrefix=log_group_name) - groups_aws = logs_client_aws.describe_log_groups(logGroupNamePrefix=log_group_name) - assert groups_local["logGroups"][0]["arn"] == groups_aws["logGroups"][0]["arn"] - - # get log events through local client (proxied) - should work in read-only mode - def _get_log_events(): - response = logs_client.get_log_events( - logGroupName=log_group_name, - logStreamName=log_stream_name, - startFromHead=True, - ) - if not response["events"]: - raise AssertionError("Log events not available yet") - return response - - events_local = retry(_get_log_events, retries=10, sleep=2) - assert events_local["events"][0]["message"] == "Test message from AWS" - - # Negative test: attempt write operations with proxied client in read-only mode - # Create a new log group using the proxied client (should succeed in LocalStack locally) - new_log_group_name = f"/test/no-proxy/{short_uid()}" - logs_client.create_log_group(logGroupName=new_log_group_name) - cleanups.append( - lambda: logs_client.delete_log_group(logGroupName=new_log_group_name) - ) - - # Verify that this new log group does NOT exist in real AWS - groups_aws_new = logs_client_aws.describe_log_groups( - logGroupNamePrefix=new_log_group_name - ) - assert len(groups_aws_new["logGroups"]) == 0 - - -def test_logs_readonly_filter_log_events(start_aws_proxy, cleanups): - """Test that FilterLogEvents works in read-only proxy mode. - - FilterLogEvents is a read operation but doesn't match standard prefixes - (Describe*, Get*, List*, Query*). This test verifies it's correctly - forwarded when read_only: true is configured. - """ - log_group_name = f"/test/readonly-filter/{short_uid()}" - log_stream_name_1 = f"stream-1-{short_uid()}" - log_stream_name_2 = f"stream-2-{short_uid()}" - - # start proxy - forwarding requests for CloudWatch Logs in read-only mode - config = ProxyConfig( - services={ - "logs": { - "resources": [f".*:log-group:{log_group_name}:.*"], - "read_only": True, - } - } - ) - start_aws_proxy(config) - - # create clients - logs_client = connect_to().logs - logs_client_aws = boto3.client("logs") - - # create log group and streams in AWS - logs_client_aws.create_log_group(logGroupName=log_group_name) - cleanups.append( - lambda: logs_client_aws.delete_log_group(logGroupName=log_group_name) - ) - - logs_client_aws.create_log_stream( - logGroupName=log_group_name, logStreamName=log_stream_name_1 - ) - logs_client_aws.create_log_stream( - logGroupName=log_group_name, logStreamName=log_stream_name_2 - ) - - # put log events with different messages - timestamp = int(time.time() * 1000) - logs_client_aws.put_log_events( - logGroupName=log_group_name, - logStreamName=log_stream_name_1, - logEvents=[ - {"timestamp": timestamp, "message": "ERROR: Something went wrong"}, - {"timestamp": timestamp + 1, "message": "INFO: Normal operation"}, - ], - ) - logs_client_aws.put_log_events( - logGroupName=log_group_name, - logStreamName=log_stream_name_2, - logEvents=[ - {"timestamp": timestamp + 2, "message": "ERROR: Another error"}, - {"timestamp": timestamp + 3, "message": "DEBUG: Debug info"}, - ], - ) - - # filter_log_events through local client (proxied) - should work in read-only mode - # This tests that FilterLogEvents is correctly identified as a read operation - def _filter_log_events(): - response = logs_client.filter_log_events( - logGroupName=log_group_name, - filterPattern="ERROR", - ) - if len(response["events"]) < 2: - raise AssertionError("Not all error events found yet") - return response - - filtered_local = retry(_filter_log_events, retries=15, sleep=2) - - # verify only ERROR messages are returned - assert len(filtered_local["events"]) >= 2 - for event in filtered_local["events"]: - assert "ERROR" in event["message"] - - # compare with AWS client results to confirm proxy forwarded correctly - filtered_aws = logs_client_aws.filter_log_events( - logGroupName=log_group_name, - filterPattern="ERROR", - ) - assert len(filtered_local["events"]) == len(filtered_aws["events"]) - - # Verify the events match (same messages from AWS) - local_messages = sorted([e["message"] for e in filtered_local["events"]]) - aws_messages = sorted([e["message"] for e in filtered_aws["events"]]) - assert local_messages == aws_messages - - -def test_logs_readonly_insights_query(start_aws_proxy, cleanups): - """Test that StartQuery and GetQueryResults work in read-only proxy mode. - - StartQuery and GetQueryResults are read operations for CloudWatch Logs Insights - but don't match standard prefixes. This test verifies they're correctly - forwarded when read_only: true is configured. - - Note: This test verifies the proxy correctly forwards these operations, not that - CloudWatch Logs Insights returns results (which can be flaky due to indexing delays). - """ - log_group_name = f"/test/readonly-insights/{short_uid()}" - - # start proxy - forwarding requests for CloudWatch Logs in read-only mode - config = ProxyConfig( - services={ - "logs": { - "resources": [f".*:log-group:{log_group_name}:.*"], - "read_only": True, - } - } - ) - start_aws_proxy(config) - - # create clients - logs_client = connect_to().logs - logs_client_aws = boto3.client("logs") - - # create log group in AWS - logs_client_aws.create_log_group(logGroupName=log_group_name) - cleanups.append( - lambda: logs_client_aws.delete_log_group(logGroupName=log_group_name) - ) - - # start_query through local client (proxied) - should work in read-only mode - # The fact that we get a valid query ID proves the request was proxied to AWS - start_time = int((time.time() - 300) * 1000) # 5 minutes ago - end_time = int((time.time() + 60) * 1000) # 1 minute from now - - query_response = logs_client.start_query( - logGroupName=log_group_name, - startTime=start_time, - endTime=end_time, - queryString="fields @timestamp, @message | limit 10", - ) - query_id = query_response["queryId"] - assert query_id is not None - # AWS query IDs are UUIDs, verify format to confirm this came from AWS - assert len(query_id) == 36 and query_id.count("-") == 4 - - # get_query_results through local client (proxied) - should work in read-only mode - # The fact that we get a valid status proves the request was proxied to AWS - results = logs_client.get_query_results(queryId=query_id) - assert "status" in results - valid_statuses = ["Scheduled", "Running", "Complete", "Failed", "Cancelled"] - assert results["status"] in valid_statuses - - # Verify via AWS client that the query exists (same query ID returns valid response) - results_aws = logs_client_aws.get_query_results(queryId=query_id) - assert results_aws["status"] in valid_statuses - - -def test_logs_resource_name_matching(start_aws_proxy, cleanups): - """Test that proxy forwards requests for specific log groups matching ARN pattern.""" - log_group_match = f"/proxy/logs/{short_uid()}" - log_group_nomatch = f"/local/logs/{short_uid()}" - - # start proxy - only forwarding requests for log groups starting with "/proxy/" - config = ProxyConfig(services={"logs": {"resources": ".*:log-group:/proxy/.*"}}) - start_aws_proxy(config) - - # create clients - logs_client = connect_to().logs - logs_client_aws = boto3.client("logs") - - # create log group in AWS that matches the pattern - logs_client_aws.create_log_group(logGroupName=log_group_match) - cleanups.append( - lambda: logs_client_aws.delete_log_group(logGroupName=log_group_match) - ) - - # assert that the matching log group is proxied - groups_local = logs_client.describe_log_groups(logGroupNamePrefix=log_group_match) - groups_aws = logs_client_aws.describe_log_groups(logGroupNamePrefix=log_group_match) - assert len(groups_local["logGroups"]) == 1 - assert groups_local["logGroups"][0]["arn"] == groups_aws["logGroups"][0]["arn"] - - # create a local log group that doesn't match the pattern - logs_client.create_log_group(logGroupName=log_group_nomatch) - cleanups.append( - lambda: logs_client.delete_log_group(logGroupName=log_group_nomatch) - ) - - # verify that the non-matching log group was created locally but NOT in AWS - groups_aws_nomatch = logs_client_aws.describe_log_groups( - logGroupNamePrefix=log_group_nomatch - ) - assert len(groups_aws_nomatch["logGroups"]) == 0 - - -def test_logs_filter_log_events(start_aws_proxy, cleanups): - """Test CloudWatch Logs filter_log_events operation with proxy.""" - log_group_name = f"/test/filter/{short_uid()}" - log_stream_name_1 = f"stream-1-{short_uid()}" - log_stream_name_2 = f"stream-2-{short_uid()}" - - # start proxy - forwarding requests for CloudWatch Logs - config = ProxyConfig( - services={"logs": {"resources": [f".*:log-group:{log_group_name}:.*"]}} - ) - start_aws_proxy(config) - - # create clients - logs_client = connect_to().logs - logs_client_aws = boto3.client("logs") - - # create log group and streams in AWS - logs_client_aws.create_log_group(logGroupName=log_group_name) - cleanups.append( - lambda: logs_client_aws.delete_log_group(logGroupName=log_group_name) - ) - - logs_client_aws.create_log_stream( - logGroupName=log_group_name, logStreamName=log_stream_name_1 - ) - logs_client_aws.create_log_stream( - logGroupName=log_group_name, logStreamName=log_stream_name_2 - ) - - # put log events with different messages - timestamp = int(time.time() * 1000) - logs_client_aws.put_log_events( - logGroupName=log_group_name, - logStreamName=log_stream_name_1, - logEvents=[ - {"timestamp": timestamp, "message": "ERROR: Something went wrong"}, - {"timestamp": timestamp + 1, "message": "INFO: Normal operation"}, - ], - ) - logs_client_aws.put_log_events( - logGroupName=log_group_name, - logStreamName=log_stream_name_2, - logEvents=[ - {"timestamp": timestamp + 2, "message": "ERROR: Another error"}, - {"timestamp": timestamp + 3, "message": "DEBUG: Debug info"}, - ], - ) - - # filter log events through local client (proxied) - def _filter_log_events(): - response = logs_client.filter_log_events( - logGroupName=log_group_name, - filterPattern="ERROR", - ) - if len(response["events"]) < 2: - raise AssertionError("Not all error events found yet") - return response - - filtered_local = retry(_filter_log_events, retries=15, sleep=2) - - # verify only ERROR messages are returned - assert len(filtered_local["events"]) >= 2 - for event in filtered_local["events"]: - assert "ERROR" in event["message"] - - # compare with AWS client results - filtered_aws = logs_client_aws.filter_log_events( - logGroupName=log_group_name, - filterPattern="ERROR", - ) - assert len(filtered_local["events"]) == len(filtered_aws["events"]) diff --git a/aws-proxy/tests/proxy/test_cognito_idp.py b/aws-proxy/tests/proxy/test_cognito_idp.py deleted file mode 100644 index aa46cbfc..00000000 --- a/aws-proxy/tests/proxy/test_cognito_idp.py +++ /dev/null @@ -1,164 +0,0 @@ -# Note/disclosure: This file has been (partially or fully) generated by an AI agent. - -import boto3 -import pytest -from botocore.exceptions import ClientError -from localstack.aws.connect import connect_to -from localstack.utils.sync import retry - -from aws_proxy.shared.models import ProxyConfig - - -def _compare_user_pool_lists(user_pools_aws: list, user_pools_proxied: list): - # Helper to compare user pool lists, ignoring some dynamic attributes - # We'll need to refine this based on actual Cognito-IDP response structure - def normalize_user_pool(user_pool): - normalized = user_pool.copy() - normalized.pop("LastModifiedDate", None) - normalized.pop("CreationDate", None) - return normalized - - normalized_aws = sorted( - [normalize_user_pool(up) for up in user_pools_aws], key=lambda x: x["Id"] - ) - normalized_proxied = sorted( - [normalize_user_pool(up) for up in user_pools_proxied], key=lambda x: x["Id"] - ) - - assert normalized_proxied == normalized_aws - - -def test_cognito_idp_user_pool_operations(start_aws_proxy): - # Start proxy for cognito-idp service - config = ProxyConfig(services={"cognito-idp": {"resources": ".*"}}) - start_aws_proxy(config) - - # Create clients - cognito_client = connect_to().cognito_idp - cognito_client_aws = boto3.client("cognito-idp") - - # List user pools initially to ensure clean state and compare - user_pools_proxied_initial = cognito_client.list_user_pools(MaxResults=10)[ - "UserPools" - ] - user_pools_aws_initial = cognito_client_aws.list_user_pools(MaxResults=10)[ - "UserPools" - ] - _compare_user_pool_lists(user_pools_aws_initial, user_pools_proxied_initial) - - # Create a user pool - user_pool_name = "test-user-pool-proxy" - create_response_proxied = cognito_client.create_user_pool(PoolName=user_pool_name) - user_pool_id_proxied = create_response_proxied["UserPool"]["Id"] - - # List user pools and compare - user_pools_proxied_after_create = cognito_client.list_user_pools(MaxResults=10)[ - "UserPools" - ] - user_pools_aws_after_create = cognito_client_aws.list_user_pools(MaxResults=10)[ - "UserPools" - ] - _compare_user_pool_lists( - user_pools_aws_after_create, user_pools_proxied_after_create - ) - - # Describe user pool and compare - describe_proxied = cognito_client.describe_user_pool( - UserPoolId=user_pool_id_proxied - )["UserPool"] - describe_aws = cognito_client_aws.describe_user_pool( - UserPoolId=user_pool_id_proxied - )["UserPool"] - # Normalize for comparison (remove dynamic fields) - describe_proxied.pop("LastModifiedDate", None) - describe_proxied.pop("CreationDate", None) - describe_aws.pop("LastModifiedDate", None) - describe_aws.pop("CreationDate", None) - assert describe_proxied == describe_aws - - # Delete the user pool - cognito_client.delete_user_pool(UserPoolId=user_pool_id_proxied) - - def _assert_user_pool_deleted(): - with pytest.raises(ClientError) as aws_exc: - cognito_client_aws.describe_user_pool(UserPoolId=user_pool_id_proxied) - with pytest.raises(ClientError) as proxied_exc: - cognito_client.describe_user_pool(UserPoolId=user_pool_id_proxied) - assert aws_exc.value.response["Error"]["Code"] == "ResourceNotFoundException" - assert ( - proxied_exc.value.response["Error"]["Code"] == "ResourceNotFoundException" - ) - - retry(_assert_user_pool_deleted, retries=5, sleep=5) - - # Verify that the user pool is no longer in the list - user_pools_proxied_final = cognito_client.list_user_pools(MaxResults=10)[ - "UserPools" - ] - user_pools_aws_final = cognito_client_aws.list_user_pools(MaxResults=10)[ - "UserPools" - ] - _compare_user_pool_lists(user_pools_aws_final, user_pools_proxied_final) - - -def test_cognito_idp_user_operations(start_aws_proxy): - # Start proxy for cognito-idp service - config = ProxyConfig(services={"cognito-idp": {"resources": ".*"}}) - start_aws_proxy(config) - - # Create clients - cognito_client = connect_to().cognito_idp - cognito_client_aws = boto3.client("cognito-idp") - - # Create a user pool - user_pool_name = "test-user-pool-users-proxy" - user_pool = cognito_client.create_user_pool(PoolName=user_pool_name) - user_pool_id = user_pool["UserPool"]["Id"] - - try: - # Create a user pool client - user_pool_client = cognito_client.create_user_pool_client( - UserPoolId=user_pool_id, - ClientName="test-client", - ExplicitAuthFlows=["ADMIN_NO_SRP_AUTH", "USER_PASSWORD_AUTH"], - ) - client_id = user_pool_client["UserPoolClient"]["ClientId"] - - # Sign up a user - username = "testuser" - password = "Password123!" - cognito_client.sign_up( - ClientId=client_id, - Username=username, - Password=password, - UserAttributes=[{"Name": "email", "Value": "test@example.com"}], - ) - - # Confirm the user - cognito_client.admin_confirm_sign_up(UserPoolId=user_pool_id, Username=username) - - # Initiate auth - auth_response_proxied = cognito_client.initiate_auth( - ClientId=client_id, - AuthFlow="USER_PASSWORD_AUTH", - AuthParameters={"USERNAME": username, "PASSWORD": password}, - ) - auth_response_aws = cognito_client_aws.initiate_auth( - ClientId=client_id, - AuthFlow="USER_PASSWORD_AUTH", - AuthParameters={"USERNAME": username, "PASSWORD": password}, - ) - assert auth_response_proxied["AuthenticationResult"]["AccessToken"] - assert auth_response_aws["AuthenticationResult"]["AccessToken"] - - # Admin delete user - cognito_client.admin_delete_user(UserPoolId=user_pool_id, Username=username) - - # Verify user is deleted - with pytest.raises(ClientError) as exc_info: - cognito_client.admin_get_user(UserPoolId=user_pool_id, Username=username) - assert exc_info.value.response["Error"]["Code"] == "UserNotFoundException" - - finally: - # Clean up resources - cognito_client.delete_user_pool(UserPoolId=user_pool_id) diff --git a/aws-proxy/tests/proxy/test_dynamodb.py b/aws-proxy/tests/proxy/test_dynamodb.py deleted file mode 100644 index fe615188..00000000 --- a/aws-proxy/tests/proxy/test_dynamodb.py +++ /dev/null @@ -1,89 +0,0 @@ -import boto3 -import pytest -from botocore.exceptions import ClientError -from localstack.aws.connect import connect_to -from localstack.utils.aws.resources import create_dynamodb_table -from localstack.utils.strings import short_uid - -from aws_proxy.shared.models import ProxyConfig - - -class TestDynamoDBRequests: - region_name = "us-east-1" - - @pytest.fixture(scope="class") - def dynamodb_client_aws(self): - return boto3.client("dynamodb", region_name=self.region_name) - - @pytest.fixture - def create_dynamodb_table_aws(self, dynamodb_client_aws): - tables = [] - - def factory(**kwargs): - kwargs["client"] = dynamodb_client_aws - if "table_name" not in kwargs: - kwargs["table_name"] = f"test-table-{short_uid()}" - if "partition_key" not in kwargs: - kwargs["partition_key"] = "id" - - tables.append(kwargs["table_name"]) - - return create_dynamodb_table(**kwargs) - - yield factory - - # cleanup - for table in tables: - try: - dynamodb_client_aws.delete_table(TableName=table) - except Exception as e: - print(f"error cleaning up table {table}: {e}", table, e) - - def test_dynamodb_requests_read_only( - self, start_aws_proxy, create_dynamodb_table_aws, dynamodb_client_aws - ): - # create clients - dynamodb_client = connect_to(region_name=self.region_name).dynamodb - - # start proxy - only forwarding requests for read operations - config = ProxyConfig( - services={"dynamodb": {"resources": ".*", "read_only": True}} - ) - start_aws_proxy(config) - - # create table in AWS - table_name = f"test-table-{short_uid()}" - create_dynamodb_table_aws(table_name=table_name) - tables_aws = dynamodb_client_aws.list_tables()["TableNames"] - assert table_name in tables_aws - - # assert that local call for this table is proxied - tables_local = dynamodb_client.list_tables()["TableNames"] - assert table_name in tables_local - - item = {"id": {"S": "123"}, "value": {"S": "foobar"}} - # put item via AWS client - dynamodb_client_aws.put_item(TableName=table_name, Item=item) - - # get item via AWS client - result = dynamodb_client_aws.get_item( - TableName=table_name, Key={"id": {"S": "123"}} - ) - assert result["Item"] == item - - # get item via local client - result = dynamodb_client.get_item( - TableName=table_name, Key={"id": {"S": "123"}} - ) - assert result["Item"] == item - - # assert that scan operation is working - result = dynamodb_client.scan(TableName=table_name) - assert len(result["Items"]) == 1 - - # assert that write operation is NOT working - it's sent to localstack, which cannot find the table - item3 = {"id": {"S": "789"}, "value": {"S": "foobar3"}} - with pytest.raises(ClientError) as exc: - dynamodb_client.put_item(TableName=table_name, Item=item3) - - assert exc.match("ResourceNotFoundException") diff --git a/aws-proxy/tests/proxy/test_kinesis.py b/aws-proxy/tests/proxy/test_kinesis.py deleted file mode 100644 index bc54dbbf..00000000 --- a/aws-proxy/tests/proxy/test_kinesis.py +++ /dev/null @@ -1,255 +0,0 @@ -# Note/disclosure: This file has been (partially or fully) generated by an AI agent. -import boto3 -import pytest -from botocore.exceptions import ClientError -from localstack.aws.connect import connect_to -from localstack.utils.strings import short_uid -from localstack.utils.sync import retry - -from aws_proxy.shared.models import ProxyConfig - - -def test_kinesis_requests(start_aws_proxy, cleanups): - stream_name_aws = f"test-stream-aws-{short_uid()}" - stream_name_local = f"test-stream-local-{short_uid()}" - - # start proxy - only forwarding requests for stream name matching `test-stream-aws-*` - config = ProxyConfig(services={"kinesis": {"resources": f".*:{stream_name_aws}"}}) - start_aws_proxy(config) - - # create clients - region_name = "us-east-1" - kinesis_client = connect_to(region_name=region_name).kinesis - kinesis_client_aws = boto3.client("kinesis", region_name=region_name) - - # create stream in AWS - kinesis_client_aws.create_stream(StreamName=stream_name_aws, ShardCount=1) - cleanups.append( - lambda: kinesis_client_aws.delete_stream( - StreamName=stream_name_aws, EnforceConsumerDeletion=True - ) - ) - - # wait for stream to become active - def _wait_for_stream_active(): - response = kinesis_client_aws.describe_stream(StreamName=stream_name_aws) - if response["StreamDescription"]["StreamStatus"] != "ACTIVE": - raise AssertionError("Stream not active yet") - - retry(_wait_for_stream_active, retries=30, sleep=2) - - # assert that local call for this stream is proxied - stream_local = kinesis_client.describe_stream(StreamName=stream_name_aws) - stream_aws = kinesis_client_aws.describe_stream(StreamName=stream_name_aws) - assert ( - stream_local["StreamDescription"]["StreamName"] - == stream_aws["StreamDescription"]["StreamName"] - ) - assert ( - stream_local["StreamDescription"]["StreamARN"] - == stream_aws["StreamDescription"]["StreamARN"] - ) - - # verify that requesting a non-existent stream with LocalStack client - # does not create it in AWS (negative test) - with pytest.raises(ClientError) as ctx: - kinesis_client_aws.describe_stream(StreamName=stream_name_local) - assert ctx.value.response["Error"]["Code"] == "ResourceNotFoundException" - - # put record to AWS stream, get it back locally - kinesis_client_aws.put_record( - StreamName=stream_name_aws, Data=b"test data 1", PartitionKey="partition-1" - ) - - # get shard iterator - shards = kinesis_client.describe_stream(StreamName=stream_name_aws)[ - "StreamDescription" - ]["Shards"] - shard_id = shards[0]["ShardId"] - shard_iterator_response = kinesis_client.get_shard_iterator( - StreamName=stream_name_aws, - ShardId=shard_id, - ShardIteratorType="TRIM_HORIZON", - ) - shard_iterator = shard_iterator_response["ShardIterator"] - - # get records - records_response = kinesis_client.get_records(ShardIterator=shard_iterator) - records = records_response["Records"] - assert len(records) == 1 - assert records[0]["Data"] == b"test data 1" - assert records[0]["PartitionKey"] == "partition-1" - - # put record locally, get it back with AWS client - kinesis_client.put_record( - StreamName=stream_name_aws, Data=b"test data 2", PartitionKey="partition-2" - ) - - # get shard iterator from AWS - shard_iterator_response_aws = kinesis_client_aws.get_shard_iterator( - StreamName=stream_name_aws, - ShardId=shard_id, - ShardIteratorType="TRIM_HORIZON", - ) - shard_iterator_aws = shard_iterator_response_aws["ShardIterator"] - - # get all records from AWS - records_response_aws = kinesis_client_aws.get_records( - ShardIterator=shard_iterator_aws - ) - records_aws = records_response_aws["Records"] - assert len(records_aws) == 2 # both records should be present - assert records_aws[0]["Data"] == b"test data 1" - assert records_aws[1]["Data"] == b"test data 2" - - # test list_streams - should include proxied stream - streams_local = kinesis_client.list_streams()["StreamNames"] - assert stream_name_aws in streams_local - - streams_aws = kinesis_client_aws.list_streams()["StreamNames"] - assert stream_name_aws in streams_aws - - -def test_kinesis_readonly_operations(start_aws_proxy, cleanups): - stream_name = f"test-readonly-stream-{short_uid()}" - - # start proxy - forwarding requests for Kinesis in read-only mode - config = ProxyConfig( - services={"kinesis": {"resources": [f".*:{stream_name}"], "read_only": True}} - ) - start_aws_proxy(config) - - # create clients - kinesis_client = connect_to().kinesis - kinesis_client_aws = boto3.client("kinesis") - - # create stream in AWS (this should succeed as it's direct AWS client) - kinesis_client_aws.create_stream(StreamName=stream_name, ShardCount=1) - cleanups.append( - lambda: kinesis_client_aws.delete_stream( - StreamName=stream_name, EnforceConsumerDeletion=True - ) - ) - - # wait for stream to become active - def _wait_for_stream_active(): - response = kinesis_client_aws.describe_stream(StreamName=stream_name) - if response["StreamDescription"]["StreamStatus"] != "ACTIVE": - raise AssertionError("Stream not active yet") - - retry(_wait_for_stream_active, retries=30, sleep=2) - - # assert that local call for describe_stream is proxied and results are consistent - stream_local = kinesis_client.describe_stream(StreamName=stream_name) - stream_aws = kinesis_client_aws.describe_stream(StreamName=stream_name) - assert ( - stream_local["StreamDescription"]["StreamName"] - == stream_aws["StreamDescription"]["StreamName"] - ) - assert ( - stream_local["StreamDescription"]["StreamARN"] - == stream_aws["StreamDescription"]["StreamARN"] - ) - - # assert that local call for list_streams is proxied - streams_local = kinesis_client.list_streams()["StreamNames"] - streams_aws = kinesis_client_aws.list_streams()["StreamNames"] - assert stream_name in streams_local - assert stream_name in streams_aws - - # Put record to AWS stream using direct AWS client - # Use retry as stream may need a moment after becoming ACTIVE to accept writes - def _put_record(): - kinesis_client_aws.put_record( - StreamName=stream_name, Data=b"test data aws", PartitionKey="partition-1" - ) - - retry(_put_record, retries=5, sleep=2) - - # Get shard iterator and verify data can be read through proxy - shards = kinesis_client.describe_stream(StreamName=stream_name)[ - "StreamDescription" - ]["Shards"] - shard_id = shards[0]["ShardId"] - shard_iterator_response = kinesis_client.get_shard_iterator( - StreamName=stream_name, ShardId=shard_id, ShardIteratorType="TRIM_HORIZON" - ) - shard_iterator = shard_iterator_response["ShardIterator"] - - # Get records - this should work in read-only mode - records_response = kinesis_client.get_records(ShardIterator=shard_iterator) - records = records_response["Records"] - assert len(records) == 1 - assert records[0]["Data"] == b"test data aws" - - # Attempt to put record using the proxied client in read-only mode - # This should fail because LocalStack doesn't have the stream (it's in AWS) - with pytest.raises(ClientError) as excinfo: - kinesis_client.put_record( - StreamName=stream_name, Data=b"should not reach AWS", PartitionKey="p1" - ) - assert excinfo.value.response["Error"]["Code"] == "ResourceNotFoundException" - - -def test_kinesis_resource_name_matching(start_aws_proxy, cleanups): - stream_name_match = f"proxy-stream-{short_uid()}" - stream_name_nomatch = f"local-stream-{short_uid()}" - - # start proxy - only forwarding requests for streams starting with "proxy-" - config = ProxyConfig(services={"kinesis": {"resources": ".*:proxy-.*"}}) - start_aws_proxy(config) - - # create clients - kinesis_client = connect_to().kinesis - kinesis_client_aws = boto3.client("kinesis") - - # create stream in AWS that matches the pattern - kinesis_client_aws.create_stream(StreamName=stream_name_match, ShardCount=1) - cleanups.append( - lambda: kinesis_client_aws.delete_stream( - StreamName=stream_name_match, EnforceConsumerDeletion=True - ) - ) - - # wait for AWS stream to become active - def _wait_for_aws_stream_active(): - response = kinesis_client_aws.describe_stream(StreamName=stream_name_match) - if response["StreamDescription"]["StreamStatus"] != "ACTIVE": - raise AssertionError("AWS stream not active yet") - - retry(_wait_for_aws_stream_active, retries=30, sleep=2) - - # assert that the matching stream is proxied - stream_local = kinesis_client.describe_stream(StreamName=stream_name_match) - stream_aws = kinesis_client_aws.describe_stream(StreamName=stream_name_match) - assert ( - stream_local["StreamDescription"]["StreamARN"] - == stream_aws["StreamDescription"]["StreamARN"] - ) - - # verify that a stream name that doesn't match the pattern and doesn't exist - # is not found in AWS - with pytest.raises(ClientError) as ctx: - kinesis_client_aws.describe_stream(StreamName=stream_name_nomatch) - assert ctx.value.response["Error"]["Code"] == "ResourceNotFoundException" - - # Put and get records through the proxied stream - kinesis_client.put_record( - StreamName=stream_name_match, Data=b"test data", PartitionKey="partition-1" - ) - - # Get shard iterator - shards = kinesis_client_aws.describe_stream(StreamName=stream_name_match)[ - "StreamDescription" - ]["Shards"] - shard_id = shards[0]["ShardId"] - shard_iterator_response = kinesis_client_aws.get_shard_iterator( - StreamName=stream_name_match, ShardId=shard_id, ShardIteratorType="TRIM_HORIZON" - ) - shard_iterator = shard_iterator_response["ShardIterator"] - - # Get records from AWS - should see the record we put through LocalStack - records_response = kinesis_client_aws.get_records(ShardIterator=shard_iterator) - records = records_response["Records"] - assert len(records) == 1 - assert records[0]["Data"] == b"test data" diff --git a/aws-proxy/tests/proxy/test_kms.py b/aws-proxy/tests/proxy/test_kms.py deleted file mode 100644 index 1833574c..00000000 --- a/aws-proxy/tests/proxy/test_kms.py +++ /dev/null @@ -1,246 +0,0 @@ -# Note/disclosure: This file has been (partially or fully) generated by an AI agent. -import boto3 -import pytest -from botocore.exceptions import ClientError -from localstack.aws.connect import connect_to -from localstack.utils.strings import short_uid -from localstack.utils.sync import retry - - -def test_kms_key_operations(start_aws_proxy, cleanups): - """Test basic KMS key operations with proxy.""" - key_description = f"test-key-{short_uid()}" - - # start proxy - forwarding requests for KMS keys with specific alias pattern - config = { - "services": { - "kms": {"resources": [".*:key/.*"]}, - } - } - start_aws_proxy(config) - - # create clients - kms_client = connect_to().kms - kms_client_aws = boto3.client("kms") - - # create key in AWS - create_response = kms_client_aws.create_key(Description=key_description) - key_id_aws = create_response["KeyMetadata"]["KeyId"] - key_arn_aws = create_response["KeyMetadata"]["Arn"] - cleanups.append( - lambda: kms_client_aws.schedule_key_deletion( - KeyId=key_id_aws, PendingWindowInDays=7 - ) - ) - - # assert that local call for this key is proxied - key_aws = kms_client_aws.describe_key(KeyId=key_id_aws) - key_local = kms_client.describe_key(KeyId=key_id_aws) - assert key_local["KeyMetadata"]["KeyId"] == key_aws["KeyMetadata"]["KeyId"] - assert key_local["KeyMetadata"]["Arn"] == key_arn_aws - - # test encryption with AWS client - plaintext = b"test message" - encrypt_response_aws = kms_client_aws.encrypt(KeyId=key_id_aws, Plaintext=plaintext) - ciphertext = encrypt_response_aws["CiphertextBlob"] - - # decrypt with local client (proxied to AWS) - decrypt_response_local = kms_client.decrypt(CiphertextBlob=ciphertext) - assert decrypt_response_local["Plaintext"] == plaintext - assert decrypt_response_local["KeyId"] == key_arn_aws - - # encrypt with local client (proxied to AWS) - plaintext2 = b"another test message" - encrypt_response_local = kms_client.encrypt(KeyId=key_id_aws, Plaintext=plaintext2) - ciphertext2 = encrypt_response_local["CiphertextBlob"] - - # decrypt with AWS client - decrypt_response_aws = kms_client_aws.decrypt(CiphertextBlob=ciphertext2) - assert decrypt_response_aws["Plaintext"] == plaintext2 - - -def test_kms_key_alias_operations(start_aws_proxy, cleanups): - """Test KMS key alias operations with proxy.""" - alias_name = f"alias/test-alias-{short_uid()}" - key_description = f"test-key-with-alias-{short_uid()}" - - # start proxy - forwarding requests for KMS - config = { - "services": { - "kms": {"resources": [".*:key/.*", f".*:{alias_name}"]}, - } - } - start_aws_proxy(config) - - # create clients - kms_client = connect_to().kms - kms_client_aws = boto3.client("kms") - - # create key in AWS - create_response = kms_client_aws.create_key(Description=key_description) - key_id_aws = create_response["KeyMetadata"]["KeyId"] - cleanups.append( - lambda: kms_client_aws.schedule_key_deletion( - KeyId=key_id_aws, PendingWindowInDays=7 - ) - ) - - # create alias in AWS - kms_client_aws.create_alias(AliasName=alias_name, TargetKeyId=key_id_aws) - cleanups.append(lambda: kms_client_aws.delete_alias(AliasName=alias_name)) - - # assert that local call for alias operations is proxied - # use retry to handle AWS eventual consistency - def check_aliases(): - aliases_aws = kms_client_aws.list_aliases(KeyId=key_id_aws)["Aliases"] - aliases_local = kms_client.list_aliases(KeyId=key_id_aws)["Aliases"] - - # filter for our specific alias - alias_aws = [a for a in aliases_aws if a["AliasName"] == alias_name][0] - alias_local = [a for a in aliases_local if a["AliasName"] == alias_name][0] - - assert alias_local["AliasName"] == alias_aws["AliasName"] - assert alias_local["TargetKeyId"] == alias_aws["TargetKeyId"] - - retry(check_aliases, retries=5, sleep=1) - - # test encryption with alias via local client - plaintext = b"test with alias" - encrypt_response_local = kms_client.encrypt(KeyId=alias_name, Plaintext=plaintext) - ciphertext = encrypt_response_local["CiphertextBlob"] - - # decrypt with AWS client - decrypt_response_aws = kms_client_aws.decrypt(CiphertextBlob=ciphertext) - assert decrypt_response_aws["Plaintext"] == plaintext - - -def test_kms_readonly_operations(start_aws_proxy, cleanups): - """Test KMS operations in read-only proxy mode.""" - key_description = f"test-readonly-key-{short_uid()}" - - # start proxy - forwarding requests for KMS in read-only mode - config = { - "services": { - "kms": {"resources": [".*:key/.*"], "read_only": True}, - } - } - start_aws_proxy(config) - - # create clients - kms_client = connect_to().kms - kms_client_aws = boto3.client("kms") - - # create key in AWS (this should succeed as it's direct AWS client) - create_response = kms_client_aws.create_key(Description=key_description) - key_id_aws = create_response["KeyMetadata"]["KeyId"] - cleanups.append( - lambda: kms_client_aws.schedule_key_deletion( - KeyId=key_id_aws, PendingWindowInDays=7 - ) - ) - - # assert that local call for describe_key is proxied and results are consistent - key_aws = kms_client_aws.describe_key(KeyId=key_id_aws) - key_local = kms_client.describe_key(KeyId=key_id_aws) - assert key_local["KeyMetadata"]["KeyId"] == key_aws["KeyMetadata"]["KeyId"] - - # assert that local call for list_keys is proxied - keys_local = kms_client.list_keys()["Keys"] - keys_aws = kms_client_aws.list_keys()["Keys"] - - # filter for our specific key - key_local_filtered = [k for k in keys_local if k["KeyId"] == key_id_aws] - key_aws_filtered = [k for k in keys_aws if k["KeyId"] == key_id_aws] - assert key_local_filtered == key_aws_filtered - - # Negative test: attempt write operations with proxied client - # Create a new key using the proxied client (should succeed in LocalStack) - new_key_description = f"no-proxy-key-{short_uid()}" - new_key_local = kms_client.create_key(Description=new_key_description) - new_key_id_local = new_key_local["KeyMetadata"]["KeyId"] - cleanups.append( - lambda: kms_client.schedule_key_deletion( - KeyId=new_key_id_local, PendingWindowInDays=7 - ) - ) - - # Verify that this new key does NOT exist in real AWS - keys_aws_after_create = kms_client_aws.list_keys()["Keys"] - assert not any(k for k in keys_aws_after_create if k["KeyId"] == new_key_id_local) - - # Attempt to encrypt data with the AWS key using proxied client (should fail) - plaintext = b"this should not work" - with pytest.raises(ClientError) as excinfo: - kms_client.encrypt(KeyId=key_id_aws, Plaintext=plaintext) - # In read-only mode, the key exists in AWS but LocalStack doesn't have it locally - # so encrypt operation should fail - assert excinfo.value.response["Error"]["Code"] in [ - "NotFoundException", - "InvalidKeyId.NotFound", - ] - - -def test_kms_selective_resource_matching(start_aws_proxy, cleanups): - """Test that proxy forwards requests for specific KMS keys matching ARN pattern.""" - key_description_1 = f"test-proxied-key-1-{short_uid()}" - key_description_2 = f"test-proxied-key-2-{short_uid()}" - - # create clients - kms_client_aws = boto3.client("kms") - - # create two keys in AWS - create_response_1 = kms_client_aws.create_key(Description=key_description_1) - key_id_1 = create_response_1["KeyMetadata"]["KeyId"] - key_arn_1 = create_response_1["KeyMetadata"]["Arn"] - cleanups.append( - lambda: kms_client_aws.schedule_key_deletion( - KeyId=key_id_1, PendingWindowInDays=7 - ) - ) - - create_response_2 = kms_client_aws.create_key(Description=key_description_2) - key_id_2 = create_response_2["KeyMetadata"]["KeyId"] - key_arn_2 = create_response_2["KeyMetadata"]["Arn"] - cleanups.append( - lambda: kms_client_aws.schedule_key_deletion( - KeyId=key_id_2, PendingWindowInDays=7 - ) - ) - - # start proxy - forwarding requests for both keys using wildcard pattern - config = { - "services": { - "kms": {"resources": [".*:key/.*"]}, - } - } - start_aws_proxy(config) - - # create LocalStack client after proxy is started - kms_client = connect_to().kms - - # verify that both keys are accessible via local client (proxied) - key_1_local = kms_client.describe_key(KeyId=key_id_1) - assert key_1_local["KeyMetadata"]["KeyId"] == key_id_1 - assert key_1_local["KeyMetadata"]["Arn"] == key_arn_1 - - key_2_local = kms_client.describe_key(KeyId=key_id_2) - assert key_2_local["KeyMetadata"]["KeyId"] == key_id_2 - assert key_2_local["KeyMetadata"]["Arn"] == key_arn_2 - - # verify we can encrypt with both proxied keys - plaintext = b"test with first key" - encrypt_response_1 = kms_client.encrypt(KeyId=key_id_1, Plaintext=plaintext) - ciphertext_1 = encrypt_response_1["CiphertextBlob"] - - # decrypt with AWS client to confirm it went through proxy - decrypt_response_1 = kms_client_aws.decrypt(CiphertextBlob=ciphertext_1) - assert decrypt_response_1["Plaintext"] == plaintext - - # encrypt with second key - plaintext_2 = b"test with second key" - encrypt_response_2 = kms_client.encrypt(KeyId=key_id_2, Plaintext=plaintext_2) - ciphertext_2 = encrypt_response_2["CiphertextBlob"] - - # decrypt with AWS client - decrypt_response_2 = kms_client_aws.decrypt(CiphertextBlob=ciphertext_2) - assert decrypt_response_2["Plaintext"] == plaintext_2 diff --git a/aws-proxy/tests/proxy/test_lambda.py b/aws-proxy/tests/proxy/test_lambda.py deleted file mode 100644 index c45dad9b..00000000 --- a/aws-proxy/tests/proxy/test_lambda.py +++ /dev/null @@ -1,324 +0,0 @@ -# Note: This file has been (partially or fully) generated by an AI agent. -import io -import json -import logging -import zipfile - -import boto3 -import pytest -from botocore.exceptions import ClientError -from localstack.aws.connect import connect_to -from localstack.utils.strings import short_uid -from localstack.utils.sync import retry - -from aws_proxy.shared.models import ProxyConfig - -LOG = logging.getLogger(__name__) - -LAMBDA_RUNTIME = "python3.12" -LAMBDA_HANDLER = "index.handler" -LAMBDA_HANDLER_CODE = """ -import json -def handler(event, context): - return {"statusCode": 200, "body": json.dumps({"message": "hello", "input": event})} -""" - - -def _create_lambda_zip() -> bytes: - """Create an in-memory ZIP deployment package with a simple handler.""" - buf = io.BytesIO() - with zipfile.ZipFile(buf, "w", zipfile.ZIP_DEFLATED) as zf: - zf.writestr("index.py", LAMBDA_HANDLER_CODE) - return buf.getvalue() - - -@pytest.fixture(scope="module") -def lambda_execution_role(): - """Create a basic IAM role for Lambda execution in real AWS, shared across tests in this module.""" - iam_client = boto3.client("iam") - role_name = f"test-lambda-proxy-role-{short_uid()}" - trust_policy = json.dumps( - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": {"Service": "lambda.amazonaws.com"}, - "Action": "sts:AssumeRole", - } - ], - } - ) - role = iam_client.create_role( - RoleName=role_name, - AssumeRolePolicyDocument=trust_policy, - Description="Test role for Lambda proxy tests", - ) - role_arn = role["Role"]["Arn"] - - # Wait for the role to be usable by Lambda (IAM eventual consistency) - def _wait_for_role(): - iam_client.get_role(RoleName=role_name) - - retry(_wait_for_role, retries=10, sleep=2) - - yield role_arn - - # cleanup - try: - iam_client.delete_role(RoleName=role_name) - except Exception as e: - LOG.warning("Failed to clean up IAM role %s: %s", role_name, e) - - -def _create_lambda_function( - lambda_client_aws, function_name, role_arn, cleanups, env_vars=None -): - """Helper to create a Lambda function in real AWS and register cleanup.""" - kwargs = { - "FunctionName": function_name, - "Runtime": LAMBDA_RUNTIME, - "Role": role_arn, - "Handler": LAMBDA_HANDLER, - "Code": {"ZipFile": _create_lambda_zip()}, - "Timeout": 30, - } - if env_vars: - kwargs["Environment"] = {"Variables": env_vars} - - # Retry create_function to handle IAM role propagation delay - def _create(): - lambda_client_aws.create_function(**kwargs) - - retry(_create, retries=15, sleep=5) - cleanups.append( - lambda: lambda_client_aws.delete_function(FunctionName=function_name) - ) - - # Wait for function to become Active - def _wait_active(): - config = lambda_client_aws.get_function_configuration( - FunctionName=function_name - ) - if config["State"] != "Active": - raise AssertionError( - f"Function {function_name} not active yet: {config['State']}" - ) - - retry(_wait_active, retries=30, sleep=2) - - -def test_lambda_requests(start_aws_proxy, cleanups, lambda_execution_role): - """Test basic Lambda proxy: create in AWS, describe/invoke via LocalStack proxy.""" - function_name_aws = f"test-fn-aws-{short_uid()}" - function_name_local = f"test-fn-local-{short_uid()}" - - # start proxy - only forwarding requests for function name matching the AWS function - config = ProxyConfig( - services={"lambda": {"resources": f".*:function:{function_name_aws}"}} - ) - start_aws_proxy(config) - - # create clients - region_name = "us-east-1" - lambda_client = connect_to(region_name=region_name).lambda_ - lambda_client_aws = boto3.client("lambda", region_name=region_name) - - # create function in real AWS - _create_lambda_function( - lambda_client_aws, function_name_aws, lambda_execution_role, cleanups - ) - - # assert that local call for GetFunction is proxied and returns AWS data - fn_local = lambda_client.get_function(FunctionName=function_name_aws) - fn_aws = lambda_client_aws.get_function(FunctionName=function_name_aws) - assert fn_local["Configuration"]["FunctionName"] == function_name_aws - assert ( - fn_local["Configuration"]["FunctionArn"] - == fn_aws["Configuration"]["FunctionArn"] - ) - assert fn_local["Configuration"]["Runtime"] == LAMBDA_RUNTIME - - # assert that GetFunctionConfiguration is also proxied - config_local = lambda_client.get_function_configuration( - FunctionName=function_name_aws - ) - config_aws = lambda_client_aws.get_function_configuration( - FunctionName=function_name_aws - ) - assert config_local["FunctionArn"] == config_aws["FunctionArn"] - assert config_local["Handler"] == LAMBDA_HANDLER - - # invoke function through proxy and verify it executes on real AWS - response_local = lambda_client.invoke( - FunctionName=function_name_aws, - Payload=json.dumps({"key": "value"}), - ) - payload_local = json.loads(response_local["Payload"].read()) - assert payload_local["statusCode"] == 200 - body = json.loads(payload_local["body"]) - assert body["message"] == "hello" - assert body["input"] == {"key": "value"} - - # invoke via AWS client directly and compare - response_aws = lambda_client_aws.invoke( - FunctionName=function_name_aws, - Payload=json.dumps({"key": "value"}), - ) - payload_aws = json.loads(response_aws["Payload"].read()) - assert payload_aws["statusCode"] == 200 - - # negative test: a non-matching function should NOT exist in AWS - with pytest.raises(ClientError) as ctx: - lambda_client_aws.get_function(FunctionName=function_name_local) - assert ctx.value.response["Error"]["Code"] == "ResourceNotFoundException" - - -def test_lambda_read_only(start_aws_proxy, cleanups, lambda_execution_role): - """Test Lambda proxy in read-only mode: reads proxied, writes/invokes blocked.""" - function_name = f"test-fn-ro-{short_uid()}" - - # start proxy in read-only mode with wildcard resources - config = ProxyConfig(services={"lambda": {"resources": ".*", "read_only": True}}) - start_aws_proxy(config) - - # create clients - region_name = "us-east-1" - lambda_client = connect_to(region_name=region_name).lambda_ - lambda_client_aws = boto3.client("lambda", region_name=region_name) - - # create function in real AWS (direct, not through proxy) - _create_lambda_function( - lambda_client_aws, function_name, lambda_execution_role, cleanups - ) - - # read operations should be proxied - fn_local = lambda_client.get_function(FunctionName=function_name) - fn_aws = lambda_client_aws.get_function(FunctionName=function_name) - assert ( - fn_local["Configuration"]["FunctionArn"] - == fn_aws["Configuration"]["FunctionArn"] - ) - - config_local = lambda_client.get_function_configuration(FunctionName=function_name) - assert config_local["FunctionArn"] == fn_aws["Configuration"]["FunctionArn"] - - # ListFunctions should also be proxied (read operation) - def _list_contains_function(): - functions = lambda_client.list_functions()["Functions"] - func_names = [f["FunctionName"] for f in functions] - assert function_name in func_names - - retry(_list_contains_function, retries=5, sleep=2) - - # Invoke has side-effects and is NOT a read operation - should be blocked in read_only mode - with pytest.raises(ClientError) as ctx: - lambda_client.invoke( - FunctionName=function_name, - Payload=json.dumps({"key": "value"}), - ) - assert ctx.value.response["Error"]["Code"] == "ResourceNotFoundException" - - # UpdateFunctionConfiguration is a write operation - should be blocked - with pytest.raises(ClientError) as ctx: - lambda_client.update_function_configuration( - FunctionName=function_name, - Description="updated via proxy - should not work", - ) - assert ctx.value.response["Error"]["Code"] == "ResourceNotFoundException" - - -def test_lambda_invoke_mode(start_aws_proxy, cleanups, lambda_execution_role): - """Test Lambda proxy with read_only + execute mode: reads and invocations proxied, writes blocked.""" - function_name = f"test-fn-inv-{short_uid()}" - - # start proxy with read_only + invoke flags - config = ProxyConfig( - services={"lambda": {"resources": ".*", "read_only": True, "execute": True}} - ) - start_aws_proxy(config) - - # create clients - region_name = "us-east-1" - lambda_client = connect_to(region_name=region_name).lambda_ - lambda_client_aws = boto3.client("lambda", region_name=region_name) - - # create function in real AWS (direct, not through proxy) - _create_lambda_function( - lambda_client_aws, function_name, lambda_execution_role, cleanups - ) - - # read operations should be proxied - fn_local = lambda_client.get_function(FunctionName=function_name) - fn_aws = lambda_client_aws.get_function(FunctionName=function_name) - assert ( - fn_local["Configuration"]["FunctionArn"] - == fn_aws["Configuration"]["FunctionArn"] - ) - - # Invoke should be proxied when execute: True is set alongside read_only - response = lambda_client.invoke( - FunctionName=function_name, - Payload=json.dumps({"key": "value"}), - ) - payload = json.loads(response["Payload"].read()) - assert payload["statusCode"] == 200 - body = json.loads(payload["body"]) - assert body["message"] == "hello" - - # UpdateFunctionConfiguration is a write operation - should still be blocked - with pytest.raises(ClientError) as ctx: - lambda_client.update_function_configuration( - FunctionName=function_name, - Description="updated via proxy - should not work", - ) - assert ctx.value.response["Error"]["Code"] == "ResourceNotFoundException" - - -def test_lambda_resource_name_matching( - start_aws_proxy, cleanups, lambda_execution_role -): - """Test that only functions matching the resource pattern are proxied.""" - fn_match = f"proxy-fn-{short_uid()}" - fn_nomatch = f"local-fn-{short_uid()}" - - # start proxy - only forwarding requests for functions starting with "proxy-fn-" - config = ProxyConfig(services={"lambda": {"resources": ".*:function:proxy-fn-.*"}}) - start_aws_proxy(config) - - # create clients - region_name = "us-east-1" - lambda_client = connect_to(region_name=region_name).lambda_ - lambda_client_aws = boto3.client("lambda", region_name=region_name) - - # create matching function in real AWS - _create_lambda_function( - lambda_client_aws, fn_match, lambda_execution_role, cleanups - ) - - # matching function should be accessible through proxy - fn_local = lambda_client.get_function(FunctionName=fn_match) - fn_aws = lambda_client_aws.get_function(FunctionName=fn_match) - assert ( - fn_local["Configuration"]["FunctionArn"] - == fn_aws["Configuration"]["FunctionArn"] - ) - - # invoke matching function through proxy - response = lambda_client.invoke( - FunctionName=fn_match, - Payload=json.dumps({"test": True}), - ) - payload = json.loads(response["Payload"].read()) - assert payload["statusCode"] == 200 - - # non-matching function should NOT exist in AWS (negative test) - with pytest.raises(ClientError) as ctx: - lambda_client_aws.get_function(FunctionName=fn_nomatch) - assert ctx.value.response["Error"]["Code"] == "ResourceNotFoundException" - - # GetFunction for non-matching name through local client should NOT be proxied - # (goes to LocalStack which doesn't have it either) - with pytest.raises(ClientError) as ctx: - lambda_client.get_function(FunctionName=fn_nomatch) - assert ctx.value.response["Error"]["Code"] == "ResourceNotFoundException" diff --git a/aws-proxy/tests/proxy/test_s3.py b/aws-proxy/tests/proxy/test_s3.py deleted file mode 100644 index 0b04e2d5..00000000 --- a/aws-proxy/tests/proxy/test_s3.py +++ /dev/null @@ -1,171 +0,0 @@ -import gzip -import re -from urllib.parse import urlparse - -import boto3 -import pytest -from botocore.client import Config -from botocore.exceptions import ClientError -from localstack.aws.connect import connect_to -from localstack.utils.sync import retry - -from aws_proxy.shared.models import ProxyConfig - - -def _compare_list_buckets_results( - buckets_aws: list, buckets_proxied: list, assert_not_empty=False -): - for bucket in buckets_aws + buckets_proxied: - # TODO: tmp fix - seems like this attribute is missing for certain boto3 versions. To be investigated! - bucket.pop("BucketArn", None) - if assert_not_empty: - assert buckets_aws - assert buckets_proxied == buckets_aws - - -@pytest.mark.parametrize( - "metadata_gzip", - [ - # True, TODO re-enable once the logic is fixed - False - ], -) -@pytest.mark.parametrize("target_endpoint", ["local_domain", "aws_domain", "default"]) -def test_s3_requests(start_aws_proxy, s3_create_bucket, metadata_gzip, target_endpoint): - # start proxy - config = ProxyConfig(services={"s3": {"resources": ".*"}}) - start_aws_proxy(config) - - # create clients - if target_endpoint == "default": - s3_client = connect_to().s3 - else: - s3_client = connect_to( - endpoint_url="http://s3.localhost.localstack.cloud:4566", - config=Config(s3={"addressing_style": "virtual"}), - ).s3 - - if target_endpoint == "aws_domain": - - def _add_header(request, **kwargs): - # instrument boto3 client to add custom `Host` header, mimicking a `*.s3.amazonaws.com` request - url = urlparse(request.url) - match = re.match(r"(.+)\.s3\.localhost\.localstack\.cloud", url.netloc) - if match: - request.headers.add_header( - "host", f"{match.group(1)}.s3.us-east-1.amazonaws.com" - ) - - s3_client.meta.events.register_first("before-sign.*.*", _add_header) - - # define S3 client pointing to real AWS - s3_client_aws = boto3.client("s3") - - # list buckets to assert that proxy is up and running - buckets_proxied = s3_client.list_buckets()["Buckets"] - buckets_aws = s3_client_aws.list_buckets()["Buckets"] - _compare_list_buckets_results(buckets_aws, buckets_proxied) - - # create bucket - bucket = s3_create_bucket() - buckets_proxied = s3_client.list_buckets()["Buckets"] - buckets_aws = s3_client_aws.list_buckets()["Buckets"] - _compare_list_buckets_results(buckets_aws, buckets_proxied, assert_not_empty=True) - - # put object - key = "test-key-with-urlencoded-chars-:+" - body = b"test 123" - kwargs = {} - if metadata_gzip: - kwargs = {"ContentEncoding": "gzip", "ContentType": "text/plain"} - body = gzip.compress(body) - s3_client.put_object(Bucket=bucket, Key=key, Body=body, **kwargs) - - # get object - result = s3_client.get_object(Bucket=bucket, Key=key) - result_body_proxied = result["Body"].read() - result = s3_client_aws.get_object(Bucket=bucket, Key=key) - result_body_aws = result["Body"].read() - assert result_body_proxied == result_body_aws - - for kwargs in [{}, {"Delimiter": "/"}]: - # list objects - result_aws = s3_client_aws.list_objects(Bucket=bucket, **kwargs) - result_proxied = s3_client.list_objects(Bucket=bucket, **kwargs) - # TODO: for some reason, the proxied result may contain 'DisplayName', whereas result_aws does not - for res in result_proxied["Contents"] + result_aws["Contents"]: - res.get("Owner", {}).pop("DisplayName", None) - assert result_proxied["Contents"] == result_aws["Contents"] - - # list objects v2 - result_aws = s3_client_aws.list_objects_v2(Bucket=bucket, **kwargs) - result_proxied = s3_client.list_objects_v2(Bucket=bucket, **kwargs) - # TODO: for some reason, the proxied result may contain 'Owner', whereas result_aws does not - for res in result_proxied["Contents"]: - res.pop("Owner", None) - assert result_proxied["Contents"] == result_aws["Contents"] - - # delete object - s3_client.delete_object(Bucket=bucket, Key=key) - with pytest.raises(ClientError) as aws_exc: - s3_client_aws.get_object(Bucket=bucket, Key=key) - with pytest.raises(ClientError) as exc: - s3_client.get_object(Bucket=bucket, Key=key) - assert str(exc.value) == str(aws_exc.value) - - # delete bucket - s3_client_aws.delete_bucket(Bucket=bucket) - - def _assert_deleted(): - with pytest.raises(ClientError) as aws_exc: - s3_client_aws.head_bucket(Bucket=bucket) - assert aws_exc.value - # TODO: seems to be broken/flaky - investigate! - # with pytest.raises(ClientError) as exc: - # s3_client.head_bucket(Bucket=bucket) - # assert str(exc.value) == str(aws_exc.value) - - # run asynchronously, as apparently this can take some time - retry(_assert_deleted, retries=5, sleep=5) - - -def test_s3_list_objects_in_different_folders(start_aws_proxy, s3_create_bucket): - # start proxy - config = ProxyConfig(services={"s3": {"resources": ".*"}}) - start_aws_proxy(config) - - # create clients - s3_client = connect_to().s3 - s3_client_aws = boto3.client("s3") - - # create bucket - bucket = s3_create_bucket() - buckets_proxied = s3_client.list_buckets()["Buckets"] - buckets_aws = s3_client_aws.list_buckets()["Buckets"] - _compare_list_buckets_results(buckets_aws, buckets_proxied, assert_not_empty=True) - - # create a couple of objects under different paths/folders - s3_client.put_object(Bucket=bucket, Key="test/foo/bar", Body=b"test") - s3_client.put_object(Bucket=bucket, Key="test/foo/baz", Body=b"test") - s3_client.put_object(Bucket=bucket, Key="test/foobar", Body=b"test") - - # list objects for prefix test/ - objects = s3_client_aws.list_objects_v2(Bucket=bucket, Prefix="test/") - keys_aws = [obj["Key"] for obj in objects["Contents"]] - objects = s3_client.list_objects_v2(Bucket=bucket, Prefix="test/") - keys_proxied = [obj["Key"] for obj in objects["Contents"]] - assert set(keys_proxied) == set(keys_aws) - - # list objects for prefix test/foo/ - objects = s3_client_aws.list_objects_v2(Bucket=bucket, Prefix="test/foo/") - keys_aws = [obj["Key"] for obj in objects["Contents"]] - objects = s3_client.list_objects_v2(Bucket=bucket, Prefix="test/foo/") - keys_proxied = [obj["Key"] for obj in objects["Contents"]] - assert set(keys_proxied) == set(keys_aws) - - # list objects for prefix test/foo (without trailing slash) - objects = s3_client_aws.list_objects_v2(Bucket=bucket, Prefix="test/foo") - keys_aws = [obj["Key"] for obj in objects["Contents"]] - objects = s3_client.list_objects_v2(Bucket=bucket, Prefix="test/foo") - keys_proxied = [obj["Key"] for obj in objects["Contents"]] - assert set(keys_proxied) == set(keys_aws) diff --git a/aws-proxy/tests/proxy/test_secrets_manager.py b/aws-proxy/tests/proxy/test_secrets_manager.py deleted file mode 100644 index 8a3c8e3a..00000000 --- a/aws-proxy/tests/proxy/test_secrets_manager.py +++ /dev/null @@ -1,33 +0,0 @@ -import boto3 -from localstack.aws.connect import connect_to - -from aws_proxy.shared.models import ProxyConfig -from localstack.utils.strings import short_uid - - -def test_proxy_create_secret(start_aws_proxy, cleanups): - # start proxy - config = ProxyConfig(services={"secretsmanager": {"resources": ".*"}}) - start_aws_proxy(config) - - # create clients - sm_client = connect_to().secretsmanager - sm_client_aws = boto3.client("secretsmanager") - - # list buckets to assert that proxy is up and running - secrets_proxied = sm_client.list_secrets()["SecretList"] - secrets_aws = sm_client_aws.list_secrets()["SecretList"] - assert secrets_proxied == secrets_aws - - # create secret in AWS - secret_name = f"s_{short_uid()}" - result = sm_client_aws.create_secret(Name=secret_name, SecretString="test") - secret_id = result["ARN"] - cleanups.append(lambda: sm_client_aws.delete_secret(SecretId=secret_id)) - - # assert that the secret can be retrieved via the proxy - secret_details = sm_client.describe_secret(SecretId=secret_id) - secret_details_aws = sm_client.describe_secret(SecretId=secret_id) - secret_details.pop("ResponseMetadata") - secret_details_aws.pop("ResponseMetadata") - assert secret_details == secret_details_aws diff --git a/aws-proxy/tests/proxy/test_sns.py b/aws-proxy/tests/proxy/test_sns.py deleted file mode 100644 index a135a396..00000000 --- a/aws-proxy/tests/proxy/test_sns.py +++ /dev/null @@ -1,162 +0,0 @@ -# Note/disclosure: This file has been (partially or fully) generated by an AI agent. -import json -import boto3 -import pytest -from botocore.exceptions import ClientError -from localstack.aws.connect import connect_to -from localstack.utils.strings import short_uid -from localstack.utils.sync import retry - - -def test_sns_requests(start_aws_proxy, cleanups): - topic_name = f"test-topic-{short_uid()}" - queue_name_sub = f"test-queue-sub-{short_uid()}" - - # start proxy - forwarding requests for both SQS and SNS - config = { - "services": { - "sns": {"resources": [f".*:{topic_name}"]}, - "sqs": {"resources": [f".*:{queue_name_sub}"]}, - } - } - start_aws_proxy(config) - - # create clients - sns_client = connect_to().sns - sns_client_aws = boto3.client("sns") - sqs_client_aws = boto3.client("sqs") - - # create topic in AWS - topic_arn_aws = sns_client_aws.create_topic(Name=topic_name)["TopicArn"] - cleanups.append(lambda: sns_client_aws.delete_topic(TopicArn=topic_arn_aws)) - - # assert that local call for this topic is proxied - topic_aws = sns_client_aws.get_topic_attributes(TopicArn=topic_arn_aws) - topic_local = sns_client.get_topic_attributes(TopicArn=topic_arn_aws) - assert topic_local["Attributes"] == topic_aws["Attributes"] - - # publish message to AWS, receive locally (requires subscription) - queue_url_sub_aws = sqs_client_aws.create_queue(QueueName=queue_name_sub)[ - "QueueUrl" - ] - cleanups.append(lambda: sqs_client_aws.delete_queue(QueueUrl=queue_url_sub_aws)) - queue_arn_sub = sqs_client_aws.get_queue_attributes( - QueueUrl=queue_url_sub_aws, AttributeNames=["QueueArn"] - )["Attributes"]["QueueArn"] - - # grant SNS permission to send messages to SQS queue - policy = { - "Statement": [ - { - "Effect": "Allow", - "Principal": {"Service": "sns.amazonaws.com"}, - "Action": "sqs:SendMessage", - "Resource": queue_arn_sub, - "Condition": {"ArnEquals": {"aws:SourceArn": topic_arn_aws}}, - } - ] - } - sqs_client_aws.set_queue_attributes( - QueueUrl=queue_url_sub_aws, Attributes={"Policy": json.dumps(policy)} - ) - - sub_arn = sns_client_aws.subscribe( - TopicArn=topic_arn_aws, Protocol="sqs", Endpoint=queue_arn_sub - )["SubscriptionArn"] - if "pending confirmation" not in sub_arn: - cleanups.append(lambda: sns_client_aws.unsubscribe(SubscriptionArn=sub_arn)) - - # wait for subscription to be confirmed - def _wait_for_subscription_confirmation(): - nonlocal sub_arn - subs = sns_client_aws.list_subscriptions_by_topic(TopicArn=topic_arn_aws)[ - "Subscriptions" - ] - if not (subs and subs[0]["SubscriptionArn"] != "PendingConfirmation"): - raise AssertionError("Subscription not confirmed yet") - sub_arn = subs[0]["SubscriptionArn"] - - retry(_wait_for_subscription_confirmation, retries=10, sleep=1) - - # publish message to AWS - sns_client_aws.publish(TopicArn=topic_arn_aws, Message="message 1") - - # receive message from local queue - received = sqs_client_aws.receive_message( - QueueUrl=queue_url_sub_aws, WaitTimeSeconds=5 - ).get("Messages", []) - assert len(received) == 1 - assert "message 1" in received[0]["Body"] - sqs_client_aws.delete_message( - QueueUrl=queue_url_sub_aws, ReceiptHandle=received[0]["ReceiptHandle"] - ) - - # publish message locally, receive with AWS client - sns_client.publish(TopicArn=topic_arn_aws, Message="message 2") - received = sqs_client_aws.receive_message( - QueueUrl=queue_url_sub_aws, WaitTimeSeconds=5 - ).get("Messages", []) - assert len(received) == 1 - assert "message 2" in received[0]["Body"] - - -def test_sns_readonly_operations(start_aws_proxy, cleanups): - topic_name = f"test-readonly-topic-{short_uid()}" - - # start proxy - forwarding requests for SNS in read-only mode - config = { - "services": { - "sns": {"resources": [f".*:{topic_name}"], "read_only": True}, - } - } - start_aws_proxy(config) - - # create clients - sns_client = connect_to().sns - sns_client_aws = boto3.client("sns") - - # create topic in AWS (this should succeed as it's direct AWS client) - topic_arn_aws = sns_client_aws.create_topic(Name=topic_name)["TopicArn"] - cleanups.append(lambda: sns_client_aws.delete_topic(TopicArn=topic_arn_aws)) - - # assert that local call for list_topics is proxied and results are consistent - topics_local = sns_client.list_topics()["Topics"] - topics_aws = sns_client_aws.list_topics()["Topics"] - - # filter for our specific topic to ensure consistency - topic_local_filtered = [t for t in topics_local if t["TopicArn"] == topic_arn_aws] - topic_aws_filtered = [t for t in topics_aws if t["TopicArn"] == topic_arn_aws] - - # assert that results are equal - assert topic_local_filtered == topic_aws_filtered - - # assert that local call for get_topic_attributes is proxied and results are consistent - attributes_local = sns_client.get_topic_attributes(TopicArn=topic_arn_aws)[ - "Attributes" - ] - attributes_aws = sns_client_aws.get_topic_attributes(TopicArn=topic_arn_aws)[ - "Attributes" - ] - assert attributes_local == attributes_aws - - # Negative test cases: Attempt write operations with proxied client and assert they do not affect real AWS - # Create a new topic using the proxied client (this should succeed as LocalStack processes it) - new_topic_name = f"no-proxy-topic-{short_uid()}" - new_topic_arn_local = sns_client.create_topic(Name=new_topic_name)["TopicArn"] - cleanups.append( - lambda: sns_client.delete_topic(TopicArn=new_topic_arn_local) - ) # Cleanup localstack resource - - # Verify that this new topic does NOT exist in real AWS - topics_aws_after_create = sns_client_aws.list_topics()["Topics"] - assert not any( - t for t in topics_aws_after_create if t["TopicArn"] == new_topic_arn_local - ) - - # Attempt to publish a message using the proxied client, expecting it to fail from LocalStack's perspective - with pytest.raises(ClientError) as excinfo: - sns_client.publish( - TopicArn=topic_arn_aws, Message="this should not reach real AWS" - ) - assert "NotFound" in str(excinfo.value) - assert "Topic does not exist" in str(excinfo.value) diff --git a/aws-proxy/tests/proxy/test_sqs.py b/aws-proxy/tests/proxy/test_sqs.py deleted file mode 100644 index b3873016..00000000 --- a/aws-proxy/tests/proxy/test_sqs.py +++ /dev/null @@ -1,71 +0,0 @@ -import boto3 -import pytest -from botocore.exceptions import ClientError -from localstack.aws.connect import connect_to -from localstack.testing.config import TEST_AWS_ACCOUNT_ID -from localstack.utils.aws.arns import sqs_queue_arn, sqs_queue_url_for_arn - -from aws_proxy.shared.models import ProxyConfig - - -def test_sqs_requests(start_aws_proxy, cleanups): - queue_name_aws = "test-queue-aws" - queue_name_local = "test-queue-local" - - # start proxy - only forwarding requests for queue name `test-queue-aws` - config = ProxyConfig(services={"sqs": {"resources": f".*:{queue_name_aws}"}}) - start_aws_proxy(config) - - # create clients - region_name = "us-east-1" - sqs_client = connect_to(region_name=region_name).sqs - sqs_client_aws = boto3.client("sqs", region_name=region_name) - - # create queue in AWS - sqs_client_aws.create_queue(QueueName=queue_name_aws) - queue_url_aws = sqs_client_aws.get_queue_url(QueueName=queue_name_aws)["QueueUrl"] - queue_arn_aws = sqs_client_aws.get_queue_attributes( - QueueUrl=queue_url_aws, AttributeNames=["QueueArn"] - )["Attributes"]["QueueArn"] - cleanups.append(lambda: sqs_client_aws.delete_queue(QueueUrl=queue_url_aws)) - - # assert that local call for this queue is proxied - queue_local = sqs_client.get_queue_url(QueueName=queue_name_aws) - assert queue_local["QueueUrl"] - - # create local queue - sqs_client.create_queue(QueueName=queue_name_local) - with pytest.raises(ClientError) as ctx: - sqs_client_aws.get_queue_url(QueueName=queue_name_local) - assert ( - ctx.value.response["Error"]["Code"] == "AWS.SimpleQueueService.NonExistentQueue" - ) - - # send message to AWS, receive locally - sqs_client_aws.send_message(QueueUrl=queue_url_aws, MessageBody="message 1") - received = sqs_client.receive_message(QueueUrl=queue_url_aws).get("Messages", []) - assert len(received) == 1 - assert received[0]["Body"] == "message 1" - sqs_client.delete_message( - QueueUrl=queue_url_aws, ReceiptHandle=received[0]["ReceiptHandle"] - ) - - # send message locally, receive with AWS client - sqs_client.send_message(QueueUrl=queue_url_aws, MessageBody="message 2") - received = sqs_client_aws.receive_message(QueueUrl=queue_url_aws).get( - "Messages", [] - ) - assert len(received) == 1 - assert received[0]["Body"] == "message 2" - - # assert that using a local queue URL also works for proxying - queue_arn = sqs_queue_arn( - queue_name_aws, - account_id=TEST_AWS_ACCOUNT_ID, - region_name=sqs_client.meta.region_name, - ) - queue_url = sqs_queue_url_for_arn(queue_arn=queue_arn) - result = sqs_client.get_queue_attributes( - QueueUrl=queue_url, AttributeNames=["QueueArn"] - )["Attributes"]["QueueArn"] - assert result == queue_arn_aws diff --git a/aws-proxy/tests/test_config.py b/aws-proxy/tests/test_config.py deleted file mode 100644 index cf682098..00000000 --- a/aws-proxy/tests/test_config.py +++ /dev/null @@ -1,13 +0,0 @@ -from aws_proxy.server.aws_request_forwarder import AwsProxyHandler -from aws_proxy.shared.models import ProxyServiceConfig - - -def test_get_resource_names(): - service_config = ProxyServiceConfig(resources="") - assert AwsProxyHandler._get_resource_names(service_config) == [".*"] - - service_config = ProxyServiceConfig(resources="foobar") - assert AwsProxyHandler._get_resource_names(service_config) == ["foobar"] - - service_config = ProxyServiceConfig(resources=["foo", "bar"]) - assert AwsProxyHandler._get_resource_names(service_config) == ["foo", "bar"]