diff --git a/.devcontainer/api/devcontainer.json b/.devcontainer/api/devcontainer.json
new file mode 100644
index 0000000000..4002a26b14
--- /dev/null
+++ b/.devcontainer/api/devcontainer.json
@@ -0,0 +1,51 @@
+{
+ "name": "Tracker API",
+ "dockerComposeFile": "docker-compose.yml",
+
+ // The service in docker-compose that VS Code / Codespaces attaches to
+ "service": "api",
+
+ // Set the workspace to the api subdirectory of the monorepo.
+ // docker-compose.yml mounts the repo root at /workspaces, so api/ is at /workspaces/api.
+ "workspaceFolder": "/workspaces/api",
+
+ "forwardPorts": [4000, 8529, 4222],
+ "portsAttributes": {
+ "4000": {
+ "label": "GraphQL API",
+ "onAutoForward": "notify"
+ },
+ "8529": {
+ "label": "ArangoDB Web UI"
+ },
+ "4222": {
+ "label": "NATS"
+ }
+ },
+
+ // Install dependencies after the container is created.
+ // Copy .env.example to .env so the API can start without manual setup.
+ "postCreateCommand": "npm install && [ ! -f .env ] && cp .env.example .env || true",
+
+ // Start the API in watch mode automatically
+ "postStartCommand": "npm run dev:watch",
+
+ "customizations": {
+ "vscode": {
+ "extensions": [
+ "dbaeumer.vscode-eslint",
+ "esbenp.prettier-vscode",
+ "apollographql.vscode-apollo",
+ "lokalise.i18n-ally",
+ "Orta.vscode-jest"
+ ],
+ "settings": {
+ "editor.formatOnSave": true,
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
+ "eslint.workingDirectories": ["."]
+ }
+ }
+ },
+
+ "remoteUser": "node"
+}
diff --git a/.devcontainer/api/docker-compose.yml b/.devcontainer/api/docker-compose.yml
new file mode 100644
index 0000000000..9107f66e06
--- /dev/null
+++ b/.devcontainer/api/docker-compose.yml
@@ -0,0 +1,88 @@
+version: "3.8"
+
+services:
+ api:
+ image: mcr.microsoft.com/devcontainers/javascript-node:20
+ volumes:
+ # Mount the monorepo root so all relative paths within the project work
+ - ../..:/workspaces:cached
+ command: sleep infinity
+ environment:
+ - NODE_ENV=development
+ - DB_URL=http://arangodb:8529
+ - DB_NAME=track_dmarc
+ - DB_PASS=test
+ - NATS_URL=nats://nats:4222
+ depends_on:
+ - arangodb
+ - nats
+ networks:
+ - tracker-dev
+
+ arangodb:
+ image: arangodb:3.12.1
+ environment:
+ - ARANGO_ROOT_PASSWORD=test
+ volumes:
+ - arangodb-data:/var/lib/arangodb3
+ networks:
+ - tracker-dev
+
+ nats:
+ image: nats:2.10.16-scratch
+ command: -js
+ networks:
+ - tracker-dev
+
+ nats-init:
+ image: natsio/nats-box:latest
+ depends_on:
+ - nats
+ volumes:
+ - ../../k8s/infrastructure/bases/nats/stream-config.json:/stream-config/stream-config.json
+ entrypoint: >
+ /bin/sh -c '
+ set -e
+ echo "[nats-stream-init] Waiting for NATS..."
+ until nc -z nats 4222; do
+ sleep 1
+ done
+ sleep 2
+
+ echo "[nats-stream-init] Attempting to add SCANS stream..."
+ if nats stream add SCANS --config /stream-config/stream-config.json --server nats://nats:4222; then
+ echo "[nats-stream-init] SCANS stream added successfully."
+ else
+ echo "[nats-stream-init] Add failed, attempting to edit SCANS stream..."
+ if nats stream edit SCANS --config /stream-config/stream-config.json --server nats://nats:4222 --force; then
+ echo "[nats-stream-init] SCANS stream edited successfully."
+ else
+ echo "[nats-stream-init] ERROR: Could not add or edit SCANS stream!"
+ exit 1
+ fi
+ fi
+
+ echo "[nats-stream-init] Attempting to add WEB_SCANNER_IPS KV bucket..."
+ if nats kv add "WEB_SCANNER_IPS" --ttl="5m" --server nats://nats:4222; then
+ echo "[nats-stream-init] WEB_SCANNER_IPS KV bucket added successfully."
+ else
+ echo "[nats-stream-init] Add failed, attempting to edit WEB_SCANNER_IPS KV bucket..."
+ if nats kv edit "WEB_SCANNER_IPS" --ttl="5m" --server nats://nats:4222; then
+ echo "[nats-stream-init] WEB_SCANNER_IPS KV bucket edited successfully."
+ else
+ echo "[nats-stream-init] ERROR: Could not add or edit WEB_SCANNER_IPS KV bucket!"
+ exit 1
+ fi
+ fi
+
+ echo "[nats-stream-init] Stream initialization complete."
+ exec sleep infinity
+ '
+ networks:
+ - tracker-dev
+
+networks:
+ tracker-dev:
+
+volumes:
+ arangodb-data:
diff --git a/.devcontainer/frontend/devcontainer.json b/.devcontainer/frontend/devcontainer.json
new file mode 100644
index 0000000000..77ee852119
--- /dev/null
+++ b/.devcontainer/frontend/devcontainer.json
@@ -0,0 +1,43 @@
+{
+ "name": "Tracker Frontend",
+ "image": "mcr.microsoft.com/devcontainers/javascript-node:20",
+
+ // Set the workspace to the frontend subdirectory of the monorepo
+ "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}/frontend",
+
+ "forwardPorts": [3000, 3001],
+ "portsAttributes": {
+ "3000": {
+ "label": "Frontend Dev Server",
+ "onAutoForward": "openBrowser"
+ },
+ "3001": {
+ "label": "Webpack Dev Server (internal)"
+ }
+ },
+
+ // Install dependencies after the container is created
+ "postCreateCommand": "npm install",
+
+ // Start the dev server automatically when the container starts
+ "postStartCommand": "npm run dev",
+
+ "customizations": {
+ "vscode": {
+ "extensions": [
+ "dbaeumer.vscode-eslint",
+ "esbenp.prettier-vscode",
+ "dsznajder.es7-react-js-snippets",
+ "apollographql.vscode-apollo",
+ "lokalise.i18n-ally"
+ ],
+ "settings": {
+ "editor.formatOnSave": true,
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
+ "eslint.workingDirectories": ["./frontend"]
+ }
+ }
+ },
+
+ "remoteUser": "node"
+}
diff --git a/.devcontainer/scanners/devcontainer.json b/.devcontainer/scanners/devcontainer.json
new file mode 100644
index 0000000000..3367865336
--- /dev/null
+++ b/.devcontainer/scanners/devcontainer.json
@@ -0,0 +1,46 @@
+{
+ "name": "Tracker Scanners",
+ "dockerComposeFile": "docker-compose.yml",
+
+ // The service in docker-compose that VS Code / Codespaces attaches to
+ "service": "dev",
+
+ // docker-compose.yml mounts the repo root at /workspaces, so scanners/ is at /workspaces/scanners.
+ "workspaceFolder": "/workspaces/scanners",
+
+ "forwardPorts": [8529, 8222],
+ "portsAttributes": {
+ "8529": {
+ "label": "ArangoDB Web UI"
+ },
+ "8222": {
+ "label": "NATS Monitor"
+ }
+ },
+
+ // Install the NATS CLI for injecting test messages, then set up a venv per service.
+ //
+ // Each service pins its own Python version. The Microsoft Python devcontainer image
+ // ships with pyenv, so we install the versions that differ from the container's
+ // default (3.14) and create isolated venvs per service directory.
+ //
+ // python-dotenv will not override env vars already set in docker-compose, so the
+ // container-friendly host names (arangodb, nats) take precedence over any localhost
+ // values in local .env files.
+ "postCreateCommand": "bash /workspaces/.devcontainer/scanners/setup.sh",
+
+ "customizations": {
+ "vscode": {
+ "extensions": ["ms-python.python", "ms-python.vscode-pylance", "ms-python.debugpy", "ms-python.black-formatter"],
+ "settings": {
+ "editor.formatOnSave": true,
+ "python.defaultInterpreterPath": "${workspaceFolder}/dns-scanner/.venv/bin/python",
+ "[python]": {
+ "editor.defaultFormatter": "ms-python.black-formatter"
+ }
+ }
+ }
+ },
+
+ "remoteUser": "vscode"
+}
diff --git a/.devcontainer/scanners/docker-compose.yml b/.devcontainer/scanners/docker-compose.yml
new file mode 100644
index 0000000000..2b8cd12174
--- /dev/null
+++ b/.devcontainer/scanners/docker-compose.yml
@@ -0,0 +1,89 @@
+version: "3.8"
+
+services:
+ dev:
+ image: mcr.microsoft.com/devcontainers/python:dev-3.14-bookworm
+ volumes:
+ # Mount the monorepo root so all relative paths within the project work
+ - ../..:/workspaces:cached
+ command: sleep infinity
+ environment:
+ # Override localhost defaults so services connect to named containers
+ - DB_USER=root
+ - DB_PASS=test
+ - DB_NAME=track_dmarc
+ - DB_URL=http://arangodb:8529
+ - NATS_SERVERS=nats://nats:4222
+ depends_on:
+ - arangodb
+ - nats
+ networks:
+ - tracker-dev
+
+ arangodb:
+ image: arangodb:3.12.1
+ environment:
+ - ARANGO_ROOT_PASSWORD=test
+ volumes:
+ - arangodb-data:/var/lib/arangodb3
+ networks:
+ - tracker-dev
+
+ nats:
+ image: nats:2.10.16-scratch
+ command: -js
+ networks:
+ - tracker-dev
+
+ nats-init:
+ image: natsio/nats-box:latest
+ depends_on:
+ - nats
+ volumes:
+ - ../../k8s/infrastructure/bases/nats/stream-config.json:/stream-config/stream-config.json
+ entrypoint: >
+ /bin/sh -c '
+ set -e
+ echo "[nats-stream-init] Waiting for NATS..."
+ until nc -z nats 4222; do
+ sleep 1
+ done
+ sleep 2
+
+ echo "[nats-stream-init] Attempting to add SCANS stream..."
+ if nats stream add SCANS --config /stream-config/stream-config.json --server nats://nats:4222; then
+ echo "[nats-stream-init] SCANS stream added successfully."
+ else
+ echo "[nats-stream-init] Add failed, attempting to edit SCANS stream..."
+ if nats stream edit SCANS --config /stream-config/stream-config.json --server nats://nats:4222 --force; then
+ echo "[nats-stream-init] SCANS stream edited successfully."
+ else
+ echo "[nats-stream-init] ERROR: Could not add or edit SCANS stream!"
+ exit 1
+ fi
+ fi
+
+ echo "[nats-stream-init] Attempting to add WEB_SCANNER_IPS KV bucket..."
+ if nats kv add "WEB_SCANNER_IPS" --ttl="5m" --server nats://nats:4222; then
+ echo "[nats-stream-init] WEB_SCANNER_IPS KV bucket added successfully."
+ else
+ echo "[nats-stream-init] Add failed, attempting to edit WEB_SCANNER_IPS KV bucket..."
+ if nats kv edit "WEB_SCANNER_IPS" --ttl="5m" --server nats://nats:4222; then
+ echo "[nats-stream-init] WEB_SCANNER_IPS KV bucket edited successfully."
+ else
+ echo "[nats-stream-init] ERROR: Could not add or edit WEB_SCANNER_IPS KV bucket!"
+ exit 1
+ fi
+ fi
+
+ echo "[nats-stream-init] Stream initialization complete."
+ exec sleep infinity
+ '
+ networks:
+ - tracker-dev
+
+networks:
+ tracker-dev:
+
+volumes:
+ arangodb-data:
diff --git a/.devcontainer/scanners/setup.sh b/.devcontainer/scanners/setup.sh
new file mode 100644
index 0000000000..4bb1ecfa16
--- /dev/null
+++ b/.devcontainer/scanners/setup.sh
@@ -0,0 +1,100 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+# The script lives at .devcontainer/scanners/setup.sh — two dirs up is the repo root
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
+SCANNERS_DIR="$REPO_ROOT/scanners"
+
+# ---------------------------------------------------------------------------
+# NATS CLI — useful for publishing test messages and inspecting streams
+# ---------------------------------------------------------------------------
+echo ">>> Installing NATS CLI..."
+NATS_VERSION="0.2.2"
+ARCH="$(dpkg --print-architecture)" # amd64 or arm64
+curl -fsSL "https://github.com/nats-io/natscli/releases/download/v${NATS_VERSION}/nats-${NATS_VERSION}-linux-${ARCH}.zip" \
+ -o /tmp/nats.zip
+unzip -q /tmp/nats.zip -d /tmp/nats
+sudo mv /tmp/nats/nats-*/nats /usr/local/bin/nats
+rm -rf /tmp/nats /tmp/nats.zip
+echo " nats $(nats --version)"
+
+# ---------------------------------------------------------------------------
+# pyenv — install if not already present, then bootstrap for this session.
+# Each scanner service pins its own Python version in its Dockerfile; we
+# use pyenv to create isolated venvs per service without touching system Python.
+# ---------------------------------------------------------------------------
+export PYENV_ROOT="$HOME/.pyenv"
+if [ ! -x "$PYENV_ROOT/bin/pyenv" ]; then
+ echo ">>> Installing build dependencies..."
+ # Required to compile CPython (pyenv) and native Python extensions (e.g. pydantic-core)
+ sudo apt-get update -qq
+ sudo apt-get install -y -qq \
+ build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev \
+ libsqlite3-dev libffi-dev liblzma-dev libncurses-dev
+
+ echo ">>> Installing Rust (required for pydantic-core and other native extensions)..."
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --no-modify-path
+ # Source immediately so cargo is available for the rest of this block
+ source "$HOME/.cargo/env"
+
+ echo ">>> Installing pyenv..."
+ curl -fsSL https://pyenv.run | bash
+
+ echo ">>> Installing rust-query-crlite (used by web-scanner for TLS revocation checks)..."
+ cargo install \
+ --git https://github.com/mozilla/crlite rust-query-crlite \
+ --tag v1.0.39
+fi
+
+# Make Rust and pyenv available for this session
+export PATH="$HOME/.cargo/bin:$PATH"
+export PATH="$PYENV_ROOT/bin:$PATH"
+eval "$(pyenv init --path)"
+
+# Map service → Python version (sourced from each service's Dockerfile)
+declare -A SERVICE_PYTHON=(
+ [dns-scanner]="3.13.5"
+ [dns-processor]="3.14.2"
+ [web-scanner]="3.12.8"
+ [web-processor]="3.14.2"
+)
+
+for service in "${!SERVICE_PYTHON[@]}"; do
+ version="${SERVICE_PYTHON[$service]}"
+ svc_dir="$SCANNERS_DIR/$service"
+
+ echo ">>> [$service] Setting up Python $version venv..."
+
+ # Install the version if pyenv doesn't have it yet.
+ # --enable-shared is required for maturin/pyo3 (e.g. pydantic-core) to link
+ # against libpython. Without it, maturin ignores the venv and falls back to
+ # the system Python, causing version mismatches and build failures.
+ if ! pyenv versions --bare | grep -qx "$version"; then
+ PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install "$version"
+ fi
+
+ # Create venv using the pinned version
+ "$PYENV_ROOT/versions/$version/bin/python" -m venv "$svc_dir/.venv"
+
+ # Install dependencies
+ "$svc_dir/.venv/bin/pip" install --quiet --upgrade pip
+ "$svc_dir/.venv/bin/pip" install --quiet -r "$svc_dir/requirements.txt"
+
+ # Copy .env.example → .env if no .env exists yet
+ if [ ! -f "$svc_dir/.env" ] && [ -f "$svc_dir/.env.example" ]; then
+ cp "$svc_dir/.env.example" "$svc_dir/.env"
+ echo " Copied .env.example → .env (fill in secrets before running)"
+ fi
+
+ echo " Done."
+done
+
+echo ""
+echo "Setup complete. Tips:"
+echo " • cd into a service directory and activate its venv: source .venv/bin/activate"
+echo " • Run the service: python service.py"
+echo " • Publish a test scan request via NATS CLI:"
+echo " nats pub --server nats://nats:4222 scans.requests '{\"domain\": \"example.com\"}'"
+echo " • Inspect the SCANS stream:"
+echo " nats stream info SCANS --server nats://nats:4222"
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index e5e1dd745a..c90437abd7 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -1,235 +1,393 @@
version: 2
+
updates:
+ # Monday — frontend (standalone, largest dep file)
- package-ecosystem: docker
- directory: "/api"
+ directory: "/frontend"
schedule:
- interval: daily
+ interval: weekly
+ day: monday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: npm
- directory: "/api"
- schedule:
- interval: daily
- time: "11:00"
- open-pull-requests-limit: 5
-
- - package-ecosystem: pip
- directory: "/clients/python"
+ directory: "/frontend"
schedule:
- interval: daily
+ interval: weekly
+ day: monday
time: "11:00"
- open-pull-requests-limit: 0
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
+ # Tuesday — api (standalone, large dep file)
- package-ecosystem: docker
- directory: "/frontend"
+ directory: "/api"
schedule:
- interval: daily
+ interval: weekly
+ day: tuesday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: npm
- directory: "/frontend"
+ directory: "/api"
schedule:
- interval: daily
+ interval: weekly
+ day: tuesday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- # scanners
- - package-ecosystem: pip
- directory: "/scanners/web-scanner"
+ # Wednesday — dmarc-report + super-admin (medium services)
+ - package-ecosystem: docker
+ directory: "/services/dmarc-report"
schedule:
- interval: daily
+ interval: weekly
+ day: wednesday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- - package-ecosystem: docker
- directory: "/scanners/web-scanner"
+ - package-ecosystem: npm
+ directory: "/services/dmarc-report"
schedule:
- interval: daily
+ interval: weekly
+ day: wednesday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: docker
- directory: "/scanners/dns-scanner"
+ directory: "/services/super-admin"
schedule:
- interval: daily
+ interval: weekly
+ day: wednesday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- - package-ecosystem: pip
- directory: "/scanners/dns-scanner"
+ - package-ecosystem: npm
+ directory: "/services/super-admin"
schedule:
- interval: daily
+ interval: weekly
+ day: wednesday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
+ # Thursday — domain-cleanup + org-footprint (medium services)
- package-ecosystem: docker
- directory: "/scanners/domain-discovery"
+ directory: "/services/domain-cleanup"
schedule:
- interval: daily
+ interval: weekly
+ day: thursday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- - package-ecosystem: pip
- directory: "/scanners/domain-discovery"
+ - package-ecosystem: npm
+ directory: "/services/domain-cleanup"
schedule:
- interval: daily
+ interval: weekly
+ day: thursday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: docker
- directory: "/scanners/domain-dispatcher"
+ directory: "/services/org-footprint"
schedule:
- interval: daily
+ interval: weekly
+ day: thursday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: npm
- directory: "/scanners/domain-dispatcher"
+ directory: "/services/org-footprint"
schedule:
- interval: daily
+ interval: weekly
+ day: thursday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- # services
+ # Friday — progress-report + domain-dispatcher (medium services)
- package-ecosystem: docker
- directory: "/services/dmarc-report"
+ directory: "/services/progress-report"
schedule:
- interval: daily
+ interval: weekly
+ day: friday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: npm
- directory: "/services/dmarc-report"
+ directory: "/services/progress-report"
schedule:
- interval: daily
+ interval: weekly
+ day: friday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: docker
- directory: "/services/super-admin"
+ directory: "/scanners/domain-dispatcher"
schedule:
- interval: daily
+ interval: weekly
+ day: friday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: npm
- directory: "/services/super-admin"
+ directory: "/scanners/domain-dispatcher"
schedule:
- interval: daily
+ interval: weekly
+ day: friday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
+ # Saturday — web-scanner + dns-scanner + domain-discovery (small scanners)
- package-ecosystem: docker
- directory: "/services/domain-cleanup"
+ directory: "/scanners/web-scanner"
schedule:
- interval: daily
+ interval: weekly
+ day: saturday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- - package-ecosystem: npm
- directory: "/services/domain-cleanup"
+ - package-ecosystem: pip
+ directory: "/scanners/web-scanner"
schedule:
- interval: daily
+ interval: weekly
+ day: saturday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: docker
- directory: "/services/org-footprint"
+ directory: "/scanners/dns-scanner"
schedule:
- interval: daily
+ interval: weekly
+ day: saturday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- - package-ecosystem: npm
- directory: "/services/org-footprint"
+ - package-ecosystem: pip
+ directory: "/scanners/dns-scanner"
schedule:
- interval: daily
+ interval: weekly
+ day: saturday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: docker
- directory: "/services/progress-report"
+ directory: "/scanners/domain-discovery"
schedule:
- interval: daily
+ interval: weekly
+ day: saturday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- - package-ecosystem: npm
- directory: "/services/progress-report"
+ - package-ecosystem: pip
+ directory: "/scanners/domain-discovery"
schedule:
- interval: daily
+ interval: weekly
+ day: saturday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
+ # Sunday — update-selectors + summaries + azure-defender-easm (smallest services)
- package-ecosystem: docker
directory: "/services/update-selectors"
schedule:
- interval: daily
+ interval: weekly
+ day: sunday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: pip
directory: "/services/update-selectors"
schedule:
- interval: daily
+ interval: weekly
+ day: sunday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: docker
directory: "/services/summaries"
schedule:
- interval: daily
+ interval: weekly
+ day: sunday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: pip
directory: "/services/summaries"
schedule:
- interval: daily
+ interval: weekly
+ day: sunday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- # azure-defender-easm
- package-ecosystem: docker
directory: "/azure-defender-easm/import-easm-additional-findings"
schedule:
- interval: daily
+ interval: weekly
+ day: sunday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: pip
directory: "/azure-defender-easm/import-easm-additional-findings"
schedule:
- interval: daily
+ interval: weekly
+ day: sunday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: docker
directory: "/azure-defender-easm/label-known-easm-assets"
schedule:
- interval: daily
+ interval: weekly
+ day: sunday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: pip
directory: "/azure-defender-easm/label-known-easm-assets"
schedule:
- interval: daily
+ interval: weekly
+ day: sunday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: docker
directory: "/azure-defender-easm/add-domain-to-easm"
schedule:
- interval: daily
+ interval: weekly
+ day: sunday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
- package-ecosystem: pip
directory: "/azure-defender-easm/add-domain-to-easm"
schedule:
- interval: daily
+ interval: weekly
+ day: sunday
time: "11:00"
- open-pull-requests-limit: 5
+ open-pull-requests-limit: 3
+ cooldown:
+ default-days: 7
+ semver-minor-days: 14
+ semver-major-days: 30
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 916f5fcd64..b3d26e2bcc 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -1,50 +1,50 @@
-name: "CodeQL"
+name: CodeQL - Analysis
on:
+ push:
+ branches: ["master"]
+ pull_request:
+ branches: ["master"]
schedule:
- # Run every Tuesday
+ # Run every Tuesday at 00:00 UTC
- cron: "0 0 * * 2"
+concurrency:
+ group: codeql-${{ github.ref }}
+ cancel-in-progress: true
+
+permissions:
+ security-events: write
+ actions: read
+ contents: read
+
jobs:
analyze:
- name: Analyze
+ name: Analyze (${{ matrix.language }})
runs-on: ubuntu-latest
+ timeout-minutes: 60
strategy:
fail-fast: false
matrix:
- language: [ 'javascript', 'python' ]
+ language:
+ - javascript-typescript
+ - python
+ - actions
steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- # Initializes the CodeQL tools for scanning.
- - name: Initialize CodeQL
- uses: github/codeql-action/init@v1
- with:
- languages: ${{ matrix.language }}
- # If you wish to specify custom queries, you can do so here or in a config file.
- # By default, queries listed here will override any specified in a config file.
- # Prefix the list here with "+" to use these queries and those in the config file.
- # queries: ./path/to/local/query, your-org/your-repo/queries@main
-
- # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
- # If this step fails, then you should remove it and run the build manually (see below)
- - name: Autobuild
- uses: github/codeql-action/autobuild@v1
-
- # ℹ️ Command-line programs to run using the OS shell.
- # 📚 https://git.io/JvXDl
-
- # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
- # and modify them (or add more) to build your code if your project
- # uses a compiled language
-
- #- run: |
- # make bootstrap
- # make release
-
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v1
-
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v4
+ with:
+ languages: ${{ matrix.language }}
+ # Built-in query suites: security-extended includes more rules than
+ # the default suite and is recommended for security-focused scanning.
+ queries: security-extended
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v4
+ with:
+ category: "/language:${{ matrix.language }}"
diff --git a/.github/workflows/dependabot-gcbrun.yml b/.github/workflows/dependabot-gcbrun.yml
new file mode 100644
index 0000000000..f35c2b6bd8
--- /dev/null
+++ b/.github/workflows/dependabot-gcbrun.yml
@@ -0,0 +1,21 @@
+name: Trigger Cloud Build for Dependabot
+on:
+ pull_request_target:
+ types: [opened, synchronize, reopened]
+
+jobs:
+ gcbrun:
+ if: github.actor == 'dependabot[bot]'
+ runs-on: ubuntu-latest
+ steps:
+ - name: Post /gcbrun as collaborator
+ uses: actions/github-script@v7
+ with:
+ github-token: ${{ secrets.GCB_TRIGGER_TOKEN }}
+ script: |
+ github.rest.issues.createComment({
+ issue_number: context.issue.number,
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ body: '/gcbrun'
+ })
diff --git a/.github/workflows/frontend-build.yaml b/.github/workflows/frontend-build.yaml
deleted file mode 100644
index f128b9aa32..0000000000
--- a/.github/workflows/frontend-build.yaml
+++ /dev/null
@@ -1,41 +0,0 @@
-# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
-# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
-
-name: Build frontend
-
-on:
- workflow_dispatch:
- push:
- branches: [ "master" ]
- paths: 'frontend/**'
- pull_request:
- branches: [ "master" ]
- paths: 'frontend/**'
-
-
-jobs:
- test:
-# runs-on:
- runs-on: ubuntu-latest
-
-# strategy:
-# matrix:
-# node-version: [12.x, 14.x, 16.x]
-# # See supported Node.js release schedule at https://nodejs.org/en/about/releases/
-
- steps:
- - run: echo ${GITHUB_REF_NAME}
-# - uses: actions/checkout@v3
-# - name: Use Node.js ${{ matrix.node-version }}
-# uses: actions/setup-node@v3
-# with:
-# node-version: ${{ matrix.node-version }}
-# cache: 'npm'
-# - run: npm ci
-# - run: npm run build --if-present
-# - run: npm test
- build:
- if: github.ref_name == 'master'
- runs-on: ubuntu-latest
- steps:
- - run: echo IN MASTER ${GITHUB_REF_NAME}
diff --git a/.github/workflows/set-maintenance.yml b/.github/workflows/set-maintenance.yml
index 3ab480ca46..fb86a1b0e9 100644
--- a/.github/workflows/set-maintenance.yml
+++ b/.github/workflows/set-maintenance.yml
@@ -28,6 +28,8 @@ on:
jobs:
update_value:
+ permissions:
+ contents: write
# The type of runner that the job will run on
runs-on: ubuntu-latest
diff --git a/.gitignore b/.gitignore
index 17bafb7d79..f329dc33a4 100755
--- a/.gitignore
+++ b/.gitignore
@@ -21,6 +21,8 @@ api/api.current.graphql
**/*.env
**/.venv
venv
+**/lib64
+**/pyvenv.cfg
# Linting
**/.mypy_cache/
@@ -42,6 +44,7 @@ scanner/logs
# IDE Files
.idea/
.vscode/
+*.code-workspace
# all dist directories
**/dist
diff --git a/api/.env.example b/api/.env.example
index ba0d411df7..d55a990ee9 100644
--- a/api/.env.example
+++ b/api/.env.example
@@ -27,4 +27,4 @@ REFRESH_TOKEN_EXPIRY=
SCALAR_COST=
SERVICE_ACCOUNT_EMAIL=
SIGN_IN_KEY=
-TRACING_ENABLED=
\ No newline at end of file
+TRACING_ENABLED=
diff --git a/api/Dockerfile b/api/Dockerfile
index fe4b40ff58..aacb3cd5f2 100644
--- a/api/Dockerfile
+++ b/api/Dockerfile
@@ -1,7 +1,7 @@
# To build image: docker build --tag tracker-api:1.0 .
# To run image: docker run --network=host --env-file ./.env tracker-api:1.0
# Build image
-FROM node:20.19.5-alpine3.22 AS base
+FROM node:20.20.0-alpine3.22 AS base
WORKDIR /app
diff --git a/api/cloudbuild.yaml b/api/cloudbuild.yaml
index 5ebe7355d3..c3ee4b9bf0 100644
--- a/api/cloudbuild.yaml
+++ b/api/cloudbuild.yaml
@@ -16,7 +16,7 @@ steps:
id: install
dir: api
entrypoint: npm
- args: ['ci', '--no-optional']
+ args: ['ci']
- name: node:20-alpine
id: lint
@@ -56,6 +56,16 @@ steps:
entrypoint: npm
args: ['run', 'compile']
+ - name: node:20-alpine
+ id: check-src-files
+ dir: api
+ entrypoint: ash
+ args:
+ - '-c'
+ - |
+ "=== checking src directory content ==="
+ ls -la src
+
- name: node:20-alpine
id: test
dir: api
diff --git a/api/package-lock.json b/api/package-lock.json
index aadfce3f0d..b1a2a46b5c 100644
--- a/api/package-lock.json
+++ b/api/package-lock.json
@@ -9,11 +9,12 @@
"version": "1.0.0",
"license": "MIT",
"dependencies": {
- "@apollo/server": "^5.2.0",
+ "@apollo/server": "^5.5.0",
"@as-integrations/express4": "^1.1.2",
"@lingui/core": "^4.13.0",
+ "accesscontrol": "^2.2.1",
"arango-tools": "^0.6.0",
- "arangojs": "^8.0.0",
+ "arangojs": "^10.2.2",
"bcryptjs": "^2.4.3",
"body-parser": "^1.20.4",
"compression": "^1.8.1",
@@ -47,40 +48,28 @@
"@babel/core": "^7.16.7",
"@babel/node": "^7.16.8",
"@babel/preset-env": "^7.16.8",
- "@jest/test-sequencer": "^27.4.6",
+ "@jest/test-sequencer": "^30.3.0",
"@lingui/cli": "^5.4.1",
"@lingui/macro": "^4.13.0",
"babel-core": "^7.0.0-bridge.0",
- "babel-jest": "^27.4.6",
+ "babel-jest": "^30.3.0",
"babel-plugin-macros": "^3.1.0",
"babel-polyfill": "^6.26.0",
- "eslint": "^7.32.0",
+ "eslint": "^8.57.1",
"eslint-config-prettier": "^8.3.0",
- "eslint-config-standard": "^16.0.3",
+ "eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.25.4",
- "eslint-plugin-jest": "^24.7.0",
- "eslint-plugin-node": "^11.1.0",
- "eslint-plugin-promise": "^5.2.0",
- "jest": "^27.4.7",
+ "eslint-plugin-jest": "^29.15.1",
+ "eslint-plugin-n": "^16.6.2",
+ "eslint-plugin-promise": "^6.6.0",
+ "jest": "^30.3.0",
"jest-fetch-mock": "^3.0.3",
- "jest-matcher-utils": "^27.4.6",
+ "jest-matcher-utils": "^30.3.0",
+ "nodemon": "^3.1.11",
"prettier": "^2.5.1",
"supertest": "^7.0.0"
}
},
- "node_modules/@ampproject/remapping": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
- "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
- "dev": true,
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/@apollo/cache-control-types": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@apollo/cache-control-types/-/cache-control-types-1.0.3.tgz",
@@ -90,10 +79,9 @@
}
},
"node_modules/@apollo/server": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@apollo/server/-/server-5.2.0.tgz",
- "integrity": "sha512-OEAl5bwVitkvVkmZlgWksSnQ10FUr6q2qJMdkexs83lsvOGmd/y81X5LoETmKZux8UiQsy/A/xzP00b8hTHH/w==",
- "license": "MIT",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@apollo/server/-/server-5.5.0.tgz",
+ "integrity": "sha512-vWtodBOK/SZwBTJzItECOmLfL8E8pn/IdvP7pnxN5g2tny9iW4+9sxdajE798wV1H2+PYp/rRcl/soSHIBKMPw==",
"dependencies": {
"@apollo/cache-control-types": "^1.0.3",
"@apollo/server-gateway-interface": "^2.0.0",
@@ -107,7 +95,8 @@
"@apollo/utils.withrequired": "^3.0.0",
"@graphql-tools/schema": "^10.0.0",
"async-retry": "^1.2.1",
- "body-parser": "^2.2.0",
+ "body-parser": "^2.2.2",
+ "content-type": "^1.0.5",
"cors": "^2.8.5",
"finalhandler": "^2.1.0",
"loglevel": "^1.6.8",
@@ -216,9 +205,9 @@
}
},
"node_modules/@apollo/server/node_modules/body-parser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz",
- "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz",
+ "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==",
"license": "MIT",
"dependencies": {
"bytes": "^3.1.2",
@@ -227,7 +216,7 @@
"http-errors": "^2.0.0",
"iconv-lite": "^0.7.0",
"on-finished": "^2.4.1",
- "qs": "^6.14.0",
+ "qs": "^6.14.1",
"raw-body": "^3.0.1",
"type-is": "^2.0.1"
},
@@ -240,9 +229,9 @@
}
},
"node_modules/@apollo/server/node_modules/iconv-lite": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz",
- "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==",
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz",
+ "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
@@ -495,12 +484,12 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
- "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
"dev": true,
"dependencies": {
- "@babel/helper-validator-identifier": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5",
"js-tokens": "^4.0.0",
"picocolors": "^1.1.1"
},
@@ -509,30 +498,30 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.0.tgz",
- "integrity": "sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
+ "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz",
- "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==",
- "dev": true,
- "dependencies": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.26.0",
- "@babel/generator": "^7.26.0",
- "@babel/helper-compilation-targets": "^7.25.9",
- "@babel/helper-module-transforms": "^7.26.0",
- "@babel/helpers": "^7.26.0",
- "@babel/parser": "^7.26.0",
- "@babel/template": "^7.25.9",
- "@babel/traverse": "^7.25.9",
- "@babel/types": "^7.26.0",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
+ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helpers": "^7.28.6",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/traverse": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/remapping": "^2.3.5",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -554,15 +543,15 @@
"dev": true
},
"node_modules/@babel/generator": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.0.tgz",
- "integrity": "sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==",
+ "version": "7.29.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
"dev": true,
"dependencies": {
- "@babel/parser": "^7.26.0",
- "@babel/types": "^7.26.0",
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25",
+ "@babel/parser": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
"jsesc": "^3.0.2"
},
"engines": {
@@ -595,13 +584,13 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
- "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
+ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.25.9",
- "@babel/helper-validator-option": "^7.25.9",
+ "@babel/compat-data": "^7.28.6",
+ "@babel/helper-validator-option": "^7.27.1",
"browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
@@ -715,6 +704,15 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/helper-globals": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/helper-hoist-variables": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
@@ -740,27 +738,27 @@
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
- "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
+ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
"dev": true,
"dependencies": {
- "@babel/traverse": "^7.25.9",
- "@babel/types": "^7.25.9"
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
- "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
+ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
"dev": true,
"dependencies": {
- "@babel/helper-module-imports": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9",
- "@babel/traverse": "^7.25.9"
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -782,9 +780,9 @@
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz",
- "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -875,9 +873,9 @@
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
- "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -899,27 +897,13 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
- "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
- "dev": true,
- "dependencies": {
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.4"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
- "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
+ "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
"dev": true,
"dependencies": {
- "@babel/helper-validator-identifier": "^7.22.20",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -949,12 +933,12 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
- "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
+ "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.28.5"
+ "@babel/types": "^7.29.0"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -1318,6 +1302,21 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-syntax-import-attributes": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz",
+ "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
@@ -1342,6 +1341,21 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz",
+ "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
@@ -1445,12 +1459,12 @@
}
},
"node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz",
- "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz",
+ "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.16.7"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -2106,41 +2120,41 @@
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
},
"node_modules/@babel/template": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
- "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
+ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.27.1",
- "@babel/parser": "^7.27.2",
- "@babel/types": "^7.27.1"
+ "@babel/code-frame": "^7.28.6",
+ "@babel/parser": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz",
- "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
+ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.25.9",
- "@babel/generator": "^7.25.9",
- "@babel/parser": "^7.25.9",
- "@babel/template": "^7.25.9",
- "@babel/types": "^7.25.9",
- "debug": "^4.3.1",
- "globals": "^11.1.0"
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.29.0",
+ "debug": "^4.3.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/types": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
- "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
"dev": true,
"dependencies": {
"@babel/helper-string-parser": "^7.27.1",
@@ -2156,6 +2170,37 @@
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
"dev": true
},
+ "node_modules/@emnapi/core": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz",
+ "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.2.0",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz",
+ "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz",
+ "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
"node_modules/@esbuild/aix-ppc64": {
"version": "0.25.3",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz",
@@ -2581,30 +2626,66 @@
"node": ">=18"
}
},
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
+ "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
"node_modules/@eslint/eslintrc": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
- "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
- "debug": "^4.1.1",
- "espree": "^7.3.0",
- "globals": "^13.9.0",
- "ignore": "^4.0.6",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
"import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
- "minimatch": "^3.0.4",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
"strip-json-comments": "^3.1.1"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
+ "node_modules/@eslint/eslintrc/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
"node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "13.11.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
- "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -2616,6 +2697,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
"node_modules/@eslint/eslintrc/node_modules/type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
@@ -2628,6 +2721,15 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/@eslint/js": {
+ "version": "8.57.1",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
+ "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
"node_modules/@graphql-tools/merge": {
"version": "9.1.6",
"resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.1.6.tgz",
@@ -2689,23 +2791,38 @@
}
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
- "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
+ "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
+ "deprecated": "Use @eslint/config-array instead",
"dev": true,
"dependencies": {
- "@humanwhocodes/object-schema": "^1.2.0",
- "debug": "^4.1.1",
- "minimatch": "^3.0.4"
+ "@humanwhocodes/object-schema": "^2.0.3",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
},
"engines": {
"node": ">=10.10.0"
}
},
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
"node_modules/@humanwhocodes/object-schema": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
- "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "deprecated": "Use @eslint/object-schema instead",
"dev": true
},
"node_modules/@ioredis/commands": {
@@ -2714,27 +2831,6 @@
"integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==",
"optional": true
},
- "node_modules/@isaacs/balanced-match": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz",
- "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==",
- "dev": true,
- "engines": {
- "node": "20 || >=22"
- }
- },
- "node_modules/@isaacs/brace-expansion": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz",
- "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==",
- "dev": true,
- "dependencies": {
- "@isaacs/balanced-match": "^4.0.1"
- },
- "engines": {
- "node": "20 || >=22"
- }
- },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -2857,336 +2953,250 @@
}
},
"node_modules/@jest/console": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.6.tgz",
- "integrity": "sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.3.0.tgz",
+ "integrity": "sha512-PAwCvFJ4696XP2qZj+LAn1BWjZaJ6RjG6c7/lkMaUJnkyMS34ucuIsfqYvfskVNvUI27R/u4P1HMYFnlVXG/Ww==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.4.2",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "jest-message-util": "^27.4.6",
- "jest-util": "^27.4.2",
+ "chalk": "^4.1.2",
+ "jest-message-util": "30.3.0",
+ "jest-util": "30.3.0",
"slash": "^3.0.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/console/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/@jest/console/node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
"engines": {
"node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@jest/console/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/@jest/core": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.3.0.tgz",
+ "integrity": "sha512-U5mVPsBxLSO6xYbf+tgkymLx+iAhvZX43/xI1+ej2ZOPnPdkdO1CzDmFKh2mZBn2s4XZixszHeQnzp1gm/DIxw==",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "@jest/console": "30.3.0",
+ "@jest/pattern": "30.0.1",
+ "@jest/reporters": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "ansi-escapes": "^4.3.2",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "exit-x": "^0.2.2",
+ "graceful-fs": "^4.2.11",
+ "jest-changed-files": "30.3.0",
+ "jest-config": "30.3.0",
+ "jest-haste-map": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.3.0",
+ "jest-resolve-dependencies": "30.3.0",
+ "jest-runner": "30.3.0",
+ "jest-runtime": "30.3.0",
+ "jest-snapshot": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0",
+ "jest-watcher": "30.3.0",
+ "pretty-format": "30.3.0",
+ "slash": "^3.0.0"
},
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@jest/core/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
"engines": {
"node": ">=10"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@jest/console/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/@jest/core/node_modules/jest-validate": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz",
+ "integrity": "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==",
"dev": true,
"dependencies": {
- "color-name": "~1.1.4"
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.3.0",
+ "camelcase": "^6.3.0",
+ "chalk": "^4.1.2",
+ "leven": "^3.1.0",
+ "pretty-format": "30.3.0"
},
"engines": {
- "node": ">=7.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/console/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@jest/console/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "node_modules/@jest/core/node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
"engines": {
"node": ">=8"
}
},
- "node_modules/@jest/console/node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "node_modules/@jest/diff-sequences": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.3.0.tgz",
+ "integrity": "sha512-cG51MVnLq1ecVUaQ3fr6YuuAOitHK1S4WUJHnsPFE/quQr33ADUx1FfrTCpMCRxvy0Yr9BThKpDjSlcTi91tMA==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/console/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/@jest/environment": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.3.0.tgz",
+ "integrity": "sha512-SlLSF4Be735yQXyh2+mctBOzNDx5s5uLv88/j8Qn1wH679PDcwy67+YdADn8NJnGjzlXtN62asGH/T4vWOkfaw==",
"dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
+ "@jest/fake-timers": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "jest-mock": "30.3.0"
},
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/core": {
- "version": "27.4.7",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.7.tgz",
- "integrity": "sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg==",
+ "node_modules/@jest/expect": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.3.0.tgz",
+ "integrity": "sha512-76Nlh4xJxk2D/9URCn3wFi98d2hb19uWE1idLsTt2ywhvdOldbw3S570hBgn25P4ICUZ/cBjybrBex2g17IDbg==",
"dev": true,
"dependencies": {
- "@jest/console": "^27.4.6",
- "@jest/reporters": "^27.4.6",
- "@jest/test-result": "^27.4.6",
- "@jest/transform": "^27.4.6",
- "@jest/types": "^27.4.2",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "emittery": "^0.8.1",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-changed-files": "^27.4.2",
- "jest-config": "^27.4.7",
- "jest-haste-map": "^27.4.6",
- "jest-message-util": "^27.4.6",
- "jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.6",
- "jest-resolve-dependencies": "^27.4.6",
- "jest-runner": "^27.4.6",
- "jest-runtime": "^27.4.6",
- "jest-snapshot": "^27.4.6",
- "jest-util": "^27.4.2",
- "jest-validate": "^27.4.6",
- "jest-watcher": "^27.4.6",
- "micromatch": "^4.0.4",
- "rimraf": "^3.0.0",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "expect": "30.3.0",
+ "jest-snapshot": "30.3.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/core/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/@jest/expect-utils": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.3.0.tgz",
+ "integrity": "sha512-j0+W5iQQ8hBh7tHZkTQv3q2Fh/M7Je72cIsYqC4OaktgtO7v1So9UTjp6uPBHIaB6beoF/RRsCgMJKvti0wADA==",
"dev": true,
"dependencies": {
- "color-convert": "^2.0.1"
+ "@jest/get-type": "30.1.0"
},
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/fake-timers": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.3.0.tgz",
+ "integrity": "sha512-WUQDs8SOP9URStX1DzhD425CqbN/HxUYCTwVrT8sTVBfMvFqYt/s61EK5T05qnHu0po6RitXIvP9otZxYDzTGQ==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.3.0",
+ "@sinonjs/fake-timers": "^15.0.0",
+ "@types/node": "*",
+ "jest-message-util": "30.3.0",
+ "jest-mock": "30.3.0",
+ "jest-util": "30.3.0"
},
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/core/node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "node_modules/@jest/get-type": {
+ "version": "30.1.0",
+ "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz",
+ "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==",
"dev": true,
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@jest/core/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/@jest/core/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/@jest/core/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@jest/core/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@jest/core/node_modules/jest-validate": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz",
- "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^27.4.2",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.4.0",
- "leven": "^3.1.0",
- "pretty-format": "^27.4.6"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/@jest/core/node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@jest/core/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/environment": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.6.tgz",
- "integrity": "sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg==",
+ "node_modules/@jest/globals": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.3.0.tgz",
+ "integrity": "sha512-+owLCBBdfpgL3HU+BD5etr1SvbXpSitJK0is1kiYjJxAAJggYMRQz5hSdd5pq1sSggfxPbw2ld71pt4x5wwViA==",
"dev": true,
"dependencies": {
- "@jest/fake-timers": "^27.4.6",
- "@jest/types": "^27.4.2",
- "@types/node": "*",
- "jest-mock": "^27.4.6"
+ "@jest/environment": "30.3.0",
+ "@jest/expect": "30.3.0",
+ "@jest/types": "30.3.0",
+ "jest-mock": "30.3.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/fake-timers": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.6.tgz",
- "integrity": "sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A==",
+ "node_modules/@jest/pattern": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz",
+ "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.4.2",
- "@sinonjs/fake-timers": "^8.0.1",
"@types/node": "*",
- "jest-message-util": "^27.4.6",
- "jest-mock": "^27.4.6",
- "jest-util": "^27.4.2"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/@jest/globals": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.6.tgz",
- "integrity": "sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw==",
- "dev": true,
- "dependencies": {
- "@jest/environment": "^27.4.6",
- "@jest/types": "^27.4.2",
- "expect": "^27.4.6"
+ "jest-regex-util": "30.0.1"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/@jest/reporters": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.6.tgz",
- "integrity": "sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.3.0.tgz",
+ "integrity": "sha512-a09z89S+PkQnL055bVj8+pe2Caed2PBOaczHcXCykW5ngxX9EWx/1uAwncxc/HiU0oZqfwseMjyhxgRjS49qPw==",
"dev": true,
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^27.4.6",
- "@jest/test-result": "^27.4.6",
- "@jest/transform": "^27.4.6",
- "@jest/types": "^27.4.2",
+ "@jest/console": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@jridgewell/trace-mapping": "^0.3.25",
"@types/node": "*",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.2",
- "graceful-fs": "^4.2.4",
+ "chalk": "^4.1.2",
+ "collect-v8-coverage": "^1.0.2",
+ "exit-x": "^0.2.2",
+ "glob": "^10.5.0",
+ "graceful-fs": "^4.2.11",
"istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^5.1.0",
+ "istanbul-lib-instrument": "^6.0.0",
"istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-lib-source-maps": "^5.0.0",
"istanbul-reports": "^3.1.3",
- "jest-haste-map": "^27.4.6",
- "jest-resolve": "^27.4.6",
- "jest-util": "^27.4.2",
- "jest-worker": "^27.4.6",
+ "jest-message-util": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-worker": "30.3.0",
"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"
+ "string-length": "^4.0.2",
+ "v8-to-istanbul": "^9.0.1"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -3197,62 +3207,86 @@
}
}
},
- "node_modules/@jest/reporters/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/@jest/reporters/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
"dependencies": {
- "color-convert": "^2.0.1"
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@jest/reporters/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
- "engines": {
- "node": ">=8"
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@jest/reporters/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/@jest/reporters/node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
+ "@isaacs/cliui": "^8.0.2"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
}
},
- "node_modules/@jest/reporters/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/@jest/reporters/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
+ },
+ "node_modules/@jest/reporters/node_modules/minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"dev": true,
"dependencies": {
- "color-name": "~1.1.4"
+ "brace-expansion": "^2.0.2"
},
"engines": {
- "node": ">=7.0.0"
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@jest/reporters/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@jest/reporters/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "node_modules/@jest/reporters/node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dev": true,
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/@jest/reporters/node_modules/slash": {
@@ -3264,27 +3298,6 @@
"node": ">=8"
}
},
- "node_modules/@jest/reporters/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@jest/reporters/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/@jest/schemas": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
@@ -3298,301 +3311,189 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@jest/source-map": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz",
- "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==",
+ "node_modules/@jest/snapshot-utils": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.3.0.tgz",
+ "integrity": "sha512-ORbRN9sf5PP82v3FXNSwmO1OTDR2vzR2YTaR+E3VkSBZ8zadQE6IqYdYEeFH1NIkeB2HIGdF02dapb6K0Mj05g==",
"dev": true,
"dependencies": {
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.4",
- "source-map": "^0.6.0"
+ "@jest/types": "30.3.0",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "natural-compare": "^1.4.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/source-map/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "node_modules/@jest/source-map": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz",
+ "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==",
"dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "callsites": "^3.1.0",
+ "graceful-fs": "^4.2.11"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/@jest/test-result": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.6.tgz",
- "integrity": "sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.3.0.tgz",
+ "integrity": "sha512-e/52nJGuD74AKTSe0P4y5wFRlaXP0qmrS17rqOMHeSwm278VyNyXE3gFO/4DTGF9w+65ra3lo3VKj0LBrzmgdQ==",
"dev": true,
"dependencies": {
- "@jest/console": "^27.4.6",
- "@jest/types": "^27.4.2",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
+ "@jest/console": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "collect-v8-coverage": "^1.0.2"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/@jest/test-sequencer": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz",
- "integrity": "sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.3.0.tgz",
+ "integrity": "sha512-dgbWy9b8QDlQeRZcv7LNF+/jFiiYHTKho1xirauZ7kVwY7avjFF6uTT0RqlgudB5OuIPagFdVtfFMosjVbk1eA==",
"dev": true,
"dependencies": {
- "@jest/test-result": "^27.4.6",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.6",
- "jest-runtime": "^27.4.6"
+ "@jest/test-result": "30.3.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.3.0",
+ "slash": "^3.0.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/test-sequencer/node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
}
},
"node_modules/@jest/transform": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.6.tgz",
- "integrity": "sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.3.0.tgz",
+ "integrity": "sha512-TLKY33fSLVd/lKB2YI1pH69ijyUblO/BQvCj566YvnwuzoTNr648iE0j22vRvVNk2HsPwByPxATg3MleS3gf5A==",
"dev": true,
"dependencies": {
- "@babel/core": "^7.1.0",
- "@jest/types": "^27.4.2",
- "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.4",
- "jest-haste-map": "^27.4.6",
- "jest-regex-util": "^27.4.0",
- "jest-util": "^27.4.2",
- "micromatch": "^4.0.4",
- "pirates": "^4.0.4",
+ "@babel/core": "^7.27.4",
+ "@jest/types": "30.3.0",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "babel-plugin-istanbul": "^7.0.1",
+ "chalk": "^4.1.2",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.3.0",
+ "jest-regex-util": "30.0.1",
+ "jest-util": "30.3.0",
+ "pirates": "^4.0.7",
"slash": "^3.0.0",
- "source-map": "^0.6.1",
- "write-file-atomic": "^3.0.0"
+ "write-file-atomic": "^5.0.1"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/transform/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/@jest/transform/node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
+ },
+ "node_modules/@jest/transform/node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
"engines": {
"node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@jest/transform/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/transform/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/@jest/types/node_modules/@jest/schemas": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz",
+ "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==",
"dev": true,
"dependencies": {
- "color-name": "~1.1.4"
+ "@sinclair/typebox": "^0.34.0"
},
"engines": {
- "node": ">=7.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/transform/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "node_modules/@jest/types/node_modules/@sinclair/typebox": {
+ "version": "0.34.48",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz",
+ "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==",
"dev": true
},
- "node_modules/@jest/transform/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
"dev": true,
- "engines": {
- "node": ">=8"
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
}
},
- "node_modules/@jest/transform/node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
"dev": true,
- "engines": {
- "node": ">=8"
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
}
},
- "node_modules/@jest/transform/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
"dev": true,
"engines": {
- "node": ">=0.10.0"
+ "node": ">=6.0.0"
}
},
- "node_modules/@jest/transform/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@jest/types": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz",
- "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==",
- "dev": true,
- "dependencies": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^16.0.0",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/@jest/types/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@jest/types/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/@jest/types/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/@jest/types/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@jest/types/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@jest/types/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
- "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
- "dev": true,
- "dependencies": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/set-array": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
- "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
- "dev": true
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.25",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
- "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
"dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
@@ -3748,6 +3649,27 @@
"node": ">=20.0.0"
}
},
+ "node_modules/@lingui/cli/node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true,
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
+ "node_modules/@lingui/cli/node_modules/brace-expansion": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
+ "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
"node_modules/@lingui/cli/node_modules/chokidar": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
@@ -3808,15 +3730,15 @@
}
},
"node_modules/@lingui/cli/node_modules/minimatch": {
- "version": "10.1.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz",
- "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
+ "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
"dev": true,
"dependencies": {
- "@isaacs/brace-expansion": "^5.0.0"
+ "brace-expansion": "^5.0.2"
},
"engines": {
- "node": "20 || >=22"
+ "node": "18 || 20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -3998,61 +3920,12 @@
"node": ">=16.0.0"
}
},
- "node_modules/@lingui/macro/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
"node_modules/@lingui/macro/node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
- "node_modules/@lingui/macro/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/@lingui/macro/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/@lingui/macro/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"node_modules/@lingui/macro/node_modules/cosmiconfig": {
"version": "8.3.6",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
@@ -4079,15 +3952,6 @@
}
}
},
- "node_modules/@lingui/macro/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/@lingui/macro/node_modules/js-yaml": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
@@ -4100,18 +3964,6 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/@lingui/macro/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/@lingui/message-utils": {
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-4.13.0.tgz",
@@ -4149,6 +4001,18 @@
"moo": "^0.5.1"
}
},
+ "node_modules/@napi-rs/wasm-runtime": {
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
+ "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "^1.4.3",
+ "@emnapi/runtime": "^1.4.3",
+ "@tybys/wasm-util": "^0.10.0"
+ }
+ },
"node_modules/@nicolo-ribaudo/chokidar-2": {
"version": "2.1.8-no-fsevents.3",
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
@@ -4214,6 +4078,28 @@
"@noble/hashes": "^1.1.5"
}
},
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@pkgr/core": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz",
+ "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/pkgr"
+ }
+ },
"node_modules/@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
@@ -4276,45 +4162,41 @@
"license": "MIT"
},
"node_modules/@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"dev": true,
"dependencies": {
"type-detect": "4.0.8"
}
},
"node_modules/@sinonjs/fake-timers": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz",
- "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==",
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.1.1.tgz",
+ "integrity": "sha512-cO5W33JgAPbOh07tvZjUOJ7oWhtaqGHiZw+11DPbyqh2kHTBc3eF/CjJDeQ4205RLQsX6rxCuYOroFQwl7JDRw==",
"dev": true,
"dependencies": {
- "@sinonjs/commons": "^1.7.0"
+ "@sinonjs/commons": "^3.0.1"
}
},
- "node_modules/@tokenizer/token": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
- "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
- },
- "node_modules/@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+ "node_modules/@tybys/wasm-util": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
+ "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
"dev": true,
- "engines": {
- "node": ">= 6"
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
}
},
"node_modules/@types/babel__core": {
- "version": "7.1.17",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.17.tgz",
- "integrity": "sha512-6zzkezS9QEIL8yCBvXWxPTJPNuMeECJVxSOhxNY/jfq9LxOTHivaYTqr37n9LknWWRTIkzqH2UilS5QFvfa90A==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
"dependencies": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0",
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
"@types/babel__generator": "*",
"@types/babel__template": "*",
"@types/babel__traverse": "*"
@@ -4348,19 +4230,10 @@
"@babel/types": "^7.3.0"
}
},
- "node_modules/@types/graceful-fs": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
- "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/istanbul-lib-coverage": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
- "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
"dev": true
},
"node_modules/@types/istanbul-lib-report": {
@@ -4373,20 +4246,14 @@
}
},
"node_modules/@types/istanbul-reports": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
- "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+ "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"dev": true,
"dependencies": {
"@types/istanbul-lib-report": "*"
}
},
- "node_modules/@types/json-schema": {
- "version": "7.0.9",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
- "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
- "dev": true
- },
"node_modules/@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@@ -4399,9 +4266,12 @@
"integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
},
"node_modules/@types/node": {
- "version": "16.9.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz",
- "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g=="
+ "version": "20.19.37",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz",
+ "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
},
"node_modules/@types/parse-json": {
"version": "4.0.0",
@@ -4409,22 +4279,16 @@
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true
},
- "node_modules/@types/prettier": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.3.tgz",
- "integrity": "sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==",
- "dev": true
- },
"node_modules/@types/stack-utils": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
- "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
+ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
"dev": true
},
"node_modules/@types/yargs": {
- "version": "16.0.4",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz",
- "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==",
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
@@ -4436,72 +4300,67 @@
"integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==",
"dev": true
},
- "node_modules/@typescript-eslint/experimental-utils": {
- "version": "4.31.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.1.tgz",
- "integrity": "sha512-NtoPsqmcSsWty0mcL5nTZXMf7Ei0Xr2MT8jWjXMVgRK0/1qeQ2jZzLFUh4QtyJ4+/lPUyMw5cSfeeME+Zrtp9Q==",
+ "node_modules/@typescript-eslint/project-service": {
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.2.tgz",
+ "integrity": "sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==",
"dev": true,
"dependencies": {
- "@types/json-schema": "^7.0.7",
- "@typescript-eslint/scope-manager": "4.31.1",
- "@typescript-eslint/types": "4.31.1",
- "@typescript-eslint/typescript-estree": "4.31.1",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^3.0.0"
+ "@typescript-eslint/tsconfig-utils": "^8.57.2",
+ "@typescript-eslint/types": "^8.57.2",
+ "debug": "^4.4.3"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "*"
+ "typescript": ">=4.8.4 <6.0.0"
}
},
- "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
- "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.2.tgz",
+ "integrity": "sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==",
"dev": true,
"dependencies": {
- "eslint-visitor-keys": "^2.0.0"
+ "@typescript-eslint/types": "8.57.2",
+ "@typescript-eslint/visitor-keys": "8.57.2"
},
"engines": {
- "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
- "url": "https://github.com/sponsors/mysticatea"
- },
- "peerDependencies": {
- "eslint": ">=5"
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "4.31.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.1.tgz",
- "integrity": "sha512-N1Uhn6SqNtU2XpFSkD4oA+F0PfKdWHyr4bTX0xTj8NRx1314gBDRL1LUuZd5+L3oP+wo6hCbZpaa1in6SwMcVQ==",
+ "node_modules/@typescript-eslint/tsconfig-utils": {
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.2.tgz",
+ "integrity": "sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==",
"dev": true,
- "dependencies": {
- "@typescript-eslint/types": "4.31.1",
- "@typescript-eslint/visitor-keys": "4.31.1"
- },
"engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
}
},
"node_modules/@typescript-eslint/types": {
- "version": "4.31.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.1.tgz",
- "integrity": "sha512-kixltt51ZJGKENNW88IY5MYqTBA8FR0Md8QdGbJD2pKZ+D5IvxjTYDNtJPDxFBiXmka2aJsITdB1BtO1fsgmsQ==",
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz",
+ "integrity": "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==",
"dev": true,
"engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
@@ -4509,40 +4368,73 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "4.31.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.1.tgz",
- "integrity": "sha512-EGHkbsUvjFrvRnusk6yFGqrqMBTue5E5ROnS5puj3laGQPasVUgwhrxfcgkdHNFECHAewpvELE1Gjv0XO3mdWg==",
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.2.tgz",
+ "integrity": "sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "4.31.1",
- "@typescript-eslint/visitor-keys": "4.31.1",
- "debug": "^4.3.1",
- "globby": "^11.0.3",
- "is-glob": "^4.0.1",
- "semver": "^7.3.5",
- "tsutils": "^3.21.0"
+ "@typescript-eslint/project-service": "8.57.2",
+ "@typescript-eslint/tsconfig-utils": "8.57.2",
+ "@typescript-eslint/types": "8.57.2",
+ "@typescript-eslint/visitor-keys": "8.57.2",
+ "debug": "^4.4.3",
+ "minimatch": "^10.2.2",
+ "semver": "^7.7.3",
+ "tinyglobby": "^0.2.15",
+ "ts-api-utils": "^2.4.0"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
}
},
- "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true,
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
+ "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
"dev": true,
"dependencies": {
- "lru-cache": "^6.0.0"
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
+ "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^5.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
},
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
"bin": {
"semver": "bin/semver.js"
},
@@ -4550,23 +4442,314 @@
"node": ">=10"
}
},
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.2.tgz",
+ "integrity": "sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.9.1",
+ "@typescript-eslint/scope-manager": "8.57.2",
+ "@typescript-eslint/types": "8.57.2",
+ "@typescript-eslint/typescript-estree": "8.57.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "4.31.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.1.tgz",
- "integrity": "sha512-PCncP8hEqKw6SOJY+3St4LVtoZpPPn+Zlpm7KW5xnviMhdqcsBty4Lsg4J/VECpJjw1CkROaZhH4B8M1OfnXTQ==",
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.2.tgz",
+ "integrity": "sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "4.31.1",
- "eslint-visitor-keys": "^2.0.0"
+ "@typescript-eslint/types": "8.57.2",
+ "eslint-visitor-keys": "^5.0.0"
},
"engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
}
},
+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
+ "dev": true,
+ "engines": {
+ "node": "^20.19.0 || ^22.13.0 || >=24"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
+ "dev": true
+ },
+ "node_modules/@unrs/resolver-binding-android-arm-eabi": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz",
+ "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-android-arm64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz",
+ "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-darwin-arm64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz",
+ "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-darwin-x64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz",
+ "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-freebsd-x64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz",
+ "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz",
+ "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz",
+ "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz",
+ "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz",
+ "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz",
+ "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz",
+ "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz",
+ "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz",
+ "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz",
+ "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-x64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz",
+ "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-wasm32-wasi": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz",
+ "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==",
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@napi-rs/wasm-runtime": "^0.2.11"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz",
+ "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz",
+ "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz",
+ "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
"node_modules/@whatwg-node/promise-helpers": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz",
@@ -4579,12 +4762,6 @@
"node": ">=16.0.0"
}
},
- "node_modules/abab": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
- "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
- "dev": true
- },
"node_modules/accept-language": {
"version": "3.0.18",
"resolved": "https://registry.npmjs.org/accept-language/-/accept-language-3.0.18.tgz",
@@ -4616,10 +4793,19 @@
"node": ">= 0.6"
}
},
+ "node_modules/accesscontrol": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/accesscontrol/-/accesscontrol-2.2.1.tgz",
+ "integrity": "sha512-52EvFk/J9EF+w4mYQoKnOTkEMj01R1U5n2fc1dai6x1xkgOks3DGkx01qQL2cKFxGmE4Tn1krAU3jJA9L1NMkg==",
+ "license": "MIT",
+ "dependencies": {
+ "notation": "^1.3.6"
+ }
+ },
"node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -4628,16 +4814,6 @@
"node": ">=0.4.0"
}
},
- "node_modules/acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
- "dev": true,
- "dependencies": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
- }
- },
"node_modules/acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -4647,31 +4823,10 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
- "node_modules/acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
"node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
@@ -4684,15 +4839,6 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/ansi-escapes": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
@@ -4718,21 +4864,24 @@
}
},
"node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": {
- "color-convert": "^1.9.0"
+ "color-convert": "^2.0.1"
},
"engines": {
- "node": ">=4"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
"dependencies": {
"normalize-path": "^3.0.0",
@@ -4800,18 +4949,22 @@
}
},
"node_modules/arangojs": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-8.0.0.tgz",
- "integrity": "sha512-VjeWxbS18c65Wu6Pr/d5/kW0Chn6ftIfUAzCmG3wUUe8OrRRalSgL6e1+5iY9apocbECo6wTK3kr2goXfLHB+A==",
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-10.2.2.tgz",
+ "integrity": "sha512-3Xllq5inTGjros0mBP9NFxrIW8Di0ldtFurLdrXy5z4NDVJPyJtnwUiiGrMPY21NuVu53wUDE23YN50jnX4epw==",
"dependencies": {
- "@types/node": ">=14",
- "multi-part": "^4.0.0",
- "path-browserify": "^1.0.1",
- "x3-linkedlist": "1.2.0",
- "xhr": "^2.4.1"
+ "@types/node": "^20.11.26"
},
"engines": {
- "node": ">=14"
+ "node": ">=20"
+ },
+ "peerDependencies": {
+ "undici": ">=5.21.0"
+ },
+ "peerDependenciesMeta": {
+ "undici": {
+ "optional": true
+ }
}
},
"node_modules/argparse": {
@@ -4848,15 +5001,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/array.prototype.flat": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
@@ -4907,15 +5051,6 @@
"node": ">=6"
}
},
- "node_modules/astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/async-retry": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz",
@@ -4945,13 +5080,13 @@
}
},
"node_modules/axios": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.1.tgz",
- "integrity": "sha512-Kn4kbSXpkFHCGE6rBFNwIv0GQs4AvDT80jlveJDKFxjbTYMUeB4QtsdPCv6H8Cm19Je7IU6VFtRl2zWZI0rudQ==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
+ "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
"dependencies": {
- "follow-redirects": "^1.15.6",
- "form-data": "^4.0.4",
- "proxy-from-env": "^1.1.0"
+ "follow-redirects": "^1.15.11",
+ "form-data": "^4.0.5",
+ "proxy-from-env": "^2.1.0"
}
},
"node_modules/babel-core": {
@@ -4964,83 +5099,24 @@
}
},
"node_modules/babel-jest": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.6.tgz",
- "integrity": "sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.3.0.tgz",
+ "integrity": "sha512-gRpauEU2KRrCox5Z296aeVHR4jQ98BCnu0IO332D/xpHNOsIH/bgSRk9k6GbKIbBw8vFeN6ctuu6tV8WOyVfYQ==",
"dev": true,
"dependencies": {
- "@jest/transform": "^27.4.6",
- "@jest/types": "^27.4.2",
- "@types/babel__core": "^7.1.14",
- "babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^27.4.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
+ "@jest/transform": "30.3.0",
+ "@types/babel__core": "^7.20.5",
+ "babel-plugin-istanbul": "^7.0.1",
+ "babel-preset-jest": "30.3.0",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
"slash": "^3.0.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
"peerDependencies": {
- "@babel/core": "^7.8.0"
- }
- },
- "node_modules/babel-jest/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/babel-jest/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/babel-jest/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/babel-jest/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/babel-jest/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
+ "@babel/core": "^7.11.0 || ^8.0.0-0"
}
},
"node_modules/babel-jest/node_modules/slash": {
@@ -5052,18 +5128,6 @@
"node": ">=8"
}
},
- "node_modules/babel-jest/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/babel-plugin-dynamic-import-node": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
@@ -5074,34 +5138,31 @@
}
},
"node_modules/babel-plugin-istanbul": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
- "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz",
+ "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.0.0",
"@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^5.0.4",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-instrument": "^6.0.2",
"test-exclude": "^6.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=12"
}
},
"node_modules/babel-plugin-jest-hoist": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz",
- "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.3.0.tgz",
+ "integrity": "sha512-+TRkByhsws6sfPjVaitzadk1I0F5sPvOVUH5tyTSzhePpsGIVrdeunHSw/C36QeocS95OOk8lunc4rlu5Anwsg==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.0.0",
- "@types/babel__traverse": "^7.0.6"
+ "@types/babel__core": "^7.20.5"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/babel-plugin-macros": {
@@ -5184,42 +5245,45 @@
"dev": true
},
"node_modules/babel-preset-current-node-syntax": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
- "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz",
+ "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==",
"dev": true,
"dependencies": {
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.8.3",
+ "@babel/plugin-syntax-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.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.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-top-level-await": "^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"
+ "@babel/core": "^7.0.0 || ^8.0.0-0"
}
},
"node_modules/babel-preset-jest": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz",
- "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.3.0.tgz",
+ "integrity": "sha512-6ZcUbWHC+dMz2vfzdNwi87Z1gQsLNK2uLuK1Q89R11xdvejcivlYYwDlEv0FHX3VwEXpbBQ9uufB/MUNpZGfhQ==",
"dev": true,
"dependencies": {
- "babel-plugin-jest-hoist": "^27.4.0",
- "babel-preset-current-node-syntax": "^1.0.0"
+ "babel-plugin-jest-hoist": "30.3.0",
+ "babel-preset-current-node-syntax": "^1.2.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0"
+ "@babel/core": "^7.11.0 || ^8.0.0-beta.1"
}
},
"node_modules/babel-runtime": {
@@ -5369,12 +5433,6 @@
"node": ">=8"
}
},
- "node_modules/browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
"node_modules/browserslist": {
"version": "4.24.2",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz",
@@ -5451,6 +5509,39 @@
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true
},
+ "node_modules/builtin-modules": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
+ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/builtins": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz",
+ "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^7.0.0"
+ }
+ },
+ "node_modules/builtins/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -5543,17 +5634,40 @@
]
},
"node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
},
"engines": {
- "node": ">=4"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/chalk/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
"node_modules/char-regex": {
@@ -5570,7 +5684,6 @@
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
"integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
"dev": true,
- "optional": true,
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -5592,7 +5705,6 @@
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
- "optional": true,
"dependencies": {
"picomatch": "^2.2.1"
},
@@ -5601,15 +5713,24 @@
}
},
"node_modules/ci-info": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz",
- "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==",
- "dev": true
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz",
+ "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "engines": {
+ "node": ">=8"
+ }
},
"node_modules/cjs-module-lexer": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
- "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz",
+ "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==",
"dev": true
},
"node_modules/cli-cursor": {
@@ -5649,14 +5770,17 @@
}
},
"node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dev": true,
"dependencies": {
"string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
+ "strip-ansi": "^6.0.1",
"wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/clone": {
@@ -5693,7 +5817,7 @@
"node_modules/co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
"dev": true,
"engines": {
"iojs": ">= 1.0.0",
@@ -5701,24 +5825,27 @@
}
},
"node_modules/collect-v8-coverage": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz",
+ "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==",
"dev": true
},
"node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
- "color-name": "1.1.3"
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
}
},
"node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"node_modules/colors": {
@@ -6008,44 +6135,6 @@
"node": ">= 8"
}
},
- "node_modules/cssom": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
- "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
- "dev": true
- },
- "node_modules/cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
- "dev": true,
- "dependencies": {
- "cssom": "~0.3.6"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cssstyle/node_modules/cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
- "dev": true
- },
- "node_modules/data-urls": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
- "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
- "dev": true,
- "dependencies": {
- "abab": "^2.0.3",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/dataloader": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.0.0.tgz",
@@ -6078,17 +6167,19 @@
}
}
},
- "node_modules/decimal.js": {
- "version": "10.3.1",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
- "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
- "dev": true
- },
"node_modules/dedent": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
- "dev": true
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz",
+ "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==",
+ "dev": true,
+ "peerDependencies": {
+ "babel-plugin-macros": "^3.1.0"
+ },
+ "peerDependenciesMeta": {
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
},
"node_modules/deep-is": {
"version": "0.1.4",
@@ -6097,9 +6188,9 @@
"dev": true
},
"node_modules/deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -6196,27 +6287,6 @@
"wrappy": "1"
}
},
- "node_modules/diff-sequences": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz",
- "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==",
- "dev": true,
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "dependencies": {
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/doctrine": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
@@ -6234,27 +6304,6 @@
"resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
"integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
},
- "node_modules/domexception": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
- "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
- "dev": true,
- "dependencies": {
- "webidl-conversions": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/domexception/node_modules/webidl-conversions": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
- "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/dotenv": {
"version": "8.6.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
@@ -6311,12 +6360,12 @@
"dev": true
},
"node_modules/emittery": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz",
- "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==",
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sindresorhus/emittery?sponsor=1"
@@ -6337,18 +6386,6 @@
"node": ">= 0.8"
}
},
- "node_modules/enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
- "dev": true,
- "dependencies": {
- "ansi-colors": "^4.1.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -6512,163 +6549,97 @@
"license": "MIT"
},
"node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/escodegen": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
- "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
- "dev": true,
- "dependencies": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1"
- },
- "bin": {
- "escodegen": "bin/escodegen.js",
- "esgenerate": "bin/esgenerate.js"
- },
- "engines": {
- "node": ">=6.0"
- },
- "optionalDependencies": {
- "source-map": "~0.6.1"
- }
- },
- "node_modules/escodegen/node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/escodegen/node_modules/levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "dependencies": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/escodegen/node_modules/optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dev": true,
- "dependencies": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/escodegen/node_modules/prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/escodegen/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/escodegen/node_modules/type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true,
- "dependencies": {
- "prelude-ls": "~1.1.2"
- },
"engines": {
- "node": ">= 0.8.0"
+ "node": ">=8"
}
},
"node_modules/eslint": {
- "version": "7.32.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
- "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "7.12.11",
- "@eslint/eslintrc": "^0.4.3",
- "@humanwhocodes/config-array": "^0.5.0",
- "ajv": "^6.10.0",
+ "version": "8.57.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
+ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
+ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
+ "dev": true,
+ "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.0.1",
+ "debug": "^4.3.2",
"doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^2.0.0",
- "espree": "^7.3.1",
- "esquery": "^1.4.0",
+ "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",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.1.2",
- "globals": "^13.6.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
+ "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",
- "js-yaml": "^3.13.1",
+ "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.0.4",
+ "minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "progress": "^2.0.0",
- "regexpp": "^3.1.0",
- "semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
- "strip-json-comments": "^3.1.0",
- "table": "^6.0.9",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
},
"bin": {
"eslint": "bin/eslint.js"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/eslint-compat-utils": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz",
+ "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "eslint": ">=6.0.0"
+ }
+ },
+ "node_modules/eslint-compat-utils/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/eslint-config-prettier": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz",
@@ -6682,9 +6653,9 @@
}
},
"node_modules/eslint-config-standard": {
- "version": "16.0.3",
- "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz",
- "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==",
+ "version": "17.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz",
+ "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==",
"dev": true,
"funding": [
{
@@ -6700,11 +6671,14 @@
"url": "https://feross.org/support"
}
],
+ "engines": {
+ "node": ">=12.0.0"
+ },
"peerDependencies": {
- "eslint": "^7.12.1",
- "eslint-plugin-import": "^2.22.1",
- "eslint-plugin-node": "^11.1.0",
- "eslint-plugin-promise": "^4.2.1 || ^5.0.0"
+ "eslint": "^8.0.1",
+ "eslint-plugin-import": "^2.25.2",
+ "eslint-plugin-n": "^15.0.0 || ^16.0.0 ",
+ "eslint-plugin-promise": "^6.0.0"
}
},
"node_modules/eslint-import-resolver-node": {
@@ -6815,23 +6789,25 @@
"node": ">=4"
}
},
- "node_modules/eslint-plugin-es": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
- "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
+ "node_modules/eslint-plugin-es-x": {
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz",
+ "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==",
"dev": true,
+ "funding": [
+ "https://github.com/sponsors/ota-meshi",
+ "https://opencollective.com/eslint"
+ ],
"dependencies": {
- "eslint-utils": "^2.0.0",
- "regexpp": "^3.0.0"
+ "@eslint-community/eslint-utils": "^4.1.2",
+ "@eslint-community/regexpp": "^4.11.0",
+ "eslint-compat-utils": "^0.5.1"
},
"engines": {
- "node": ">=8.10.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
+ "node": "^14.18.0 || >=16.0.0"
},
"peerDependencies": {
- "eslint": ">=4.19.1"
+ "eslint": ">=8"
}
},
"node_modules/eslint-plugin-import": {
@@ -6889,169 +6865,148 @@
"dev": true
},
"node_modules/eslint-plugin-jest": {
- "version": "24.7.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz",
- "integrity": "sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA==",
+ "version": "29.15.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.15.1.tgz",
+ "integrity": "sha512-6BjyErCQauz3zfJvzLw/kAez2lf4LEpbHLvWBfEcG4EI0ZiRSwjoH2uZulMouU8kRkBH+S0rhqn11IhTvxKgKw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/experimental-utils": "^4.0.1"
+ "@typescript-eslint/utils": "^8.0.0"
},
"engines": {
- "node": ">=10"
+ "node": "^20.12.0 || ^22.0.0 || >=24.0.0"
},
"peerDependencies": {
- "@typescript-eslint/eslint-plugin": ">= 4",
- "eslint": ">=5"
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
+ "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
+ "jest": "*",
+ "typescript": ">=4.8.4 <7.0.0"
},
"peerDependenciesMeta": {
"@typescript-eslint/eslint-plugin": {
"optional": true
+ },
+ "jest": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
}
}
},
- "node_modules/eslint-plugin-node": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
- "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==",
+ "node_modules/eslint-plugin-n": {
+ "version": "16.6.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz",
+ "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==",
"dev": true,
"dependencies": {
- "eslint-plugin-es": "^3.0.0",
- "eslint-utils": "^2.0.0",
- "ignore": "^5.1.1",
- "minimatch": "^3.0.4",
- "resolve": "^1.10.1",
- "semver": "^6.1.0"
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "builtins": "^5.0.1",
+ "eslint-plugin-es-x": "^7.5.0",
+ "get-tsconfig": "^4.7.0",
+ "globals": "^13.24.0",
+ "ignore": "^5.2.4",
+ "is-builtin-module": "^3.2.1",
+ "is-core-module": "^2.12.1",
+ "minimatch": "^3.1.2",
+ "resolve": "^1.22.2",
+ "semver": "^7.5.3"
},
"engines": {
- "node": ">=8.10.0"
+ "node": ">=16.0.0"
},
- "peerDependencies": {
- "eslint": ">=5.16.0"
- }
- },
- "node_modules/eslint-plugin-node/node_modules/ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/eslint-plugin-promise": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz",
- "integrity": "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==",
- "dev": true,
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
},
"peerDependencies": {
- "eslint": "^7.0.0"
- }
- },
- "node_modules/eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- },
- "engines": {
- "node": ">=8.0.0"
+ "eslint": ">=7.0.0"
}
},
- "node_modules/eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "node_modules/eslint-plugin-n/node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
"dependencies": {
- "eslint-visitor-keys": "^1.1.0"
+ "type-fest": "^0.20.2"
},
"engines": {
- "node": ">=6"
+ "node": ">=8"
},
"funding": {
- "url": "https://github.com/sponsors/mysticatea"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "node_modules/eslint-plugin-n/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
"engines": {
- "node": ">=4"
+ "node": ">=10"
}
},
- "node_modules/eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "node_modules/eslint-plugin-n/node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true,
"engines": {
"node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint/node_modules/@babel/code-frame": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
- "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
- "dev": true,
- "dependencies": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "node_modules/eslint/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/eslint-plugin-promise": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz",
+ "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==",
"dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
"engines": {
- "node": ">=8"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0"
}
},
- "node_modules/eslint/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
},
"engines": {
- "node": ">=10"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
"engines": {
- "node": ">=7.0.0"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "node_modules/eslint/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "node_modules/eslint/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
"node_modules/eslint/node_modules/escape-string-regexp": {
@@ -7066,62 +7021,69 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint/node_modules/globals": {
- "version": "13.11.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
- "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
+ "node_modules/eslint/node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
"dependencies": {
- "type-fest": "^0.20.2"
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "node_modules/eslint/node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=10.13.0"
}
},
- "node_modules/eslint/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "node_modules/eslint/node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
"dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
+ "type-fest": "^0.20.2"
},
"engines": {
- "node": ">=10"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/eslint/node_modules/js-yaml": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
"dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
+ "argparse": "^2.0.1"
},
- "engines": {
- "node": ">=8"
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/eslint/node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "node_modules/eslint/node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
"engines": {
"node": ">=10"
},
@@ -7129,27 +7091,63 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/espree": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
- "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "node_modules/eslint/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"dependencies": {
- "acorn": "^7.4.0",
- "acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^1.3.0"
+ "yocto-queue": "^0.1.0"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "node_modules/espree/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "node_modules/eslint/node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
"engines": {
- "node": ">=4"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/esprima": {
@@ -7166,9 +7164,9 @@
}
},
"node_modules/esquery": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
- "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
"dev": true,
"dependencies": {
"estraverse": "^5.1.0"
@@ -7177,15 +7175,6 @@
"node": ">=0.10"
}
},
- "node_modules/esquery/node_modules/estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
"node_modules/esrecurse": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
@@ -7198,19 +7187,10 @@
"node": ">=4.0"
}
},
- "node_modules/esrecurse/node_modules/estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
"node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
"engines": {
"node": ">=4.0"
@@ -7257,28 +7237,30 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "node_modules/exit": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "node_modules/exit-x": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz",
+ "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==",
"dev": true,
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/expect": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.6.tgz",
- "integrity": "sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-30.3.0.tgz",
+ "integrity": "sha512-1zQrciTiQfRdo7qJM1uG4navm8DayFa2TgCSRlzUyNkhcJ6XUZF3hjnpkyr3VhAqPH7i/9GkG7Tv5abz6fqz0Q==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.4.2",
- "jest-get-type": "^27.4.0",
- "jest-matcher-utils": "^27.4.6",
- "jest-message-util": "^27.4.6"
+ "@jest/expect-utils": "30.3.0",
+ "@jest/get-type": "30.1.0",
+ "jest-matcher-utils": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-mock": "30.3.0",
+ "jest-util": "30.3.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/express": {
@@ -7395,22 +7377,6 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
- "node_modules/fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -7420,7 +7386,7 @@
"node_modules/fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
"node_modules/fast-safe-stringify": {
@@ -7439,9 +7405,9 @@
}
},
"node_modules/fb-watchman": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
- "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
"dev": true,
"dependencies": {
"bser": "2.1.1"
@@ -7459,22 +7425,6 @@
"node": "^10.12.0 || >=12.0.0"
}
},
- "node_modules/file-type": {
- "version": "16.5.4",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz",
- "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==",
- "dependencies": {
- "readable-web-to-node-stream": "^3.0.0",
- "strtok3": "^6.2.4",
- "token-types": "^4.1.1"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/file-type?sponsor=1"
- }
- },
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@@ -7549,15 +7499,15 @@
}
},
"node_modules/flatted": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
- "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
"node_modules/follow-redirects": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
+ "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
"funding": [
{
"type": "individual",
@@ -7682,9 +7632,9 @@
"dev": true
},
"node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
"optional": true,
@@ -7703,12 +7653,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "dev": true
- },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -7799,6 +7743,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/get-tsconfig": {
+ "version": "4.13.7",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz",
+ "integrity": "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==",
+ "dev": true,
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
"node_modules/glob": {
"version": "7.1.7",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
@@ -7849,44 +7805,6 @@
"node": ">=4"
}
},
- "node_modules/globby": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
- "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
- "dev": true,
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/globby/node_modules/ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/globby/node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/gopd": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
@@ -7904,6 +7822,12 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
"node_modules/graphql": {
"version": "16.12.0",
"resolved": "https://registry.npmjs.org/graphql/-/graphql-16.12.0.tgz",
@@ -8109,18 +8033,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/html-encoding-sniffer": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
- "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
- "dev": true,
- "dependencies": {
- "whatwg-encoding": "^1.0.5"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -8147,33 +8059,6 @@
"url": "https://opencollective.com/express"
}
},
- "node_modules/http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "dev": true,
- "dependencies": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "dev": true,
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
@@ -8198,6 +8083,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true,
"funding": [
{
"type": "github",
@@ -8214,14 +8100,21 @@
]
},
"node_modules/ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
"dev": true,
"engines": {
"node": ">= 4"
}
},
+ "node_modules/ignore-by-default": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
+ "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
+ "dev": true,
+ "license": "ISC"
+ },
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -8248,9 +8141,9 @@
}
},
"node_modules/import-local": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
- "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
"dev": true,
"dependencies": {
"pkg-dir": "^4.2.0",
@@ -8396,6 +8289,21 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-builtin-module": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+ "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
+ "dev": true,
+ "dependencies": {
+ "builtin-modules": "^3.3.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-callable": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
@@ -8408,12 +8316,15 @@
}
},
"node_modules/is-core-module": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
- "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
"dev": true,
"dependencies": {
- "has": "^1.0.3"
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -8523,6 +8434,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
@@ -8535,12 +8455,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-potential-custom-element-name": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
- "dev": true
- },
"node_modules/is-regex": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -8623,12 +8537,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
"node_modules/is-unicode-supported": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
@@ -8684,42 +8592,54 @@
}
},
"node_modules/istanbul-lib-coverage": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
- "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/istanbul-lib-instrument": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz",
- "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
"dev": true,
"dependencies": {
- "@babel/core": "^7.12.3",
- "@babel/parser": "^7.14.7",
- "@istanbuljs/schema": "^0.1.2",
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
"istanbul-lib-coverage": "^3.2.0",
- "semver": "^6.3.0"
+ "semver": "^7.5.4"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
"dependencies": {
"istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
+ "make-dir": "^4.0.0",
"supports-color": "^7.1.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
}
},
"node_modules/istanbul-lib-report/node_modules/has-flag": {
@@ -8732,20 +8652,32 @@
}
},
"node_modules/istanbul-lib-report/node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
"dependencies": {
- "semver": "^6.0.0"
+ "semver": "^7.5.3"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/istanbul-lib-report/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/istanbul-lib-report/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -8759,32 +8691,23 @@
}
},
"node_modules/istanbul-lib-source-maps": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
- "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz",
+ "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==",
"dev": true,
"dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.23",
"debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
+ "istanbul-lib-coverage": "^3.0.0"
},
"engines": {
"node": ">=10"
}
},
- "node_modules/istanbul-lib-source-maps/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/istanbul-reports": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz",
- "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
+ "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
"dev": true,
"dependencies": {
"html-escaper": "^2.0.0",
@@ -8815,20 +8738,21 @@
}
},
"node_modules/jest": {
- "version": "27.4.7",
- "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.7.tgz",
- "integrity": "sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-30.3.0.tgz",
+ "integrity": "sha512-AkXIIFcaazymvey2i/+F94XRnM6TsVLZDhBMLsd1Sf/W0wzsvvpjeyUrCZD6HGG4SDYPgDJDBKeiJTBb10WzMg==",
"dev": true,
"dependencies": {
- "@jest/core": "^27.4.7",
- "import-local": "^3.0.2",
- "jest-cli": "^27.4.7"
+ "@jest/core": "30.3.0",
+ "@jest/types": "30.3.0",
+ "import-local": "^3.2.0",
+ "jest-cli": "30.3.0"
},
"bin": {
"jest": "bin/jest.js"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -8840,152 +8764,111 @@
}
},
"node_modules/jest-changed-files": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz",
- "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.3.0.tgz",
+ "integrity": "sha512-B/7Cny6cV5At6M25EWDgf9S617lHivamL8vl6KEpJqkStauzcG4e+WPfDgMMF+H4FVH4A2PLRyvgDJan4441QA==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.4.2",
- "execa": "^5.0.0",
- "throat": "^6.0.1"
+ "execa": "^5.1.1",
+ "jest-util": "30.3.0",
+ "p-limit": "^3.1.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-circus": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.6.tgz",
- "integrity": "sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ==",
+ "node_modules/jest-changed-files/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.4.6",
- "@jest/test-result": "^27.4.6",
- "@jest/types": "^27.4.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "dedent": "^0.7.0",
- "expect": "^27.4.6",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^27.4.6",
- "jest-matcher-utils": "^27.4.6",
- "jest-message-util": "^27.4.6",
- "jest-runtime": "^27.4.6",
- "jest-snapshot": "^27.4.6",
- "jest-util": "^27.4.2",
- "pretty-format": "^27.4.6",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3",
- "throat": "^6.0.1"
+ "yocto-queue": "^0.1.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/jest-circus/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/jest-circus": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.3.0.tgz",
+ "integrity": "sha512-PyXq5szeSfR/4f1lYqCmmQjh0vqDkURUYi9N6whnHjlRz4IUQfMcXkGLeEoiJtxtyPqgUaUUfyQlApXWBSN1RA==",
"dev": true,
"dependencies": {
- "color-convert": "^2.0.1"
+ "@jest/environment": "30.3.0",
+ "@jest/expect": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "co": "^4.6.0",
+ "dedent": "^1.6.0",
+ "is-generator-fn": "^2.1.0",
+ "jest-each": "30.3.0",
+ "jest-matcher-utils": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-runtime": "30.3.0",
+ "jest-snapshot": "30.3.0",
+ "jest-util": "30.3.0",
+ "p-limit": "^3.1.0",
+ "pretty-format": "30.3.0",
+ "pure-rand": "^7.0.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.6"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-circus/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/jest-circus/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "yocto-queue": "^0.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/jest-circus/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/jest-circus/node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/jest-circus/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/jest-circus/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-circus/node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-circus/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
"engines": {
"node": ">=8"
}
},
"node_modules/jest-cli": {
- "version": "27.4.7",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.7.tgz",
- "integrity": "sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw==",
- "dev": true,
- "dependencies": {
- "@jest/core": "^27.4.7",
- "@jest/test-result": "^27.4.6",
- "@jest/types": "^27.4.2",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "import-local": "^3.0.2",
- "jest-config": "^27.4.7",
- "jest-util": "^27.4.2",
- "jest-validate": "^27.4.6",
- "prompts": "^2.0.1",
- "yargs": "^16.2.0"
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.3.0.tgz",
+ "integrity": "sha512-l6Tqx+j1fDXJEW5bqYykDQQ7mQg+9mhWXtnj+tQZrTWYHyHoi6Be8HPumDSA+UiX2/2buEgjA58iJzdj146uCw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/core": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/types": "30.3.0",
+ "chalk": "^4.1.2",
+ "exit-x": "^0.2.2",
+ "import-local": "^3.2.0",
+ "jest-config": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0",
+ "yargs": "^17.7.2"
},
"bin": {
"jest": "bin/jest.js"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -8996,21 +8879,6 @@
}
}
},
- "node_modules/jest-cli/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
"node_modules/jest-cli/node_modules/camelcase": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
@@ -9023,132 +8891,80 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/jest-cli/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jest-cli/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/jest-cli/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/jest-cli/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/jest-cli/node_modules/jest-validate": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz",
- "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz",
+ "integrity": "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.4.2",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.4.0",
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.3.0",
+ "camelcase": "^6.3.0",
+ "chalk": "^4.1.2",
"leven": "^3.1.0",
- "pretty-format": "^27.4.6"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/jest-cli/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
+ "pretty-format": "30.3.0"
},
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-config": {
- "version": "27.4.7",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.7.tgz",
- "integrity": "sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.8.0",
- "@jest/test-sequencer": "^27.4.6",
- "@jest/types": "^27.4.2",
- "babel-jest": "^27.4.6",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.1",
- "graceful-fs": "^4.2.4",
- "jest-circus": "^27.4.6",
- "jest-environment-jsdom": "^27.4.6",
- "jest-environment-node": "^27.4.6",
- "jest-get-type": "^27.4.0",
- "jest-jasmine2": "^27.4.6",
- "jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.6",
- "jest-runner": "^27.4.6",
- "jest-util": "^27.4.2",
- "jest-validate": "^27.4.6",
- "micromatch": "^4.0.4",
- "pretty-format": "^27.4.6",
- "slash": "^3.0.0"
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.3.0.tgz",
+ "integrity": "sha512-WPMAkMAtNDY9P/oKObtsRG/6KTrhtgPJoBTmk20uDn4Uy6/3EJnnaZJre/FMT1KVRx8cve1r7/FlMIOfRVWL4w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.27.4",
+ "@jest/get-type": "30.1.0",
+ "@jest/pattern": "30.0.1",
+ "@jest/test-sequencer": "30.3.0",
+ "@jest/types": "30.3.0",
+ "babel-jest": "30.3.0",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "deepmerge": "^4.3.1",
+ "glob": "^10.5.0",
+ "graceful-fs": "^4.2.11",
+ "jest-circus": "30.3.0",
+ "jest-docblock": "30.2.0",
+ "jest-environment-node": "30.3.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.3.0",
+ "jest-runner": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0",
+ "parse-json": "^5.2.0",
+ "pretty-format": "30.3.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
"peerDependencies": {
+ "@types/node": "*",
+ "esbuild-register": ">=3.4.0",
"ts-node": ">=9.0.0"
},
"peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "esbuild-register": {
+ "optional": true
+ },
"ts-node": {
"optional": true
}
}
},
- "node_modules/jest-config/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/jest-config/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
"dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "balanced-match": "^1.0.0"
}
},
"node_modules/jest-config/node_modules/camelcase": {
@@ -9163,64 +8979,94 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/jest-config/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/jest-config/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
- "engines": {
- "node": ">=10"
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/jest-config/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/jest-config/node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
"dependencies": {
- "color-name": "~1.1.4"
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/jest-config/node_modules/jest-validate": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz",
+ "integrity": "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==",
+ "dev": true,
+ "dependencies": {
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.3.0",
+ "camelcase": "^6.3.0",
+ "chalk": "^4.1.2",
+ "leven": "^3.1.0",
+ "pretty-format": "30.3.0"
},
"engines": {
- "node": ">=7.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-config/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "node_modules/jest-config/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true
},
- "node_modules/jest-config/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "node_modules/jest-config/node_modules/minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.2"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/jest-config/node_modules/jest-validate": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz",
- "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==",
+ "node_modules/jest-config/node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.4.2",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.4.0",
- "leven": "^3.1.0",
- "pretty-format": "^27.4.6"
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/jest-config/node_modules/slash": {
@@ -9232,1197 +9078,591 @@
"node": ">=8"
}
},
- "node_modules/jest-config/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/jest-diff": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.3.0.tgz",
+ "integrity": "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==",
"dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
+ "@jest/diff-sequences": "30.3.0",
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "pretty-format": "30.3.0"
},
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-diff": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.6.tgz",
- "integrity": "sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w==",
+ "node_modules/jest-docblock": {
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz",
+ "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==",
"dev": true,
"dependencies": {
- "chalk": "^4.0.0",
- "diff-sequences": "^27.4.0",
- "jest-get-type": "^27.4.0",
- "pretty-format": "^27.4.6"
+ "detect-newline": "^3.1.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-diff/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/jest-each": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.3.0.tgz",
+ "integrity": "sha512-V8eMndg/aZ+3LnCJgSm13IxS5XSBM22QSZc9BtPK8Dek6pm+hfUNfwBdvsB3d342bo1q7wnSkC38zjX259qZNA==",
"dev": true,
"dependencies": {
- "color-convert": "^2.0.1"
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.3.0",
+ "chalk": "^4.1.2",
+ "jest-util": "30.3.0",
+ "pretty-format": "30.3.0"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-diff/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/jest-environment-node": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.3.0.tgz",
+ "integrity": "sha512-4i6HItw/JSiJVsC5q0hnKIe/hbYfZLVG9YJ/0pU9Hz2n/9qZe3Rhn5s5CUZA5ORZlcdT/vmAXRMyONXJwPrmYQ==",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "@jest/environment": "30.3.0",
+ "@jest/fake-timers": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "jest-mock": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0"
},
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-environment-node/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
"engines": {
"node": ">=10"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/jest-diff/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/jest-environment-node/node_modules/jest-validate": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz",
+ "integrity": "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==",
"dev": true,
"dependencies": {
- "color-name": "~1.1.4"
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.3.0",
+ "camelcase": "^6.3.0",
+ "chalk": "^4.1.2",
+ "leven": "^3.1.0",
+ "pretty-format": "30.3.0"
},
"engines": {
- "node": ">=7.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-diff/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/jest-diff/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "node_modules/jest-fetch-mock": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz",
+ "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==",
"dev": true,
- "engines": {
- "node": ">=8"
+ "dependencies": {
+ "cross-fetch": "^3.0.4",
+ "promise-polyfill": "^8.1.3"
}
},
- "node_modules/jest-diff/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/jest-haste-map": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.3.0.tgz",
+ "integrity": "sha512-mMi2oqG4KRU0R9QEtscl87JzMXfUhbKaFqOxmjb2CKcbHcUGFrJCBWHmnTiUqi6JcnzoBlO4rWfpdl2k/RfLCA==",
"dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "anymatch": "^3.1.3",
+ "fb-watchman": "^2.0.2",
+ "graceful-fs": "^4.2.11",
+ "jest-regex-util": "30.0.1",
+ "jest-util": "30.3.0",
+ "jest-worker": "30.3.0",
+ "picomatch": "^4.0.3",
+ "walker": "^1.0.8"
},
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.3.3"
}
},
- "node_modules/jest-docblock": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz",
- "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==",
+ "node_modules/jest-haste-map/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/jest-leak-detector": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.3.0.tgz",
+ "integrity": "sha512-cuKmUUGIjfXZAiGJ7TbEMx0bcqNdPPI6P1V+7aF+m/FUJqFDxkFR4JqkTu8ZOiU5AaX/x0hZ20KaaIPXQzbMGQ==",
"dev": true,
"dependencies": {
- "detect-newline": "^3.0.0"
+ "@jest/get-type": "30.1.0",
+ "pretty-format": "30.3.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-each": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.6.tgz",
- "integrity": "sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA==",
+ "node_modules/jest-matcher-utils": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.3.0.tgz",
+ "integrity": "sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.4.2",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.4.0",
- "jest-util": "^27.4.2",
- "pretty-format": "^27.4.6"
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "jest-diff": "30.3.0",
+ "pretty-format": "30.3.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-each/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/jest-message-util": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.3.0.tgz",
+ "integrity": "sha512-Z/j4Bo+4ySJ+JPJN3b2Qbl9hDq3VrXmnjjGEWD/x0BCXeOXPTV1iZYYzl2X8c1MaCOL+ewMyNBcm88sboE6YWw==",
"dev": true,
"dependencies": {
- "color-convert": "^2.0.1"
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.3.0",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.3",
+ "pretty-format": "30.3.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.6"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-each/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/jest-message-util/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
"engines": {
- "node": ">=10"
+ "node": ">=12"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jest-each/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/jest-each/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/jest-each/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "node_modules/jest-message-util/node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
"engines": {
"node": ">=8"
}
},
- "node_modules/jest-each/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/jest-mock": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.3.0.tgz",
+ "integrity": "sha512-OTzICK8CpE+t4ndhKrwlIdbM6Pn8j00lvmSmq5ejiO+KxukbLjgOflKWMn3KE34EZdQm5RqTuKj+5RIEniYhog==",
"dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "jest-util": "30.3.0"
},
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-environment-jsdom": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz",
- "integrity": "sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA==",
+ "node_modules/jest-pnp-resolver": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
"dev": true,
- "dependencies": {
- "@jest/environment": "^27.4.6",
- "@jest/fake-timers": "^27.4.6",
- "@jest/types": "^27.4.2",
- "@types/node": "*",
- "jest-mock": "^27.4.6",
- "jest-util": "^27.4.2",
- "jsdom": "^16.6.0"
- },
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=6"
+ },
+ "peerDependencies": {
+ "jest-resolve": "*"
+ },
+ "peerDependenciesMeta": {
+ "jest-resolve": {
+ "optional": true
+ }
}
},
- "node_modules/jest-environment-node": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.6.tgz",
- "integrity": "sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ==",
+ "node_modules/jest-regex-util": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz",
+ "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==",
"dev": true,
- "dependencies": {
- "@jest/environment": "^27.4.6",
- "@jest/fake-timers": "^27.4.6",
- "@jest/types": "^27.4.2",
- "@types/node": "*",
- "jest-mock": "^27.4.6",
- "jest-util": "^27.4.2"
- },
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-fetch-mock": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz",
- "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==",
+ "node_modules/jest-resolve": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.3.0.tgz",
+ "integrity": "sha512-NRtTAHQlpd15F9rUR36jqwelbrDV/dY4vzNte3S2kxCKUJRYNd5/6nTSbYiak1VX5g8IoFF23Uj5TURkUW8O5g==",
"dev": true,
"dependencies": {
- "cross-fetch": "^3.0.4",
- "promise-polyfill": "^8.1.3"
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.3.0",
+ "jest-pnp-resolver": "^1.2.3",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0",
+ "slash": "^3.0.0",
+ "unrs-resolver": "^1.7.11"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-get-type": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz",
- "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==",
+ "node_modules/jest-resolve-dependencies": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.3.0.tgz",
+ "integrity": "sha512-9ev8s3YN6Hsyz9LV75XUwkCVFlwPbaFn6Wp75qnI0wzAINYWY8Fb3+6y59Rwd3QaS3kKXffHXsZMziMavfz/nw==",
"dev": true,
+ "dependencies": {
+ "jest-regex-util": "30.0.1",
+ "jest-snapshot": "30.3.0"
+ },
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-haste-map": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.6.tgz",
- "integrity": "sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ==",
+ "node_modules/jest-resolve/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
- "dependencies": {
- "@jest/types": "^27.4.2",
- "@types/graceful-fs": "^4.1.2",
- "@types/node": "*",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-regex-util": "^27.4.0",
- "jest-serializer": "^27.4.0",
- "jest-util": "^27.4.2",
- "jest-worker": "^27.4.6",
- "micromatch": "^4.0.4",
- "walker": "^1.0.7"
- },
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=10"
},
- "optionalDependencies": {
- "fsevents": "^2.3.2"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/jest-jasmine2": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz",
- "integrity": "sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw==",
+ "node_modules/jest-resolve/node_modules/jest-validate": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz",
+ "integrity": "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.4.6",
- "@jest/source-map": "^27.4.0",
- "@jest/test-result": "^27.4.6",
- "@jest/types": "^27.4.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "expect": "^27.4.6",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^27.4.6",
- "jest-matcher-utils": "^27.4.6",
- "jest-message-util": "^27.4.6",
- "jest-runtime": "^27.4.6",
- "jest-snapshot": "^27.4.6",
- "jest-util": "^27.4.2",
- "pretty-format": "^27.4.6",
- "throat": "^6.0.1"
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.3.0",
+ "camelcase": "^6.3.0",
+ "chalk": "^4.1.2",
+ "leven": "^3.1.0",
+ "pretty-format": "30.3.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-jasmine2/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/jest-resolve/node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
"engines": {
"node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/jest-jasmine2/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/jest-runner": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.3.0.tgz",
+ "integrity": "sha512-gDv6C9LGKWDPLia9TSzZwf4h3kMQCqyTpq+95PODnTRDO0g9os48XIYYkS6D236vjpBir2fF63YmJFtqkS5Duw==",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "@jest/console": "30.3.0",
+ "@jest/environment": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "emittery": "^0.13.1",
+ "exit-x": "^0.2.2",
+ "graceful-fs": "^4.2.11",
+ "jest-docblock": "30.2.0",
+ "jest-environment-node": "30.3.0",
+ "jest-haste-map": "30.3.0",
+ "jest-leak-detector": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-resolve": "30.3.0",
+ "jest-runtime": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-watcher": "30.3.0",
+ "jest-worker": "30.3.0",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runner/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/jest-jasmine2/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/jest-runner/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
"engines": {
- "node": ">=7.0.0"
+ "node": ">=0.10.0"
}
},
- "node_modules/jest-jasmine2/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/jest-jasmine2/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "node_modules/jest-runner/node_modules/source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
- "engines": {
- "node": ">=8"
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
}
},
- "node_modules/jest-jasmine2/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
+ "node_modules/jest-runtime": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.3.0.tgz",
+ "integrity": "sha512-CgC+hIBJbuh78HEffkhNKcbXAytQViplcl8xupqeIWyKQF50kCQA8J7GeJCkjisC6hpnC9Muf8jV5RdtdFbGng==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "30.3.0",
+ "@jest/fake-timers": "30.3.0",
+ "@jest/globals": "30.3.0",
+ "@jest/source-map": "30.0.1",
+ "@jest/test-result": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "cjs-module-lexer": "^2.1.0",
+ "collect-v8-coverage": "^1.0.2",
+ "glob": "^10.5.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-mock": "30.3.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.3.0",
+ "jest-snapshot": "30.3.0",
+ "jest-util": "30.3.0",
+ "slash": "^3.0.0",
+ "strip-bom": "^4.0.0"
},
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-leak-detector": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz",
- "integrity": "sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA==",
+ "node_modules/jest-runtime/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
"dependencies": {
- "jest-get-type": "^27.4.0",
- "pretty-format": "^27.4.6"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "balanced-match": "^1.0.0"
}
},
- "node_modules/jest-matcher-utils": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz",
- "integrity": "sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA==",
+ "node_modules/jest-runtime/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"dev": true,
"dependencies": {
- "chalk": "^4.0.0",
- "jest-diff": "^27.4.6",
- "jest-get-type": "^27.4.0",
- "pretty-format": "^27.4.6"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/jest-matcher-utils/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/jest-runtime/node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
"dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
+ "@isaacs/cliui": "^8.0.2"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
}
},
- "node_modules/jest-matcher-utils/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/jest-runtime/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
+ },
+ "node_modules/jest-runtime/node_modules/minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "brace-expansion": "^2.0.2"
},
"engines": {
- "node": ">=10"
+ "node": ">=16 || 14 >=14.17"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/jest-matcher-utils/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/jest-runtime/node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dev": true,
"dependencies": {
- "color-name": "~1.1.4"
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
},
"engines": {
- "node": ">=7.0.0"
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/jest-matcher-utils/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/jest-matcher-utils/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "node_modules/jest-runtime/node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
"engines": {
"node": ">=8"
}
},
- "node_modules/jest-matcher-utils/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/jest-snapshot": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.3.0.tgz",
+ "integrity": "sha512-f14c7atpb4O2DeNhwcvS810Y63wEn8O1HqK/luJ4F6M4NjvxmAKQwBUWjbExUtMxWJQ0wVgmCKymeJK6NZMnfQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.27.4",
+ "@babel/generator": "^7.27.5",
+ "@babel/plugin-syntax-jsx": "^7.27.1",
+ "@babel/plugin-syntax-typescript": "^7.27.1",
+ "@babel/types": "^7.27.3",
+ "@jest/expect-utils": "30.3.0",
+ "@jest/get-type": "30.1.0",
+ "@jest/snapshot-utils": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
+ "babel-preset-current-node-syntax": "^1.2.0",
+ "chalk": "^4.1.2",
+ "expect": "30.3.0",
+ "graceful-fs": "^4.2.11",
+ "jest-diff": "30.3.0",
+ "jest-matcher-utils": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-util": "30.3.0",
+ "pretty-format": "30.3.0",
+ "semver": "^7.7.2",
+ "synckit": "^0.11.8"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
+ "bin": {
+ "semver": "bin/semver.js"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
}
},
- "node_modules/jest-message-util": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.6.tgz",
- "integrity": "sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA==",
+ "node_modules/jest-util": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.3.0.tgz",
+ "integrity": "sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.12.13",
- "@jest/types": "^27.4.2",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "micromatch": "^4.0.4",
- "pretty-format": "^27.4.6",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.3"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-message-util/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/jest-util/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
"engines": {
- "node": ">=8"
+ "node": ">=12"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/jest-message-util/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/jest-validate": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jest-message-util/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/jest-message-util/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/jest-message-util/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-message-util/node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-message-util/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-mock": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.6.tgz",
- "integrity": "sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^27.4.2",
- "@types/node": "*"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/jest-pnp-resolver": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
- "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
- "dev": true,
- "engines": {
- "node": ">=6"
- },
- "peerDependencies": {
- "jest-resolve": "*"
- },
- "peerDependenciesMeta": {
- "jest-resolve": {
- "optional": true
- }
- }
- },
- "node_modules/jest-regex-util": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz",
- "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==",
- "dev": true,
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/jest-resolve": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.6.tgz",
- "integrity": "sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^27.4.2",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.6",
- "jest-pnp-resolver": "^1.2.2",
- "jest-util": "^27.4.2",
- "jest-validate": "^27.4.6",
- "resolve": "^1.20.0",
- "resolve.exports": "^1.1.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/jest-resolve-dependencies": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz",
- "integrity": "sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^27.4.2",
- "jest-regex-util": "^27.4.0",
- "jest-snapshot": "^27.4.6"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/jest-resolve/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/jest-resolve/node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/jest-resolve/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jest-resolve/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/jest-resolve/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/jest-resolve/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-resolve/node_modules/jest-validate": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz",
- "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^27.4.2",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.4.0",
- "leven": "^3.1.0",
- "pretty-format": "^27.4.6"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/jest-resolve/node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-resolve/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-runner": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.6.tgz",
- "integrity": "sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg==",
- "dev": true,
- "dependencies": {
- "@jest/console": "^27.4.6",
- "@jest/environment": "^27.4.6",
- "@jest/test-result": "^27.4.6",
- "@jest/transform": "^27.4.6",
- "@jest/types": "^27.4.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "emittery": "^0.8.1",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-docblock": "^27.4.0",
- "jest-environment-jsdom": "^27.4.6",
- "jest-environment-node": "^27.4.6",
- "jest-haste-map": "^27.4.6",
- "jest-leak-detector": "^27.4.6",
- "jest-message-util": "^27.4.6",
- "jest-resolve": "^27.4.6",
- "jest-runtime": "^27.4.6",
- "jest-util": "^27.4.2",
- "jest-worker": "^27.4.6",
- "source-map-support": "^0.5.6",
- "throat": "^6.0.1"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/jest-runner/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/jest-runner/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jest-runner/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/jest-runner/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/jest-runner/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-runner/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-runtime": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.6.tgz",
- "integrity": "sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ==",
- "dev": true,
- "dependencies": {
- "@jest/environment": "^27.4.6",
- "@jest/fake-timers": "^27.4.6",
- "@jest/globals": "^27.4.6",
- "@jest/source-map": "^27.4.0",
- "@jest/test-result": "^27.4.6",
- "@jest/transform": "^27.4.6",
- "@jest/types": "^27.4.2",
- "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.4",
- "jest-haste-map": "^27.4.6",
- "jest-message-util": "^27.4.6",
- "jest-mock": "^27.4.6",
- "jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.6",
- "jest-snapshot": "^27.4.6",
- "jest-util": "^27.4.2",
- "slash": "^3.0.0",
- "strip-bom": "^4.0.0"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/jest-runtime/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/jest-runtime/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jest-runtime/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/jest-runtime/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/jest-runtime/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-runtime/node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-runtime/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-serializer": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz",
- "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "graceful-fs": "^4.2.4"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/jest-snapshot": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.6.tgz",
- "integrity": "sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ==",
- "dev": true,
- "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.4.6",
- "@jest/types": "^27.4.2",
- "@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.4.6",
- "graceful-fs": "^4.2.4",
- "jest-diff": "^27.4.6",
- "jest-get-type": "^27.4.0",
- "jest-haste-map": "^27.4.6",
- "jest-matcher-utils": "^27.4.6",
- "jest-message-util": "^27.4.6",
- "jest-util": "^27.4.2",
- "natural-compare": "^1.4.0",
- "pretty-format": "^27.4.6",
- "semver": "^7.3.2"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/jest-snapshot/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/jest-snapshot/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jest-snapshot/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/jest-snapshot/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/jest-snapshot/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-snapshot/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/jest-snapshot/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-util": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz",
- "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^27.4.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "graceful-fs": "^4.2.4",
- "picomatch": "^2.2.3"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/jest-util/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/jest-util/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jest-util/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/jest-util/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/jest-util/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-util/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-validate": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
- "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
- "dev": true,
- "license": "MIT",
+ "license": "MIT",
"dependencies": {
"@jest/types": "^29.6.3",
"camelcase": "^6.2.0",
@@ -10453,32 +9693,6 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/jest-validate/node_modules/@types/yargs": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
- "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/jest-validate/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
"node_modules/jest-validate/node_modules/camelcase": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
@@ -10492,53 +9706,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/jest-validate/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jest-validate/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/jest-validate/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/jest-validate/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/jest-validate/node_modules/jest-get-type": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
@@ -10577,126 +9744,39 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/jest-validate/node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/jest-validate/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/jest-watcher": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.6.tgz",
- "integrity": "sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.3.0.tgz",
+ "integrity": "sha512-PJ1d9ThtTR8aMiBWUdcownq9mDdLXsQzJayTk4kmaBRHKvwNQn+ANveuhEBUyNI2hR1TVhvQ8D5kHubbzBHR/w==",
"dev": true,
"dependencies": {
- "@jest/test-result": "^27.4.6",
- "@jest/types": "^27.4.2",
+ "@jest/test-result": "30.3.0",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "jest-util": "^27.4.2",
- "string-length": "^4.0.1"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/jest-watcher/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/jest-watcher/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/jest-watcher/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/jest-watcher/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/jest-watcher/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-watcher/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
+ "ansi-escapes": "^4.3.2",
+ "chalk": "^4.1.2",
+ "emittery": "^0.13.1",
+ "jest-util": "30.3.0",
+ "string-length": "^4.0.2"
},
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-worker": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz",
- "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.3.0.tgz",
+ "integrity": "sha512-DrCKkaQwHexjRUFTmPzs7sHQe0TSj9nvDALKGdwmK5mW9v7j90BudWirKAJHt3QQ9Dhrg1F7DogPzhChppkJpQ==",
"dev": true,
"dependencies": {
"@types/node": "*",
+ "@ungap/structured-clone": "^1.3.0",
+ "jest-util": "30.3.0",
"merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
+ "supports-color": "^8.1.1"
},
"engines": {
- "node": ">= 10.13.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-worker/node_modules/has-flag": {
@@ -10755,80 +9835,6 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/jsdom": {
- "version": "16.7.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
- "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
- "dev": true,
- "dependencies": {
- "abab": "^2.0.5",
- "acorn": "^8.2.4",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.4.4",
- "cssstyle": "^2.3.0",
- "data-urls": "^2.0.0",
- "decimal.js": "^10.2.1",
- "domexception": "^2.0.1",
- "escodegen": "^2.0.0",
- "form-data": "^3.0.0",
- "html-encoding-sniffer": "^2.0.1",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.0",
- "parse5": "6.0.1",
- "saxes": "^5.0.1",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^4.0.0",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^2.0.0",
- "webidl-conversions": "^6.1.0",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.5.0",
- "ws": "^7.4.6",
- "xml-name-validator": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "canvas": "^2.5.0"
- },
- "peerDependenciesMeta": {
- "canvas": {
- "optional": true
- }
- }
- },
- "node_modules/jsdom/node_modules/acorn": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/jsdom/node_modules/form-data": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz",
- "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==",
- "dev": true,
- "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"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/jsesc": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
@@ -10943,15 +9949,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
@@ -10990,19 +9987,7 @@
},
"engines": {
"node": ">=8"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "node_modules/lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
- "dev": true
+ }
},
"node_modules/lodash.debounce": {
"version": "4.0.8",
@@ -11077,12 +10062,6 @@
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
"integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA=="
},
- "node_modules/lodash.truncate": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
- "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
- "dev": true
- },
"node_modules/log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -11099,76 +10078,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/log-symbols/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/log-symbols/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/log-symbols/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/log-symbols/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/log-symbols/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/log-symbols/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/loglevel": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz",
@@ -11276,15 +10185,6 @@
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true
},
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
@@ -11327,18 +10227,6 @@
"node": ">= 0.6"
}
},
- "node_modules/mime-kind": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mime-kind/-/mime-kind-4.0.0.tgz",
- "integrity": "sha512-qQvglvSpS5mABi30beNFd+uHKtKkxD3dxAmhi2e589XKx+WfVqhg5i5P5LBcVgwwv3BiDpNMBWrHqU+JexW4aA==",
- "dependencies": {
- "file-type": "^16.5.4",
- "mime-types": "^2.1.24"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
@@ -11368,9 +10256,9 @@
}
},
"node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -11413,18 +10301,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
- "node_modules/multi-part": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multi-part/-/multi-part-4.0.0.tgz",
- "integrity": "sha512-YT/CS0PAe62kT8EoQXcQj8yIcSu18HhYv0s6ShdAFsoFly3oV5QaxODnkj0u7zH0/RFyH47cdcMVpcGXliEFVA==",
- "dependencies": {
- "mime-kind": "^4.0.0",
- "multi-part-lite": "^1.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/multi-part-lite": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/multi-part-lite/-/multi-part-lite-1.0.0.tgz",
@@ -11433,6 +10309,21 @@
"node": ">=8.3.0"
}
},
+ "node_modules/napi-postinstall": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz",
+ "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==",
+ "dev": true,
+ "bin": {
+ "napi-postinstall": "lib/cli.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/napi-postinstall"
+ }
+ },
"node_modules/nats": {
"version": "2.18.0",
"resolved": "https://registry.npmjs.org/nats/-/nats-2.18.0.tgz",
@@ -11530,7 +10421,7 @@
"node_modules/node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
"dev": true
},
"node_modules/node-releases": {
@@ -11539,6 +10430,48 @@
"integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
"dev": true
},
+ "node_modules/nodemon": {
+ "version": "3.1.11",
+ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.11.tgz",
+ "integrity": "sha512-is96t8F/1//UHAjNPHpbsNY46ELPpftGUoSVNXwUfMk/qdjSylYrWSu1XavVTBOn526kFiOR733ATgNBCQyH0g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chokidar": "^3.5.2",
+ "debug": "^4",
+ "ignore-by-default": "^1.0.1",
+ "minimatch": "^3.1.2",
+ "pstree.remy": "^1.1.8",
+ "semver": "^7.5.3",
+ "simple-update-notifier": "^2.0.0",
+ "supports-color": "^5.5.0",
+ "touch": "^3.1.0",
+ "undefsafe": "^2.0.5"
+ },
+ "bin": {
+ "nodemon": "bin/nodemon.js"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/nodemon"
+ }
+ },
+ "node_modules/nodemon/node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -11548,6 +10481,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/notation": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/notation/-/notation-1.3.6.tgz",
+ "integrity": "sha512-DIuJmrP/Gg1DcXKaApsqcjsJD6jEccqKSfmU3BUx/f1GHsMiTJh70cERwYc64tOmTRTARCeMwkqNNzjh3AHhiw==",
+ "license": "MIT"
+ },
"node_modules/notifications-node-client": {
"version": "8.2.1",
"resolved": "https://registry.npmjs.org/notifications-node-client/-/notifications-node-client-8.2.1.tgz",
@@ -11573,12 +10512,6 @@
"node": ">=8"
}
},
- "node_modules/nwsapi": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
- "dev": true
- },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -11705,9 +10638,9 @@
}
},
"node_modules/optionator": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
- "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
"dev": true,
"dependencies": {
"deep-is": "^0.1.3",
@@ -11715,7 +10648,7 @@
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
"type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
+ "word-wrap": "^1.2.5"
},
"engines": {
"node": ">= 0.8.0"
@@ -11744,76 +10677,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/ora/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/ora/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/ora/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/ora/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/ora/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ora/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -11909,12 +10772,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -11924,11 +10781,6 @@
"node": ">= 0.8"
}
},
- "node_modules/path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
- },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -11990,10 +10842,9 @@
}
},
"node_modules/path-to-regexp": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
- "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
- "license": "MIT"
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
+ "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA=="
},
"node_modules/path-type": {
"version": "4.0.0",
@@ -12004,18 +10855,6 @@
"node": ">=8"
}
},
- "node_modules/peek-readable": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
- "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -12023,11 +10862,10 @@
"dev": true
},
"node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
- "license": "MIT",
"engines": {
"node": ">=8.6"
},
@@ -12045,9 +10883,9 @@
}
},
"node_modules/pirates": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz",
- "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
"dev": true,
"engines": {
"node": ">= 6"
@@ -12148,19 +10986,37 @@
}
},
"node_modules/pretty-format": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz",
- "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
"dev": true,
"dependencies": {
- "ansi-regex": "^5.0.1",
- "ansi-styles": "^5.0.0",
- "react-is": "^17.0.1"
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/@jest/schemas": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz",
+ "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
+ "node_modules/pretty-format/node_modules/@sinclair/typebox": {
+ "version": "0.34.48",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz",
+ "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==",
+ "dev": true
+ },
"node_modules/pretty-format/node_modules/ansi-styles": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
@@ -12181,34 +11037,12 @@
"node": ">= 0.6.0"
}
},
- "node_modules/progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/promise-polyfill": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.2.0.tgz",
"integrity": "sha512-k/TC0mIcPVF6yHhUvwAp7cvL6I2fFV7TzF1DuGPI8mBh4QQazf36xCKEHKTZKRysEoTQoQdKyP25J8MPJp7j5g==",
"dev": true
},
- "node_modules/prompts": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
- "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
- "dev": true,
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -12223,9 +11057,12 @@
}
},
"node_modules/proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz",
+ "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==",
+ "engines": {
+ "node": ">=10"
+ }
},
"node_modules/pseudolocale": {
"version": "2.1.0",
@@ -12251,11 +11088,12 @@
"node": ">=14"
}
},
- "node_modules/psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "dev": true
+ "node_modules/pstree.remy": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
+ "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/punycode": {
"version": "2.1.1",
@@ -12266,11 +11104,26 @@
"node": ">=6"
}
},
+ "node_modules/pure-rand": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz",
+ "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/dubzzz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fast-check"
+ }
+ ]
+ },
"node_modules/qs": {
- "version": "6.14.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
- "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
- "license": "BSD-3-Clause",
+ "version": "6.14.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
+ "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
"dependencies": {
"side-channel": "^1.1.0"
},
@@ -12281,12 +11134,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "dev": true
- },
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -12345,15 +11192,16 @@
}
},
"node_modules/react-is": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"node_modules/readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
@@ -12363,21 +11211,6 @@
"node": ">= 6"
}
},
- "node_modules/readable-web-to-node-stream": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
- "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
- "dependencies": {
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
"node_modules/readdirp": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
@@ -12447,18 +11280,6 @@
"@babel/runtime": "^7.8.4"
}
},
- "node_modules/regexpp": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
- "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- }
- },
"node_modules/regexpu-core": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz",
@@ -12506,35 +11327,27 @@
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
- "dev": true
- },
"node_modules/resolve": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
- "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+ "version": "1.22.11",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
+ "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
"dev": true,
"dependencies": {
- "is-core-module": "^2.2.0",
- "path-parse": "^1.0.6"
+ "is-core-module": "^2.16.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -12561,13 +11374,13 @@
"node": ">=8"
}
},
- "node_modules/resolve.exports": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz",
- "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==",
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
"dev": true,
- "engines": {
- "node": ">=10"
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
}
},
"node_modules/restore-cursor": {
@@ -12649,18 +11462,6 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
- "node_modules/saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "dev": true,
- "dependencies": {
- "xmlchars": "^2.2.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -12897,71 +11698,41 @@
"integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==",
"dev": true
},
- "node_modules/sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
- },
- "node_modules/slash": {
+ "node_modules/simple-update-notifier": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
- "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
+ "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
+ "semver": "^7.5.3"
},
"engines": {
"node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
- "node_modules/slice-ansi/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/simple-update-notifier/node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "node": ">=10"
}
},
- "node_modules/slice-ansi/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
"dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
"engines": {
- "node": ">=7.0.0"
+ "node": ">=6"
}
},
- "node_modules/slice-ansi/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"node_modules/source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@@ -12993,7 +11764,7 @@
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
"dev": true
},
"node_modules/stable": {
@@ -13002,9 +11773,9 @@
"integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w=="
},
"node_modules/stack-utils": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz",
- "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
"dev": true,
"dependencies": {
"escape-string-regexp": "^2.0.0"
@@ -13013,15 +11784,6 @@
"node": ">=10"
}
},
- "node_modules/stack-utils/node_modules/escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/standard-as-callback": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz",
@@ -13040,6 +11802,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
"dependencies": {
"safe-buffer": "~5.2.0"
}
@@ -13048,6 +11811,7 @@
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
"funding": [
{
"type": "github",
@@ -13077,14 +11841,14 @@
}
},
"node_modules/string-width": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
- "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
@@ -13187,22 +11951,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/strtok3": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz",
- "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==",
- "dependencies": {
- "@tokenizer/token": "^0.3.0",
- "peek-readable": "^4.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
"node_modules/superagent": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.1.tgz",
@@ -13276,99 +12024,31 @@
"node": ">=4"
}
},
- "node_modules/supports-hyperlinks": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
- "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0",
- "supports-color": "^7.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-hyperlinks/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-hyperlinks/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true
- },
- "node_modules/table": {
- "version": "6.7.1",
- "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz",
- "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==",
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
- "dependencies": {
- "ajv": "^8.0.1",
- "lodash.clonedeep": "^4.5.0",
- "lodash.truncate": "^4.4.2",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0"
- },
"engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/table/node_modules/ajv": {
- "version": "8.6.3",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz",
- "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
+ "node": ">= 0.4"
},
"funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/table/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
- "node_modules/terminal-link": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
- "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
+ "node_modules/synckit": {
+ "version": "0.11.12",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz",
+ "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==",
"dev": true,
"dependencies": {
- "ansi-escapes": "^4.2.1",
- "supports-hyperlinks": "^2.0.0"
+ "@pkgr/core": "^0.2.9"
},
"engines": {
- "node": ">=8"
+ "node": "^14.18.0 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://opencollective.com/synckit"
}
},
"node_modules/test-exclude": {
@@ -13391,11 +12071,50 @@
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
- "node_modules/throat": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
- "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==",
- "dev": true
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
},
"node_modules/tmpl": {
"version": "1.0.5",
@@ -13458,56 +12177,26 @@
"node": ">=0.6"
}
},
- "node_modules/token-types": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz",
- "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==",
- "dependencies": {
- "@tokenizer/token": "^0.3.0",
- "ieee754": "^1.2.1"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
- "node_modules/tough-cookie": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
- "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+ "node_modules/touch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz",
+ "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==",
"dev": true,
- "dependencies": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
- },
- "engines": {
- "node": ">=6"
+ "license": "ISC",
+ "bin": {
+ "nodetouch": "bin/nodetouch.js"
}
},
- "node_modules/tough-cookie/node_modules/universalify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+ "node_modules/ts-api-utils": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
+ "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
"dev": true,
"engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/tr46": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
- "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.1"
+ "node": ">=18.12"
},
- "engines": {
- "node": ">=8"
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
}
},
"node_modules/tsconfig-paths": {
@@ -13549,27 +12238,6 @@
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"license": "0BSD"
},
- "node_modules/tsutils": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
- "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
- "dev": true,
- "dependencies": {
- "tslib": "^1.8.1"
- },
- "engines": {
- "node": ">= 6"
- },
- "peerDependencies": {
- "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
- }
- },
- "node_modules/tsutils/node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
- },
"node_modules/tweetnacl": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
@@ -13635,15 +12303,6 @@
"node": ">= 0.4"
}
},
- "node_modules/typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "dependencies": {
- "is-typedarray": "^1.0.0"
- }
- },
"node_modules/typescript": {
"version": "5.8.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
@@ -13674,6 +12333,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/undefsafe": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
+ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
+ },
"node_modules/unicode-canonical-property-names-ecmascript": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
@@ -13723,11 +12394,45 @@
"node": ">= 0.8"
}
},
- "node_modules/unraw": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unraw/-/unraw-3.0.0.tgz",
- "integrity": "sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg=="
- },
+ "node_modules/unraw": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unraw/-/unraw-3.0.0.tgz",
+ "integrity": "sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg=="
+ },
+ "node_modules/unrs-resolver": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz",
+ "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "napi-postinstall": "^0.3.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unrs-resolver"
+ },
+ "optionalDependencies": {
+ "@unrs/resolver-binding-android-arm-eabi": "1.11.1",
+ "@unrs/resolver-binding-android-arm64": "1.11.1",
+ "@unrs/resolver-binding-darwin-arm64": "1.11.1",
+ "@unrs/resolver-binding-darwin-x64": "1.11.1",
+ "@unrs/resolver-binding-freebsd-x64": "1.11.1",
+ "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1",
+ "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1",
+ "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-arm64-musl": "1.11.1",
+ "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1",
+ "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-x64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-x64-musl": "1.11.1",
+ "@unrs/resolver-binding-wasm32-wasi": "1.11.1",
+ "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1",
+ "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1",
+ "@unrs/resolver-binding-win32-x64-msvc": "1.11.1"
+ }
+ },
"node_modules/update-browserslist-db": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
@@ -13767,16 +12472,6 @@
"punycode": "^2.1.0"
}
},
- "node_modules/url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "dev": true,
- "dependencies": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
"node_modules/url-slug": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/url-slug/-/url-slug-3.0.2.tgz",
@@ -13785,7 +12480,8 @@
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
},
"node_modules/utils-merge": {
"version": "1.0.1",
@@ -13804,34 +12500,25 @@
"uuid": "dist/bin/uuid"
}
},
- "node_modules/v8-compile-cache": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
- "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
- "dev": true
- },
"node_modules/v8-to-istanbul": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz",
- "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
+ "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
"dev": true,
"dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
"@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^1.6.0",
- "source-map": "^0.7.3"
+ "convert-source-map": "^2.0.0"
},
"engines": {
"node": ">=10.12.0"
}
},
- "node_modules/v8-to-istanbul/node_modules/source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
+ "node_modules/v8-to-istanbul/node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
},
"node_modules/v8flags": {
"version": "3.2.0",
@@ -13862,27 +12549,6 @@
"node": ">= 0.8"
}
},
- "node_modules/w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "dependencies": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
- "node_modules/w3c-xmlserializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
- "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
- "dev": true,
- "dependencies": {
- "xml-name-validator": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/walker": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
@@ -13909,49 +12575,11 @@
"defaults": "^1.0.3"
}
},
- "node_modules/webidl-conversions": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
- "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
- "dev": true,
- "engines": {
- "node": ">=10.4"
- }
- },
- "node_modules/whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
- "dev": true,
- "dependencies": {
- "iconv-lite": "0.4.24"
- }
- },
"node_modules/whatwg-fetch": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz",
"integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA=="
},
- "node_modules/whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "node_modules/whatwg-url": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
- "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.7.0",
- "tr46": "^2.1.0",
- "webidl-conversions": "^6.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -14048,72 +12676,6 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/wrap-ansi-cjs/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/wrap-ansi/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/wrap-ansi/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -14121,36 +12683,28 @@
"dev": true
},
"node_modules/write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+ "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
"dev": true,
"dependencies": {
"imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
+ "node_modules/write-file-atomic/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
"engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
+ "node": ">=14"
},
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/x3-linkedlist": {
@@ -14172,18 +12726,6 @@
"xtend": "^4.0.0"
}
},
- "node_modules/xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true
- },
- "node_modules/xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true
- },
"node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
@@ -14216,44 +12758,46 @@
}
},
"node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dev": true,
"dependencies": {
- "cliui": "^7.0.2",
+ "cliui": "^8.0.1",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
- "string-width": "^4.2.0",
+ "string-width": "^4.2.3",
"y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
+ "yargs-parser": "^21.1.1"
},
"engines": {
- "node": ">=10"
+ "node": ">=12"
}
},
"node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true,
"engines": {
"node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
}
},
"dependencies": {
- "@ampproject/remapping": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
- "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
- "dev": true,
- "requires": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- },
"@apollo/cache-control-types": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@apollo/cache-control-types/-/cache-control-types-1.0.3.tgz",
@@ -14261,9 +12805,9 @@
"requires": {}
},
"@apollo/server": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@apollo/server/-/server-5.2.0.tgz",
- "integrity": "sha512-OEAl5bwVitkvVkmZlgWksSnQ10FUr6q2qJMdkexs83lsvOGmd/y81X5LoETmKZux8UiQsy/A/xzP00b8hTHH/w==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@apollo/server/-/server-5.5.0.tgz",
+ "integrity": "sha512-vWtodBOK/SZwBTJzItECOmLfL8E8pn/IdvP7pnxN5g2tny9iW4+9sxdajE798wV1H2+PYp/rRcl/soSHIBKMPw==",
"requires": {
"@apollo/cache-control-types": "^1.0.3",
"@apollo/server-gateway-interface": "^2.0.0",
@@ -14277,7 +12821,8 @@
"@apollo/utils.withrequired": "^3.0.0",
"@graphql-tools/schema": "^10.0.0",
"async-retry": "^1.2.1",
- "body-parser": "^2.2.0",
+ "body-parser": "^2.2.2",
+ "content-type": "^1.0.5",
"cors": "^2.8.5",
"finalhandler": "^2.1.0",
"loglevel": "^1.6.8",
@@ -14333,9 +12878,9 @@
}
},
"body-parser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz",
- "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz",
+ "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==",
"requires": {
"bytes": "^3.1.2",
"content-type": "^1.0.5",
@@ -14343,15 +12888,15 @@
"http-errors": "^2.0.0",
"iconv-lite": "^0.7.0",
"on-finished": "^2.4.1",
- "qs": "^6.14.0",
+ "qs": "^6.14.1",
"raw-body": "^3.0.1",
"type-is": "^2.0.1"
}
},
"iconv-lite": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz",
- "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==",
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz",
+ "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
}
@@ -14521,38 +13066,38 @@
}
},
"@babel/code-frame": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
- "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5",
"js-tokens": "^4.0.0",
"picocolors": "^1.1.1"
}
},
"@babel/compat-data": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.0.tgz",
- "integrity": "sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
+ "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
"dev": true
},
"@babel/core": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz",
- "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==",
- "dev": true,
- "requires": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.26.0",
- "@babel/generator": "^7.26.0",
- "@babel/helper-compilation-targets": "^7.25.9",
- "@babel/helper-module-transforms": "^7.26.0",
- "@babel/helpers": "^7.26.0",
- "@babel/parser": "^7.26.0",
- "@babel/template": "^7.25.9",
- "@babel/traverse": "^7.25.9",
- "@babel/types": "^7.26.0",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
+ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helpers": "^7.28.6",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/traverse": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/remapping": "^2.3.5",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -14569,15 +13114,15 @@
}
},
"@babel/generator": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.0.tgz",
- "integrity": "sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==",
+ "version": "7.29.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
"dev": true,
"requires": {
- "@babel/parser": "^7.26.0",
- "@babel/types": "^7.26.0",
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.25",
+ "@babel/parser": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
"jsesc": "^3.0.2"
}
},
@@ -14601,13 +13146,13 @@
}
},
"@babel/helper-compilation-targets": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
- "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
+ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.25.9",
- "@babel/helper-validator-option": "^7.25.9",
+ "@babel/compat-data": "^7.28.6",
+ "@babel/helper-validator-option": "^7.27.1",
"browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
@@ -14696,6 +13241,12 @@
"@babel/types": "^7.23.0"
}
},
+ "@babel/helper-globals": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
+ "dev": true
+ },
"@babel/helper-hoist-variables": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
@@ -14715,24 +13266,24 @@
}
},
"@babel/helper-module-imports": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
- "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
+ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
"dev": true,
"requires": {
- "@babel/traverse": "^7.25.9",
- "@babel/types": "^7.25.9"
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6"
}
},
"@babel/helper-module-transforms": {
- "version": "7.26.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
- "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
+ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
"dev": true,
"requires": {
- "@babel/helper-module-imports": "^7.25.9",
- "@babel/helper-validator-identifier": "^7.25.9",
- "@babel/traverse": "^7.25.9"
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/traverse": "^7.28.6"
}
},
"@babel/helper-optimise-call-expression": {
@@ -14745,9 +13296,9 @@
}
},
"@babel/helper-plugin-utils": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz",
- "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
"dev": true
},
"@babel/helper-remap-async-to-generator": {
@@ -14814,9 +13365,9 @@
"dev": true
},
"@babel/helper-validator-option": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
- "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
"dev": true
},
"@babel/helper-wrap-function": {
@@ -14832,24 +13383,13 @@
}
},
"@babel/helpers": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
- "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.27.2",
- "@babel/types": "^7.28.4"
- }
- },
- "@babel/highlight": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
- "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
+ "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.22.20",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.28.6"
}
},
"@babel/node": {
@@ -14867,12 +13407,12 @@
}
},
"@babel/parser": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
- "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
+ "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
"dev": true,
"requires": {
- "@babel/types": "^7.28.5"
+ "@babel/types": "^7.29.0"
}
},
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
@@ -15107,6 +13647,15 @@
"@babel/helper-plugin-utils": "^7.8.3"
}
},
+ "@babel/plugin-syntax-import-attributes": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz",
+ "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.28.6"
+ }
+ },
"@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
@@ -15125,6 +13674,15 @@
"@babel/helper-plugin-utils": "^7.8.0"
}
},
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz",
+ "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.28.6"
+ }
+ },
"@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
@@ -15198,12 +13756,12 @@
}
},
"@babel/plugin-syntax-typescript": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz",
- "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz",
+ "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.16.7"
+ "@babel/helper-plugin-utils": "^7.28.6"
}
},
"@babel/plugin-transform-arrow-functions": {
@@ -15644,35 +14202,35 @@
}
},
"@babel/template": {
- "version": "7.27.2",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
- "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
+ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.27.1",
- "@babel/parser": "^7.27.2",
- "@babel/types": "^7.27.1"
+ "@babel/code-frame": "^7.28.6",
+ "@babel/parser": "^7.28.6",
+ "@babel/types": "^7.28.6"
}
},
"@babel/traverse": {
- "version": "7.25.9",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz",
- "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
+ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.25.9",
- "@babel/generator": "^7.25.9",
- "@babel/parser": "^7.25.9",
- "@babel/template": "^7.25.9",
- "@babel/types": "^7.25.9",
- "debug": "^4.3.1",
- "globals": "^11.1.0"
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.29.0",
+ "debug": "^4.3.1"
}
},
"@babel/types": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
- "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
"dev": true,
"requires": {
"@babel/helper-string-parser": "^7.27.1",
@@ -15685,6 +14243,37 @@
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
"dev": true
},
+ "@emnapi/core": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz",
+ "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@emnapi/wasi-threads": "1.2.0",
+ "tslib": "^2.4.0"
+ }
+ },
+ "@emnapi/runtime": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz",
+ "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "@emnapi/wasi-threads": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz",
+ "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
"@esbuild/aix-ppc64": {
"version": "0.25.3",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.3.tgz",
@@ -15860,32 +14449,62 @@
"dev": true,
"optional": true
},
+ "@eslint-community/eslint-utils": {
+ "version": "4.9.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
+ "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^3.4.3"
+ }
+ },
+ "@eslint-community/regexpp": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+ "dev": true
+ },
"@eslint/eslintrc": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
- "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
- "debug": "^4.1.1",
- "espree": "^7.3.0",
- "globals": "^13.9.0",
- "ignore": "^4.0.6",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
"import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
- "minimatch": "^3.0.4",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
"strip-json-comments": "^3.1.1"
},
"dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
"globals": {
- "version": "13.11.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
- "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
}
},
+ "js-yaml": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
"type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
@@ -15894,6 +14513,12 @@
}
}
},
+ "@eslint/js": {
+ "version": "8.57.1",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
+ "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
+ "dev": true
+ },
"@graphql-tools/merge": {
"version": "9.1.6",
"resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.1.6.tgz",
@@ -15931,20 +14556,26 @@
"requires": {}
},
"@humanwhocodes/config-array": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
- "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
+ "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
"dev": true,
"requires": {
- "@humanwhocodes/object-schema": "^1.2.0",
- "debug": "^4.1.1",
- "minimatch": "^3.0.4"
+ "@humanwhocodes/object-schema": "^2.0.3",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
}
},
+ "@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true
+ },
"@humanwhocodes/object-schema": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
- "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
"dev": true
},
"@ioredis/commands": {
@@ -15953,21 +14584,6 @@
"integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==",
"optional": true
},
- "@isaacs/balanced-match": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz",
- "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==",
- "dev": true
- },
- "@isaacs/brace-expansion": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz",
- "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==",
- "dev": true,
- "requires": {
- "@isaacs/balanced-match": "^4.0.1"
- }
- },
"@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -16053,170 +14669,80 @@
"dev": true
},
"@jest/console": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.6.tgz",
- "integrity": "sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.3.0.tgz",
+ "integrity": "sha512-PAwCvFJ4696XP2qZj+LAn1BWjZaJ6RjG6c7/lkMaUJnkyMS34ucuIsfqYvfskVNvUI27R/u4P1HMYFnlVXG/Ww==",
"dev": true,
"requires": {
- "@jest/types": "^27.4.2",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "jest-message-util": "^27.4.6",
- "jest-util": "^27.4.2",
+ "chalk": "^4.1.2",
+ "jest-message-util": "30.3.0",
+ "jest-util": "30.3.0",
"slash": "^3.0.0"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
}
}
},
"@jest/core": {
- "version": "27.4.7",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.7.tgz",
- "integrity": "sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.3.0.tgz",
+ "integrity": "sha512-U5mVPsBxLSO6xYbf+tgkymLx+iAhvZX43/xI1+ej2ZOPnPdkdO1CzDmFKh2mZBn2s4XZixszHeQnzp1gm/DIxw==",
"dev": true,
"requires": {
- "@jest/console": "^27.4.6",
- "@jest/reporters": "^27.4.6",
- "@jest/test-result": "^27.4.6",
- "@jest/transform": "^27.4.6",
- "@jest/types": "^27.4.2",
+ "@jest/console": "30.3.0",
+ "@jest/pattern": "30.0.1",
+ "@jest/reporters": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "emittery": "^0.8.1",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-changed-files": "^27.4.2",
- "jest-config": "^27.4.7",
- "jest-haste-map": "^27.4.6",
- "jest-message-util": "^27.4.6",
- "jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.6",
- "jest-resolve-dependencies": "^27.4.6",
- "jest-runner": "^27.4.6",
- "jest-runtime": "^27.4.6",
- "jest-snapshot": "^27.4.6",
- "jest-util": "^27.4.2",
- "jest-validate": "^27.4.6",
- "jest-watcher": "^27.4.6",
- "micromatch": "^4.0.4",
- "rimraf": "^3.0.0",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "ansi-escapes": "^4.3.2",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "exit-x": "^0.2.2",
+ "graceful-fs": "^4.2.11",
+ "jest-changed-files": "30.3.0",
+ "jest-config": "30.3.0",
+ "jest-haste-map": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.3.0",
+ "jest-resolve-dependencies": "30.3.0",
+ "jest-runner": "30.3.0",
+ "jest-runtime": "30.3.0",
+ "jest-snapshot": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0",
+ "jest-watcher": "30.3.0",
+ "pretty-format": "30.3.0",
+ "slash": "^3.0.0"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
"camelcase": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true
},
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
"jest-validate": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz",
- "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz",
+ "integrity": "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==",
"dev": true,
"requires": {
- "@jest/types": "^27.4.2",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.4.0",
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.3.0",
+ "camelcase": "^6.3.0",
+ "chalk": "^4.1.2",
"leven": "^3.1.0",
- "pretty-format": "^27.4.6"
+ "pretty-format": "30.3.0"
}
},
"slash": {
@@ -16224,148 +14750,182 @@
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
}
}
},
+ "@jest/diff-sequences": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.3.0.tgz",
+ "integrity": "sha512-cG51MVnLq1ecVUaQ3fr6YuuAOitHK1S4WUJHnsPFE/quQr33ADUx1FfrTCpMCRxvy0Yr9BThKpDjSlcTi91tMA==",
+ "dev": true
+ },
"@jest/environment": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.6.tgz",
- "integrity": "sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.3.0.tgz",
+ "integrity": "sha512-SlLSF4Be735yQXyh2+mctBOzNDx5s5uLv88/j8Qn1wH679PDcwy67+YdADn8NJnGjzlXtN62asGH/T4vWOkfaw==",
"dev": true,
"requires": {
- "@jest/fake-timers": "^27.4.6",
- "@jest/types": "^27.4.2",
+ "@jest/fake-timers": "30.3.0",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "jest-mock": "^27.4.6"
+ "jest-mock": "30.3.0"
+ }
+ },
+ "@jest/expect": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.3.0.tgz",
+ "integrity": "sha512-76Nlh4xJxk2D/9URCn3wFi98d2hb19uWE1idLsTt2ywhvdOldbw3S570hBgn25P4ICUZ/cBjybrBex2g17IDbg==",
+ "dev": true,
+ "requires": {
+ "expect": "30.3.0",
+ "jest-snapshot": "30.3.0"
+ }
+ },
+ "@jest/expect-utils": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.3.0.tgz",
+ "integrity": "sha512-j0+W5iQQ8hBh7tHZkTQv3q2Fh/M7Je72cIsYqC4OaktgtO7v1So9UTjp6uPBHIaB6beoF/RRsCgMJKvti0wADA==",
+ "dev": true,
+ "requires": {
+ "@jest/get-type": "30.1.0"
}
},
"@jest/fake-timers": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.6.tgz",
- "integrity": "sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.3.0.tgz",
+ "integrity": "sha512-WUQDs8SOP9URStX1DzhD425CqbN/HxUYCTwVrT8sTVBfMvFqYt/s61EK5T05qnHu0po6RitXIvP9otZxYDzTGQ==",
"dev": true,
"requires": {
- "@jest/types": "^27.4.2",
- "@sinonjs/fake-timers": "^8.0.1",
+ "@jest/types": "30.3.0",
+ "@sinonjs/fake-timers": "^15.0.0",
"@types/node": "*",
- "jest-message-util": "^27.4.6",
- "jest-mock": "^27.4.6",
- "jest-util": "^27.4.2"
+ "jest-message-util": "30.3.0",
+ "jest-mock": "30.3.0",
+ "jest-util": "30.3.0"
}
},
+ "@jest/get-type": {
+ "version": "30.1.0",
+ "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz",
+ "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==",
+ "dev": true
+ },
"@jest/globals": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.6.tgz",
- "integrity": "sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.3.0.tgz",
+ "integrity": "sha512-+owLCBBdfpgL3HU+BD5etr1SvbXpSitJK0is1kiYjJxAAJggYMRQz5hSdd5pq1sSggfxPbw2ld71pt4x5wwViA==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "30.3.0",
+ "@jest/expect": "30.3.0",
+ "@jest/types": "30.3.0",
+ "jest-mock": "30.3.0"
+ }
+ },
+ "@jest/pattern": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz",
+ "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==",
"dev": true,
"requires": {
- "@jest/environment": "^27.4.6",
- "@jest/types": "^27.4.2",
- "expect": "^27.4.6"
+ "@types/node": "*",
+ "jest-regex-util": "30.0.1"
}
},
"@jest/reporters": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.6.tgz",
- "integrity": "sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.3.0.tgz",
+ "integrity": "sha512-a09z89S+PkQnL055bVj8+pe2Caed2PBOaczHcXCykW5ngxX9EWx/1uAwncxc/HiU0oZqfwseMjyhxgRjS49qPw==",
"dev": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^27.4.6",
- "@jest/test-result": "^27.4.6",
- "@jest/transform": "^27.4.6",
- "@jest/types": "^27.4.2",
+ "@jest/console": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@jridgewell/trace-mapping": "^0.3.25",
"@types/node": "*",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.2",
- "graceful-fs": "^4.2.4",
+ "chalk": "^4.1.2",
+ "collect-v8-coverage": "^1.0.2",
+ "exit-x": "^0.2.2",
+ "glob": "^10.5.0",
+ "graceful-fs": "^4.2.11",
"istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^5.1.0",
+ "istanbul-lib-instrument": "^6.0.0",
"istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-lib-source-maps": "^5.0.0",
"istanbul-reports": "^3.1.3",
- "jest-haste-map": "^27.4.6",
- "jest-resolve": "^27.4.6",
- "jest-util": "^27.4.2",
- "jest-worker": "^27.4.6",
+ "jest-message-util": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-worker": "30.3.0",
"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"
+ "string-length": "^4.0.2",
+ "v8-to-istanbul": "^9.0.1"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
"requires": {
- "color-convert": "^2.0.1"
+ "balanced-match": "^1.0.0"
}
},
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
"dev": true,
"requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
"requires": {
- "color-name": "~1.1.4"
+ "@isaacs/cliui": "^8.0.2",
+ "@pkgjs/parseargs": "^0.11.0"
}
},
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true
},
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
+ "minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.2"
+ }
+ },
+ "path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ }
},
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
}
}
},
@@ -16378,110 +14938,87 @@
"@sinclair/typebox": "^0.27.8"
}
},
+ "@jest/snapshot-utils": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.3.0.tgz",
+ "integrity": "sha512-ORbRN9sf5PP82v3FXNSwmO1OTDR2vzR2YTaR+E3VkSBZ8zadQE6IqYdYEeFH1NIkeB2HIGdF02dapb6K0Mj05g==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "30.3.0",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "natural-compare": "^1.4.0"
+ }
+ },
"@jest/source-map": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz",
- "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==",
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz",
+ "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==",
"dev": true,
"requires": {
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.4",
- "source-map": "^0.6.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "callsites": "^3.1.0",
+ "graceful-fs": "^4.2.11"
}
},
"@jest/test-result": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.6.tgz",
- "integrity": "sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.3.0.tgz",
+ "integrity": "sha512-e/52nJGuD74AKTSe0P4y5wFRlaXP0qmrS17rqOMHeSwm278VyNyXE3gFO/4DTGF9w+65ra3lo3VKj0LBrzmgdQ==",
"dev": true,
"requires": {
- "@jest/console": "^27.4.6",
- "@jest/types": "^27.4.2",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
+ "@jest/console": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "collect-v8-coverage": "^1.0.2"
}
},
"@jest/test-sequencer": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz",
- "integrity": "sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.3.0.tgz",
+ "integrity": "sha512-dgbWy9b8QDlQeRZcv7LNF+/jFiiYHTKho1xirauZ7kVwY7avjFF6uTT0RqlgudB5OuIPagFdVtfFMosjVbk1eA==",
"dev": true,
"requires": {
- "@jest/test-result": "^27.4.6",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.6",
- "jest-runtime": "^27.4.6"
+ "@jest/test-result": "30.3.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.3.0",
+ "slash": "^3.0.0"
+ },
+ "dependencies": {
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ }
}
},
"@jest/transform": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.6.tgz",
- "integrity": "sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.3.0.tgz",
+ "integrity": "sha512-TLKY33fSLVd/lKB2YI1pH69ijyUblO/BQvCj566YvnwuzoTNr648iE0j22vRvVNk2HsPwByPxATg3MleS3gf5A==",
"dev": true,
"requires": {
- "@babel/core": "^7.1.0",
- "@jest/types": "^27.4.2",
- "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.4",
- "jest-haste-map": "^27.4.6",
- "jest-regex-util": "^27.4.0",
- "jest-util": "^27.4.2",
- "micromatch": "^4.0.4",
- "pirates": "^4.0.4",
+ "@babel/core": "^7.27.4",
+ "@jest/types": "30.3.0",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "babel-plugin-istanbul": "^7.0.1",
+ "chalk": "^4.1.2",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.3.0",
+ "jest-regex-util": "30.0.1",
+ "jest-util": "30.3.0",
+ "pirates": "^4.0.7",
"slash": "^3.0.0",
- "source-map": "^0.6.1",
- "write-file-atomic": "^3.0.0"
+ "write-file-atomic": "^5.0.1"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true
},
"slash": {
@@ -16489,96 +15026,58 @@
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
}
}
},
"@jest/types": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz",
- "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
"requires": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
"@types/node": "*",
- "@types/yargs": "^16.0.0",
- "chalk": "^4.0.0"
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "@jest/schemas": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz",
+ "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==",
"dev": true,
"requires": {
- "color-name": "~1.1.4"
+ "@sinclair/typebox": "^0.34.0"
}
},
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "@sinclair/typebox": {
+ "version": "0.34.48",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz",
+ "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==",
"dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
}
}
},
"@jridgewell/gen-mapping": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
- "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
"dev": true,
"requires": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
+ },
+ "@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.24"
}
},
@@ -16588,22 +15087,16 @@
"integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
"dev": true
},
- "@jridgewell/set-array": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
- "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
- "dev": true
- },
"@jridgewell/sourcemap-codec": {
- "version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"dev": true
},
"@jridgewell/trace-mapping": {
- "version": "0.3.25",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
- "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
"dev": true,
"requires": {
"@jridgewell/resolve-uri": "^3.1.0",
@@ -16705,6 +15198,21 @@
"js-sha256": "^0.10.1"
}
},
+ "balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
+ "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^4.0.2"
+ }
+ },
"chokidar": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
@@ -16748,12 +15256,12 @@
}
},
"minimatch": {
- "version": "10.1.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz",
- "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==",
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
+ "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
"dev": true,
"requires": {
- "@isaacs/brace-expansion": "^5.0.0"
+ "brace-expansion": "^5.0.2"
}
},
"source-map": {
@@ -16896,46 +15404,12 @@
"lodash.get": "^4.4.2"
}
},
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
"argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true
},
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"cosmiconfig": {
"version": "8.3.6",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
@@ -16944,15 +15418,9 @@
"requires": {
"import-fresh": "^3.3.0",
"js-yaml": "^4.1.0",
- "parse-json": "^5.2.0",
- "path-type": "^4.0.0"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
+ "parse-json": "^5.2.0",
+ "path-type": "^4.0.0"
+ }
},
"js-yaml": {
"version": "4.1.1",
@@ -16962,15 +15430,6 @@
"requires": {
"argparse": "^2.0.1"
}
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
}
}
},
@@ -17002,6 +15461,18 @@
"moo": "^0.5.1"
}
},
+ "@napi-rs/wasm-runtime": {
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
+ "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@emnapi/core": "^1.4.3",
+ "@emnapi/runtime": "^1.4.3",
+ "@tybys/wasm-util": "^0.10.0"
+ }
+ },
"@nicolo-ribaudo/chokidar-2": {
"version": "2.1.8-no-fsevents.3",
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
@@ -17050,6 +15521,19 @@
"@noble/hashes": "^1.1.5"
}
},
+ "@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "optional": true
+ },
+ "@pkgr/core": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz",
+ "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==",
+ "dev": true
+ },
"@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
@@ -17111,42 +15595,41 @@
"dev": true
},
"@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"dev": true,
"requires": {
"type-detect": "4.0.8"
}
},
"@sinonjs/fake-timers": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz",
- "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==",
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.1.1.tgz",
+ "integrity": "sha512-cO5W33JgAPbOh07tvZjUOJ7oWhtaqGHiZw+11DPbyqh2kHTBc3eF/CjJDeQ4205RLQsX6rxCuYOroFQwl7JDRw==",
"dev": true,
"requires": {
- "@sinonjs/commons": "^1.7.0"
+ "@sinonjs/commons": "^3.0.1"
}
},
- "@tokenizer/token": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
- "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
- },
- "@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "dev": true
+ "@tybys/wasm-util": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
+ "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tslib": "^2.4.0"
+ }
},
"@types/babel__core": {
- "version": "7.1.17",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.17.tgz",
- "integrity": "sha512-6zzkezS9QEIL8yCBvXWxPTJPNuMeECJVxSOhxNY/jfq9LxOTHivaYTqr37n9LknWWRTIkzqH2UilS5QFvfa90A==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
"requires": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0",
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
"@types/babel__generator": "*",
"@types/babel__template": "*",
"@types/babel__traverse": "*"
@@ -17180,19 +15663,10 @@
"@babel/types": "^7.3.0"
}
},
- "@types/graceful-fs": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
- "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
"@types/istanbul-lib-coverage": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
- "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
"dev": true
},
"@types/istanbul-lib-report": {
@@ -17205,20 +15679,14 @@
}
},
"@types/istanbul-reports": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
- "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+ "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"dev": true,
"requires": {
"@types/istanbul-lib-report": "*"
}
},
- "@types/json-schema": {
- "version": "7.0.9",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
- "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
- "dev": true
- },
"@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@@ -17231,9 +15699,12 @@
"integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
},
"@types/node": {
- "version": "16.9.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz",
- "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g=="
+ "version": "20.19.37",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz",
+ "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==",
+ "requires": {
+ "undici-types": "~6.21.0"
+ }
},
"@types/parse-json": {
"version": "4.0.0",
@@ -17241,22 +15712,16 @@
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true
},
- "@types/prettier": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.3.tgz",
- "integrity": "sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==",
- "dev": true
- },
"@types/stack-utils": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
- "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
+ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
"dev": true
},
"@types/yargs": {
- "version": "16.0.4",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz",
- "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==",
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
@@ -17268,83 +15733,261 @@
"integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==",
"dev": true
},
- "@typescript-eslint/experimental-utils": {
- "version": "4.31.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.1.tgz",
- "integrity": "sha512-NtoPsqmcSsWty0mcL5nTZXMf7Ei0Xr2MT8jWjXMVgRK0/1qeQ2jZzLFUh4QtyJ4+/lPUyMw5cSfeeME+Zrtp9Q==",
+ "@typescript-eslint/project-service": {
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.2.tgz",
+ "integrity": "sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==",
"dev": true,
"requires": {
- "@types/json-schema": "^7.0.7",
- "@typescript-eslint/scope-manager": "4.31.1",
- "@typescript-eslint/types": "4.31.1",
- "@typescript-eslint/typescript-estree": "4.31.1",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^3.0.0"
- },
- "dependencies": {
- "eslint-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
- "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^2.0.0"
- }
- }
+ "@typescript-eslint/tsconfig-utils": "^8.57.2",
+ "@typescript-eslint/types": "^8.57.2",
+ "debug": "^4.4.3"
}
},
"@typescript-eslint/scope-manager": {
- "version": "4.31.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.1.tgz",
- "integrity": "sha512-N1Uhn6SqNtU2XpFSkD4oA+F0PfKdWHyr4bTX0xTj8NRx1314gBDRL1LUuZd5+L3oP+wo6hCbZpaa1in6SwMcVQ==",
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.2.tgz",
+ "integrity": "sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "4.31.1",
- "@typescript-eslint/visitor-keys": "4.31.1"
+ "@typescript-eslint/types": "8.57.2",
+ "@typescript-eslint/visitor-keys": "8.57.2"
}
},
+ "@typescript-eslint/tsconfig-utils": {
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.2.tgz",
+ "integrity": "sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==",
+ "dev": true,
+ "requires": {}
+ },
"@typescript-eslint/types": {
- "version": "4.31.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.1.tgz",
- "integrity": "sha512-kixltt51ZJGKENNW88IY5MYqTBA8FR0Md8QdGbJD2pKZ+D5IvxjTYDNtJPDxFBiXmka2aJsITdB1BtO1fsgmsQ==",
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz",
+ "integrity": "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==",
"dev": true
},
"@typescript-eslint/typescript-estree": {
- "version": "4.31.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.1.tgz",
- "integrity": "sha512-EGHkbsUvjFrvRnusk6yFGqrqMBTue5E5ROnS5puj3laGQPasVUgwhrxfcgkdHNFECHAewpvELE1Gjv0XO3mdWg==",
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.2.tgz",
+ "integrity": "sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==",
"dev": true,
"requires": {
- "@typescript-eslint/types": "4.31.1",
- "@typescript-eslint/visitor-keys": "4.31.1",
- "debug": "^4.3.1",
- "globby": "^11.0.3",
- "is-glob": "^4.0.1",
- "semver": "^7.3.5",
- "tsutils": "^3.21.0"
+ "@typescript-eslint/project-service": "8.57.2",
+ "@typescript-eslint/tsconfig-utils": "8.57.2",
+ "@typescript-eslint/types": "8.57.2",
+ "@typescript-eslint/visitor-keys": "8.57.2",
+ "debug": "^4.4.3",
+ "minimatch": "^10.2.2",
+ "semver": "^7.7.3",
+ "tinyglobby": "^0.2.15",
+ "ts-api-utils": "^2.4.0"
},
"dependencies": {
- "semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
+ "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
"dev": true,
"requires": {
- "lru-cache": "^6.0.0"
+ "balanced-match": "^4.0.2"
}
+ },
+ "minimatch": {
+ "version": "10.2.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
+ "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^5.0.2"
+ }
+ },
+ "semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true
}
}
},
+ "@typescript-eslint/utils": {
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.2.tgz",
+ "integrity": "sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.9.1",
+ "@typescript-eslint/scope-manager": "8.57.2",
+ "@typescript-eslint/types": "8.57.2",
+ "@typescript-eslint/typescript-estree": "8.57.2"
+ }
+ },
"@typescript-eslint/visitor-keys": {
- "version": "4.31.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.1.tgz",
- "integrity": "sha512-PCncP8hEqKw6SOJY+3St4LVtoZpPPn+Zlpm7KW5xnviMhdqcsBty4Lsg4J/VECpJjw1CkROaZhH4B8M1OfnXTQ==",
+ "version": "8.57.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.2.tgz",
+ "integrity": "sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "8.57.2",
+ "eslint-visitor-keys": "^5.0.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
+ "dev": true
+ }
+ }
+ },
+ "@ungap/structured-clone": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
+ "dev": true
+ },
+ "@unrs/resolver-binding-android-arm-eabi": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz",
+ "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-android-arm64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz",
+ "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-darwin-arm64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz",
+ "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-darwin-x64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz",
+ "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-freebsd-x64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz",
+ "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-arm-gnueabihf": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz",
+ "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-arm-musleabihf": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz",
+ "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-arm64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz",
+ "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-arm64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz",
+ "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-ppc64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz",
+ "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-riscv64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz",
+ "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-riscv64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz",
+ "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-s390x-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz",
+ "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-x64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz",
+ "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-x64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz",
+ "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-wasm32-wasi": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz",
+ "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==",
"dev": true,
+ "optional": true,
"requires": {
- "@typescript-eslint/types": "4.31.1",
- "eslint-visitor-keys": "^2.0.0"
+ "@napi-rs/wasm-runtime": "^0.2.11"
}
},
+ "@unrs/resolver-binding-win32-arm64-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz",
+ "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-win32-ia32-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz",
+ "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-win32-x64-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz",
+ "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==",
+ "dev": true,
+ "optional": true
+ },
"@whatwg-node/promise-helpers": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz",
@@ -17353,12 +15996,6 @@
"tslib": "^2.6.3"
}
},
- "abab": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
- "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
- "dev": true
- },
"accept-language": {
"version": "3.0.18",
"resolved": "https://registry.npmjs.org/accept-language/-/accept-language-3.0.18.tgz",
@@ -17384,22 +16021,20 @@
}
}
},
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true
- },
- "acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
- "dev": true,
+ "accesscontrol": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/accesscontrol/-/accesscontrol-2.2.1.tgz",
+ "integrity": "sha512-52EvFk/J9EF+w4mYQoKnOTkEMj01R1U5n2fc1dai6x1xkgOks3DGkx01qQL2cKFxGmE4Tn1krAU3jJA9L1NMkg==",
"requires": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
+ "notation": "^1.3.6"
}
},
+ "acorn": {
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
+ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
+ "dev": true
+ },
"acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -17407,25 +16042,10 @@
"dev": true,
"requires": {}
},
- "acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "dev": true
- },
- "agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "requires": {
- "debug": "4"
- }
- },
"ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
@@ -17434,12 +16054,6 @@
"uri-js": "^4.2.2"
}
},
- "ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true
- },
"ansi-escapes": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
@@ -17456,18 +16070,18 @@
"dev": true
},
"ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "color-convert": "^2.0.1"
}
},
"anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
"requires": {
"normalize-path": "^3.0.0",
@@ -17522,15 +16136,11 @@
}
},
"arangojs": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-8.0.0.tgz",
- "integrity": "sha512-VjeWxbS18c65Wu6Pr/d5/kW0Chn6ftIfUAzCmG3wUUe8OrRRalSgL6e1+5iY9apocbECo6wTK3kr2goXfLHB+A==",
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-10.2.2.tgz",
+ "integrity": "sha512-3Xllq5inTGjros0mBP9NFxrIW8Di0ldtFurLdrXy5z4NDVJPyJtnwUiiGrMPY21NuVu53wUDE23YN50jnX4epw==",
"requires": {
- "@types/node": ">=14",
- "multi-part": "^4.0.0",
- "path-browserify": "^1.0.1",
- "x3-linkedlist": "1.2.0",
- "xhr": "^2.4.1"
+ "@types/node": "^20.11.26"
}
},
"argparse": {
@@ -17560,12 +16170,6 @@
"is-string": "^1.0.7"
}
},
- "array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true
- },
"array.prototype.flat": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
@@ -17601,12 +16205,6 @@
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-2.0.2.tgz",
"integrity": "sha512-9sBQUQZMKFKcO/C3Bo6Rx4CQany0R0UeVcefNGRRdW2vbmaMOhV1sbmlXcQLcD56juLXbSGTBm0GGuvmrAF8pA=="
},
- "astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
- "dev": true
- },
"async-retry": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz",
@@ -17629,13 +16227,13 @@
}
},
"axios": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.1.tgz",
- "integrity": "sha512-Kn4kbSXpkFHCGE6rBFNwIv0GQs4AvDT80jlveJDKFxjbTYMUeB4QtsdPCv6H8Cm19Je7IU6VFtRl2zWZI0rudQ==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
+ "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
"requires": {
- "follow-redirects": "^1.15.6",
+ "follow-redirects": "^1.15.11",
"form-data": "4.0.4",
- "proxy-from-env": "^1.1.0"
+ "proxy-from-env": "^2.1.0"
}
},
"babel-core": {
@@ -17646,75 +16244,25 @@
"requires": {}
},
"babel-jest": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.6.tgz",
- "integrity": "sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.3.0.tgz",
+ "integrity": "sha512-gRpauEU2KRrCox5Z296aeVHR4jQ98BCnu0IO332D/xpHNOsIH/bgSRk9k6GbKIbBw8vFeN6ctuu6tV8WOyVfYQ==",
"dev": true,
"requires": {
- "@jest/transform": "^27.4.6",
- "@jest/types": "^27.4.2",
- "@types/babel__core": "^7.1.14",
- "babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^27.4.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
+ "@jest/transform": "30.3.0",
+ "@types/babel__core": "^7.20.5",
+ "babel-plugin-istanbul": "^7.0.1",
+ "babel-preset-jest": "30.3.0",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
"slash": "^3.0.0"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
}
}
},
@@ -17728,28 +16276,25 @@
}
},
"babel-plugin-istanbul": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
- "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz",
+ "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
"@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^5.0.4",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-instrument": "^6.0.2",
"test-exclude": "^6.0.0"
}
},
"babel-plugin-jest-hoist": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz",
- "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.3.0.tgz",
+ "integrity": "sha512-+TRkByhsws6sfPjVaitzadk1I0F5sPvOVUH5tyTSzhePpsGIVrdeunHSw/C36QeocS95OOk8lunc4rlu5Anwsg==",
"dev": true,
"requires": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.0.0",
- "@types/babel__traverse": "^7.0.6"
+ "@types/babel__core": "^7.20.5"
}
},
"babel-plugin-macros": {
@@ -17819,33 +16364,36 @@
}
},
"babel-preset-current-node-syntax": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
- "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz",
+ "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==",
"dev": true,
"requires": {
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.8.3",
+ "@babel/plugin-syntax-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.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.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-top-level-await": "^7.8.3"
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5"
}
},
"babel-preset-jest": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz",
- "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.3.0.tgz",
+ "integrity": "sha512-6ZcUbWHC+dMz2vfzdNwi87Z1gQsLNK2uLuK1Q89R11xdvejcivlYYwDlEv0FHX3VwEXpbBQ9uufB/MUNpZGfhQ==",
"dev": true,
"requires": {
- "babel-plugin-jest-hoist": "^27.4.0",
- "babel-preset-current-node-syntax": "^1.0.0"
+ "babel-plugin-jest-hoist": "30.3.0",
+ "babel-preset-current-node-syntax": "^1.2.0"
}
},
"babel-runtime": {
@@ -17964,12 +16512,6 @@
"fill-range": "^7.1.1"
}
},
- "browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
"browserslist": {
"version": "4.24.2",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz",
@@ -18012,6 +16554,29 @@
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true
},
+ "builtin-modules": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
+ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
+ "dev": true
+ },
+ "builtins": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz",
+ "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==",
+ "dev": true,
+ "requires": {
+ "semver": "^7.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true
+ }
+ }
+ },
"bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -18065,14 +16630,30 @@
"dev": true
},
"chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
}
},
"char-regex": {
@@ -18086,7 +16667,6 @@
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
"integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
"dev": true,
- "optional": true,
"requires": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -18103,7 +16683,6 @@
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
- "optional": true,
"requires": {
"picomatch": "^2.2.1"
}
@@ -18111,15 +16690,15 @@
}
},
"ci-info": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz",
- "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz",
+ "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==",
"dev": true
},
"cjs-module-lexer": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
- "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz",
+ "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==",
"dev": true
},
"cli-cursor": {
@@ -18147,13 +16726,13 @@
}
},
"cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dev": true,
"requires": {
"string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
+ "strip-ansi": "^6.0.1",
"wrap-ansi": "^7.0.0"
}
},
@@ -18182,28 +16761,28 @@
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
"dev": true
},
"collect-v8-coverage": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz",
+ "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==",
"dev": true
},
"color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
- "color-name": "1.1.3"
+ "color-name": "~1.1.4"
}
},
"color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"colors": {
@@ -18410,40 +16989,6 @@
"which": "^2.0.1"
}
},
- "cssom": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
- "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
- "dev": true
- },
- "cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
- "dev": true,
- "requires": {
- "cssom": "~0.3.6"
- },
- "dependencies": {
- "cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
- "dev": true
- }
- }
- },
- "data-urls": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
- "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
- "dev": true,
- "requires": {
- "abab": "^2.0.3",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0"
- }
- },
"dataloader": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.0.0.tgz",
@@ -18463,17 +17008,12 @@
"ms": "^2.1.3"
}
},
- "decimal.js": {
- "version": "10.3.1",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
- "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
- "dev": true
- },
"dedent": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
- "dev": true
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz",
+ "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==",
+ "dev": true,
+ "requires": {}
},
"deep-is": {
"version": "0.1.4",
@@ -18482,9 +17022,9 @@
"dev": true
},
"deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"dev": true
},
"defaults": {
@@ -18551,21 +17091,6 @@
"wrappy": "1"
}
},
- "diff-sequences": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz",
- "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==",
- "dev": true
- },
- "dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "requires": {
- "path-type": "^4.0.0"
- }
- },
"doctrine": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
@@ -18580,23 +17105,6 @@
"resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
"integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
},
- "domexception": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
- "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
- "dev": true,
- "requires": {
- "webidl-conversions": "^5.0.0"
- },
- "dependencies": {
- "webidl-conversions": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
- "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
- "dev": true
- }
- }
- },
"dotenv": {
"version": "8.6.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
@@ -18646,9 +17154,9 @@
"dev": true
},
"emittery": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz",
- "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==",
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
"dev": true
},
"emoji-regex": {
@@ -18662,15 +17170,6 @@
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
"integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="
},
- "enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
- "dev": true,
- "requires": {
- "ansi-colors": "^4.1.1"
- }
- },
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -18798,206 +17297,131 @@
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
"escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
- },
- "escodegen": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
- "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
- "dev": true,
- "requires": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- },
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- }
- },
- "optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dev": true,
- "requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- }
- },
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "optional": true
- },
- "type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2"
- }
- }
- }
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "dev": true
},
"eslint": {
- "version": "7.32.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
- "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "7.12.11",
- "@eslint/eslintrc": "^0.4.3",
- "@humanwhocodes/config-array": "^0.5.0",
- "ajv": "^6.10.0",
+ "version": "8.57.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
+ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
+ "dev": true,
+ "requires": {
+ "@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.0.1",
+ "debug": "^4.3.2",
"doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
"escape-string-regexp": "^4.0.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^2.0.0",
- "espree": "^7.3.1",
- "esquery": "^1.4.0",
+ "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",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.1.2",
- "globals": "^13.6.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
+ "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",
- "js-yaml": "^3.13.1",
+ "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.0.4",
+ "minimatch": "^3.1.2",
"natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "progress": "^2.0.0",
- "regexpp": "^3.1.0",
- "semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
- "strip-json-comments": "^3.1.0",
- "table": "^6.0.9",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
- "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.10.4"
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
}
},
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
"dev": true,
"requires": {
- "color-convert": "^2.0.1"
+ "is-glob": "^4.0.3"
}
},
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
"requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "type-fest": "^0.20.2"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "js-yaml": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
"dev": true,
"requires": {
- "color-name": "~1.1.4"
+ "argparse": "^2.0.1"
}
},
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true
- },
- "globals": {
- "version": "13.11.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
- "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
"dev": true,
"requires": {
- "type-fest": "^0.20.2"
+ "p-locate": "^5.0.0"
}
},
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"requires": {
- "lru-cache": "^6.0.0"
+ "yocto-queue": "^0.1.0"
}
},
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
"dev": true,
"requires": {
- "has-flag": "^4.0.0"
+ "p-limit": "^3.0.2"
}
},
"type-fest": {
@@ -19008,6 +17432,23 @@
}
}
},
+ "eslint-compat-utils": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz",
+ "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==",
+ "dev": true,
+ "requires": {
+ "semver": "^7.5.4"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true
+ }
+ }
+ },
"eslint-config-prettier": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz",
@@ -19016,9 +17457,9 @@
"requires": {}
},
"eslint-config-standard": {
- "version": "16.0.3",
- "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz",
- "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==",
+ "version": "17.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz",
+ "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==",
"dev": true,
"requires": {}
},
@@ -19113,14 +17554,15 @@
}
}
},
- "eslint-plugin-es": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
- "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
+ "eslint-plugin-es-x": {
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz",
+ "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==",
"dev": true,
"requires": {
- "eslint-utils": "^2.0.0",
- "regexpp": "^3.0.0"
+ "@eslint-community/eslint-utils": "^4.1.2",
+ "@eslint-community/regexpp": "^4.11.0",
+ "eslint-compat-utils": "^0.5.1"
}
},
"eslint-plugin-import": {
@@ -19171,93 +17613,88 @@
}
},
"eslint-plugin-jest": {
- "version": "24.7.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz",
- "integrity": "sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA==",
+ "version": "29.15.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.15.1.tgz",
+ "integrity": "sha512-6BjyErCQauz3zfJvzLw/kAez2lf4LEpbHLvWBfEcG4EI0ZiRSwjoH2uZulMouU8kRkBH+S0rhqn11IhTvxKgKw==",
"dev": true,
"requires": {
- "@typescript-eslint/experimental-utils": "^4.0.1"
+ "@typescript-eslint/utils": "^8.0.0"
}
},
- "eslint-plugin-node": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
- "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==",
+ "eslint-plugin-n": {
+ "version": "16.6.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz",
+ "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==",
"dev": true,
"requires": {
- "eslint-plugin-es": "^3.0.0",
- "eslint-utils": "^2.0.0",
- "ignore": "^5.1.1",
- "minimatch": "^3.0.4",
- "resolve": "^1.10.1",
- "semver": "^6.1.0"
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "builtins": "^5.0.1",
+ "eslint-plugin-es-x": "^7.5.0",
+ "get-tsconfig": "^4.7.0",
+ "globals": "^13.24.0",
+ "ignore": "^5.2.4",
+ "is-builtin-module": "^3.2.1",
+ "is-core-module": "^2.12.1",
+ "minimatch": "^3.1.2",
+ "resolve": "^1.22.2",
+ "semver": "^7.5.3"
},
"dependencies": {
- "ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
+ "globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true
}
}
},
"eslint-plugin-promise": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz",
- "integrity": "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==",
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz",
+ "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==",
"dev": true,
"requires": {}
},
"eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
"dev": true,
"requires": {
"esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- }
- },
- "eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^1.1.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- }
+ "estraverse": "^5.2.0"
}
},
"eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
"dev": true
},
"espree": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
- "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
"dev": true,
"requires": {
- "acorn": "^7.4.0",
- "acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^1.3.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- }
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
}
},
"esprima": {
@@ -19267,20 +17704,12 @@
"dev": true
},
"esquery": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
- "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
+ "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
"dev": true,
"requires": {
"estraverse": "^5.1.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
- "dev": true
- }
}
},
"esrecurse": {
@@ -19290,20 +17719,12 @@
"dev": true,
"requires": {
"estraverse": "^5.2.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
- "dev": true
- }
}
},
"estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
},
"esutils": {
@@ -19334,22 +17755,24 @@
"strip-final-newline": "^2.0.0"
}
},
- "exit": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "exit-x": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz",
+ "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==",
"dev": true
},
"expect": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.6.tgz",
- "integrity": "sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-30.3.0.tgz",
+ "integrity": "sha512-1zQrciTiQfRdo7qJM1uG4navm8DayFa2TgCSRlzUyNkhcJ6XUZF3hjnpkyr3VhAqPH7i/9GkG7Tv5abz6fqz0Q==",
"dev": true,
"requires": {
- "@jest/types": "^27.4.2",
- "jest-get-type": "^27.4.0",
- "jest-matcher-utils": "^27.4.6",
- "jest-message-util": "^27.4.6"
+ "@jest/expect-utils": "30.3.0",
+ "@jest/get-type": "30.1.0",
+ "jest-matcher-utils": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-mock": "30.3.0",
+ "jest-util": "30.3.0"
}
},
"express": {
@@ -19439,19 +17862,6 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
- "fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- }
- },
"fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -19461,7 +17871,7 @@
"fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
"fast-safe-stringify": {
@@ -19480,9 +17890,9 @@
}
},
"fb-watchman": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
- "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
"dev": true,
"requires": {
"bser": "2.1.1"
@@ -19497,16 +17907,6 @@
"flat-cache": "^3.0.4"
}
},
- "file-type": {
- "version": "16.5.4",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz",
- "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==",
- "requires": {
- "readable-web-to-node-stream": "^3.0.0",
- "strtok3": "^6.2.4",
- "token-types": "^4.1.1"
- }
- },
"fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@@ -19561,15 +17961,15 @@
}
},
"flatted": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
- "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
"follow-redirects": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA=="
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
+ "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="
},
"for-each": {
"version": "0.3.5",
@@ -19643,22 +18043,16 @@
"dev": true
},
"fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"optional": true
},
"function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
- },
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "dev": true
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
},
"gensync": {
"version": "1.0.0-beta.2",
@@ -19720,6 +18114,15 @@
"get-intrinsic": "^1.1.1"
}
},
+ "get-tsconfig": {
+ "version": "4.13.7",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.7.tgz",
+ "integrity": "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==",
+ "dev": true,
+ "requires": {
+ "resolve-pkg-maps": "^1.0.0"
+ }
+ },
"glob": {
"version": "7.1.7",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
@@ -19758,34 +18161,6 @@
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true
},
- "globby": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
- "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
- "dev": true,
- "requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
- "slash": "^3.0.0"
- },
- "dependencies": {
- "ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
- "dev": true
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
- }
- }
- },
"gopd": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
@@ -19797,6 +18172,12 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
+ "graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
"graphql": {
"version": "16.12.0",
"resolved": "https://registry.npmjs.org/graphql/-/graphql-16.12.0.tgz",
@@ -19932,15 +18313,6 @@
"parse-passwd": "^1.0.0"
}
},
- "html-encoding-sniffer": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
- "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
- "dev": true,
- "requires": {
- "whatwg-encoding": "^1.0.5"
- }
- },
"html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -19959,27 +18331,6 @@
"toidentifier": "~1.0.1"
}
},
- "http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "dev": true,
- "requires": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- }
- },
- "https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "dev": true,
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- },
"human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
@@ -19997,12 +18348,19 @@
"ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true
},
"ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true
+ },
+ "ignore-by-default": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
+ "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
"dev": true
},
"import-fresh": {
@@ -20024,9 +18382,9 @@
}
},
"import-local": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
- "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
"dev": true,
"requires": {
"pkg-dir": "^4.2.0",
@@ -20133,18 +18491,27 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-builtin-module": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+ "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^3.3.0"
+ }
+ },
"is-callable": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
"integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="
},
"is-core-module": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
- "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
"dev": true,
"requires": {
- "has": "^1.0.3"
+ "hasown": "^2.0.2"
}
},
"is-date-object": {
@@ -20215,6 +18582,12 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ },
"is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
@@ -20224,12 +18597,6 @@
"isobject": "^3.0.1"
}
},
- "is-potential-custom-element-name": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
- "dev": true
- },
"is-regex": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -20278,12 +18645,6 @@
"which-typed-array": "^1.1.16"
}
},
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
"is-unicode-supported": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
@@ -20320,537 +18681,68 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz",
"integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==",
- "requires": {
- "node-fetch": "^2.6.1",
- "whatwg-fetch": "^3.4.1"
- }
- },
- "istanbul-lib-coverage": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
- "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
- "dev": true
- },
- "istanbul-lib-instrument": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz",
- "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.12.3",
- "@babel/parser": "^7.14.7",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.2.0",
- "semver": "^6.3.0"
- }
- },
- "istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
- "dev": true,
- "requires": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "istanbul-lib-source-maps": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
- "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "istanbul-reports": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz",
- "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==",
- "dev": true,
- "requires": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
- }
- },
- "iterall": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz",
- "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg=="
- },
- "jackspeak": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz",
- "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==",
- "dev": true,
- "requires": {
- "@isaacs/cliui": "^8.0.2"
- }
- },
- "jest": {
- "version": "27.4.7",
- "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.7.tgz",
- "integrity": "sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg==",
- "dev": true,
- "requires": {
- "@jest/core": "^27.4.7",
- "import-local": "^3.0.2",
- "jest-cli": "^27.4.7"
- }
- },
- "jest-changed-files": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz",
- "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==",
- "dev": true,
- "requires": {
- "@jest/types": "^27.4.2",
- "execa": "^5.0.0",
- "throat": "^6.0.1"
- }
- },
- "jest-circus": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.6.tgz",
- "integrity": "sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ==",
- "dev": true,
- "requires": {
- "@jest/environment": "^27.4.6",
- "@jest/test-result": "^27.4.6",
- "@jest/types": "^27.4.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "dedent": "^0.7.0",
- "expect": "^27.4.6",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^27.4.6",
- "jest-matcher-utils": "^27.4.6",
- "jest-message-util": "^27.4.6",
- "jest-runtime": "^27.4.6",
- "jest-snapshot": "^27.4.6",
- "jest-util": "^27.4.2",
- "pretty-format": "^27.4.6",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3",
- "throat": "^6.0.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "jest-cli": {
- "version": "27.4.7",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.7.tgz",
- "integrity": "sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw==",
- "dev": true,
- "requires": {
- "@jest/core": "^27.4.7",
- "@jest/test-result": "^27.4.6",
- "@jest/types": "^27.4.2",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "import-local": "^3.0.2",
- "jest-config": "^27.4.7",
- "jest-util": "^27.4.2",
- "jest-validate": "^27.4.6",
- "prompts": "^2.0.1",
- "yargs": "^16.2.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "jest-validate": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz",
- "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==",
- "dev": true,
- "requires": {
- "@jest/types": "^27.4.2",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.4.0",
- "leven": "^3.1.0",
- "pretty-format": "^27.4.6"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
+ "requires": {
+ "node-fetch": "^2.6.1",
+ "whatwg-fetch": "^3.4.1"
}
},
- "jest-config": {
- "version": "27.4.7",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.7.tgz",
- "integrity": "sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw==",
+ "istanbul-lib-coverage": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
+ "dev": true
+ },
+ "istanbul-lib-instrument": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
"dev": true,
"requires": {
- "@babel/core": "^7.8.0",
- "@jest/test-sequencer": "^27.4.6",
- "@jest/types": "^27.4.2",
- "babel-jest": "^27.4.6",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.1",
- "graceful-fs": "^4.2.4",
- "jest-circus": "^27.4.6",
- "jest-environment-jsdom": "^27.4.6",
- "jest-environment-node": "^27.4.6",
- "jest-get-type": "^27.4.0",
- "jest-jasmine2": "^27.4.6",
- "jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.6",
- "jest-runner": "^27.4.6",
- "jest-util": "^27.4.2",
- "jest-validate": "^27.4.6",
- "micromatch": "^4.0.4",
- "pretty-format": "^27.4.6",
- "slash": "^3.0.0"
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^7.5.4"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "jest-validate": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz",
- "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==",
- "dev": true,
- "requires": {
- "@jest/types": "^27.4.2",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.4.0",
- "leven": "^3.1.0",
- "pretty-format": "^27.4.6"
- }
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
}
}
},
- "jest-diff": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.6.tgz",
- "integrity": "sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w==",
+ "istanbul-lib-report": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
"requires": {
- "chalk": "^4.0.0",
- "diff-sequences": "^27.4.0",
- "jest-get-type": "^27.4.0",
- "pretty-format": "^27.4.6"
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^4.0.0",
+ "supports-color": "^7.1.0"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "jest-docblock": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz",
- "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==",
- "dev": true,
- "requires": {
- "detect-newline": "^3.0.0"
- }
- },
- "jest-each": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.6.tgz",
- "integrity": "sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA==",
- "dev": true,
- "requires": {
- "@jest/types": "^27.4.2",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.4.0",
- "jest-util": "^27.4.2",
- "pretty-format": "^27.4.6"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "make-dir": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
"requires": {
- "color-name": "~1.1.4"
+ "semver": "^7.5.3"
}
},
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true
},
"supports-color": {
@@ -20864,343 +18756,198 @@
}
}
},
- "jest-environment-jsdom": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz",
- "integrity": "sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA==",
- "dev": true,
- "requires": {
- "@jest/environment": "^27.4.6",
- "@jest/fake-timers": "^27.4.6",
- "@jest/types": "^27.4.2",
- "@types/node": "*",
- "jest-mock": "^27.4.6",
- "jest-util": "^27.4.2",
- "jsdom": "^16.6.0"
- }
- },
- "jest-environment-node": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.6.tgz",
- "integrity": "sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ==",
+ "istanbul-lib-source-maps": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz",
+ "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==",
"dev": true,
"requires": {
- "@jest/environment": "^27.4.6",
- "@jest/fake-timers": "^27.4.6",
- "@jest/types": "^27.4.2",
- "@types/node": "*",
- "jest-mock": "^27.4.6",
- "jest-util": "^27.4.2"
+ "@jridgewell/trace-mapping": "^0.3.23",
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0"
}
},
- "jest-fetch-mock": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz",
- "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==",
+ "istanbul-reports": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
+ "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
"dev": true,
"requires": {
- "cross-fetch": "^3.0.4",
- "promise-polyfill": "^8.1.3"
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
}
},
- "jest-get-type": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz",
- "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==",
- "dev": true
+ "iterall": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz",
+ "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg=="
},
- "jest-haste-map": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.6.tgz",
- "integrity": "sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ==",
+ "jackspeak": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz",
+ "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==",
"dev": true,
"requires": {
- "@jest/types": "^27.4.2",
- "@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.4",
- "jest-regex-util": "^27.4.0",
- "jest-serializer": "^27.4.0",
- "jest-util": "^27.4.2",
- "jest-worker": "^27.4.6",
- "micromatch": "^4.0.4",
- "walker": "^1.0.7"
- }
- },
- "jest-jasmine2": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz",
- "integrity": "sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw==",
- "dev": true,
- "requires": {
- "@jest/environment": "^27.4.6",
- "@jest/source-map": "^27.4.0",
- "@jest/test-result": "^27.4.6",
- "@jest/types": "^27.4.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "expect": "^27.4.6",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^27.4.6",
- "jest-matcher-utils": "^27.4.6",
- "jest-message-util": "^27.4.6",
- "jest-runtime": "^27.4.6",
- "jest-snapshot": "^27.4.6",
- "jest-util": "^27.4.2",
- "pretty-format": "^27.4.6",
- "throat": "^6.0.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
+ "@isaacs/cliui": "^8.0.2"
}
},
- "jest-leak-detector": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz",
- "integrity": "sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA==",
+ "jest": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-30.3.0.tgz",
+ "integrity": "sha512-AkXIIFcaazymvey2i/+F94XRnM6TsVLZDhBMLsd1Sf/W0wzsvvpjeyUrCZD6HGG4SDYPgDJDBKeiJTBb10WzMg==",
"dev": true,
"requires": {
- "jest-get-type": "^27.4.0",
- "pretty-format": "^27.4.6"
+ "@jest/core": "30.3.0",
+ "@jest/types": "30.3.0",
+ "import-local": "^3.2.0",
+ "jest-cli": "30.3.0"
}
},
- "jest-matcher-utils": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz",
- "integrity": "sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA==",
+ "jest-changed-files": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.3.0.tgz",
+ "integrity": "sha512-B/7Cny6cV5At6M25EWDgf9S617lHivamL8vl6KEpJqkStauzcG4e+WPfDgMMF+H4FVH4A2PLRyvgDJan4441QA==",
"dev": true,
"requires": {
- "chalk": "^4.0.0",
- "jest-diff": "^27.4.6",
- "jest-get-type": "^27.4.0",
- "pretty-format": "^27.4.6"
+ "execa": "^5.1.1",
+ "jest-util": "30.3.0",
+ "p-limit": "^3.1.0"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"requires": {
- "has-flag": "^4.0.0"
+ "yocto-queue": "^0.1.0"
}
}
}
},
- "jest-message-util": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.6.tgz",
- "integrity": "sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA==",
+ "jest-circus": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.3.0.tgz",
+ "integrity": "sha512-PyXq5szeSfR/4f1lYqCmmQjh0vqDkURUYi9N6whnHjlRz4IUQfMcXkGLeEoiJtxtyPqgUaUUfyQlApXWBSN1RA==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.12.13",
- "@jest/types": "^27.4.2",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "micromatch": "^4.0.4",
- "pretty-format": "^27.4.6",
+ "@jest/environment": "30.3.0",
+ "@jest/expect": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "co": "^4.6.0",
+ "dedent": "^1.6.0",
+ "is-generator-fn": "^2.1.0",
+ "jest-each": "30.3.0",
+ "jest-matcher-utils": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-runtime": "30.3.0",
+ "jest-snapshot": "30.3.0",
+ "jest-util": "30.3.0",
+ "p-limit": "^3.1.0",
+ "pretty-format": "30.3.0",
+ "pure-rand": "^7.0.0",
"slash": "^3.0.0",
- "stack-utils": "^2.0.3"
+ "stack-utils": "^2.0.6"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"requires": {
- "color-name": "~1.1.4"
+ "yocto-queue": "^0.1.0"
}
},
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
+ }
+ }
+ },
+ "jest-cli": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.3.0.tgz",
+ "integrity": "sha512-l6Tqx+j1fDXJEW5bqYykDQQ7mQg+9mhWXtnj+tQZrTWYHyHoi6Be8HPumDSA+UiX2/2buEgjA58iJzdj146uCw==",
+ "dev": true,
+ "requires": {
+ "@jest/core": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/types": "30.3.0",
+ "chalk": "^4.1.2",
+ "exit-x": "^0.2.2",
+ "import-local": "^3.2.0",
+ "jest-config": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0",
+ "yargs": "^17.7.2"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true
},
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "jest-validate": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz",
+ "integrity": "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==",
"dev": true,
"requires": {
- "has-flag": "^4.0.0"
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.3.0",
+ "camelcase": "^6.3.0",
+ "chalk": "^4.1.2",
+ "leven": "^3.1.0",
+ "pretty-format": "30.3.0"
}
}
}
},
- "jest-mock": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.6.tgz",
- "integrity": "sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw==",
- "dev": true,
- "requires": {
- "@jest/types": "^27.4.2",
- "@types/node": "*"
- }
- },
- "jest-pnp-resolver": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
- "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
- "dev": true,
- "requires": {}
- },
- "jest-regex-util": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz",
- "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==",
- "dev": true
- },
- "jest-resolve": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.6.tgz",
- "integrity": "sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw==",
- "dev": true,
- "requires": {
- "@jest/types": "^27.4.2",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.4.6",
- "jest-pnp-resolver": "^1.2.2",
- "jest-util": "^27.4.2",
- "jest-validate": "^27.4.6",
- "resolve": "^1.20.0",
- "resolve.exports": "^1.1.0",
- "slash": "^3.0.0"
+ "jest-config": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.3.0.tgz",
+ "integrity": "sha512-WPMAkMAtNDY9P/oKObtsRG/6KTrhtgPJoBTmk20uDn4Uy6/3EJnnaZJre/FMT1KVRx8cve1r7/FlMIOfRVWL4w==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.27.4",
+ "@jest/get-type": "30.1.0",
+ "@jest/pattern": "30.0.1",
+ "@jest/test-sequencer": "30.3.0",
+ "@jest/types": "30.3.0",
+ "babel-jest": "30.3.0",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "deepmerge": "^4.3.1",
+ "glob": "^10.5.0",
+ "graceful-fs": "^4.2.11",
+ "jest-circus": "30.3.0",
+ "jest-docblock": "30.2.0",
+ "jest-environment-node": "30.3.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.3.0",
+ "jest-runner": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0",
+ "parse-json": "^5.2.0",
+ "pretty-format": "30.3.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
"requires": {
- "color-convert": "^2.0.1"
+ "balanced-match": "^1.0.0"
}
},
"camelcase": {
@@ -21209,49 +18956,67 @@
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true
},
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
"dev": true,
"requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
"requires": {
- "color-name": "~1.1.4"
+ "@isaacs/cliui": "^8.0.2",
+ "@pkgjs/parseargs": "^0.11.0"
}
},
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
+ "jest-validate": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz",
+ "integrity": "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==",
+ "dev": true,
+ "requires": {
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.3.0",
+ "camelcase": "^6.3.0",
+ "chalk": "^4.1.2",
+ "leven": "^3.1.0",
+ "pretty-format": "30.3.0"
+ }
},
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true
},
- "jest-validate": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz",
- "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==",
+ "minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"dev": true,
"requires": {
- "@jest/types": "^27.4.2",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.4.0",
- "leven": "^3.1.0",
- "pretty-format": "^27.4.6"
+ "brace-expansion": "^2.0.2"
+ }
+ },
+ "path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
}
},
"slash": {
@@ -21259,178 +19024,160 @@
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
}
}
},
- "jest-resolve-dependencies": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz",
- "integrity": "sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw==",
+ "jest-diff": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.3.0.tgz",
+ "integrity": "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==",
"dev": true,
"requires": {
- "@jest/types": "^27.4.2",
- "jest-regex-util": "^27.4.0",
- "jest-snapshot": "^27.4.6"
+ "@jest/diff-sequences": "30.3.0",
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "pretty-format": "30.3.0"
}
},
- "jest-runner": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.6.tgz",
- "integrity": "sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg==",
+ "jest-docblock": {
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz",
+ "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==",
+ "dev": true,
+ "requires": {
+ "detect-newline": "^3.1.0"
+ }
+ },
+ "jest-each": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.3.0.tgz",
+ "integrity": "sha512-V8eMndg/aZ+3LnCJgSm13IxS5XSBM22QSZc9BtPK8Dek6pm+hfUNfwBdvsB3d342bo1q7wnSkC38zjX259qZNA==",
+ "dev": true,
+ "requires": {
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.3.0",
+ "chalk": "^4.1.2",
+ "jest-util": "30.3.0",
+ "pretty-format": "30.3.0"
+ }
+ },
+ "jest-environment-node": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.3.0.tgz",
+ "integrity": "sha512-4i6HItw/JSiJVsC5q0hnKIe/hbYfZLVG9YJ/0pU9Hz2n/9qZe3Rhn5s5CUZA5ORZlcdT/vmAXRMyONXJwPrmYQ==",
"dev": true,
"requires": {
- "@jest/console": "^27.4.6",
- "@jest/environment": "^27.4.6",
- "@jest/test-result": "^27.4.6",
- "@jest/transform": "^27.4.6",
- "@jest/types": "^27.4.2",
+ "@jest/environment": "30.3.0",
+ "@jest/fake-timers": "30.3.0",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "emittery": "^0.8.1",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-docblock": "^27.4.0",
- "jest-environment-jsdom": "^27.4.6",
- "jest-environment-node": "^27.4.6",
- "jest-haste-map": "^27.4.6",
- "jest-leak-detector": "^27.4.6",
- "jest-message-util": "^27.4.6",
- "jest-resolve": "^27.4.6",
- "jest-runtime": "^27.4.6",
- "jest-util": "^27.4.2",
- "jest-worker": "^27.4.6",
- "source-map-support": "^0.5.6",
- "throat": "^6.0.1"
+ "jest-mock": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true
},
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "jest-validate": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz",
+ "integrity": "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==",
"dev": true,
"requires": {
- "has-flag": "^4.0.0"
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.3.0",
+ "camelcase": "^6.3.0",
+ "chalk": "^4.1.2",
+ "leven": "^3.1.0",
+ "pretty-format": "30.3.0"
}
}
}
},
- "jest-runtime": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.6.tgz",
- "integrity": "sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ==",
- "dev": true,
- "requires": {
- "@jest/environment": "^27.4.6",
- "@jest/fake-timers": "^27.4.6",
- "@jest/globals": "^27.4.6",
- "@jest/source-map": "^27.4.0",
- "@jest/test-result": "^27.4.6",
- "@jest/transform": "^27.4.6",
- "@jest/types": "^27.4.2",
- "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.4",
- "jest-haste-map": "^27.4.6",
- "jest-message-util": "^27.4.6",
- "jest-mock": "^27.4.6",
- "jest-regex-util": "^27.4.0",
- "jest-resolve": "^27.4.6",
- "jest-snapshot": "^27.4.6",
- "jest-util": "^27.4.2",
+ "jest-fetch-mock": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/jest-fetch-mock/-/jest-fetch-mock-3.0.3.tgz",
+ "integrity": "sha512-Ux1nWprtLrdrH4XwE7O7InRY6psIi3GOsqNESJgMJ+M5cv4A8Lh7SN9d2V2kKRZ8ebAfcd1LNyZguAOb6JiDqw==",
+ "dev": true,
+ "requires": {
+ "cross-fetch": "^3.0.4",
+ "promise-polyfill": "^8.1.3"
+ }
+ },
+ "jest-haste-map": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.3.0.tgz",
+ "integrity": "sha512-mMi2oqG4KRU0R9QEtscl87JzMXfUhbKaFqOxmjb2CKcbHcUGFrJCBWHmnTiUqi6JcnzoBlO4rWfpdl2k/RfLCA==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "anymatch": "^3.1.3",
+ "fb-watchman": "^2.0.2",
+ "fsevents": "^2.3.3",
+ "graceful-fs": "^4.2.11",
+ "jest-regex-util": "30.0.1",
+ "jest-util": "30.3.0",
+ "jest-worker": "30.3.0",
+ "picomatch": "^4.0.3",
+ "walker": "^1.0.8"
+ },
+ "dependencies": {
+ "picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true
+ }
+ }
+ },
+ "jest-leak-detector": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.3.0.tgz",
+ "integrity": "sha512-cuKmUUGIjfXZAiGJ7TbEMx0bcqNdPPI6P1V+7aF+m/FUJqFDxkFR4JqkTu8ZOiU5AaX/x0hZ20KaaIPXQzbMGQ==",
+ "dev": true,
+ "requires": {
+ "@jest/get-type": "30.1.0",
+ "pretty-format": "30.3.0"
+ }
+ },
+ "jest-matcher-utils": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.3.0.tgz",
+ "integrity": "sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==",
+ "dev": true,
+ "requires": {
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "jest-diff": "30.3.0",
+ "pretty-format": "30.3.0"
+ }
+ },
+ "jest-message-util": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.3.0.tgz",
+ "integrity": "sha512-Z/j4Bo+4ySJ+JPJN3b2Qbl9hDq3VrXmnjjGEWD/x0BCXeOXPTV1iZYYzl2X8c1MaCOL+ewMyNBcm88sboE6YWw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.3.0",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.3",
+ "pretty-format": "30.3.0",
"slash": "^3.0.0",
- "strip-bom": "^4.0.0"
+ "stack-utils": "^2.0.6"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true
},
"slash": {
@@ -21438,180 +19185,296 @@
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
}
}
},
- "jest-serializer": {
- "version": "27.4.0",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz",
- "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==",
+ "jest-mock": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.3.0.tgz",
+ "integrity": "sha512-OTzICK8CpE+t4ndhKrwlIdbM6Pn8j00lvmSmq5ejiO+KxukbLjgOflKWMn3KE34EZdQm5RqTuKj+5RIEniYhog==",
"dev": true,
"requires": {
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "graceful-fs": "^4.2.4"
+ "jest-util": "30.3.0"
}
},
- "jest-snapshot": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.6.tgz",
- "integrity": "sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ==",
- "dev": true,
- "requires": {
- "@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.4.6",
- "@jest/types": "^27.4.2",
- "@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.4.6",
- "graceful-fs": "^4.2.4",
- "jest-diff": "^27.4.6",
- "jest-get-type": "^27.4.0",
- "jest-haste-map": "^27.4.6",
- "jest-matcher-utils": "^27.4.6",
- "jest-message-util": "^27.4.6",
- "jest-util": "^27.4.2",
- "natural-compare": "^1.4.0",
- "pretty-format": "^27.4.6",
- "semver": "^7.3.2"
+ "jest-pnp-resolver": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
+ "dev": true,
+ "requires": {}
+ },
+ "jest-regex-util": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz",
+ "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==",
+ "dev": true
+ },
+ "jest-resolve": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.3.0.tgz",
+ "integrity": "sha512-NRtTAHQlpd15F9rUR36jqwelbrDV/dY4vzNte3S2kxCKUJRYNd5/6nTSbYiak1VX5g8IoFF23Uj5TURkUW8O5g==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.3.0",
+ "jest-pnp-resolver": "^1.2.3",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0",
+ "slash": "^3.0.0",
+ "unrs-resolver": "^1.7.11"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
+ "camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true
},
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "jest-validate": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz",
+ "integrity": "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==",
"dev": true,
"requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.3.0",
+ "camelcase": "^6.3.0",
+ "chalk": "^4.1.2",
+ "leven": "^3.1.0",
+ "pretty-format": "30.3.0"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ }
+ }
+ },
+ "jest-resolve-dependencies": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.3.0.tgz",
+ "integrity": "sha512-9ev8s3YN6Hsyz9LV75XUwkCVFlwPbaFn6Wp75qnI0wzAINYWY8Fb3+6y59Rwd3QaS3kKXffHXsZMziMavfz/nw==",
+ "dev": true,
+ "requires": {
+ "jest-regex-util": "30.0.1",
+ "jest-snapshot": "30.3.0"
+ }
+ },
+ "jest-runner": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.3.0.tgz",
+ "integrity": "sha512-gDv6C9LGKWDPLia9TSzZwf4h3kMQCqyTpq+95PODnTRDO0g9os48XIYYkS6D236vjpBir2fF63YmJFtqkS5Duw==",
+ "dev": true,
+ "requires": {
+ "@jest/console": "30.3.0",
+ "@jest/environment": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "emittery": "^0.13.1",
+ "exit-x": "^0.2.2",
+ "graceful-fs": "^4.2.11",
+ "jest-docblock": "30.2.0",
+ "jest-environment-node": "30.3.0",
+ "jest-haste-map": "30.3.0",
+ "jest-leak-detector": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-resolve": "30.3.0",
+ "jest-runtime": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-watcher": "30.3.0",
+ "jest-worker": "30.3.0",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
+ },
+ "dependencies": {
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"requires": {
- "color-name": "~1.1.4"
+ "yocto-queue": "^0.1.0"
}
},
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
},
- "semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
"requires": {
- "has-flag": "^4.0.0"
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
}
}
}
},
- "jest-util": {
- "version": "27.4.2",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz",
- "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==",
- "dev": true,
- "requires": {
- "@jest/types": "^27.4.2",
+ "jest-runtime": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.3.0.tgz",
+ "integrity": "sha512-CgC+hIBJbuh78HEffkhNKcbXAytQViplcl8xupqeIWyKQF50kCQA8J7GeJCkjisC6hpnC9Muf8jV5RdtdFbGng==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "30.3.0",
+ "@jest/fake-timers": "30.3.0",
+ "@jest/globals": "30.3.0",
+ "@jest/source-map": "30.0.1",
+ "@jest/test-result": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "graceful-fs": "^4.2.4",
- "picomatch": "^2.2.3"
+ "chalk": "^4.1.2",
+ "cjs-module-lexer": "^2.1.0",
+ "collect-v8-coverage": "^1.0.2",
+ "glob": "^10.5.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-mock": "30.3.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.3.0",
+ "jest-snapshot": "30.3.0",
+ "jest-util": "30.3.0",
+ "slash": "^3.0.0",
+ "strip-bom": "^4.0.0"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
"requires": {
- "color-convert": "^2.0.1"
+ "balanced-match": "^1.0.0"
}
},
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
"dev": true,
"requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
}
},
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
"requires": {
- "color-name": "~1.1.4"
+ "@isaacs/cliui": "^8.0.2",
+ "@pkgjs/parseargs": "^0.11.0"
}
},
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true
},
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
+ "minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.2"
+ }
},
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dev": true,
"requires": {
- "has-flag": "^4.0.0"
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
}
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ }
+ }
+ },
+ "jest-snapshot": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.3.0.tgz",
+ "integrity": "sha512-f14c7atpb4O2DeNhwcvS810Y63wEn8O1HqK/luJ4F6M4NjvxmAKQwBUWjbExUtMxWJQ0wVgmCKymeJK6NZMnfQ==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.27.4",
+ "@babel/generator": "^7.27.5",
+ "@babel/plugin-syntax-jsx": "^7.27.1",
+ "@babel/plugin-syntax-typescript": "^7.27.1",
+ "@babel/types": "^7.27.3",
+ "@jest/expect-utils": "30.3.0",
+ "@jest/get-type": "30.1.0",
+ "@jest/snapshot-utils": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
+ "babel-preset-current-node-syntax": "^1.2.0",
+ "chalk": "^4.1.2",
+ "expect": "30.3.0",
+ "graceful-fs": "^4.2.11",
+ "jest-diff": "30.3.0",
+ "jest-matcher-utils": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-util": "30.3.0",
+ "pretty-format": "30.3.0",
+ "semver": "^7.7.2",
+ "synckit": "^0.11.8"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true
+ }
+ }
+ },
+ "jest-util": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.3.0.tgz",
+ "integrity": "sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.3"
+ },
+ "dependencies": {
+ "picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true
}
}
},
@@ -21643,61 +19506,12 @@
"chalk": "^4.0.0"
}
},
- "@types/yargs": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
- "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
"camelcase": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true
},
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
"jest-get-type": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
@@ -21722,99 +19536,36 @@
"dev": true
}
}
- },
- "react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
}
}
},
"jest-watcher": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.6.tgz",
- "integrity": "sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.3.0.tgz",
+ "integrity": "sha512-PJ1d9ThtTR8aMiBWUdcownq9mDdLXsQzJayTk4kmaBRHKvwNQn+ANveuhEBUyNI2hR1TVhvQ8D5kHubbzBHR/w==",
"dev": true,
"requires": {
- "@jest/test-result": "^27.4.6",
- "@jest/types": "^27.4.2",
+ "@jest/test-result": "30.3.0",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "jest-util": "^27.4.2",
- "string-length": "^4.0.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
+ "ansi-escapes": "^4.3.2",
+ "chalk": "^4.1.2",
+ "emittery": "^0.13.1",
+ "jest-util": "30.3.0",
+ "string-length": "^4.0.2"
}
},
"jest-worker": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz",
- "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.3.0.tgz",
+ "integrity": "sha512-DrCKkaQwHexjRUFTmPzs7sHQe0TSj9nvDALKGdwmK5mW9v7j90BudWirKAJHt3QQ9Dhrg1F7DogPzhChppkJpQ==",
"dev": true,
"requires": {
"@types/node": "*",
+ "@ungap/structured-clone": "^1.3.0",
+ "jest-util": "30.3.0",
"merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
+ "supports-color": "^8.1.1"
},
"dependencies": {
"has-flag": {
@@ -21860,62 +19611,6 @@
"esprima": "^4.0.0"
}
},
- "jsdom": {
- "version": "16.7.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
- "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
- "dev": true,
- "requires": {
- "abab": "^2.0.5",
- "acorn": "^8.2.4",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.4.4",
- "cssstyle": "^2.3.0",
- "data-urls": "^2.0.0",
- "decimal.js": "^10.2.1",
- "domexception": "^2.0.1",
- "escodegen": "^2.0.0",
- "form-data": "3.0.4",
- "html-encoding-sniffer": "^2.0.1",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.0",
- "parse5": "6.0.1",
- "saxes": "^5.0.1",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^4.0.0",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^2.0.0",
- "webidl-conversions": "^6.1.0",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.5.0",
- "ws": "^7.4.6",
- "xml-name-validator": "^3.0.0"
- },
- "dependencies": {
- "acorn": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
- "dev": true
- },
- "form-data": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz",
- "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "es-set-tostringtag": "^2.1.0",
- "hasown": "^2.0.2",
- "mime-types": "^2.1.35"
- }
- }
- }
- },
"jsesc": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
@@ -22003,12 +19698,6 @@
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true
},
- "kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true
- },
"leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
@@ -22040,18 +19729,6 @@
"p-locate": "^4.1.0"
}
},
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
- "dev": true
- },
"lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
@@ -22125,12 +19802,6 @@
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
"integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA=="
},
- "lodash.truncate": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
- "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
- "dev": true
- },
"log-symbols": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
@@ -22139,57 +19810,6 @@
"requires": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
}
},
"loglevel": {
@@ -22271,12 +19891,6 @@
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true
},
- "merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true
- },
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
@@ -22302,15 +19916,6 @@
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
},
- "mime-kind": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mime-kind/-/mime-kind-4.0.0.tgz",
- "integrity": "sha512-qQvglvSpS5mABi30beNFd+uHKtKkxD3dxAmhi2e589XKx+WfVqhg5i5P5LBcVgwwv3BiDpNMBWrHqU+JexW4aA==",
- "requires": {
- "file-type": "^16.5.4",
- "mime-types": "^2.1.24"
- }
- },
"mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
@@ -22334,9 +19939,9 @@
}
},
"minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
@@ -22369,20 +19974,17 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
- "multi-part": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multi-part/-/multi-part-4.0.0.tgz",
- "integrity": "sha512-YT/CS0PAe62kT8EoQXcQj8yIcSu18HhYv0s6ShdAFsoFly3oV5QaxODnkj0u7zH0/RFyH47cdcMVpcGXliEFVA==",
- "requires": {
- "mime-kind": "^4.0.0",
- "multi-part-lite": "^1.0.0"
- }
- },
"multi-part-lite": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/multi-part-lite/-/multi-part-lite-1.0.0.tgz",
"integrity": "sha512-KxIRbBZZ45hoKX1ROD/19wJr0ql1bef1rE8Y1PCwD3PuNXV42pp7Wo8lEHYuAajoT4vfAFcd3rPjlkyEEyt1nw=="
},
+ "napi-postinstall": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz",
+ "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==",
+ "dev": true
+ },
"nats": {
"version": "2.18.0",
"resolved": "https://registry.npmjs.org/nats/-/nats-2.18.0.tgz",
@@ -22460,7 +20062,7 @@
"node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
"dev": true
},
"node-releases": {
@@ -22469,12 +20071,43 @@
"integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
"dev": true
},
+ "nodemon": {
+ "version": "3.1.11",
+ "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.11.tgz",
+ "integrity": "sha512-is96t8F/1//UHAjNPHpbsNY46ELPpftGUoSVNXwUfMk/qdjSylYrWSu1XavVTBOn526kFiOR733ATgNBCQyH0g==",
+ "dev": true,
+ "requires": {
+ "chokidar": "^3.5.2",
+ "debug": "^4",
+ "ignore-by-default": "^1.0.1",
+ "minimatch": "^3.1.2",
+ "pstree.remy": "^1.1.8",
+ "semver": "^7.5.3",
+ "simple-update-notifier": "^2.0.0",
+ "supports-color": "^5.5.0",
+ "touch": "^3.1.0",
+ "undefsafe": "^2.0.5"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "dev": true
+ }
+ }
+ },
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
},
+ "notation": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/notation/-/notation-1.3.6.tgz",
+ "integrity": "sha512-DIuJmrP/Gg1DcXKaApsqcjsJD6jEccqKSfmU3BUx/f1GHsMiTJh70cERwYc64tOmTRTARCeMwkqNNzjh3AHhiw=="
+ },
"notifications-node-client": {
"version": "8.2.1",
"resolved": "https://registry.npmjs.org/notifications-node-client/-/notifications-node-client-8.2.1.tgz",
@@ -22493,12 +20126,6 @@
"path-key": "^3.0.0"
}
},
- "nwsapi": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
- "dev": true
- },
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -22581,9 +20208,9 @@
}
},
"optionator": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
- "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
"dev": true,
"requires": {
"deep-is": "^0.1.3",
@@ -22591,7 +20218,7 @@
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
"type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
+ "word-wrap": "^1.2.5"
}
},
"ora": {
@@ -22609,57 +20236,6 @@
"log-symbols": "^4.1.0",
"strip-ansi": "^6.0.0",
"wcwidth": "^1.0.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
}
},
"p-limit": {
@@ -22729,22 +20305,11 @@
"integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
"dev": true
},
- "parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
},
- "path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
- },
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -22788,9 +20353,9 @@
}
},
"path-to-regexp": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
- "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
+ "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA=="
},
"path-type": {
"version": "4.0.0",
@@ -22798,11 +20363,6 @@
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true
},
- "peek-readable": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
- "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg=="
- },
"picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -22810,9 +20370,9 @@
"dev": true
},
"picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true
},
"pify": {
@@ -22822,9 +20382,9 @@
"dev": true
},
"pirates": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz",
- "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
"dev": true
},
"pkg-dir": {
@@ -22896,16 +20456,31 @@
"dev": true
},
"pretty-format": {
- "version": "27.4.6",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz",
- "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
"dev": true,
"requires": {
- "ansi-regex": "^5.0.1",
- "ansi-styles": "^5.0.0",
- "react-is": "^17.0.1"
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
},
"dependencies": {
+ "@jest/schemas": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz",
+ "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==",
+ "dev": true,
+ "requires": {
+ "@sinclair/typebox": "^0.34.0"
+ }
+ },
+ "@sinclair/typebox": {
+ "version": "0.34.48",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz",
+ "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==",
+ "dev": true
+ },
"ansi-styles": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
@@ -22919,28 +20494,12 @@
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
"integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
},
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true
- },
"promise-polyfill": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.2.0.tgz",
"integrity": "sha512-k/TC0mIcPVF6yHhUvwAp7cvL6I2fFV7TzF1DuGPI8mBh4QQazf36xCKEHKTZKRysEoTQoQdKyP25J8MPJp7j5g==",
"dev": true
},
- "prompts": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
- "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
- "dev": true,
- "requires": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- }
- },
"proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -22951,9 +20510,9 @@
}
},
"proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz",
+ "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="
},
"pseudolocale": {
"version": "2.1.0",
@@ -22972,10 +20531,10 @@
}
}
},
- "psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+ "pstree.remy": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
+ "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
"dev": true
},
"punycode": {
@@ -22984,20 +20543,20 @@
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
},
+ "pure-rand": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz",
+ "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==",
+ "dev": true
+ },
"qs": {
- "version": "6.14.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
- "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
+ "version": "6.14.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
+ "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
"requires": {
"side-channel": "^1.1.0"
}
},
- "querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "dev": true
- },
"queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -23031,29 +20590,22 @@
}
},
"react-is": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
},
- "readable-web-to-node-stream": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
- "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
- "requires": {
- "readable-stream": "^3.6.0"
- }
- },
"readdirp": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
@@ -23111,12 +20663,6 @@
"@babel/runtime": "^7.8.4"
}
},
- "regexpp": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
- "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
- "dev": true
- },
"regexpu-core": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz",
@@ -23157,29 +20703,18 @@
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
- },
- "require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "dev": true
- },
- "requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true
},
"resolve": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
- "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+ "version": "1.22.11",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
+ "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
"dev": true,
"requires": {
- "is-core-module": "^2.2.0",
- "path-parse": "^1.0.6"
+ "is-core-module": "^2.16.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
}
},
"resolve-cwd": {
@@ -23197,10 +20732,10 @@
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true
},
- "resolve.exports": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz",
- "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==",
+ "resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
"dev": true
},
"restore-cursor": {
@@ -23252,15 +20787,6 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
- "saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "dev": true,
- "requires": {
- "xmlchars": "^2.2.0"
- }
- },
"semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -23424,55 +20950,29 @@
"integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==",
"dev": true
},
- "sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
- },
- "slash": {
+ "simple-update-notifier": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
- "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
- "dev": true
- },
- "slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
+ "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
"dev": true,
"requires": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
+ "semver": "^7.5.3"
},
"dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"dev": true
}
}
},
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true
+ },
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@@ -23500,7 +21000,7 @@
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
"dev": true
},
"stable": {
@@ -23509,20 +21009,12 @@
"integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w=="
},
"stack-utils": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz",
- "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
"dev": true,
"requires": {
"escape-string-regexp": "^2.0.0"
- },
- "dependencies": {
- "escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true
- }
}
},
"standard-as-callback": {
@@ -23539,6 +21031,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
"requires": {
"safe-buffer": "~5.2.0"
},
@@ -23546,7 +21039,8 @@
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
}
}
},
@@ -23561,14 +21055,14 @@
}
},
"string-width": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
- "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "strip-ansi": "^6.0.1"
}
},
"string-width-cjs": {
@@ -23638,15 +21132,6 @@
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true
},
- "strtok3": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz",
- "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==",
- "requires": {
- "@tokenizer/token": "^0.3.0",
- "peek-readable": "^4.1.0"
- }
- },
"superagent": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.1.tgz",
@@ -23701,81 +21186,19 @@
"has-flag": "^3.0.0"
}
},
- "supports-hyperlinks": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
- "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0",
- "supports-color": "^7.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true
},
- "table": {
- "version": "6.7.1",
- "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz",
- "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==",
- "dev": true,
- "requires": {
- "ajv": "^8.0.1",
- "lodash.clonedeep": "^4.5.0",
- "lodash.truncate": "^4.4.2",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ajv": {
- "version": "8.6.3",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz",
- "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
- }
- },
- "json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- }
- }
- },
- "terminal-link": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
- "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
+ "synckit": {
+ "version": "0.11.12",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz",
+ "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==",
"dev": true,
"requires": {
- "ansi-escapes": "^4.2.1",
- "supports-hyperlinks": "^2.0.0"
+ "@pkgr/core": "^0.2.9"
}
},
"test-exclude": {
@@ -23795,11 +21218,30 @@
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
- "throat": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
- "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==",
- "dev": true
+ "tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "requires": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "dependencies": {
+ "fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "requires": {}
+ },
+ "picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true
+ }
+ }
},
"tmpl": {
"version": "1.0.5",
@@ -23838,43 +21280,18 @@
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="
},
- "token-types": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz",
- "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==",
- "requires": {
- "@tokenizer/token": "^0.3.0",
- "ieee754": "^1.2.1"
- }
- },
- "tough-cookie": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
- "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
- "dev": true,
- "requires": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
- },
- "dependencies": {
- "universalify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
- "dev": true
- }
- }
+ "touch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz",
+ "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==",
+ "dev": true
},
- "tr46": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
- "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
+ "ts-api-utils": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
+ "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
"dev": true,
- "requires": {
- "punycode": "^2.1.1"
- }
+ "requires": {}
},
"tsconfig-paths": {
"version": "3.12.0",
@@ -23910,23 +21327,6 @@
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
},
- "tsutils": {
- "version": "3.21.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
- "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
- "dev": true,
- "requires": {
- "tslib": "^1.8.1"
- },
- "dependencies": {
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
- }
- }
- },
"tweetnacl": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
@@ -23972,15 +21372,6 @@
"is-typed-array": "^1.1.14"
}
},
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
"typescript": {
"version": "5.8.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
@@ -24000,6 +21391,17 @@
"which-boxed-primitive": "^1.0.2"
}
},
+ "undefsafe": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
+ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
+ "dev": true
+ },
+ "undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
+ },
"unicode-canonical-property-names-ecmascript": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
@@ -24038,6 +21440,34 @@
"resolved": "https://registry.npmjs.org/unraw/-/unraw-3.0.0.tgz",
"integrity": "sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg=="
},
+ "unrs-resolver": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz",
+ "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==",
+ "dev": true,
+ "requires": {
+ "@unrs/resolver-binding-android-arm-eabi": "1.11.1",
+ "@unrs/resolver-binding-android-arm64": "1.11.1",
+ "@unrs/resolver-binding-darwin-arm64": "1.11.1",
+ "@unrs/resolver-binding-darwin-x64": "1.11.1",
+ "@unrs/resolver-binding-freebsd-x64": "1.11.1",
+ "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1",
+ "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1",
+ "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-arm64-musl": "1.11.1",
+ "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1",
+ "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-x64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-x64-musl": "1.11.1",
+ "@unrs/resolver-binding-wasm32-wasi": "1.11.1",
+ "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1",
+ "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1",
+ "@unrs/resolver-binding-win32-x64-msvc": "1.11.1",
+ "napi-postinstall": "^0.3.0"
+ }
+ },
"update-browserslist-db": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
@@ -24057,16 +21487,6 @@
"punycode": "^2.1.0"
}
},
- "url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "dev": true,
- "requires": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
"url-slug": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/url-slug/-/url-slug-3.0.2.tgz",
@@ -24075,7 +21495,8 @@
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
},
"utils-merge": {
"version": "1.0.1",
@@ -24087,27 +21508,21 @@
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
},
- "v8-compile-cache": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
- "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
- "dev": true
- },
"v8-to-istanbul": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz",
- "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
+ "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
"dev": true,
"requires": {
+ "@jridgewell/trace-mapping": "^0.3.12",
"@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^1.6.0",
- "source-map": "^0.7.3"
+ "convert-source-map": "^2.0.0"
},
"dependencies": {
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+ "convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true
}
}
@@ -24131,24 +21546,6 @@
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
- "w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "requires": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
- "w3c-xmlserializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
- "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
- "dev": true,
- "requires": {
- "xml-name-validator": "^3.0.0"
- }
- },
"walker": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
@@ -24175,43 +21572,11 @@
"defaults": "^1.0.3"
}
},
- "webidl-conversions": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
- "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
- "dev": true
- },
- "whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
- "dev": true,
- "requires": {
- "iconv-lite": "0.4.24"
- }
- },
"whatwg-fetch": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz",
"integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA=="
},
- "whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "whatwg-url": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
- "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
- "dev": true,
- "requires": {
- "lodash": "^4.7.0",
- "tr46": "^2.1.0",
- "webidl-conversions": "^6.1.0"
- }
- },
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -24263,32 +21628,6 @@
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- }
}
},
"wrap-ansi-cjs": {
@@ -24300,32 +21639,6 @@
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- }
}
},
"wrappy": {
@@ -24335,24 +21648,23 @@
"dev": true
},
"write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+ "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
"dev": true,
"requires": {
"imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
+ "signal-exit": "^4.0.1"
+ },
+ "dependencies": {
+ "signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true
+ }
}
},
- "ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "dev": true,
- "requires": {}
- },
"x3-linkedlist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/x3-linkedlist/-/x3-linkedlist-1.2.0.tgz",
@@ -24369,18 +21681,6 @@
"xtend": "^4.0.0"
}
},
- "xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true
- },
- "xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true
- },
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
@@ -24404,24 +21704,30 @@
"dev": true
},
"yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dev": true,
"requires": {
- "cliui": "^7.0.2",
+ "cliui": "^8.0.1",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
- "string-width": "^4.2.0",
+ "string-width": "^4.2.3",
"y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
+ "yargs-parser": "^21.1.1"
}
},
"yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true
}
}
diff --git a/api/package.json b/api/package.json
index 6af506a985..3e59de346f 100644
--- a/api/package.json
+++ b/api/package.json
@@ -11,6 +11,7 @@
"build": "npm run clean && babel ./src --out-dir dist/src --ignore 'src/**/*.spec.js','src/**/*.test.js' && babel index.js --out-dir dist/",
"start": "node ./dist/index.js",
"dev": "NODE_OPTIONS=--dns-result-order=ipv4first babel-node index.js",
+ "dev:watch": "nodemon --exec babel-node index.js",
"clean": "rm -rf ./dist && mkdir dist",
"test": "NODE_OPTIONS=--dns-result-order=ipv4first jest --testPathIgnorePatterns=.*-scan-data.* --env=node",
"only": "NODE_OPTIONS=--dns-result-order=ipv4first jest",
@@ -26,11 +27,12 @@
"form-data@^4.0.0": "4.0.4"
},
"dependencies": {
- "@apollo/server": "^5.2.0",
+ "@apollo/server": "^5.5.0",
"@as-integrations/express4": "^1.1.2",
"@lingui/core": "^4.13.0",
+ "accesscontrol": "^2.2.1",
"arango-tools": "^0.6.0",
- "arangojs": "^8.0.0",
+ "arangojs": "^10.2.2",
"bcryptjs": "^2.4.3",
"body-parser": "^1.20.4",
"compression": "^1.8.1",
@@ -64,23 +66,24 @@
"@babel/core": "^7.16.7",
"@babel/node": "^7.16.8",
"@babel/preset-env": "^7.16.8",
- "@jest/test-sequencer": "^27.4.6",
+ "@jest/test-sequencer": "^30.3.0",
"@lingui/cli": "^5.4.1",
"@lingui/macro": "^4.13.0",
"babel-core": "^7.0.0-bridge.0",
- "babel-jest": "^27.4.6",
+ "babel-jest": "^30.3.0",
"babel-plugin-macros": "^3.1.0",
"babel-polyfill": "^6.26.0",
- "eslint": "^7.32.0",
+ "eslint": "^8.57.1",
"eslint-config-prettier": "^8.3.0",
- "eslint-config-standard": "^16.0.3",
+ "eslint-config-standard": "^17.1.0",
"eslint-plugin-import": "^2.25.4",
- "eslint-plugin-jest": "^24.7.0",
- "eslint-plugin-node": "^11.1.0",
- "eslint-plugin-promise": "^5.2.0",
- "jest": "^27.4.7",
+ "eslint-plugin-jest": "^29.15.1",
+ "eslint-plugin-n": "^16.6.2",
+ "eslint-plugin-promise": "^6.6.0",
+ "jest": "^30.3.0",
"jest-fetch-mock": "^3.0.3",
- "jest-matcher-utils": "^27.4.6",
+ "jest-matcher-utils": "^30.3.0",
+ "nodemon": "^3.1.11",
"prettier": "^2.5.1",
"supertest": "^7.0.0"
}
diff --git a/api/src/__tests__/initialize-loaders.test.js b/api/src/__tests__/initialize-loaders.test.js
index f4f13aced5..923f4ab5f7 100644
--- a/api/src/__tests__/initialize-loaders.test.js
+++ b/api/src/__tests__/initialize-loaders.test.js
@@ -1,4 +1,4 @@
-import {initializeLoaders} from '../initialize-loaders'
+import { initializeLoaders } from '../initialize-loaders'
describe('initializeLoaders', () => {
it('returns a object with a key for each loader', () => {
@@ -13,9 +13,6 @@ describe('initializeLoaders', () => {
})
expect(loaders).toHaveProperty(
- 'loadChartSummaryByKey',
- 'loadAggregateGuidanceTagByTagId',
- 'loadAggregateGuidanceTagConnectionsByTagId',
'loadDkimFailConnectionsBySumId',
'loadDmarcFailConnectionsBySumId',
'loadDmarcSummaryConnectionsByUserId',
@@ -29,23 +26,7 @@ describe('initializeLoaders', () => {
'loadDomainByKey',
'loadDomainConnectionsByOrgId',
'loadDomainConnectionsByUserId',
- 'loadDnsConnectionsByDomainId',
- 'loadWebConnectionsByDomainId',
- 'loadWebScansByWebId',
- 'loadDkimGuidanceTagByTagId',
- 'loadDkimGuidanceTagConnectionsByTagId',
- 'loadDmarcGuidanceTagByTagId',
- 'loadDmarcGuidanceTagConnectionsByTagId',
- 'loadHttpsGuidanceTagByTagId',
- 'loadHttpsGuidanceTagConnectionsByTagId',
- 'loadSpfGuidanceTagByTagId',
- 'loadSpfGuidanceTagConnectionsByTagId',
- 'loadSslGuidanceTagByTagId',
- 'loadSslGuidanceTagConnectionsByTagId',
'loadOrgByKey',
- 'loadOrgBySlug',
- 'loadOrgConnectionsByDomainId',
- 'loadOrgConnectionsByUserId',
'loadUserByUserName',
'loadUserByKey',
'loadAffiliationByKey',
diff --git a/api/src/access-control.js b/api/src/access-control.js
new file mode 100644
index 0000000000..195bf5633f
--- /dev/null
+++ b/api/src/access-control.js
@@ -0,0 +1,51 @@
+// Central RBAC definition using accesscontrol
+//
+// This file defines role-based access control (RBAC) permissions using the AccessControl library.
+//
+// "Own" refers to resources affiliated with the user's organization. For example, an admin can create domains
+// in their affiliated organization, but not in other organizations. This ensures users only manage resources
+// within their scope of affiliation.
+//
+// Roles:
+// - user: Basic permissions for managing own CSVs, affiliations, scan requests, and viewing own organization.
+// - admin: Extends user. Can manage domains, organizations, logs, tags, and affiliations within their own org.
+// - owner: Extends admin. Can delete own organization and create domains.
+// - super_admin: Extends owner. Can manage any resource across all organizations.
+//
+// For maintainability, update permissions here when adding new roles or resources.
+
+import AccessControl from 'accesscontrol'
+
+const ac = new AccessControl()
+
+ac.grant('user').createOwn('csv').readOwn('affiliation').createOwn('scan-request').readOwn('organization')
+
+ac.grant('admin')
+ .extend('user')
+ .createOwn('domain')
+ .updateOwn('domain', ['*', '!archived'])
+ .deleteOwn('domain')
+ .updateOwn('organization', ['*', '!externalId', '!externallyManaged'])
+ .readOwn('log')
+ .createOwn('tag')
+ .updateOwn('tag')
+ .createOwn('affiliation')
+ .updateOwn('affiliation')
+ .deleteOwn('affiliation')
+
+ac.grant('owner').extend('admin').deleteOwn('organization').createOwn('cvd-enrollment').updateOwn('cvd-enrollment')
+
+ac.grant('super_admin')
+ .extend('owner')
+ .createAny(['organization', 'domain', 'user', 'tag', 'affiliation', 'csv', 'scan-request', 'cvd-enrollment'])
+ .readAny(['organization', 'domain', 'user', 'tag', 'log', 'affiliation'])
+ .updateAny(['organization', 'domain', 'user', 'tag', 'affiliation', 'cvd-enrollment'])
+ .deleteAny(['organization', 'domain', 'user', 'tag', 'affiliation'])
+
+ac.grant('none') // no permissions — fallback for users with no org affiliation
+const _can = ac.can.bind(ac)
+ac.can = (role) => _can(role || 'none')
+
+ac.lock()
+
+export default ac
diff --git a/api/src/additional-findings/data-source.js b/api/src/additional-findings/data-source.js
new file mode 100644
index 0000000000..e466b46191
--- /dev/null
+++ b/api/src/additional-findings/data-source.js
@@ -0,0 +1,8 @@
+import { loadAdditionalFindingsByDomainId, loadTop25Reports } from './loaders'
+
+export class AdditionalFindingsDataSource {
+ constructor({ query, userKey, i18n, language }) {
+ this.getByDomainId = loadAdditionalFindingsByDomainId({ query, userKey, i18n })
+ this.getTop25Reports = loadTop25Reports({ query, userKey, i18n, language })
+ }
+}
diff --git a/api/src/additional-findings/index.js b/api/src/additional-findings/index.js
index 84c283025a..efc2b38f26 100644
--- a/api/src/additional-findings/index.js
+++ b/api/src/additional-findings/index.js
@@ -1,2 +1,4 @@
+export * from './data-source'
export * from './loaders'
export * from './objects'
+export * from './input'
diff --git a/api/src/additional-findings/input/cvd-enrollment-options.js b/api/src/additional-findings/input/cvd-enrollment-options.js
new file mode 100644
index 0000000000..6f49454873
--- /dev/null
+++ b/api/src/additional-findings/input/cvd-enrollment-options.js
@@ -0,0 +1,9 @@
+import { GraphQLInputObjectType } from 'graphql'
+import { cvdEnrollmentFields } from '../objects/cvd-enrollment'
+
+export const CvdEnrollmentInputOptions = new GraphQLInputObjectType({
+ name: 'CvdEnrollmenInputOptions',
+ description:
+ 'Input options for specifying CVD enrollment details, including program status and CVSS environmental requirements.',
+ fields: () => ({ ...cvdEnrollmentFields }),
+})
diff --git a/api/src/additional-findings/input/index.js b/api/src/additional-findings/input/index.js
new file mode 100644
index 0000000000..6c8ee05330
--- /dev/null
+++ b/api/src/additional-findings/input/index.js
@@ -0,0 +1 @@
+export * from './cvd-enrollment-options'
diff --git a/api/src/additional-findings/objects/__tests__/cvd-enrollment.test.js b/api/src/additional-findings/objects/__tests__/cvd-enrollment.test.js
new file mode 100644
index 0000000000..ebfced89b9
--- /dev/null
+++ b/api/src/additional-findings/objects/__tests__/cvd-enrollment.test.js
@@ -0,0 +1,61 @@
+import { GraphQLObjectType, GraphQLString } from 'graphql'
+import { EnrollmentStatusEnums, SeverityEnum, CvdRequirementEnums } from '../../../enums'
+import { cvdEnrollment } from '../cvd-enrollment'
+
+describe('cvdEnrollment GraphQLObjectType', () => {
+ it('should be an instance of GraphQLObjectType', () => {
+ expect(cvdEnrollment).toBeInstanceOf(GraphQLObjectType)
+ })
+
+ it('should have the correct name and description', () => {
+ expect(cvdEnrollment.name).toBe('CvdEnrollment')
+ expect(cvdEnrollment.description).toBe(
+ 'Represents the CVD enrollment details for a domain asset, including enrollment status and CVSS environmental requirements.',
+ )
+ })
+
+ describe('fields', () => {
+ const fields = cvdEnrollment.getFields()
+
+ it('should include all expected fields', () => {
+ expect(fields).toHaveProperty('status')
+ expect(fields).toHaveProperty('description')
+ expect(fields).toHaveProperty('maxSeverity')
+ expect(fields).toHaveProperty('confidentialityRequirement')
+ expect(fields).toHaveProperty('integrityRequirement')
+ expect(fields).toHaveProperty('availabilityRequirement')
+ })
+
+ it('should have correct type and description for status', () => {
+ expect(fields.status.type).toBe(EnrollmentStatusEnums)
+ expect(fields.status.description).toBe(
+ 'The enrollment status of the asset in the Coordinated Vulnerability Disclosure (CVD) program.',
+ )
+ })
+
+ it('should have correct type and description for description', () => {
+ expect(fields.description.type).toBe(GraphQLString)
+ expect(fields.description.description).toBe('The asset description.')
+ })
+
+ it('should have correct type and description for maxSeverity', () => {
+ expect(fields.maxSeverity.type).toBe(SeverityEnum)
+ expect(fields.maxSeverity.description).toContain('qualitative rating')
+ })
+
+ it('should have correct type and description for confidentialityRequirement', () => {
+ expect(fields.confidentialityRequirement.type).toBe(CvdRequirementEnums)
+ expect(fields.confidentialityRequirement.description).toContain('Confidentiality Impact')
+ })
+
+ it('should have correct type and description for integrityRequirement', () => {
+ expect(fields.integrityRequirement.type).toBe(CvdRequirementEnums)
+ expect(fields.integrityRequirement.description).toContain('Integrity Impact')
+ })
+
+ it('should have correct type and description for availabilityRequirement', () => {
+ expect(fields.availabilityRequirement.type).toBe(CvdRequirementEnums)
+ expect(fields.availabilityRequirement.description).toContain('Availability Impact')
+ })
+ })
+})
diff --git a/api/src/additional-findings/objects/cvd-enrollment.js b/api/src/additional-findings/objects/cvd-enrollment.js
new file mode 100644
index 0000000000..4cbb0d4ca8
--- /dev/null
+++ b/api/src/additional-findings/objects/cvd-enrollment.js
@@ -0,0 +1,38 @@
+import { GraphQLObjectType, GraphQLString } from 'graphql'
+import { EnrollmentStatusEnums, SeverityEnum, CvdRequirementEnums } from '../../enums'
+
+export const cvdEnrollmentFields = {
+ status: {
+ description: 'The enrollment status of the asset in the Coordinated Vulnerability Disclosure (CVD) program.',
+ type: EnrollmentStatusEnums,
+ },
+ description: {
+ description: 'The asset description.',
+ type: GraphQLString,
+ },
+ maxSeverity: {
+ description:
+ 'The qualitative rating of the maximum severity allowed on this asset. Its value is calculated from the combination of all three of the environmental requirements (CR, IR, and AR).',
+ type: SeverityEnum,
+ },
+ confidentialityRequirement: {
+ description:
+ 'A CVSS environmental modifier that reweights Confidentiality Impact of a vulnerability on this asset.',
+ type: CvdRequirementEnums,
+ },
+ integrityRequirement: {
+ description: 'A CVSS environmental modifier that reweights Integrity Impact of a vulnerability on this asset.',
+ type: CvdRequirementEnums,
+ },
+ availabilityRequirement: {
+ description: 'A CVSS environmental modifier that reweights Availability Impact of a vulnerability on this asset.',
+ type: CvdRequirementEnums,
+ },
+}
+
+export const cvdEnrollment = new GraphQLObjectType({
+ name: 'CvdEnrollment',
+ description:
+ 'Represents the CVD enrollment details for a domain asset, including enrollment status and CVSS environmental requirements.',
+ fields: () => ({ ...cvdEnrollmentFields }),
+})
diff --git a/api/src/additional-findings/objects/index.js b/api/src/additional-findings/objects/index.js
index 8e7bb1a5c3..18e5dd687a 100644
--- a/api/src/additional-findings/objects/index.js
+++ b/api/src/additional-findings/objects/index.js
@@ -1 +1,2 @@
export * from './additional-finding'
+export * from './cvd-enrollment'
diff --git a/api/src/additional-findings/queries/__tests__/get-top-25-reports.test.js b/api/src/additional-findings/queries/__tests__/get-top-25-reports.test.js
index 398535c7cf..3ecc2ee53d 100644
--- a/api/src/additional-findings/queries/__tests__/get-top-25-reports.test.js
+++ b/api/src/additional-findings/queries/__tests__/get-top-25-reports.test.js
@@ -238,13 +238,10 @@ describe('given getTop25Reports', () => {
superAdminRequired: superAdminRequired({ i18n }),
loginRequiredBool: loginRequiredBool,
},
- loaders: {
- loadTop25Reports: loadTop25Reports({
- query,
- userKey: user._key,
- i18n,
- language: 'en',
- }),
+ dataSources: {
+ additionalFindings: {
+ getTop25Reports: loadTop25Reports({ query, userKey: user._key, i18n, language: 'en' }),
+ },
},
},
})
@@ -298,13 +295,10 @@ describe('given getTop25Reports', () => {
superAdminRequired: superAdminRequired({ i18n }),
loginRequiredBool: loginRequiredBool,
},
- loaders: {
- loadTop25Reports: loadTop25Reports({
- query,
- userKey: user._key,
- i18n,
- language: 'en',
- }),
+ dataSources: {
+ additionalFindings: {
+ getTop25Reports: loadTop25Reports({ query, userKey: user._key, i18n, language: 'en' }),
+ },
},
},
})
@@ -360,13 +354,10 @@ Government of Canada,GC,2`,
superAdminRequired: superAdminRequired({ i18n }),
loginRequiredBool: loginRequiredBool,
},
- loaders: {
- loadTop25Reports: loadTop25Reports({
- query,
- userKey: user._key,
- i18n,
- language: 'en',
- }),
+ dataSources: {
+ additionalFindings: {
+ getTop25Reports: loadTop25Reports({ query, userKey: user._key, i18n, language: 'en' }),
+ },
},
},
})
@@ -421,13 +412,10 @@ Government of Canada,GC,2`,
superAdminRequired: superAdminRequired({ i18n }),
loginRequiredBool: loginRequiredBool,
},
- loaders: {
- loadTop25Reports: loadTop25Reports({
- query,
- userKey: user._key,
- i18n,
- language: 'en',
- }),
+ dataSources: {
+ additionalFindings: {
+ getTop25Reports: loadTop25Reports({ query, userKey: user._key, i18n, language: 'en' }),
+ },
},
},
})
diff --git a/api/src/additional-findings/queries/get-top-25-report.js b/api/src/additional-findings/queries/get-top-25-report.js
index 1925a355fa..ec770e1419 100644
--- a/api/src/additional-findings/queries/get-top-25-report.js
+++ b/api/src/additional-findings/queries/get-top-25-report.js
@@ -9,7 +9,7 @@ export const getTop25Reports = {
{
userKey,
auth: { checkSuperAdmin, userRequired, verifiedRequired, superAdminRequired },
- loaders: { loadTop25Reports },
+ dataSources: { additionalFindings },
language,
},
) => {
@@ -19,7 +19,7 @@ export const getTop25Reports = {
const isSuperAdmin = await checkSuperAdmin()
superAdminRequired({ user, isSuperAdmin })
- const top25Reports = await loadTop25Reports({ ...args })
+ const top25Reports = await additionalFindings.getTop25Reports({ ...args })
console.info(`User ${userKey} successfully retrieved all top 25 reports.`)
diff --git a/api/src/affiliation/mutations/__tests__/invite-user-to-org.test.js b/api/src/affiliation/mutations/__tests__/invite-user-to-org.test.js
index bb0d7d1839..cac682c504 100644
--- a/api/src/affiliation/mutations/__tests__/invite-user-to-org.test.js
+++ b/api/src/affiliation/mutations/__tests__/invite-user-to-org.test.js
@@ -10,7 +10,7 @@ import { checkPermission, userRequired, verifiedRequired, tfaRequired } from '..
import { createMutationSchema } from '../../../mutation'
import { createQuerySchema } from '../../../query'
import { cleanseInput } from '../../../validators'
-import { loadOrgByKey } from '../../../organization/loaders'
+import { loadOrgByKey, loadOrganizationNamesById } from '../../../organization/loaders'
import { loadUserByKey, loadUserByUserName } from '../../../user/loaders'
import dbschema from '../../../../database.json'
import { collectionNames } from '../../../collection-names'
@@ -53,6 +53,18 @@ describe('invite user to org', () => {
schema: dbschema,
}))
tokenize = jest.fn().mockReturnValue('token')
+ i18n = setupI18n({
+ locale: 'en',
+ localeData: {
+ en: { plurals: {} },
+ fr: { plurals: {} },
+ },
+ locales: ['en', 'fr'],
+ messages: {
+ en: englishMessages.messages,
+ fr: frenchMessages.messages,
+ },
+ })
})
beforeEach(async () => {
user = await collections.users.save({
@@ -67,76 +79,62 @@ describe('invite user to org', () => {
afterAll(async () => {
await drop()
})
- describe('users language is set to english', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- let org
- beforeEach(async () => {
- org = await (
- await collections.organizations.save(
- {
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
+ beforeAll(() => {})
+ let org
+ beforeEach(async () => {
+ org = await (
+ await collections.organizations.save(
+ {
+ orgDetails: {
+ en: {
+ slug: 'treasury-board-secretariat',
+ acronym: 'TBS',
+ name: 'Treasury Board of Canada Secretariat',
+ zone: 'FED',
+ sector: 'TBS',
+ country: 'Canada',
+ province: 'Ontario',
+ city: 'Ottawa',
+ },
+ fr: {
+ slug: 'secretariat-conseil-tresor',
+ acronym: 'SCT',
+ name: 'Secrétariat du Conseil Trésor du Canada',
+ zone: 'FED',
+ sector: 'TBS',
+ country: 'Canada',
+ province: 'Ontario',
+ city: 'Ottawa',
},
},
- { returnNew: true },
- )
- ).new
- })
- describe('users role is super admin', () => {
- beforeEach(async () => {
- await collections.affiliations.save({
- _from: org._id,
- _to: user._id,
- permission: 'super_admin',
- })
+ },
+ { returnNew: true },
+ )
+ ).new
+ })
+ describe('users role is super admin', () => {
+ beforeEach(async () => {
+ await collections.affiliations.save({
+ _from: org._id,
+ _to: user._id,
+ permission: 'super_admin',
})
- describe('inviting an existing account', () => {
- describe('requested role is super_admin', () => {
- let secondaryUser
- beforeEach(async () => {
- secondaryUser = await collections.users.save({
- displayName: 'Test Account',
- userName: 'test@email.gc.ca',
- })
+ })
+ describe('inviting an existing account', () => {
+ describe('requested role is super_admin', () => {
+ let secondaryUser
+ beforeEach(async () => {
+ secondaryUser = await collections.users.save({
+ displayName: 'Test Account',
+ userName: 'test@email.gc.ca',
})
- it('returns status message', async () => {
- const sendOrgInviteEmail = jest.fn()
+ })
+ it('returns status message', async () => {
+ const sendOrgInviteEmail = jest.fn()
- const response = await graphql({
- schema,
- source: `
+ const response = await graphql({
+ schema,
+ source: `
mutation {
inviteUserToOrg(
input: {
@@ -157,80 +155,81 @@ describe('invite user to org', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: user._key,
+ auth: {
+ checkPermission: checkPermission({
+ userKey: user._key,
+ query,
+ }),
+ tokenize,
+ userRequired: userRequired({
+ userKey: user._key,
loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteEmail: sendOrgInviteEmail },
- validators: { cleanseInput },
+ }),
+ verifiedRequired: verifiedRequired({ i18n }),
+ tfaRequired: tfaRequired({ i18n }),
+ },
+ loaders: {
+ loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ loadUserByKey: loadUserByKey({ query }),
+ loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: loadOrganizationNamesById({ query }),
},
- })
+ notify: { sendOrgInviteEmail: sendOrgInviteEmail },
+ validators: { cleanseInput },
+ },
+ })
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status: 'Successfully invited user to organization, and sent notification email.',
- },
+ const expectedResponse = {
+ data: {
+ inviteUserToOrg: {
+ result: {
+ status: 'Successfully invited user to organization, and sent notification email.',
},
},
- }
+ },
+ }
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: ${secondaryUser._key} to the org: treasury-board-secretariat.`,
- ])
- expect(sendOrgInviteEmail).toHaveBeenCalledWith({
- user: {
- _type: 'user',
- displayName: 'Test Account',
- id: secondaryUser._key,
- userName: 'test@email.gc.ca',
- ...secondaryUser,
- },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- })
- })
- })
- describe('requested role is admin', () => {
- let secondaryUser
- beforeEach(async () => {
- secondaryUser = await collections.users.save({
+ expect(response).toEqual(expectedResponse)
+ expect(consoleOutput).toEqual([
+ `User: ${user._key} successfully invited user: ${secondaryUser._key} to the org: treasury-board-secretariat.`,
+ ])
+ expect(sendOrgInviteEmail).toHaveBeenCalledWith({
+ user: {
+ _type: 'user',
displayName: 'Test Account',
+ id: secondaryUser._key,
userName: 'test@email.gc.ca',
- })
+ ...secondaryUser,
+ },
+ orgNameEN: 'Treasury Board of Canada Secretariat',
+ orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
})
- it('returns status message', async () => {
- const sendOrgInviteEmail = jest.fn()
+ })
+ })
+ describe('requested role is admin', () => {
+ let secondaryUser
+ beforeEach(async () => {
+ secondaryUser = await collections.users.save({
+ displayName: 'Test Account',
+ userName: 'test@email.gc.ca',
+ })
+ })
+ it('returns status message', async () => {
+ const sendOrgInviteEmail = jest.fn()
- const response = await graphql({
- schema,
- source: `
+ const response = await graphql({
+ schema,
+ source: `
mutation {
inviteUserToOrg(
input: {
@@ -251,80 +250,81 @@ describe('invite user to org', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: user._key,
+ auth: {
+ checkPermission: checkPermission({
+ userKey: user._key,
+ query,
+ }),
+ tokenize,
+ userRequired: userRequired({
+ userKey: user._key,
loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteEmail: sendOrgInviteEmail },
- validators: { cleanseInput },
+ }),
+ verifiedRequired: verifiedRequired({ i18n }),
+ tfaRequired: tfaRequired({ i18n }),
+ },
+ loaders: {
+ loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ loadUserByKey: loadUserByKey({ query }),
+ loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: loadOrganizationNamesById({ query }),
},
- })
+ notify: { sendOrgInviteEmail: sendOrgInviteEmail },
+ validators: { cleanseInput },
+ },
+ })
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status: 'Successfully invited user to organization, and sent notification email.',
- },
+ const expectedResponse = {
+ data: {
+ inviteUserToOrg: {
+ result: {
+ status: 'Successfully invited user to organization, and sent notification email.',
},
},
- }
+ },
+ }
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: ${secondaryUser._key} to the org: treasury-board-secretariat.`,
- ])
- expect(sendOrgInviteEmail).toHaveBeenCalledWith({
- user: {
- _type: 'user',
- displayName: 'Test Account',
- id: secondaryUser._key,
- userName: 'test@email.gc.ca',
- ...secondaryUser,
- },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- })
- })
- })
- describe('requested role is user', () => {
- let secondaryUser
- beforeEach(async () => {
- secondaryUser = await collections.users.save({
+ expect(response).toEqual(expectedResponse)
+ expect(consoleOutput).toEqual([
+ `User: ${user._key} successfully invited user: ${secondaryUser._key} to the org: treasury-board-secretariat.`,
+ ])
+ expect(sendOrgInviteEmail).toHaveBeenCalledWith({
+ user: {
+ _type: 'user',
displayName: 'Test Account',
+ id: secondaryUser._key,
userName: 'test@email.gc.ca',
- })
+ ...secondaryUser,
+ },
+ orgNameEN: 'Treasury Board of Canada Secretariat',
+ orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
+ })
+ })
+ })
+ describe('requested role is user', () => {
+ let secondaryUser
+ beforeEach(async () => {
+ secondaryUser = await collections.users.save({
+ displayName: 'Test Account',
+ userName: 'test@email.gc.ca',
})
- it('returns status message', async () => {
- const sendOrgInviteEmail = jest.fn()
+ })
+ it('returns status message', async () => {
+ const sendOrgInviteEmail = jest.fn()
- const response = await graphql({
- schema,
- source: `
+ const response = await graphql({
+ schema,
+ source: `
mutation {
inviteUserToOrg(
input: {
@@ -345,74 +345,75 @@ describe('invite user to org', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: user._key,
+ auth: {
+ checkPermission: checkPermission({
+ userKey: user._key,
+ query,
+ }),
+ tokenize,
+ userRequired: userRequired({
+ userKey: user._key,
loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteEmail: sendOrgInviteEmail },
- validators: { cleanseInput },
+ }),
+ verifiedRequired: verifiedRequired({ i18n }),
+ tfaRequired: tfaRequired({ i18n }),
+ },
+ loaders: {
+ loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ loadUserByKey: loadUserByKey({ query }),
+ loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: loadOrganizationNamesById({ query }),
},
- })
+ notify: { sendOrgInviteEmail: sendOrgInviteEmail },
+ validators: { cleanseInput },
+ },
+ })
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status: 'Successfully invited user to organization, and sent notification email.',
- },
+ const expectedResponse = {
+ data: {
+ inviteUserToOrg: {
+ result: {
+ status: 'Successfully invited user to organization, and sent notification email.',
},
},
- }
+ },
+ }
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: ${secondaryUser._key} to the org: treasury-board-secretariat.`,
- ])
- expect(sendOrgInviteEmail).toHaveBeenCalledWith({
- user: {
- _type: 'user',
- displayName: 'Test Account',
- id: secondaryUser._key,
- userName: 'test@email.gc.ca',
- ...secondaryUser,
- },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- })
+ expect(response).toEqual(expectedResponse)
+ expect(consoleOutput).toEqual([
+ `User: ${user._key} successfully invited user: ${secondaryUser._key} to the org: treasury-board-secretariat.`,
+ ])
+ expect(sendOrgInviteEmail).toHaveBeenCalledWith({
+ user: {
+ _type: 'user',
+ displayName: 'Test Account',
+ id: secondaryUser._key,
+ userName: 'test@email.gc.ca',
+ ...secondaryUser,
+ },
+ orgNameEN: 'Treasury Board of Canada Secretariat',
+ orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
})
})
})
- describe('inviting a non-existing account', () => {
- describe('requested role is super_admin', () => {
- it('returns status message', async () => {
- const sendOrgInviteCreateAccount = jest.fn()
- const response = await graphql({
- schema,
- source: `
+ })
+ describe('inviting a non-existing account', () => {
+ describe('requested role is super_admin', () => {
+ it('returns status message', async () => {
+ const sendOrgInviteCreateAccount = jest.fn()
+ const response = await graphql({
+ schema,
+ source: `
mutation {
inviteUserToOrg(
input: {
@@ -433,80 +434,81 @@ describe('invite user to org', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ protocol: 'https',
+ get: (text) => text,
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: user._key,
+ auth: {
+ checkPermission: checkPermission({
+ userKey: user._key,
+ query,
+ }),
+ tokenize,
+ userRequired: userRequired({
+ userKey: user._key,
loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteCreateAccount },
- validators: { cleanseInput },
+ }),
+ verifiedRequired: verifiedRequired({ i18n }),
+ tfaRequired: tfaRequired({ i18n }),
+ },
+ loaders: {
+ loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ loadUserByKey: loadUserByKey({ query }),
+ loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: loadOrganizationNamesById({ query }),
},
- })
+ notify: { sendOrgInviteCreateAccount },
+ validators: { cleanseInput },
+ },
+ })
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status: 'Successfully sent invitation to service, and organization email.',
- },
+ const expectedResponse = {
+ data: {
+ inviteUserToOrg: {
+ result: {
+ status: 'Successfully sent invitation to service, and organization email.',
},
},
- }
+ },
+ }
- const token = tokenize({
- parameters: {
- userName: 'test@email.gc.ca',
- orgId: org._id,
- requestedRole: 'super_admin',
- },
- })
- const createAccountLink = `https://host/create-user/${token}`
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: test@email.gc.ca to the service, and org: treasury-board-secretariat.`,
- ])
- expect(sendOrgInviteCreateAccount).toHaveBeenCalledWith({
- user: {
- userName: 'test@email.gc.ca',
- },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- createAccountLink,
- })
+ const token = tokenize({
+ parameters: {
+ userName: 'test@email.gc.ca',
+ orgId: org._id,
+ requestedRole: 'super_admin',
+ },
+ })
+ const createAccountLink = `https://host/create-user/${token}`
+ expect(response).toEqual(expectedResponse)
+ expect(consoleOutput).toEqual([
+ `User: ${user._key} successfully invited user: test@email.gc.ca to the service, and org: treasury-board-secretariat.`,
+ ])
+ expect(sendOrgInviteCreateAccount).toHaveBeenCalledWith({
+ user: {
+ userName: 'test@email.gc.ca',
+ },
+ orgNameEN: 'Treasury Board of Canada Secretariat',
+ orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
+ createAccountLink,
})
})
- describe('requested role is admin', () => {
- it('returns status message', async () => {
- const sendOrgInviteCreateAccount = jest.fn()
+ })
+ describe('requested role is admin', () => {
+ it('returns status message', async () => {
+ const sendOrgInviteCreateAccount = jest.fn()
- const response = await graphql({
- schema,
- source: `
+ const response = await graphql({
+ schema,
+ source: `
mutation {
inviteUserToOrg(
input: {
@@ -527,81 +529,82 @@ describe('invite user to org', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ protocol: 'https',
+ get: (text) => text,
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: user._key,
+ auth: {
+ checkPermission: checkPermission({
+ userKey: user._key,
+ query,
+ }),
+ tokenize,
+ userRequired: userRequired({
+ userKey: user._key,
loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteCreateAccount },
- validators: { cleanseInput },
+ }),
+ verifiedRequired: verifiedRequired({ i18n }),
+ tfaRequired: tfaRequired({ i18n }),
+ },
+ loaders: {
+ loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ loadUserByKey: loadUserByKey({ query }),
+ loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: loadOrganizationNamesById({ query }),
},
- })
+ notify: { sendOrgInviteCreateAccount },
+ validators: { cleanseInput },
+ },
+ })
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status: 'Successfully sent invitation to service, and organization email.',
- },
+ const expectedResponse = {
+ data: {
+ inviteUserToOrg: {
+ result: {
+ status: 'Successfully sent invitation to service, and organization email.',
},
},
- }
+ },
+ }
- const token = tokenize({
- parameters: {
- userName: 'test@email.gc.ca',
- orgId: org._id,
- requestedRole: 'admin',
- },
- })
- const createAccountLink = `https://host/create-user/${token}`
+ const token = tokenize({
+ parameters: {
+ userName: 'test@email.gc.ca',
+ orgId: org._id,
+ requestedRole: 'admin',
+ },
+ })
+ const createAccountLink = `https://host/create-user/${token}`
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: test@email.gc.ca to the service, and org: treasury-board-secretariat.`,
- ])
- expect(sendOrgInviteCreateAccount).toHaveBeenCalledWith({
- user: {
- userName: 'test@email.gc.ca',
- },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- createAccountLink,
- })
+ expect(response).toEqual(expectedResponse)
+ expect(consoleOutput).toEqual([
+ `User: ${user._key} successfully invited user: test@email.gc.ca to the service, and org: treasury-board-secretariat.`,
+ ])
+ expect(sendOrgInviteCreateAccount).toHaveBeenCalledWith({
+ user: {
+ userName: 'test@email.gc.ca',
+ },
+ orgNameEN: 'Treasury Board of Canada Secretariat',
+ orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
+ createAccountLink,
})
})
- describe('requested role is user', () => {
- it('returns status message', async () => {
- const sendOrgInviteCreateAccount = jest.fn()
+ })
+ describe('requested role is user', () => {
+ it('returns status message', async () => {
+ const sendOrgInviteCreateAccount = jest.fn()
- const response = await graphql({
- schema,
- source: `
+ const response = await graphql({
+ schema,
+ source: `
mutation {
inviteUserToOrg(
input: {
@@ -622,99 +625,100 @@ describe('invite user to org', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteCreateAccount },
- validators: { cleanseInput },
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ protocol: 'https',
+ get: (text) => text,
},
- })
-
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status: 'Successfully sent invitation to service, and organization email.',
- },
- },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: user._key,
+ auth: {
+ checkPermission: checkPermission({
+ userKey: user._key,
+ query,
+ }),
+ tokenize,
+ userRequired: userRequired({
+ userKey: user._key,
+ loadUserByKey: loadUserByKey({ query }),
+ }),
+ verifiedRequired: verifiedRequired({ i18n }),
+ tfaRequired: tfaRequired({ i18n }),
},
- }
-
- const token = tokenize({
- parameters: {
- userName: 'test@email.gc.ca',
- orgId: org._id,
- requestedRole: 'user',
+ loaders: {
+ loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ loadUserByKey: loadUserByKey({ query }),
+ loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: loadOrganizationNamesById({ query }),
},
- })
- const createAccountLink = `https://host/create-user/${token}`
+ notify: { sendOrgInviteCreateAccount },
+ validators: { cleanseInput },
+ },
+ })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: test@email.gc.ca to the service, and org: treasury-board-secretariat.`,
- ])
- expect(sendOrgInviteCreateAccount).toHaveBeenCalledWith({
- user: {
- userName: 'test@email.gc.ca',
+ const expectedResponse = {
+ data: {
+ inviteUserToOrg: {
+ result: {
+ status: 'Successfully sent invitation to service, and organization email.',
+ },
},
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- createAccountLink,
- })
+ },
+ }
+
+ const token = tokenize({
+ parameters: {
+ userName: 'test@email.gc.ca',
+ orgId: org._id,
+ requestedRole: 'user',
+ },
+ })
+ const createAccountLink = `https://host/create-user/${token}`
+
+ expect(response).toEqual(expectedResponse)
+ expect(consoleOutput).toEqual([
+ `User: ${user._key} successfully invited user: test@email.gc.ca to the service, and org: treasury-board-secretariat.`,
+ ])
+ expect(sendOrgInviteCreateAccount).toHaveBeenCalledWith({
+ user: {
+ userName: 'test@email.gc.ca',
+ },
+ orgNameEN: 'Treasury Board of Canada Secretariat',
+ orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
+ createAccountLink,
})
})
})
})
- describe('users role is admin', () => {
- beforeEach(async () => {
- await collections.affiliations.save({
- _from: org._id,
- _to: user._id,
- permission: 'admin',
- })
+ })
+ describe('users role is admin', () => {
+ beforeEach(async () => {
+ await collections.affiliations.save({
+ _from: org._id,
+ _to: user._id,
+ permission: 'admin',
})
- describe('inviting an existing account', () => {
- describe('requested role is admin', () => {
- let secondaryUser
- beforeEach(async () => {
- secondaryUser = await collections.users.save({
- displayName: 'Test Account',
- userName: 'test@email.gc.ca',
- })
+ })
+ describe('inviting an existing account', () => {
+ describe('requested role is admin', () => {
+ let secondaryUser
+ beforeEach(async () => {
+ secondaryUser = await collections.users.save({
+ displayName: 'Test Account',
+ userName: 'test@email.gc.ca',
})
- it('returns status message', async () => {
- const sendOrgInviteEmail = jest.fn()
+ })
+ it('returns status message', async () => {
+ const sendOrgInviteEmail = jest.fn()
- const response = await graphql({
- schema,
- source: `
+ const response = await graphql({
+ schema,
+ source: `
mutation {
inviteUserToOrg(
input: {
@@ -735,80 +739,81 @@ describe('invite user to org', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: user._key,
+ auth: {
+ checkPermission: checkPermission({
+ userKey: user._key,
+ query,
+ }),
+ tokenize,
+ userRequired: userRequired({
+ userKey: user._key,
loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteEmail: sendOrgInviteEmail },
- validators: { cleanseInput },
+ }),
+ verifiedRequired: verifiedRequired({ i18n }),
+ tfaRequired: tfaRequired({ i18n }),
+ },
+ loaders: {
+ loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ loadUserByKey: loadUserByKey({ query }),
+ loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: loadOrganizationNamesById({ query }),
},
- })
+ notify: { sendOrgInviteEmail: sendOrgInviteEmail },
+ validators: { cleanseInput },
+ },
+ })
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status: 'Successfully invited user to organization, and sent notification email.',
- },
+ const expectedResponse = {
+ data: {
+ inviteUserToOrg: {
+ result: {
+ status: 'Successfully invited user to organization, and sent notification email.',
},
},
- }
+ },
+ }
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: ${secondaryUser._key} to the org: treasury-board-secretariat.`,
- ])
- expect(sendOrgInviteEmail).toHaveBeenCalledWith({
- user: {
- _type: 'user',
- displayName: 'Test Account',
- id: secondaryUser._key,
- userName: 'test@email.gc.ca',
- ...secondaryUser,
- },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- })
- })
- })
- describe('requested role is user', () => {
- let secondaryUser
- beforeEach(async () => {
- secondaryUser = await collections.users.save({
+ expect(response).toEqual(expectedResponse)
+ expect(consoleOutput).toEqual([
+ `User: ${user._key} successfully invited user: ${secondaryUser._key} to the org: treasury-board-secretariat.`,
+ ])
+ expect(sendOrgInviteEmail).toHaveBeenCalledWith({
+ user: {
+ _type: 'user',
displayName: 'Test Account',
+ id: secondaryUser._key,
userName: 'test@email.gc.ca',
- })
+ ...secondaryUser,
+ },
+ orgNameEN: 'Treasury Board of Canada Secretariat',
+ orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
+ })
+ })
+ })
+ describe('requested role is user', () => {
+ let secondaryUser
+ beforeEach(async () => {
+ secondaryUser = await collections.users.save({
+ displayName: 'Test Account',
+ userName: 'test@email.gc.ca',
})
- it('returns status message', async () => {
- const sendOrgInviteEmail = jest.fn()
+ })
+ it('returns status message', async () => {
+ const sendOrgInviteEmail = jest.fn()
- const response = await graphql({
- schema,
- source: `
+ const response = await graphql({
+ schema,
+ source: `
mutation {
inviteUserToOrg(
input: {
@@ -829,75 +834,76 @@ describe('invite user to org', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: user._key,
+ auth: {
+ checkPermission: checkPermission({
+ userKey: user._key,
+ query,
+ }),
+ tokenize,
+ userRequired: userRequired({
+ userKey: user._key,
loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteEmail: sendOrgInviteEmail },
- validators: { cleanseInput },
+ }),
+ verifiedRequired: verifiedRequired({ i18n }),
+ tfaRequired: tfaRequired({ i18n }),
+ },
+ loaders: {
+ loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ loadUserByKey: loadUserByKey({ query }),
+ loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: loadOrganizationNamesById({ query }),
},
- })
+ notify: { sendOrgInviteEmail: sendOrgInviteEmail },
+ validators: { cleanseInput },
+ },
+ })
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status: 'Successfully invited user to organization, and sent notification email.',
- },
+ const expectedResponse = {
+ data: {
+ inviteUserToOrg: {
+ result: {
+ status: 'Successfully invited user to organization, and sent notification email.',
},
},
- }
+ },
+ }
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: ${secondaryUser._key} to the org: treasury-board-secretariat.`,
- ])
- expect(sendOrgInviteEmail).toHaveBeenCalledWith({
- user: {
- _type: 'user',
- displayName: 'Test Account',
- id: secondaryUser._key,
- userName: 'test@email.gc.ca',
- ...secondaryUser,
- },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- })
+ expect(response).toEqual(expectedResponse)
+ expect(consoleOutput).toEqual([
+ `User: ${user._key} successfully invited user: ${secondaryUser._key} to the org: treasury-board-secretariat.`,
+ ])
+ expect(sendOrgInviteEmail).toHaveBeenCalledWith({
+ user: {
+ _type: 'user',
+ displayName: 'Test Account',
+ id: secondaryUser._key,
+ userName: 'test@email.gc.ca',
+ ...secondaryUser,
+ },
+ orgNameEN: 'Treasury Board of Canada Secretariat',
+ orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
})
})
})
- describe('inviting a non-existing account', () => {
- describe('requested role is admin', () => {
- it('returns status message', async () => {
- const sendOrgInviteCreateAccount = jest.fn()
+ })
+ describe('inviting a non-existing account', () => {
+ describe('requested role is admin', () => {
+ it('returns status message', async () => {
+ const sendOrgInviteCreateAccount = jest.fn()
- const response = await graphql({
- schema,
- source: `
+ const response = await graphql({
+ schema,
+ source: `
mutation {
inviteUserToOrg(
input: {
@@ -918,81 +924,82 @@ describe('invite user to org', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ protocol: 'https',
+ get: (text) => text,
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: user._key,
+ auth: {
+ checkPermission: checkPermission({
+ userKey: user._key,
+ query,
+ }),
+ tokenize,
+ userRequired: userRequired({
+ userKey: user._key,
loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteCreateAccount },
- validators: { cleanseInput },
+ }),
+ verifiedRequired: verifiedRequired({ i18n }),
+ tfaRequired: tfaRequired({ i18n }),
+ },
+ loaders: {
+ loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ loadUserByKey: loadUserByKey({ query }),
+ loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: loadOrganizationNamesById({ query }),
},
- })
+ notify: { sendOrgInviteCreateAccount },
+ validators: { cleanseInput },
+ },
+ })
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status: 'Successfully sent invitation to service, and organization email.',
- },
+ const expectedResponse = {
+ data: {
+ inviteUserToOrg: {
+ result: {
+ status: 'Successfully sent invitation to service, and organization email.',
},
},
- }
+ },
+ }
- const token = tokenize({
- parameters: {
- userName: 'test@email.gc.ca',
- orgId: org._id,
- requestedRole: 'admin',
- },
- })
- const createAccountLink = `https://host/create-user/${token}`
+ const token = tokenize({
+ parameters: {
+ userName: 'test@email.gc.ca',
+ orgId: org._id,
+ requestedRole: 'admin',
+ },
+ })
+ const createAccountLink = `https://host/create-user/${token}`
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: test@email.gc.ca to the service, and org: treasury-board-secretariat.`,
- ])
- expect(sendOrgInviteCreateAccount).toHaveBeenCalledWith({
- user: {
- userName: 'test@email.gc.ca',
- },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- createAccountLink,
- })
+ expect(response).toEqual(expectedResponse)
+ expect(consoleOutput).toEqual([
+ `User: ${user._key} successfully invited user: test@email.gc.ca to the service, and org: treasury-board-secretariat.`,
+ ])
+ expect(sendOrgInviteCreateAccount).toHaveBeenCalledWith({
+ user: {
+ userName: 'test@email.gc.ca',
+ },
+ orgNameEN: 'Treasury Board of Canada Secretariat',
+ orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
+ createAccountLink,
})
})
- describe('requested role is user', () => {
- it('returns status message', async () => {
- const sendOrgInviteCreateAccount = jest.fn()
+ })
+ describe('requested role is user', () => {
+ it('returns status message', async () => {
+ const sendOrgInviteCreateAccount = jest.fn()
- const response = await graphql({
- schema,
- source: `
+ const response = await graphql({
+ schema,
+ source: `
mutation {
inviteUserToOrg(
input: {
@@ -1013,1142 +1020,139 @@ describe('invite user to org', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ protocol: 'https',
+ get: (text) => text,
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: user._key,
+ auth: {
+ checkPermission: checkPermission({
+ userKey: user._key,
+ query,
+ }),
+ tokenize,
+ userRequired: userRequired({
+ userKey: user._key,
loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteCreateAccount },
- validators: { cleanseInput },
+ }),
+ verifiedRequired: verifiedRequired({ i18n }),
+ tfaRequired: tfaRequired({ i18n }),
+ },
+ loaders: {
+ loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ loadUserByKey: loadUserByKey({ query }),
+ loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: loadOrganizationNamesById({ query }),
},
- })
+ notify: { sendOrgInviteCreateAccount },
+ validators: { cleanseInput },
+ },
+ })
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status: 'Successfully sent invitation to service, and organization email.',
- },
+ const expectedResponse = {
+ data: {
+ inviteUserToOrg: {
+ result: {
+ status: 'Successfully sent invitation to service, and organization email.',
},
},
- }
+ },
+ }
- const token = tokenize({
- parameters: {
- userName: 'test@email.gc.ca',
- orgId: org._id,
- requestedRole: 'user',
- },
- })
- const createAccountLink = `https://host/create-user/${token}`
+ const token = tokenize({
+ parameters: {
+ userName: 'test@email.gc.ca',
+ orgId: org._id,
+ requestedRole: 'user',
+ },
+ })
+ const createAccountLink = `https://host/create-user/${token}`
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: test@email.gc.ca to the service, and org: treasury-board-secretariat.`,
- ])
- expect(sendOrgInviteCreateAccount).toHaveBeenCalledWith({
- user: {
- userName: 'test@email.gc.ca',
- },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- createAccountLink,
- })
+ expect(response).toEqual(expectedResponse)
+ expect(consoleOutput).toEqual([
+ `User: ${user._key} successfully invited user: test@email.gc.ca to the service, and org: treasury-board-secretariat.`,
+ ])
+ expect(sendOrgInviteCreateAccount).toHaveBeenCalledWith({
+ user: {
+ userName: 'test@email.gc.ca',
+ },
+ orgNameEN: 'Treasury Board of Canada Secretariat',
+ orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
+ createAccountLink,
})
})
})
})
})
- describe('users language is set to french', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'fr',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
+ })
+ describe('given an unsuccessful invitation', () => {
+ beforeAll(async () => {
+ ;({ query, drop, truncate, collections, transaction } = await ensure({
+ variables: {
+ dbname: dbNameFromFile(__filename),
+ username: 'root',
+ rootPassword: rootPass,
+ password: rootPass,
+ url,
+ },
+
+ schema: dbschema,
+ }))
+ tokenize = jest.fn().mockReturnValue('token')
+ i18n = setupI18n({
+ locale: 'en',
+ localeData: {
+ en: { plurals: {} },
+ fr: { plurals: {} },
+ },
+ locales: ['en', 'fr'],
+ messages: {
+ en: englishMessages.messages,
+ fr: frenchMessages.messages,
+ },
+ })
+ })
+ beforeEach(async () => {
+ user = (
+ await collections.users.save(
+ {
+ userName: 'test.account@istio.actually.exists',
+ emailValidated: true,
+ tfaSendMethod: 'email',
},
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
+ { returnNew: true },
+ )
+ ).new
+ userToInvite = (
+ await collections.users.save(
+ {
+ userName: 'usertoinvite@istio.actually.exists',
+ emailValidated: true,
+ tfaSendMethod: 'email',
},
- })
- })
- let org
- beforeEach(async () => {
- org = await (
- await collections.organizations.save(
- {
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- },
- { returnNew: true },
- )
- ).new
- })
- describe('users role is super admin', () => {
- beforeEach(async () => {
- await collections.affiliations.save({
- _from: org._id,
- _to: user._id,
- permission: 'super_admin',
- })
- })
- describe('inviting an existing account', () => {
- describe('requested role is super_admin', () => {
- let secondaryUser
- beforeEach(async () => {
- secondaryUser = await collections.users.save({
- displayName: 'Test Account',
- userName: 'test@email.gc.ca',
- })
- })
- it('returns a status message', async () => {
- const sendOrgInviteEmail = jest.fn()
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "test@email.gc.ca"
- requestedRole: SUPER_ADMIN
- orgId: "${toGlobalId('organizations', org._key)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteEmail: sendOrgInviteEmail },
- validators: { cleanseInput },
- },
- })
-
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status:
- "L'utilisateur a été invité avec succès à l'organisation et l'email de notification a été envoyé.",
- },
- },
- },
- }
-
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: ${secondaryUser._key} to the org: secretariat-conseil-tresor.`,
- ])
- expect(sendOrgInviteEmail).toHaveBeenCalledWith({
- user: {
- _type: 'user',
- displayName: 'Test Account',
- id: secondaryUser._key,
- userName: 'test@email.gc.ca',
- ...secondaryUser,
- },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- })
- })
- })
- describe('requested role is admin', () => {
- let secondaryUser
- beforeEach(async () => {
- secondaryUser = await collections.users.save({
- displayName: 'Test Account',
- userName: 'test@email.gc.ca',
- })
- })
- it('returns a status message', async () => {
- const sendOrgInviteEmail = jest.fn()
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "test@email.gc.ca"
- requestedRole: ADMIN
- orgId: "${toGlobalId('organizations', org._key)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteEmail: sendOrgInviteEmail },
- validators: { cleanseInput },
- },
- })
-
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status:
- "L'utilisateur a été invité avec succès à l'organisation et l'email de notification a été envoyé.",
- },
- },
- },
- }
-
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: ${secondaryUser._key} to the org: secretariat-conseil-tresor.`,
- ])
- expect(sendOrgInviteEmail).toHaveBeenCalledWith({
- user: {
- _type: 'user',
- displayName: 'Test Account',
- id: secondaryUser._key,
- userName: 'test@email.gc.ca',
- ...secondaryUser,
- },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- })
- })
- })
- describe('requested role is user', () => {
- let secondaryUser
- beforeEach(async () => {
- secondaryUser = await collections.users.save({
- displayName: 'Test Account',
- userName: 'test@email.gc.ca',
- })
- })
- it('returns a status message', async () => {
- const sendOrgInviteEmail = jest.fn()
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "test@email.gc.ca"
- requestedRole: USER
- orgId: "${toGlobalId('organizations', org._key)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteEmail: sendOrgInviteEmail },
- validators: { cleanseInput },
- },
- })
-
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status:
- "L'utilisateur a été invité avec succès à l'organisation et l'email de notification a été envoyé.",
- },
- },
- },
- }
-
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: ${secondaryUser._key} to the org: secretariat-conseil-tresor.`,
- ])
- expect(sendOrgInviteEmail).toHaveBeenCalledWith({
- user: {
- _type: 'user',
- displayName: 'Test Account',
- id: secondaryUser._key,
- userName: 'test@email.gc.ca',
- ...secondaryUser,
- },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- })
- })
- })
- })
- describe('inviting a non-existing account', () => {
- describe('requested role is super_admin', () => {
- it('returns a status message', async () => {
- const sendOrgInviteCreateAccount = jest.fn()
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "test@email.gc.ca"
- requestedRole: SUPER_ADMIN
- orgId: "${toGlobalId('organizations', org._key)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteCreateAccount },
- validators: { cleanseInput },
- },
- })
-
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status: "Envoi réussi de l'invitation au service, et de l'email de l'organisation.",
- },
- },
- },
- }
-
- const token = tokenize({
- parameters: {
- userName: 'test@email.gc.ca',
- orgId: org._id,
- requestedRole: 'super_admin',
- },
- })
- const createAccountLink = `https://host/create-user/${token}`
-
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: test@email.gc.ca to the service, and org: secretariat-conseil-tresor.`,
- ])
- expect(sendOrgInviteCreateAccount).toHaveBeenCalledWith({
- user: { userName: 'test@email.gc.ca' },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- createAccountLink,
- })
- })
- })
- describe('requested role is admin', () => {
- it('returns a status message', async () => {
- const sendOrgInviteCreateAccount = jest.fn()
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "test@email.gc.ca"
- requestedRole: ADMIN
- orgId: "${toGlobalId('organizations', org._key)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteCreateAccount },
- validators: { cleanseInput },
- },
- })
-
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status: "Envoi réussi de l'invitation au service, et de l'email de l'organisation.",
- },
- },
- },
- }
-
- const token = tokenize({
- parameters: {
- userName: 'test@email.gc.ca',
- orgId: org._id,
- requestedRole: 'admin',
- },
- })
- const createAccountLink = `https://host/create-user/${token}`
-
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: test@email.gc.ca to the service, and org: secretariat-conseil-tresor.`,
- ])
- expect(sendOrgInviteCreateAccount).toHaveBeenCalledWith({
- user: { userName: 'test@email.gc.ca' },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- createAccountLink,
- })
- })
- })
- describe('requested role is user', () => {
- it('returns a status message', async () => {
- const sendOrgInviteCreateAccount = jest.fn()
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "test@email.gc.ca"
- requestedRole: USER
- orgId: "${toGlobalId('organizations', org._key)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteCreateAccount },
- validators: { cleanseInput },
- },
- })
-
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status: "Envoi réussi de l'invitation au service, et de l'email de l'organisation.",
- },
- },
- },
- }
-
- const token = tokenize({
- parameters: {
- userName: 'test@email.gc.ca',
- orgId: org._id,
- requestedRole: 'user',
- },
- })
- const createAccountLink = `https://host/create-user/${token}`
-
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: test@email.gc.ca to the service, and org: secretariat-conseil-tresor.`,
- ])
- expect(sendOrgInviteCreateAccount).toHaveBeenCalledWith({
- user: { userName: 'test@email.gc.ca' },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- createAccountLink,
- })
- })
- })
- })
- })
- describe('users role is admin', () => {
- beforeEach(async () => {
- await collections.affiliations.save({
- _from: org._id,
- _to: user._id,
- permission: 'admin',
- })
- })
- describe('inviting an existing account', () => {
- describe('requested role is admin', () => {
- let secondaryUser
- beforeEach(async () => {
- secondaryUser = await collections.users.save({
- displayName: 'Test Account',
- userName: 'test@email.gc.ca',
- })
- })
- it('returns a status message', async () => {
- const sendOrgInviteEmail = jest.fn()
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "test@email.gc.ca"
- requestedRole: ADMIN
- orgId: "${toGlobalId('organizations', org._key)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteEmail: sendOrgInviteEmail },
- validators: { cleanseInput },
- },
- })
-
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status:
- "L'utilisateur a été invité avec succès à l'organisation et l'email de notification a été envoyé.",
- },
- },
- },
- }
-
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: ${secondaryUser._key} to the org: secretariat-conseil-tresor.`,
- ])
- expect(sendOrgInviteEmail).toHaveBeenCalledWith({
- user: {
- _type: 'user',
- displayName: 'Test Account',
- id: secondaryUser._key,
- userName: 'test@email.gc.ca',
- ...secondaryUser,
- },
-
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- })
- })
- })
- describe('requested role is user', () => {
- let secondaryUser
- beforeEach(async () => {
- secondaryUser = await collections.users.save({
- displayName: 'Test Account',
- userName: 'test@email.gc.ca',
- })
- })
- it('returns a status message', async () => {
- const sendOrgInviteEmail = jest.fn()
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "test@email.gc.ca"
- requestedRole: USER
- orgId: "${toGlobalId('organizations', org._key)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteEmail: sendOrgInviteEmail },
- validators: { cleanseInput },
- },
- })
-
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status:
- "L'utilisateur a été invité avec succès à l'organisation et l'email de notification a été envoyé.",
- },
- },
- },
- }
-
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: ${secondaryUser._key} to the org: secretariat-conseil-tresor.`,
- ])
- expect(sendOrgInviteEmail).toHaveBeenCalledWith({
- user: {
- _type: 'user',
- displayName: 'Test Account',
- id: secondaryUser._key,
- userName: 'test@email.gc.ca',
- ...secondaryUser,
- },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- })
- })
- })
- })
- describe('inviting a non-existing account', () => {
- describe('requested role is admin', () => {
- it('returns a status message', async () => {
- const sendOrgInviteCreateAccount = jest.fn()
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "test@email.gc.ca"
- requestedRole: ADMIN
- orgId: "${toGlobalId('organizations', org._key)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteCreateAccount },
- validators: { cleanseInput },
- },
- })
-
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status: "Envoi réussi de l'invitation au service, et de l'email de l'organisation.",
- },
- },
- },
- }
-
- const token = tokenize({
- parameters: {
- userName: 'test@email.gc.ca',
- orgId: org._id,
- requestedRole: 'admin',
- },
- })
- const createAccountLink = `https://host/create-user/${token}`
-
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: test@email.gc.ca to the service, and org: secretariat-conseil-tresor.`,
- ])
- expect(sendOrgInviteCreateAccount).toHaveBeenCalledWith({
- user: { userName: 'test@email.gc.ca' },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- createAccountLink,
- })
- })
- })
- describe('requested role is user', () => {
- it('returns a status message', async () => {
- const sendOrgInviteCreateAccount = jest.fn()
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "test@email.gc.ca"
- requestedRole: USER
- orgId: "${toGlobalId('organizations', org._key)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- tokenize,
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteCreateAccount },
- validators: { cleanseInput },
- },
- })
-
- const expectedResponse = {
- data: {
- inviteUserToOrg: {
- result: {
- status: "Envoi réussi de l'invitation au service, et de l'email de l'organisation.",
- },
- },
- },
- }
-
- const token = tokenize({
- parameters: {
- userName: 'test@email.gc.ca',
- orgId: org._id,
- requestedRole: 'user',
- },
- })
- const createAccountLink = `https://host/create-user/${token}`
-
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([
- `User: ${user._key} successfully invited user: test@email.gc.ca to the service, and org: secretariat-conseil-tresor.`,
- ])
- expect(sendOrgInviteCreateAccount).toHaveBeenCalledWith({
- user: { userName: 'test@email.gc.ca' },
- orgNameEN: 'Treasury Board of Canada Secretariat',
- orgNameFR: 'Secrétariat du Conseil Trésor du Canada',
- createAccountLink,
- })
- })
- })
- })
- })
- })
- })
- describe('given an unsuccessful invitation', () => {
- beforeAll(async () => {
- ;({ query, drop, truncate, collections, transaction } = await ensure({
- variables: {
- dbname: dbNameFromFile(__filename),
- username: 'root',
- rootPassword: rootPass,
- password: rootPass,
- url,
- },
-
- schema: dbschema,
- }))
- tokenize = jest.fn().mockReturnValue('token')
- })
- beforeEach(async () => {
- user = (
- await collections.users.save(
- {
- userName: 'test.account@istio.actually.exists',
- emailValidated: true,
- tfaSendMethod: 'email',
- },
- { returnNew: true },
- )
- ).new
- userToInvite = (
- await collections.users.save(
- {
- userName: 'usertoinvite@istio.actually.exists',
- emailValidated: true,
- tfaSendMethod: 'email',
- },
- { returnNew: true },
- )
- ).new
- org = (
- await collections.organizations.save(
- {
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
+ { returnNew: true },
+ )
+ ).new
+ org = (
+ await collections.organizations.save(
+ {
+ orgDetails: {
+ en: {
+ slug: 'treasury-board-secretariat',
+ acronym: 'TBS',
+ name: 'Treasury Board of Canada Secretariat',
+ zone: 'FED',
+ sector: 'TBS',
+ country: 'Canada',
+ province: 'Ontario',
+ city: 'Ottawa',
},
fr: {
slug: 'secretariat-conseil-tresor',
@@ -2163,271 +1167,27 @@ describe('invite user to org', () => {
},
},
{ returnNew: true },
- )
- ).new
- })
- afterEach(async () => {
- await truncate()
- })
- afterAll(async () => {
- await drop()
- })
- describe('users language is set to french', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'fr',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('user attempts to invite themselves', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "${user.userName}"
- requestedRole: USER
- orgId: "${toGlobalId('organizations', org._key)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- tokenize,
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@istio.actually.exists',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: i18n.locale }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query, i18n }),
- },
- notify: { sendOrgInviteCreateAccount: jest.fn() },
- validators: { cleanseInput },
- },
- })
-
- const error = {
- data: {
- inviteUserToOrg: {
- result: {
- code: 400,
- description: "Impossible de s'inviter à un org.",
- },
- },
- },
- }
-
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([`User: 123 attempted to invite themselves to ${org._key}.`])
- })
- })
- describe('user attempts to invite to an org that does not exist', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "test@email.gc.ca"
- requestedRole: USER
- orgId: "${toGlobalId('organizations', 1)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- tokenize,
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@exists.ca',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- loadUserByUserName: {
- load: jest.fn(),
- },
- },
- notify: { sendOrgInviteCreateAccount: jest.fn() },
- validators: { cleanseInput },
- },
- })
-
- const error = {
- data: {
- inviteUserToOrg: {
- result: {
- code: 400,
- description: "Impossible d'inviter un utilisateur à une organisation inconnue.",
- },
- },
- },
- }
-
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to invite user: test@email.gc.ca to 1 however there is no org associated with that id.`,
- ])
- })
- })
- describe('user with undefined permission attempts to invite a user', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "test@email.gc.ca"
- requestedRole: USER
- orgId: "${toGlobalId('organizations', 123)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue(undefined),
- tokenize,
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@exists.ca',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({ _key: 123 }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- loadUserByUserName: {
- load: jest.fn(),
- },
- },
- notify: { sendOrgInviteCreateAccount: jest.fn() },
- validators: { cleanseInput },
- },
- })
-
- const error = {
- data: {
- inviteUserToOrg: {
- result: {
- code: 403,
- description:
- "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide concernant les invitations d'utilisateurs.",
- },
- },
- },
- }
+ )
+ ).new
+ })
+ afterEach(async () => {
+ await truncate()
+ })
+ afterAll(async () => {
+ await drop()
+ })
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to invite user: test@email.gc.ca to org: 123 with role: user but does not have permission to do so.`,
- ])
- })
- })
- describe('user with user level permission attempts to invite a user', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
+ describe('user attempts to invite themselves', () => {
+ it('returns an error message', async () => {
+ const response = await graphql({
+ schema,
+ source: `
mutation {
inviteUserToOrg(
input: {
- userName: "test@email.gc.ca"
+ userName: "test.account@istio.actually.exists"
requestedRole: USER
- orgId: "${toGlobalId('organizations', 123)}"
+ orgId: "${toGlobalId('organizations', 1)}"
}
) {
result {
@@ -2442,72 +1202,72 @@ describe('invite user to org', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'fr',
+ protocol: 'https',
+ get: (text) => text,
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: 123,
+ auth: {
+ checkPermission: jest.fn().mockReturnValue('admin'),
+ tokenize,
+ userRequired: jest.fn().mockReturnValue({
+ userName: 'test.account@istio.actually.exists',
+ }),
+ verifiedRequired: jest.fn(),
+ tfaRequired: jest.fn(),
+ },
+ loaders: {
+ loadOrgByKey: {
+ load: jest.fn(),
},
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue('user'),
- tokenize,
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@exists.ca',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
},
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({ _key: 123 }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- loadUserByUserName: {
- load: jest.fn(),
- },
+ loadUserByUserName: {
+ load: jest.fn(),
+ },
+ loadOrganizationNamesById: {
+ load: jest.fn(),
},
- notify: { sendOrgInviteCreateAccount: jest.fn() },
- validators: { cleanseInput },
},
- })
+ notify: { sendOrgInviteCreateAccount: jest.fn() },
+ validators: { cleanseInput },
+ },
+ })
- const error = {
- data: {
- inviteUserToOrg: {
- result: {
- code: 403,
- description:
- "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide concernant les invitations d'utilisateurs.",
- },
+ const error = {
+ data: {
+ inviteUserToOrg: {
+ result: {
+ code: 400,
+ description: 'Unable to invite yourself to an org.',
},
},
- }
+ },
+ }
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to invite user: test@email.gc.ca to org: 123 with role: user but does not have permission to do so.`,
- ])
- })
+ expect(response).toEqual(error)
+ expect(consoleOutput).toEqual([`User: 123 attempted to invite themselves to 1.`])
})
- describe('user with admin level permission attempts to invite a user to super_admin permission', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
+ })
+ describe('user attempts to invite to an org that does not exist', () => {
+ it('returns an error message', async () => {
+ const response = await graphql({
+ schema,
+ source: `
mutation {
inviteUserToOrg(
input: {
userName: "test@email.gc.ca"
- requestedRole: SUPER_ADMIN
- orgId: "${toGlobalId('organizations', 123)}"
+ requestedRole: USER
+ orgId: "${toGlobalId('organizations', 1)}"
}
) {
result {
@@ -2522,246 +1282,74 @@ describe('invite user to org', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'fr',
+ protocol: 'https',
+ get: (text) => text,
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: 123,
+ auth: {
+ checkPermission: jest.fn().mockReturnValue('admin'),
+ tokenize,
+ userRequired: jest.fn().mockReturnValue({
+ userName: 'test.account@exists.ca',
+ }),
+ verifiedRequired: jest.fn(),
+ tfaRequired: jest.fn(),
+ },
+ loaders: {
+ loadOrgByKey: {
+ load: jest.fn().mockReturnValue(undefined),
},
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- tokenize,
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@exists.ca',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
},
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({ _key: 123 }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- loadUserByUserName: {
- load: jest.fn(),
- },
+ loadUserByUserName: {
+ load: jest.fn(),
},
- notify: { sendOrgInviteCreateAccount: jest.fn() },
- validators: { cleanseInput },
- },
- })
-
- const error = {
- data: {
- inviteUserToOrg: {
- result: {
- code: 403,
- description:
- "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide concernant les invitations d'utilisateurs.",
- },
+ loadOrganizationNamesById: {
+ load: jest.fn(),
},
},
- }
-
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to invite user: test@email.gc.ca to org: 123 with role: super_admin but does not have permission to do so.`,
- ])
- })
- })
- describe('transaction error occurs', () => {
- describe('when creating affiliation', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "${userToInvite.userName}"
- requestedRole: USER
- orgId: "${toGlobalId('organizations', org._key)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue('trx step err'),
- abort: jest.fn(),
- }),
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- tokenize,
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@exists.ca',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: i18n.locale }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query, i18n }),
- },
- notify: { sendOrgInviteCreateAccount: jest.fn() },
- validators: { cleanseInput },
- },
- })
-
- const error = {
- data: {
- inviteUserToOrg: {
- result: {
- code: 500,
- description: "Impossible d'inviter un utilisateur. Veuillez réessayer.",
- },
- },
- },
- }
-
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction step error occurred while user: 123 attempted to invite user: ${userToInvite._key} to org: ${org.orgDetails.fr.slug}, error: trx step err`,
- ])
- })
+ notify: { sendOrgInviteCreateAccount: jest.fn() },
+ validators: { cleanseInput },
+ },
})
- describe('when committing transaction', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "${userToInvite.userName}"
- requestedRole: USER
- orgId: "${toGlobalId('organizations', org._key)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn(),
- commit: jest.fn().mockRejectedValue('trx commit err'),
- abort: jest.fn(),
- }),
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- tokenize,
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@exists.ca',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: i18n.locale }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: {
- sendOrgInviteCreateAccount: jest.fn(),
- sendOrgInviteEmail: jest.fn(),
- },
- validators: { cleanseInput },
- },
- })
- const error = {
- data: {
- inviteUserToOrg: {
- result: {
- code: 500,
- description: "Impossible d'inviter un utilisateur. Veuillez réessayer.",
- },
- },
+ const error = {
+ data: {
+ inviteUserToOrg: {
+ result: {
+ code: 400,
+ description: 'Unable to invite user to unknown organization.',
},
- }
+ },
+ },
+ }
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction commit error occurred while user: 123 attempted to invite user: ${userToInvite._key} to org: secretariat-conseil-tresor, error: trx commit err`,
- ])
- })
- })
+ expect(response).toEqual(error)
+ expect(consoleOutput).toEqual([
+ `User: 123 attempted to invite user: test@email.gc.ca to 1 however there is no org associated with that id.`,
+ ])
})
})
- describe('users language is set to english', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('user attempts to invite themselves', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
+ describe('user with undefined permission attempts to invite a user', () => {
+ it('returns an error message', async () => {
+ const response = await graphql({
+ schema,
+ source: `
mutation {
inviteUserToOrg(
input: {
- userName: "test.account@istio.actually.exists"
+ userName: "test@email.gc.ca"
requestedRole: USER
- orgId: "${toGlobalId('organizations', 1)}"
+ orgId: "${toGlobalId('organizations', 123)}"
}
) {
result {
@@ -2776,71 +1364,74 @@ describe('invite user to org', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'fr',
+ protocol: 'https',
+ get: (text) => text,
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: 123,
+ auth: {
+ checkPermission: jest.fn().mockReturnValue(undefined),
+ tokenize,
+ userRequired: jest.fn().mockReturnValue({
+ userName: 'test.account@exists.ca',
+ }),
+ verifiedRequired: jest.fn(),
+ tfaRequired: jest.fn(),
+ },
+ loaders: {
+ loadOrgByKey: {
+ load: jest.fn().mockReturnValue({ _key: 123 }),
},
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- tokenize,
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@istio.actually.exists',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
},
- loaders: {
- loaders: {
- loadOrgByKey: {
- load: jest.fn(),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- loadUserByUserName: {
- load: jest.fn(),
- },
- },
+ loadUserByUserName: {
+ load: jest.fn(),
+ },
+ loadOrganizationNamesById: {
+ load: jest.fn(),
},
- notify: { sendOrgInviteCreateAccount: jest.fn() },
- validators: { cleanseInput },
},
- })
+ notify: { sendOrgInviteCreateAccount: jest.fn() },
+ validators: { cleanseInput },
+ },
+ })
- const error = {
- data: {
- inviteUserToOrg: {
- result: {
- code: 400,
- description: 'Unable to invite yourself to an org.',
- },
+ const error = {
+ data: {
+ inviteUserToOrg: {
+ result: {
+ code: 403,
+ description: 'Permission Denied: Please contact organization admin for help with user invitations.',
},
},
- }
+ },
+ }
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([`User: 123 attempted to invite themselves to 1.`])
- })
+ expect(response).toEqual(error)
+ expect(consoleOutput).toEqual([
+ `User: 123 attempted to invite user: test@email.gc.ca to org: 123 with role: user but does not have permission to do so.`,
+ ])
})
- describe('user attempts to invite to an org that does not exist', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
+ })
+ describe('user with user level permission attempts to invite a user', () => {
+ it('returns an error message', async () => {
+ const response = await graphql({
+ schema,
+ source: `
mutation {
inviteUserToOrg(
input: {
userName: "test@email.gc.ca"
requestedRole: USER
- orgId: "${toGlobalId('organizations', 1)}"
+ orgId: "${toGlobalId('organizations', 123)}"
}
) {
result {
@@ -2855,70 +1446,73 @@ describe('invite user to org', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'fr',
+ protocol: 'https',
+ get: (text) => text,
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: 123,
+ auth: {
+ checkPermission: jest.fn().mockReturnValue('user'),
+ tokenize,
+ userRequired: jest.fn().mockReturnValue({
+ userName: 'test.account@exists.ca',
+ }),
+ verifiedRequired: jest.fn(),
+ tfaRequired: jest.fn(),
+ },
+ loaders: {
+ loadOrgByKey: {
+ load: jest.fn().mockReturnValue({ _key: 123 }),
},
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- tokenize,
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@exists.ca',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
},
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- loadUserByUserName: {
- load: jest.fn(),
- },
+ loadUserByUserName: {
+ load: jest.fn(),
+ },
+ loadOrganizationNamesById: {
+ load: jest.fn(),
},
- notify: { sendOrgInviteCreateAccount: jest.fn() },
- validators: { cleanseInput },
},
- })
+ notify: { sendOrgInviteCreateAccount: jest.fn() },
+ validators: { cleanseInput },
+ },
+ })
- const error = {
- data: {
- inviteUserToOrg: {
- result: {
- code: 400,
- description: 'Unable to invite user to unknown organization.',
- },
+ const error = {
+ data: {
+ inviteUserToOrg: {
+ result: {
+ code: 403,
+ description: 'Permission Denied: Please contact organization admin for help with user invitations.',
},
},
- }
+ },
+ }
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to invite user: test@email.gc.ca to 1 however there is no org associated with that id.`,
- ])
- })
+ expect(response).toEqual(error)
+ expect(consoleOutput).toEqual([
+ `User: 123 attempted to invite user: test@email.gc.ca to org: 123 with role: user but does not have permission to do so.`,
+ ])
})
- describe('user with undefined permission attempts to invite a user', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
+ })
+ describe('user with admin level permission attempts to invite a user to super_admin permission', () => {
+ it('returns an error message', async () => {
+ const response = await graphql({
+ schema,
+ source: `
mutation {
inviteUserToOrg(
input: {
userName: "test@email.gc.ca"
- requestedRole: USER
+ requestedRole: SUPER_ADMIN
orgId: "${toGlobalId('organizations', 123)}"
}
) {
@@ -2934,61 +1528,65 @@ describe('invite user to org', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'fr',
+ protocol: 'https',
+ get: (text) => text,
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: 123,
+ auth: {
+ checkPermission: jest.fn().mockReturnValue('admin'),
+ tokenize,
+ userRequired: jest.fn().mockReturnValue({
+ userName: 'test.account@exists.ca',
+ }),
+ verifiedRequired: jest.fn(),
+ tfaRequired: jest.fn(),
+ },
+ loaders: {
+ loadOrgByKey: {
+ load: jest.fn().mockReturnValue({ _key: 123 }),
},
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue(undefined),
- tokenize,
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@exists.ca',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
},
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({ _key: 123 }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- loadUserByUserName: {
- load: jest.fn(),
- },
+ loadUserByUserName: {
+ load: jest.fn(),
+ },
+ loadOrganizationNamesById: {
+ load: jest.fn(),
},
- notify: { sendOrgInviteCreateAccount: jest.fn() },
- validators: { cleanseInput },
},
- })
+ notify: { sendOrgInviteCreateAccount: jest.fn() },
+ validators: { cleanseInput },
+ },
+ })
- const error = {
- data: {
- inviteUserToOrg: {
- result: {
- code: 403,
- description: 'Permission Denied: Please contact organization admin for help with user invitations.',
- },
+ const error = {
+ data: {
+ inviteUserToOrg: {
+ result: {
+ code: 403,
+ description: 'Permission Denied: Please contact super admin for help with user invitations.',
},
},
- }
+ },
+ }
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to invite user: test@email.gc.ca to org: 123 with role: user but does not have permission to do so.`,
- ])
- })
+ expect(response).toEqual(error)
+ expect(consoleOutput).toEqual([
+ `User: 123 attempted to invite user: test@email.gc.ca to org: 123 with role: super_admin but does not have permission to do so.`,
+ ])
})
- describe('user with user level permission attempts to invite a user', () => {
+ })
+ describe('transaction error occurs', () => {
+ describe('when creating affiliation', () => {
it('returns an error message', async () => {
const response = await graphql({
schema,
@@ -2996,9 +1594,9 @@ describe('invite user to org', () => {
mutation {
inviteUserToOrg(
input: {
- userName: "test@email.gc.ca"
+ userName: "${userToInvite.userName}"
requestedRole: USER
- orgId: "${toGlobalId('organizations', 123)}"
+ orgId: "${toGlobalId('organizations', org._key)}"
}
) {
result {
@@ -3023,10 +1621,13 @@ describe('invite user to org', () => {
},
query,
collections: collectionNames,
- transaction,
+ transaction: jest.fn().mockReturnValue({
+ step: jest.fn().mockRejectedValue('trx step err'),
+ abort: jest.fn(),
+ }),
userKey: 123,
auth: {
- checkPermission: jest.fn().mockReturnValue('user'),
+ checkPermission: jest.fn().mockReturnValue('admin'),
tokenize,
userRequired: jest.fn().mockReturnValue({
userName: 'test.account@exists.ca',
@@ -3035,15 +1636,10 @@ describe('invite user to org', () => {
tfaRequired: jest.fn(),
},
loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({ _key: 123 }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- loadUserByUserName: {
- load: jest.fn(),
- },
+ loadOrgByKey: loadOrgByKey({ query, language: i18n.locale }),
+ loadUserByKey: loadUserByKey({ query }),
+ loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: loadOrganizationNamesById({ query }),
},
notify: { sendOrgInviteCreateAccount: jest.fn() },
validators: { cleanseInput },
@@ -3054,8 +1650,8 @@ describe('invite user to org', () => {
data: {
inviteUserToOrg: {
result: {
- code: 403,
- description: 'Permission Denied: Please contact organization admin for help with user invitations.',
+ code: 500,
+ description: 'Unable to invite user. Please try again.',
},
},
},
@@ -3063,11 +1659,11 @@ describe('invite user to org', () => {
expect(response).toEqual(error)
expect(consoleOutput).toEqual([
- `User: 123 attempted to invite user: test@email.gc.ca to org: 123 with role: user but does not have permission to do so.`,
+ `Transaction step error occurred while user: 123 attempted to invite user: ${userToInvite._key} to org: treasury-board-secretariat, error: trx step err`,
])
})
})
- describe('user with admin level permission attempts to invite a user to super_admin permission', () => {
+ describe('when committing transaction', () => {
it('returns an error message', async () => {
const response = await graphql({
schema,
@@ -3075,9 +1671,9 @@ describe('invite user to org', () => {
mutation {
inviteUserToOrg(
input: {
- userName: "test@email.gc.ca"
- requestedRole: SUPER_ADMIN
- orgId: "${toGlobalId('organizations', 123)}"
+ userName: "${userToInvite.userName}"
+ requestedRole: USER
+ orgId: "${toGlobalId('organizations', org._key)}"
}
) {
result {
@@ -3102,7 +1698,11 @@ describe('invite user to org', () => {
},
query,
collections: collectionNames,
- transaction,
+ transaction: jest.fn().mockReturnValue({
+ step: jest.fn(),
+ commit: jest.fn().mockRejectedValue('trx commit err'),
+ abort: jest.fn(),
+ }),
userKey: 123,
auth: {
checkPermission: jest.fn().mockReturnValue('admin'),
@@ -3114,17 +1714,15 @@ describe('invite user to org', () => {
tfaRequired: jest.fn(),
},
loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({ _key: 123 }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- loadUserByUserName: {
- load: jest.fn(),
- },
+ loadOrgByKey: loadOrgByKey({ query, language: i18n.locale }),
+ loadUserByKey: loadUserByKey({ query }),
+ loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: loadOrganizationNamesById({ query }),
+ },
+ notify: {
+ sendOrgInviteCreateAccount: jest.fn(),
+ sendOrgInviteEmail: jest.fn(),
},
- notify: { sendOrgInviteCreateAccount: jest.fn() },
validators: { cleanseInput },
},
})
@@ -3133,8 +1731,8 @@ describe('invite user to org', () => {
data: {
inviteUserToOrg: {
result: {
- code: 403,
- description: 'Permission Denied: Please contact organization admin for help with user invitations.',
+ code: 500,
+ description: 'Unable to invite user. Please try again.',
},
},
},
@@ -3142,168 +1740,10 @@ describe('invite user to org', () => {
expect(response).toEqual(error)
expect(consoleOutput).toEqual([
- `User: 123 attempted to invite user: test@email.gc.ca to org: 123 with role: super_admin but does not have permission to do so.`,
+ `Transaction commit error occurred while user: 123 attempted to invite user: ${userToInvite._key} to org: treasury-board-secretariat, error: trx commit err`,
])
})
})
- describe('transaction error occurs', () => {
- describe('when creating affiliation', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "${userToInvite.userName}"
- requestedRole: USER
- orgId: "${toGlobalId('organizations', org._key)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue('trx step err'),
- abort: jest.fn(),
- }),
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- tokenize,
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@exists.ca',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: i18n.locale }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: { sendOrgInviteCreateAccount: jest.fn() },
- validators: { cleanseInput },
- },
- })
-
- const error = {
- data: {
- inviteUserToOrg: {
- result: {
- code: 500,
- description: 'Unable to invite user. Please try again.',
- },
- },
- },
- }
-
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction step error occurred while user: 123 attempted to invite user: ${userToInvite._key} to org: treasury-board-secretariat, error: trx step err`,
- ])
- })
- })
- describe('when committing transaction', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- inviteUserToOrg(
- input: {
- userName: "${userToInvite.userName}"
- requestedRole: USER
- orgId: "${toGlobalId('organizations', org._key)}"
- }
- ) {
- result {
- ... on InviteUserToOrgResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'fr',
- protocol: 'https',
- get: (text) => text,
- },
- query,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn(),
- commit: jest.fn().mockRejectedValue('trx commit err'),
- abort: jest.fn(),
- }),
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- tokenize,
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@exists.ca',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: i18n.locale }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- notify: {
- sendOrgInviteCreateAccount: jest.fn(),
- sendOrgInviteEmail: jest.fn(),
- },
- validators: { cleanseInput },
- },
- })
-
- const error = {
- data: {
- inviteUserToOrg: {
- result: {
- code: 500,
- description: 'Unable to invite user. Please try again.',
- },
- },
- },
- }
-
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction commit error occurred while user: 123 attempted to invite user: ${userToInvite._key} to org: treasury-board-secretariat, error: trx commit err`,
- ])
- })
- })
- })
})
})
})
diff --git a/api/src/affiliation/mutations/__tests__/request-org-affiliation.test.js b/api/src/affiliation/mutations/__tests__/request-org-affiliation.test.js
index c525449ca4..fc9ce588cb 100644
--- a/api/src/affiliation/mutations/__tests__/request-org-affiliation.test.js
+++ b/api/src/affiliation/mutations/__tests__/request-org-affiliation.test.js
@@ -10,7 +10,7 @@ import { userRequired, verifiedRequired } from '../../../auth'
import { createMutationSchema } from '../../../mutation'
import { createQuerySchema } from '../../../query'
import { cleanseInput } from '../../../validators'
-import { loadOrgByKey } from '../../../organization/loaders'
+import { loadOrgByKey, loadOrganizationNamesById } from '../../../organization/loaders'
import { loadUserByKey } from '../../../user/loaders'
import dbschema from '../../../../database.json'
import { collectionNames } from '../../../collection-names'
@@ -172,6 +172,7 @@ describe('invite user to org', () => {
loaders: {
loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
+ loadOrganizationNamesById: loadOrganizationNamesById({ query }),
},
notify: { sendInviteRequestEmail: sendInviteRequestEmail },
validators: { cleanseInput },
@@ -332,6 +333,9 @@ describe('invite user to org', () => {
loadUserByKey: {
load: jest.fn(),
},
+ loadOrganizationNamesById: {
+ load: jest.fn(),
+ },
},
notify: { sendInviteRequestEmail: jest.fn() },
validators: { cleanseInput },
@@ -406,6 +410,9 @@ describe('invite user to org', () => {
loadUserByKey: {
load: jest.fn(),
},
+ loadOrganizationNamesById: {
+ load: jest.fn(),
+ },
},
notify: { sendInviteRequestEmail: jest.fn() },
validators: { cleanseInput },
@@ -481,6 +488,9 @@ describe('invite user to org', () => {
loadUserByKey: {
load: jest.fn(),
},
+ loadOrganizationNamesById: {
+ load: jest.fn(),
+ },
},
notify: { sendInviteRequestEmail: jest.fn() },
validators: { cleanseInput },
@@ -550,6 +560,7 @@ describe('invite user to org', () => {
loaders: {
loadOrgByKey: loadOrgByKey({ query, language: i18n.locale }),
loadUserByKey: loadUserByKey({ query }),
+ loadOrganizationNamesById: loadOrganizationNamesById({ query }),
},
notify: { sendInviteRequestEmail: jest.fn() },
validators: { cleanseInput },
@@ -604,6 +615,7 @@ describe('invite user to org', () => {
loaders: {
loadOrgByKey: loadOrgByKey({ query, language: i18n.locale }),
loadUserByKey: loadUserByKey({ query }),
+ loadOrganizationNamesById: loadOrganizationNamesById({ query }),
},
notify: { sendInviteRequestEmail: jest.fn() },
validators: { cleanseInput },
diff --git a/api/src/affiliation/mutations/__tests__/update-user-role.test.js b/api/src/affiliation/mutations/__tests__/update-user-role.test.js
index 826ab8e17a..7d455c4e91 100644
--- a/api/src/affiliation/mutations/__tests__/update-user-role.test.js
+++ b/api/src/affiliation/mutations/__tests__/update-user-role.test.js
@@ -25,6 +25,12 @@ describe('update a users role', () => {
const mockedWarn = (output) => consoleOutput.push(output)
const mockedError = (output) => consoleOutput.push(output)
+ const sendRoleChangeEmail = jest.fn()
+ const orgNames = {
+ en: 'Treasury Board of Canada Secretariat',
+ fr: 'Secrétariat du Conseil Trésor du Canada',
+ }
+
beforeAll(async () => {
console.info = mockedInfo
console.warn = mockedWarn
@@ -178,10 +184,12 @@ describe('update a users role', () => {
verifiedRequired: verifiedRequired({ i18n }),
tfaRequired: tfaRequired({ i18n }),
},
+ notify: { sendRoleChangeEmail },
loaders: {
loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: { load: jest.fn().mockResolvedValue(orgNames) },
},
validators: {
cleanseInput,
@@ -256,10 +264,12 @@ describe('update a users role', () => {
verifiedRequired: verifiedRequired({ i18n }),
tfaRequired: tfaRequired({ i18n }),
},
+ notify: { sendRoleChangeEmail },
loaders: {
loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: { load: jest.fn().mockResolvedValue(orgNames) },
},
validators: {
cleanseInput,
@@ -343,10 +353,12 @@ describe('update a users role', () => {
verifiedRequired: verifiedRequired({ i18n }),
tfaRequired: tfaRequired({ i18n }),
},
+ notify: { sendRoleChangeEmail },
loaders: {
loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: { load: jest.fn().mockResolvedValue(orgNames) },
},
validators: {
cleanseInput,
@@ -421,10 +433,12 @@ describe('update a users role', () => {
verifiedRequired: verifiedRequired({ i18n }),
tfaRequired: tfaRequired({ i18n }),
},
+ notify: { sendRoleChangeEmail },
loaders: {
loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: { load: jest.fn().mockResolvedValue(orgNames) },
},
validators: {
cleanseInput,
@@ -457,1423 +471,174 @@ describe('update a users role', () => {
beforeEach(async () => {
await collections.affiliations.save({
_from: org._id,
- _to: user._id,
- permission: 'admin',
- })
- })
- describe('update user from user', () => {
- beforeEach(async () => {
- await collections.affiliations.save({
- _from: org._id,
- _to: secondaryUser._id,
- permission: 'user',
- })
- })
- describe('to admin', () => {
- it('returns status message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "test@email.gc.ca"
- orgId: "${toGlobalId('organizations', org._key)}"
- role: ADMIN
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
- user {
- displayName
- }
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- validators: {
- cleanseInput,
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateUserRole: {
- result: {
- status: 'User role was updated successfully.',
- user: {
- displayName: 'Test Account',
- },
- },
- },
- },
- }
-
- expect(consoleOutput).toEqual([
- `User: ${user._key} successful updated user: ${secondaryUser._key} role to admin in org: treasury-board-secretariat.`,
- ])
- expect(response).toEqual(expectedResponse)
- })
- })
- })
- })
- })
- describe('users language is set to french', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'fr',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- let org, secondaryUser
- beforeEach(async () => {
- org = await collections.organizations.save({
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- })
- secondaryUser = await collections.users.save({
- displayName: 'Test Account',
- userName: 'test@email.gc.ca',
- })
- })
- describe('requesting user is a super admin', () => {
- beforeEach(async () => {
- await collections.affiliations.save({
- _from: org._id,
- _to: user._id,
- permission: 'super_admin',
- })
- })
- describe('update user from admin', () => {
- beforeEach(async () => {
- await collections.affiliations.save({
- _from: org._id,
- _to: secondaryUser._id,
- permission: 'admin',
- })
- })
- describe('to super admin', () => {
- it('returns status message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "test@email.gc.ca"
- orgId: "${toGlobalId('organizations', org._key)}"
- role: SUPER_ADMIN
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
- user {
- displayName
- }
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- validators: {
- cleanseInput,
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateUserRole: {
- result: {
- status: "Le rôle de l'utilisateur a été mis à jour avec succès.",
- user: {
- displayName: 'Test Account',
- },
- },
- },
- },
- }
-
- expect(consoleOutput).toEqual([
- `User: ${user._key} successful updated user: ${secondaryUser._key} role to super_admin in org: treasury-board-secretariat.`,
- ])
- expect(response).toEqual(expectedResponse)
- })
- })
- describe('to user', () => {
- it('returns status message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "test@email.gc.ca"
- orgId: "${toGlobalId('organizations', org._key)}"
- role: USER
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
- user {
- displayName
- }
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- validators: {
- cleanseInput,
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateUserRole: {
- result: {
- status: "Le rôle de l'utilisateur a été mis à jour avec succès.",
- user: {
- displayName: 'Test Account',
- },
- },
- },
- },
- }
-
- expect(consoleOutput).toEqual([
- `User: ${user._key} successful updated user: ${secondaryUser._key} role to user in org: treasury-board-secretariat.`,
- ])
- expect(response).toEqual(expectedResponse)
- })
- })
- })
- describe('update user from user', () => {
- beforeEach(async () => {
- await collections.affiliations.save({
- _from: org._id,
- _to: secondaryUser._id,
- permission: 'user',
- })
- })
- describe('to super admin', () => {
- it('returns status message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "test@email.gc.ca"
- orgId: "${toGlobalId('organizations', org._key)}"
- role: SUPER_ADMIN
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
- user {
- displayName
- }
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- validators: {
- cleanseInput,
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateUserRole: {
- result: {
- status: "Le rôle de l'utilisateur a été mis à jour avec succès.",
- user: {
- displayName: 'Test Account',
- },
- },
- },
- },
- }
-
- expect(consoleOutput).toEqual([
- `User: ${user._key} successful updated user: ${secondaryUser._key} role to super_admin in org: treasury-board-secretariat.`,
- ])
- expect(response).toEqual(expectedResponse)
- })
- })
- describe('to admin', () => {
- it('returns status message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "test@email.gc.ca"
- orgId: "${toGlobalId('organizations', org._key)}"
- role: ADMIN
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
- user {
- displayName
- }
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- validators: {
- cleanseInput,
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateUserRole: {
- result: {
- status: "Le rôle de l'utilisateur a été mis à jour avec succès.",
- user: {
- displayName: 'Test Account',
- },
- },
- },
- },
- }
-
- expect(consoleOutput).toEqual([
- `User: ${user._key} successful updated user: ${secondaryUser._key} role to admin in org: treasury-board-secretariat.`,
- ])
- expect(response).toEqual(expectedResponse)
- })
- })
- })
- })
- describe('requesting user is admin', () => {
- beforeEach(async () => {
- await collections.affiliations.save({
- _from: org._id,
- _to: user._id,
- permission: 'admin',
- })
- })
- describe('update user from user', () => {
- beforeEach(async () => {
- await collections.affiliations.save({
- _from: org._id,
- _to: secondaryUser._id,
- permission: 'user',
- })
- })
- describe('to admin', () => {
- it('returns status message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "test@email.gc.ca"
- orgId: "${toGlobalId('organizations', org._key)}"
- role: ADMIN
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
- user {
- displayName
- }
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({ i18n }),
- tfaRequired: tfaRequired({ i18n }),
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- loadUserByUserName: loadUserByUserName({ query }),
- },
- validators: {
- cleanseInput,
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateUserRole: {
- result: {
- status: "Le rôle de l'utilisateur a été mis à jour avec succès.",
- user: {
- displayName: 'Test Account',
- },
- },
- },
- },
- }
-
- expect(consoleOutput).toEqual([
- `User: ${user._key} successful updated user: ${secondaryUser._key} role to admin in org: treasury-board-secretariat.`,
- ])
- expect(response).toEqual(expectedResponse)
- })
- })
- })
- })
- })
- })
- describe('given an unsuccessful update', () => {
- describe('users language is set to english', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('given an unsuccessful role update', () => {
- describe('user attempts to update their own role', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "test.account@istio.actually.exists"
- orgId: "${toGlobalId('organizations', 123)}"
- role: ADMIN
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn(),
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@istio.actually.exists',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn(),
- },
- loadUserByUserName: {
- load: jest.fn(),
- },
- },
- validators: {
- cleanseInput,
- },
- },
- })
-
- const error = {
- data: {
- updateUserRole: {
- result: {
- code: 400,
- description: 'Unable to update your own role.',
- },
- },
- },
- }
-
- expect(consoleOutput).toEqual([`User: 123 attempted to update their own role in org: 123.`])
- expect(response).toEqual(error)
- })
- })
- describe('user attempts to update a user that does not exist', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "random@email.ca"
- orgId: "${toGlobalId('organizations', 123)}"
- role: ADMIN
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn(),
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@istio.actually.exists',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn(),
- },
- loadUserByUserName: {
- load: jest.fn().mockReturnValue(undefined),
- },
- },
- validators: {
- cleanseInput,
- },
- },
- })
-
- const error = {
- data: {
- updateUserRole: {
- result: {
- code: 400,
- description: 'Unable to update role: user unknown.',
- },
- },
- },
- }
-
- expect(consoleOutput).toEqual([
- `User: 123 attempted to update a user: random@email.ca role in org: 123, however there is no user associated with that user name.`,
- ])
- expect(response).toEqual(error)
- })
- })
- describe('user attempts to update a users role in an org that does not exist', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "test@email.gc.ca"
- orgId: "${toGlobalId('organizations', 1)}"
- role: ADMIN
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn(),
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@istio.actually.exists',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- loadUserByUserName: {
- load: jest.fn().mockReturnValue({
- _key: 456,
- }),
- },
- },
- validators: {
- cleanseInput,
- },
- },
- })
-
- const error = {
- data: {
- updateUserRole: {
- result: {
- code: 400,
- description: 'Unable to update role: organization unknown.',
- },
- },
- },
- }
-
- expect(consoleOutput).toEqual([
- `User: 123 attempted to update a user: 456 role in org: 1, however there is no org associated with that id.`,
- ])
- expect(response).toEqual(error)
- })
- })
- describe('requesting user permission is user', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "test@email.gc.ca"
- orgId: "${toGlobalId('organizations', 123)}"
- role: ADMIN
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('user'),
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@istio.actually.exists',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadUserByUserName: {
- load: jest.fn().mockReturnValue({
- _key: 456,
- }),
- },
- },
- validators: {
- cleanseInput,
- },
- },
- })
-
- const error = {
- data: {
- updateUserRole: {
- result: {
- code: 400,
- description:
- 'Permission Denied: Please contact organization admin for help with user role changes.',
- },
- },
- },
- }
-
- expect(consoleOutput).toEqual([
- `User: 123 attempted to update a user: 456 role in org: treasury-board-secretariat, however they do not have permission to do so.`,
- ])
- expect(response).toEqual(error)
- })
- })
- describe('user attempts to update a users role in an org that the requesting user does not belong to', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "test@email.gc.ca"
- orgId: "${toGlobalId('organizations', 123)}"
- role: ADMIN
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockReturnValue({ count: 0 }),
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue(undefined),
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@istio.actually.exists',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadUserByUserName: {
- load: jest.fn().mockReturnValue({
- _key: 456,
- }),
- },
- },
- validators: {
- cleanseInput,
- },
- },
- })
-
- const error = {
- data: {
- updateUserRole: {
- result: {
- code: 400,
- description:
- 'Permission Denied: Please contact organization admin for help with user role changes.',
- },
- },
- },
- }
-
- expect(consoleOutput).toEqual([
- `User: 123 attempted to update a user: 456 role in org: treasury-board-secretariat, however they do not have permission to do so.`,
- ])
- expect(response).toEqual(error)
- })
- })
- describe('user attempts to update a user that does not belong to the requested org', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "test@email.gc.ca"
- orgId: "${toGlobalId('organizations', 123)}"
- role: ADMIN
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockReturnValue({ count: 0 }),
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@istio.actually.exists',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadUserByUserName: {
- load: jest.fn().mockReturnValue({
- _key: 456,
- }),
- },
- },
- validators: {
- cleanseInput,
- },
- },
- })
-
- const error = {
- data: {
- updateUserRole: {
- result: {
- code: 400,
- description: 'Unable to update role: user does not belong to organization.',
- },
- },
- },
- }
-
- expect(consoleOutput).toEqual([
- `User: 123 attempted to update a user: 456 role in org: treasury-board-secretariat, however that user does not have an affiliation with that organization.`,
- ])
- expect(response).toEqual(error)
- })
- })
- describe('requesting users role is admin', () => {
- describe('requested users role is super admin', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "test@email.gc.ca"
- orgId: "${toGlobalId('organizations', 123)}"
- role: USER
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockReturnValue({
- count: 1,
- next: jest.fn().mockReturnValue({ permission: 'super_admin' }),
- }),
- collections: collectionNames,
- transaction: jest.fn(),
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@istio.actually.exists',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadUserByUserName: {
- load: jest.fn().mockReturnValue({
- _key: 456,
- }),
- },
- },
- validators: {
- cleanseInput,
- },
- },
- })
-
- const error = {
- data: {
- updateUserRole: {
- result: {
- code: 400,
- description:
- 'Permission Denied: Please contact organization admin for help with user role changes.',
- },
- },
- },
- }
-
- expect(consoleOutput).toEqual([
- `User: 123 attempted to update a user: 456 role in org: treasury-board-secretariat, however they do not have permission to update a super_admin.`,
- ])
- expect(response).toEqual(error)
- })
- })
- })
- })
- describe('database error occurs', () => {
- describe('when getting current affiliation', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "test@email.gc.ca"
- orgId: "${toGlobalId('organizations', 123)}"
- role: USER
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockRejectedValue(new Error('database error')),
- collections: collectionNames,
- transaction: jest.fn(),
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@istio.actually.exists',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadUserByUserName: {
- load: jest.fn().mockReturnValue({
- _key: 456,
- }),
- },
- },
- validators: {
- cleanseInput,
- },
- },
- })
-
- const error = [new GraphQLError(`Unable to update user's role. Please try again.`)]
-
- expect(consoleOutput).toEqual([
- `Database error occurred when user: 123 attempted to update a user's: 456 role, error: Error: database error`,
- ])
- expect(response.errors).toEqual(error)
- })
- })
- })
- describe('cursor error occur', () => {
- describe('when gathering affiliation info', () => {
- it('throws an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "test@email.gc.ca"
- orgId: "${toGlobalId('organizations', 123)}"
- role: USER
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
- }
- ... on AffiliationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockReturnValue({
- count: 1,
- next: jest.fn().mockRejectedValue(new Error('cursor error')),
- }),
- collections: collectionNames,
- transaction: jest.fn(),
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@istio.actually.exists',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadUserByUserName: {
- load: jest.fn().mockReturnValue({
- _key: 456,
- }),
- },
- },
- validators: {
- cleanseInput,
- },
- },
- })
-
- const error = [new GraphQLError(`Unable to update user's role. Please try again.`)]
-
- expect(consoleOutput).toEqual([
- `Cursor error occurred when user: 123 attempted to update a user's: 456 role, error: Error: cursor error`,
- ])
- expect(response.errors).toEqual(error)
- })
- })
- })
- describe('transaction error occurs', () => {
- describe('when running transaction', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "test@email.gc.ca"
- orgId: "${toGlobalId('organizations', 123)}"
- role: ADMIN
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
+ _to: user._id,
+ permission: 'admin',
+ })
+ })
+ describe('update user from user', () => {
+ beforeEach(async () => {
+ await collections.affiliations.save({
+ _from: org._id,
+ _to: secondaryUser._id,
+ permission: 'user',
+ })
+ })
+ describe('to admin', () => {
+ it('returns status message', async () => {
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ updateUserRole (
+ input: {
+ userName: "test@email.gc.ca"
+ orgId: "${toGlobalId('organizations', org._key)}"
+ role: ADMIN
}
- ... on AffiliationError {
- code
- description
+ ) {
+ result {
+ ... on UpdateUserRoleResult {
+ status
+ user {
+ displayName
+ }
+ }
+ ... on AffiliationError {
+ code
+ description
+ }
}
}
}
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockReturnValue({
- count: 1,
- next: jest.fn().mockReturnValue({ permission: 'user' }),
- }),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue('trx step error'),
- abort: jest.fn(),
- }),
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@istio.actually.exists',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
+ `,
+ rootValue: null,
+ contextValue: {
+ i18n,
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: user._key,
+ request: { ip: '127.0.0.1' },
+ auth: {
+ checkPermission: checkPermission({
+ userKey: user._key,
+ query,
}),
- },
- loadUserByUserName: {
- load: jest.fn().mockReturnValue({
- _key: 456,
+ userRequired: userRequired({
+ userKey: user._key,
+ loadUserByKey: loadUserByKey({ query }),
}),
+ verifiedRequired: verifiedRequired({ i18n }),
+ tfaRequired: tfaRequired({ i18n }),
+ },
+ notify: { sendRoleChangeEmail },
+ loaders: {
+ loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ loadUserByKey: loadUserByKey({ query }),
+ loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: { load: jest.fn().mockResolvedValue(orgNames) },
+ },
+ validators: {
+ cleanseInput,
},
},
- validators: {
- cleanseInput,
- },
- },
- })
+ })
- const error = [new GraphQLError(`Unable to update user's role. Please try again.`)]
+ const expectedResponse = {
+ data: {
+ updateUserRole: {
+ result: {
+ status: 'User role was updated successfully.',
+ user: {
+ displayName: 'Test Account',
+ },
+ },
+ },
+ },
+ }
- expect(consoleOutput).toEqual([
- `Transaction step error occurred when user: 123 attempted to update a user's: 456 role, error: trx step error`,
- ])
- expect(response.errors).toEqual(error)
- })
- })
- describe('when committing transaction', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateUserRole (
- input: {
- userName: "test@email.gc.ca"
- orgId: "${toGlobalId('organizations', 123)}"
- role: ADMIN
- }
- ) {
- result {
- ... on UpdateUserRoleResult {
- status
+ expect(consoleOutput).toEqual([
+ `User: ${user._key} successful updated user: ${secondaryUser._key} role to admin in org: treasury-board-secretariat.`,
+ ])
+ expect(response).toEqual(expectedResponse)
+ })
+ it('sends a role update notification email with correct parameters', async () => {
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateUserRole (
+ input: {
+ userName: "test@email.gc.ca"
+ orgId: "${toGlobalId('organizations', org._key)}"
+ role: USER
}
- ... on AffiliationError {
- code
- description
+ ) {
+ result {
+ ... on UpdateUserRoleResult {
+ status
+ user {
+ displayName
+ }
+ }
+ ... on AffiliationError {
+ code
+ description
+ }
}
}
}
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockReturnValue({
- count: 1,
- next: jest.fn().mockReturnValue({ permission: 'user' }),
- }),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn(),
- commit: jest.fn().mockRejectedValue('trx commit error'),
- abort: jest.fn(),
- }),
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({
- userName: 'test.account@istio.actually.exists',
- }),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
+ `,
+ rootValue: null,
+ contextValue: {
+ i18n,
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: user._key,
+ request: { ip: '127.0.0.1' },
+ auth: {
+ checkPermission: checkPermission({
+ userKey: user._key,
+ query,
}),
- },
- loadUserByUserName: {
- load: jest.fn().mockReturnValue({
- _key: 456,
+ userRequired: userRequired({
+ userKey: user._key,
+ loadUserByKey: loadUserByKey({ query }),
}),
+ verifiedRequired: verifiedRequired({ i18n }),
+ tfaRequired: tfaRequired({ i18n }),
+ },
+ notify: { sendRoleChangeEmail },
+ loaders: {
+ loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
+ loadUserByKey: loadUserByKey({ query }),
+ loadUserByUserName: loadUserByUserName({ query }),
+ loadOrganizationNamesById: { load: jest.fn().mockResolvedValue(orgNames) },
+ },
+ validators: {
+ cleanseInput,
},
},
- validators: {
- cleanseInput,
- },
- },
- })
-
- const error = [new GraphQLError(`Unable to update user's role. Please try again.`)]
+ })
- expect(consoleOutput).toEqual([
- `Transaction commit error occurred when user: 123 attempted to update a user's: 456 role, error: trx commit error`,
- ])
- expect(response.errors).toEqual(error)
+ expect(sendRoleChangeEmail).toHaveBeenCalledWith({
+ user: expect.any(Object),
+ newRole: 'user',
+ oldRole: expect.any(String),
+ orgNames,
+ })
+ })
})
})
})
})
- describe('users language is set to french', () => {
+ })
+ describe('given an unsuccessful update', () => {
+ describe('users language is set to english', () => {
beforeAll(() => {
i18n = setupI18n({
- locale: 'fr',
+ locale: 'en',
localeData: {
en: { plurals: {} },
fr: { plurals: {} },
@@ -1935,6 +700,7 @@ describe('update a users role', () => {
load: jest.fn(),
},
},
+ notify: { sendRoleChangeEmail },
validators: {
cleanseInput,
},
@@ -1946,7 +712,7 @@ describe('update a users role', () => {
updateUserRole: {
result: {
code: 400,
- description: 'Impossible de mettre à jour votre propre rôle.',
+ description: 'Unable to update your own role.',
},
},
},
@@ -1997,6 +763,7 @@ describe('update a users role', () => {
verifiedRequired: jest.fn(),
tfaRequired: jest.fn(),
},
+ notify: { sendRoleChangeEmail },
loaders: {
loadOrgByKey: {
load: jest.fn(),
@@ -2016,7 +783,7 @@ describe('update a users role', () => {
updateUserRole: {
result: {
code: 400,
- description: 'Impossible de mettre à jour le rôle : utilisateur inconnu.',
+ description: 'Unable to update role: user unknown.',
},
},
},
@@ -2069,6 +836,7 @@ describe('update a users role', () => {
verifiedRequired: jest.fn(),
tfaRequired: jest.fn(),
},
+ notify: { sendRoleChangeEmail },
loaders: {
loadOrgByKey: {
load: jest.fn().mockReturnValue(undefined),
@@ -2090,7 +858,7 @@ describe('update a users role', () => {
updateUserRole: {
result: {
code: 400,
- description: 'Impossible de mettre à jour le rôle : organisation inconnue.',
+ description: 'Unable to update role: organization unknown.',
},
},
},
@@ -2155,6 +923,7 @@ describe('update a users role', () => {
}),
},
},
+ notify: { sendRoleChangeEmail },
validators: {
cleanseInput,
},
@@ -2165,9 +934,9 @@ describe('update a users role', () => {
data: {
updateUserRole: {
result: {
- code: 400,
+ code: 403,
description:
- "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide sur les changements de rôle des utilisateurs.",
+ 'Permission Denied: Please contact organization admin for help with user role changes.',
},
},
},
@@ -2232,6 +1001,7 @@ describe('update a users role', () => {
}),
},
},
+ notify: { sendRoleChangeEmail },
validators: {
cleanseInput,
},
@@ -2242,9 +1012,9 @@ describe('update a users role', () => {
data: {
updateUserRole: {
result: {
- code: 400,
+ code: 403,
description:
- "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide sur les changements de rôle des utilisateurs.",
+ 'Permission Denied: Please contact organization admin for help with user role changes.',
},
},
},
@@ -2309,6 +1079,7 @@ describe('update a users role', () => {
}),
},
},
+ notify: { sendRoleChangeEmail },
validators: {
cleanseInput,
},
@@ -2320,8 +1091,7 @@ describe('update a users role', () => {
updateUserRole: {
result: {
code: 400,
- description:
- "Impossible de mettre à jour le rôle : l'utilisateur n'appartient pas à l'organisation.",
+ description: 'Unable to update role: user does not belong to organization.',
},
},
},
@@ -2333,7 +1103,6 @@ describe('update a users role', () => {
expect(response).toEqual(error)
})
})
-
describe('requesting users role is admin', () => {
describe('requested users role is super admin', () => {
it('returns an error message', async () => {
@@ -2391,6 +1160,7 @@ describe('update a users role', () => {
}),
},
},
+ notify: { sendRoleChangeEmail },
validators: {
cleanseInput,
},
@@ -2401,16 +1171,15 @@ describe('update a users role', () => {
data: {
updateUserRole: {
result: {
- code: 400,
- description:
- "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide sur les changements de rôle des utilisateurs.",
+ code: 403,
+ description: 'Permission Denied: Please contact super admin for help with user role changes.',
},
},
},
}
expect(consoleOutput).toEqual([
- `User: 123 attempted to update a user: 456 role in org: treasury-board-secretariat, however they do not have permission to update a super_admin.`,
+ `User: 123 attempted to update a user: 456 role in org: treasury-board-secretariat, however they do not have permission to update a super_admin or assign the user role.`,
])
expect(response).toEqual(error)
})
@@ -2471,15 +1240,14 @@ describe('update a users role', () => {
}),
},
},
+ notify: { sendRoleChangeEmail },
validators: {
cleanseInput,
},
},
})
- const error = [
- new GraphQLError(`Impossible de mettre à jour le rôle de l'utilisateur. Veuillez réessayer.`),
- ]
+ const error = [new GraphQLError(`Unable to update user's role. Please try again.`)]
expect(consoleOutput).toEqual([
`Database error occurred when user: 123 attempted to update a user's: 456 role, error: Error: database error`,
@@ -2545,15 +1313,14 @@ describe('update a users role', () => {
}),
},
},
+ notify: { sendRoleChangeEmail },
validators: {
cleanseInput,
},
},
})
- const error = [
- new GraphQLError(`Impossible de mettre à jour le rôle de l'utilisateur. Veuillez réessayer.`),
- ]
+ const error = [new GraphQLError(`Unable to update user's role. Please try again.`)]
expect(consoleOutput).toEqual([
`Cursor error occurred when user: 123 attempted to update a user's: 456 role, error: Error: cursor error`,
@@ -2622,15 +1389,14 @@ describe('update a users role', () => {
}),
},
},
+ notify: { sendRoleChangeEmail },
validators: {
cleanseInput,
},
},
})
- const error = [
- new GraphQLError(`Impossible de mettre à jour le rôle de l'utilisateur. Veuillez réessayer.`),
- ]
+ const error = [new GraphQLError(`Unable to update user's role. Please try again.`)]
expect(consoleOutput).toEqual([
`Transaction step error occurred when user: 123 attempted to update a user's: 456 role, error: trx step error`,
@@ -2698,15 +1464,14 @@ describe('update a users role', () => {
}),
},
},
+ notify: { sendRoleChangeEmail },
validators: {
cleanseInput,
},
},
})
- const error = [
- new GraphQLError(`Impossible de mettre à jour le rôle de l'utilisateur. Veuillez réessayer.`),
- ]
+ const error = [new GraphQLError(`Unable to update user's role. Please try again.`)]
expect(consoleOutput).toEqual([
`Transaction commit error occurred when user: 123 attempted to update a user's: 456 role, error: trx commit error`,
diff --git a/api/src/affiliation/mutations/invite-user-to-org.js b/api/src/affiliation/mutations/invite-user-to-org.js
index 13641ea12e..8398c497aa 100644
--- a/api/src/affiliation/mutations/invite-user-to-org.js
+++ b/api/src/affiliation/mutations/invite-user-to-org.js
@@ -6,6 +6,7 @@ import { t } from '@lingui/macro'
import { inviteUserToOrgUnion } from '../unions'
import { logActivity } from '../../audit-logs/mutations/log-activity'
import { InvitationRoleEnums } from '../../enums'
+import ac from '../../access-control'
export const inviteUserToOrg = new mutationWithClientMutationId({
name: 'InviteUserToOrg',
@@ -45,7 +46,7 @@ able to sign-up and be assigned to that organization in one mutation.`,
userKey,
request: { ip },
auth: { checkPermission, tokenize, userRequired, verifiedRequired, tfaRequired },
- loaders: { loadOrgByKey, loadUserByUserName },
+ loaders: { loadOrgByKey, loadUserByUserName, loadOrganizationNamesById },
notify: { sendOrgInviteCreateAccount, sendOrgInviteEmail },
validators: { cleanseInput },
},
@@ -88,11 +89,7 @@ able to sign-up and be assigned to that organization in one mutation.`,
const permission = await checkPermission({ orgId: org._id })
// Only admins, owners, and super admins may invite users to an org
- // Only super admins may create owners and other super admins
- if (
- (['user', 'admin'].includes(requestedRole) && !['admin', 'owner', 'super_admin'].includes(permission)) ||
- (['super_admin', 'owner'].includes(requestedRole) && permission !== 'super_admin')
- ) {
+ if (!ac.can(permission).createOwn('affiliation').granted) {
console.warn(
`User: ${userKey} attempted to invite user: ${userName} to org: ${org._key} with role: ${requestedRole} but does not have permission to do so.`,
)
@@ -103,29 +100,26 @@ able to sign-up and be assigned to that organization in one mutation.`,
}
}
- // Get org names to use in email
- let orgNamesCursor
- try {
- orgNamesCursor = await query`
- LET org = DOCUMENT(organizations, ${org._id})
- RETURN {
- "orgNameEN": org.orgDetails.en.name,
- "orgNameFR": org.orgDetails.fr.name,
- }
- `
- } catch (err) {
- console.error(
- `Database error occurred when user: ${userKey} attempted to invite user: ${userName} to org: ${org._key}. Error while creating cursor for retrieving organization names. error: ${err}`,
+ // Only super admins may create owners and other super admins
+ const privilegedRoles = ac.getRoles().filter((r) => ac.can(r).deleteOwn('organization').granted)
+ if (privilegedRoles.includes(requestedRole) && !ac.can(permission).createAny('affiliation').granted) {
+ console.warn(
+ `User: ${userKey} attempted to invite user: ${userName} to org: ${org._key} with role: ${requestedRole} but does not have permission to do so.`,
)
- throw new Error(i18n._(t`Unable to invite user to organization. Please try again.`))
+ return {
+ _type: 'error',
+ code: 403,
+ description: i18n._(t`Permission Denied: Please contact super admin for help with user invitations.`),
+ }
}
+ // Get org names to use in email
let orgNames
try {
- orgNames = await orgNamesCursor.next()
+ orgNames = await loadOrganizationNamesById.load(org._id)
} catch (err) {
console.error(
- `Cursor error occurred when user: ${userKey} attempted to invite user: ${userName} to org: ${org._key}. Error while retrieving organization names. error: ${err}`,
+ `Error occurred when user: ${userKey} attempted to invite user: ${userName} to org: ${org._key}. Error while retrieving organization names. error: ${err}`,
)
throw new Error(i18n._(t`Unable to invite user to organization. Please try again.`))
}
diff --git a/api/src/affiliation/mutations/remove-user-from-org.js b/api/src/affiliation/mutations/remove-user-from-org.js
index bce720cfe0..88a780090b 100644
--- a/api/src/affiliation/mutations/remove-user-from-org.js
+++ b/api/src/affiliation/mutations/remove-user-from-org.js
@@ -4,6 +4,7 @@ import { t } from '@lingui/macro'
import { removeUserFromOrgUnion } from '../unions'
import { logActivity } from '../../audit-logs/mutations/log-activity'
+import ac from '../../access-control'
export const removeUserFromOrg = new mutationWithClientMutationId({
name: 'RemoveUserFromOrg',
@@ -117,7 +118,7 @@ export const removeUserFromOrg = new mutationWithClientMutationId({
}
// Only admins, owners, and super admins can remove users
- if (['admin', 'owner', 'super_admin'].includes(permission) === false) {
+ if (!ac.can(permission).deleteOwn('affiliation').granted) {
console.warn(
`User: ${userKey} attempted to remove user: ${requestedUser._key} from org: ${requestedOrg._key}, but they do not have the right permission.`,
)
diff --git a/api/src/affiliation/mutations/request-org-affiliation.js b/api/src/affiliation/mutations/request-org-affiliation.js
index a46806cbdc..c38b6b8161 100644
--- a/api/src/affiliation/mutations/request-org-affiliation.js
+++ b/api/src/affiliation/mutations/request-org-affiliation.js
@@ -35,7 +35,7 @@ export const requestOrgAffiliation = new mutationWithClientMutationId({
userKey,
request: { ip },
auth: { userRequired, verifiedRequired },
- loaders: { loadOrgByKey, loadUserByKey },
+ loaders: { loadOrgByKey, loadUserByKey, loadOrganizationNamesById },
notify: { sendInviteRequestEmail },
validators: { cleanseInput },
},
@@ -156,28 +156,12 @@ export const requestOrgAffiliation = new mutationWithClientMutationId({
if (orgAdmins.length > 0) {
// Get org names to use in email
- let orgNamesCursor
- try {
- orgNamesCursor = await query`
- LET org = DOCUMENT(organizations, ${org._id})
- RETURN {
- "orgNameEN": org.orgDetails.en.name,
- "orgNameFR": org.orgDetails.fr.name,
- }
- `
- } catch (err) {
- console.error(
- `Database error occurred when user: ${userKey} attempted to request invite to org: ${org._key}. Error while creating cursor for retrieving organization names. error: ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to request invite. Please try again.`))
- }
let orgNames
try {
- orgNames = await orgNamesCursor.next()
+ orgNames = await loadOrganizationNamesById.load(org._id)
} catch (err) {
console.error(
- `Cursor error occurred when user: ${userKey} attempted to request invite to org: ${org._key}. Error while retrieving organization names. error: ${err}`,
+ `Error occurred when user: ${userKey} attempted to request invite to org: ${org._key}. Error while retrieving organization names. error: ${err}`,
)
await trx.abort()
throw new Error(i18n._(t`Unable to request invite. Please try again.`))
diff --git a/api/src/affiliation/mutations/update-user-role.js b/api/src/affiliation/mutations/update-user-role.js
index d54c70bea7..1f92a58a5b 100644
--- a/api/src/affiliation/mutations/update-user-role.js
+++ b/api/src/affiliation/mutations/update-user-role.js
@@ -6,6 +6,7 @@ import { t } from '@lingui/macro'
import { RoleEnums } from '../../enums'
import { updateUserRoleUnion } from '../unions'
import { logActivity } from '../../audit-logs/mutations/log-activity'
+import ac from '../../access-control'
export const updateUserRole = new mutationWithClientMutationId({
name: 'UpdateUserRole',
@@ -43,8 +44,9 @@ given organization.`,
userKey,
request: { ip },
auth: { checkPermission, userRequired, verifiedRequired, tfaRequired },
- loaders: { loadOrgByKey, loadUserByUserName },
+ loaders: { loadOrgByKey, loadUserByUserName, loadOrganizationNamesById },
validators: { cleanseInput },
+ notify: { sendRoleChangeEmail },
},
) => {
// Cleanse Input
@@ -100,13 +102,13 @@ given organization.`,
const permission = await checkPermission({ orgId: org._id })
// Only admins, owners, and super admins can update a user's role
- if (['admin', 'owner', 'super_admin'].includes(permission) === false) {
+ if (!ac.can(permission).updateOwn('affiliation').granted) {
console.warn(
`User: ${userKey} attempted to update a user: ${requestedUser._key} role in org: ${org.slug}, however they do not have permission to do so.`,
)
return {
_type: 'error',
- code: 400,
+ code: 403,
description: i18n._(t`Permission Denied: Please contact organization admin for help with user role changes.`),
}
}
@@ -150,27 +152,19 @@ given organization.`,
throw new Error(i18n._(t`Unable to update user's role. Please try again.`))
}
- // Only super admins can update other super admins or owners
- if (['owner', 'super_admin'].includes(affiliation.permission) && permission !== 'super_admin') {
- console.warn(
- `User: ${userKey} attempted to update a user: ${requestedUser._key} role in org: ${org.slug}, however they do not have permission to update a ${affiliation.permission}.`,
- )
- return {
- _type: 'error',
- code: 400,
- description: i18n._(t`Permission Denied: Please contact organization admin for help with user role changes.`),
- }
- }
-
- // Only super admins can make other users super admins or owners
- if (['owner', 'super_admin'].includes(role) && permission !== 'super_admin') {
+ // Only super admins can update or assign privileged roles (those with org-level authority)
+ const privilegedRoles = ac.getRoles().filter((r) => ac.can(r).deleteOwn('organization').granted)
+ if (
+ (privilegedRoles.includes(affiliation.permission) || privilegedRoles.includes(role)) &&
+ !ac.can(permission).updateAny('affiliation').granted
+ ) {
console.warn(
- `User: ${userKey} attempted to update a user: ${requestedUser._key} role in org: ${org.slug}, however they do not have permission to make a user a ${role}.`,
+ `User: ${userKey} attempted to update a user: ${requestedUser._key} role in org: ${org.slug}, however they do not have permission to update a ${affiliation.permission} or assign the ${role} role.`,
)
return {
_type: 'error',
- code: 400,
- description: i18n._(t`Permission Denied: Please contact organization admin for help with user role changes.`),
+ code: 403,
+ description: i18n._(t`Permission Denied: Please contact super admin for help with user role changes.`),
}
}
@@ -212,6 +206,19 @@ given organization.`,
throw new Error(i18n._(t`Unable to update user's role. Please try again.`))
}
+ // Get org names to use in email
+ let orgNames
+ try {
+ orgNames = await loadOrganizationNamesById.load(org._id)
+ } catch (err) {
+ console.error(
+ `Error occurred when user: ${userKey} attempted to update a user's: ${userName} role. Error while retrieving organization names. error: ${err}`,
+ )
+ throw new Error(i18n._(t`Unable to update user's role. Please try again.`))
+ }
+
+ await sendRoleChangeEmail({ user: requestedUser, newRole: role, oldRole: affiliation.permission, orgNames })
+
console.info(`User: ${userKey} successful updated user: ${requestedUser._key} role to ${role} in org: ${org.slug}.`)
await logActivity({
transaction,
diff --git a/api/src/audit-logs/data-source.js b/api/src/audit-logs/data-source.js
new file mode 100644
index 0000000000..054ad8f259
--- /dev/null
+++ b/api/src/audit-logs/data-source.js
@@ -0,0 +1,39 @@
+import { loadAuditLogByKey, loadAuditLogsByOrgId } from './loaders'
+
+export class AuditLogsDataSource {
+ constructor({ query, userKey, cleanseInput, i18n, transaction, collections }) {
+ this._query = query
+ this._transaction = transaction
+ this._collections = collections
+ this.byKey = loadAuditLogByKey({ query, userKey, i18n })
+ this.getConnectionsByOrgId = loadAuditLogsByOrgId({ query, userKey, cleanseInput, i18n })
+ }
+
+ async logActivity({ initiatedBy, action, target, reason = '' }) {
+ const auditLog = {
+ timestamp: new Date().toISOString(),
+ initiatedBy,
+ target,
+ action,
+ reason,
+ }
+
+ const trx = await this._transaction(this._collections)
+
+ try {
+ await trx.step(
+ () => this._query`
+ WITH auditLogs
+ INSERT ${auditLog} INTO auditLogs
+ RETURN MERGE({ id: NEW._key, _type: "auditLog" }, NEW)
+ `,
+ )
+ await trx.commit()
+ } catch (err) {
+ console.error(`Transaction error occurred while attempting to log user action: ${err}`)
+ await trx.abort()
+ }
+
+ return auditLog
+ }
+}
diff --git a/api/src/audit-logs/index.js b/api/src/audit-logs/index.js
index a07660be28..b6bdbe9eea 100644
--- a/api/src/audit-logs/index.js
+++ b/api/src/audit-logs/index.js
@@ -1,3 +1,4 @@
+export * from './data-source'
export * from './input'
export * from './loaders'
export * from './mutations'
diff --git a/api/src/audit-logs/queries/find-audit-logs.js b/api/src/audit-logs/queries/find-audit-logs.js
index 838c60a6c1..b10186c116 100644
--- a/api/src/audit-logs/queries/find-audit-logs.js
+++ b/api/src/audit-logs/queries/find-audit-logs.js
@@ -4,6 +4,7 @@ import { logConnection } from '../objects/log-connection'
import { logOrder } from '../input/log-order'
import { t } from '@lingui/macro'
import { logFilters } from '../input/log-filters'
+import ac from '../../access-control'
export const findAuditLogs = {
type: logConnection.connectionType,
@@ -34,7 +35,8 @@ export const findAuditLogs = {
userKey,
i18n,
auth: { checkPermission, userRequired, verifiedRequired },
- loaders: { loadAuditLogsByOrgId, loadOrgByKey },
+ loaders: { loadOrgByKey },
+ dataSources: { auditLogs },
validators: { cleanseInput },
},
) => {
@@ -47,10 +49,10 @@ export const findAuditLogs = {
// Check to see if user belongs to org
const permission = await checkPermission({ orgId: org?._id })
- if (['admin', 'owner', 'super_admin'].includes(permission) === false) {
+ if (!ac.can(permission).readOwn('log').granted) {
throw new Error(i18n._(t`Cannot query audit logs on organization without admin permission or higher.`))
}
- const auditLogCollection = await loadAuditLogsByOrgId({
+ const auditLogCollection = await auditLogs.getConnectionsByOrgId({
...args,
orgId: org?._key,
permission,
diff --git a/api/src/auth/__tests__/check-domain-ownership.test.js b/api/src/auth/checks/__tests__/check-domain-ownership.test.js
similarity index 98%
rename from api/src/auth/__tests__/check-domain-ownership.test.js
rename to api/src/auth/checks/__tests__/check-domain-ownership.test.js
index 3cfc3696bd..d66f96673a 100644
--- a/api/src/auth/__tests__/check-domain-ownership.test.js
+++ b/api/src/auth/checks/__tests__/check-domain-ownership.test.js
@@ -1,11 +1,11 @@
import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../testUtilities'
+import { ensureDatabase as ensure } from '../../../testUtilities'
import { setupI18n } from '@lingui/core'
import { checkDomainOwnership } from '../index'
-import englishMessages from '../../locale/en/messages'
-import frenchMessages from '../../locale/fr/messages'
-import dbschema from '../../../database.json'
+import englishMessages from '../../../locale/en/messages'
+import frenchMessages from '../../../locale/fr/messages'
+import dbschema from '../../../../database.json'
const { DB_PASS: rootPass, DB_URL: url } = process.env
diff --git a/api/src/auth/__tests__/check-domain-permission.test.js b/api/src/auth/checks/__tests__/check-domain-permission.test.js
similarity index 98%
rename from api/src/auth/__tests__/check-domain-permission.test.js
rename to api/src/auth/checks/__tests__/check-domain-permission.test.js
index 75a39f40c7..0682857b02 100644
--- a/api/src/auth/__tests__/check-domain-permission.test.js
+++ b/api/src/auth/checks/__tests__/check-domain-permission.test.js
@@ -1,11 +1,11 @@
import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../testUtilities'
+import { ensureDatabase as ensure } from '../../../testUtilities'
import { setupI18n } from '@lingui/core'
import { checkDomainPermission } from '../index'
-import englishMessages from '../../locale/en/messages'
-import frenchMessages from '../../locale/fr/messages'
-import dbschema from '../../../database.json'
+import englishMessages from '../../../locale/en/messages'
+import frenchMessages from '../../../locale/fr/messages'
+import dbschema from '../../../../database.json'
const { DB_PASS: rootPass, DB_URL: url } = process.env
diff --git a/api/src/auth/__tests__/check-org-owner.test.js b/api/src/auth/checks/__tests__/check-org-owner.test.js
similarity index 96%
rename from api/src/auth/__tests__/check-org-owner.test.js
rename to api/src/auth/checks/__tests__/check-org-owner.test.js
index 5de1865d01..e2a97b2e87 100644
--- a/api/src/auth/__tests__/check-org-owner.test.js
+++ b/api/src/auth/checks/__tests__/check-org-owner.test.js
@@ -1,11 +1,11 @@
import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../testUtilities'
+import { ensureDatabase as ensure } from '../../../testUtilities'
import { setupI18n } from '@lingui/core'
import { checkOrgOwner } from '../check-org-owner'
-import englishMessages from '../../locale/en/messages'
-import frenchMessages from '../../locale/fr/messages'
-import dbschema from '../../../database.json'
+import englishMessages from '../../../locale/en/messages'
+import frenchMessages from '../../../locale/fr/messages'
+import dbschema from '../../../../database.json'
const { DB_PASS: rootPass, DB_URL: url } = process.env
diff --git a/api/src/auth/__tests__/check-permission.test.js b/api/src/auth/checks/__tests__/check-permission.test.js
similarity index 98%
rename from api/src/auth/__tests__/check-permission.test.js
rename to api/src/auth/checks/__tests__/check-permission.test.js
index 6ecc880c9e..73171b4092 100644
--- a/api/src/auth/__tests__/check-permission.test.js
+++ b/api/src/auth/checks/__tests__/check-permission.test.js
@@ -1,11 +1,11 @@
import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../testUtilities'
+import { ensureDatabase as ensure } from '../../../testUtilities'
import { setupI18n } from '@lingui/core'
import { checkPermission } from '..'
-import englishMessages from '../../locale/en/messages'
-import frenchMessages from '../../locale/fr/messages'
-import dbschema from '../../../database.json'
+import englishMessages from '../../../locale/en/messages'
+import frenchMessages from '../../../locale/fr/messages'
+import dbschema from '../../../../database.json'
const { DB_PASS: rootPass, DB_URL: url } = process.env
diff --git a/api/src/auth/__tests__/check-super-admin.test.js b/api/src/auth/checks/__tests__/check-super-admin.test.js
similarity index 97%
rename from api/src/auth/__tests__/check-super-admin.test.js
rename to api/src/auth/checks/__tests__/check-super-admin.test.js
index e71c2d309a..f355b27bce 100644
--- a/api/src/auth/__tests__/check-super-admin.test.js
+++ b/api/src/auth/checks/__tests__/check-super-admin.test.js
@@ -1,11 +1,11 @@
import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../testUtilities'
+import { ensureDatabase as ensure } from '../../../testUtilities'
import { setupI18n } from '@lingui/core'
import { checkSuperAdmin } from '../check-super-admin'
-import englishMessages from '../../locale/en/messages'
-import frenchMessages from '../../locale/fr/messages'
-import dbschema from '../../../database.json'
+import englishMessages from '../../../locale/en/messages'
+import frenchMessages from '../../../locale/fr/messages'
+import dbschema from '../../../../database.json'
const { DB_PASS: rootPass, DB_URL: url } = process.env
diff --git a/api/src/auth/__tests__/check-user-belongs-to-org.test.js b/api/src/auth/checks/__tests__/check-user-belongs-to-org.test.js
similarity index 95%
rename from api/src/auth/__tests__/check-user-belongs-to-org.test.js
rename to api/src/auth/checks/__tests__/check-user-belongs-to-org.test.js
index 6cc5bcad14..6956696979 100644
--- a/api/src/auth/__tests__/check-user-belongs-to-org.test.js
+++ b/api/src/auth/checks/__tests__/check-user-belongs-to-org.test.js
@@ -1,11 +1,11 @@
import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../testUtilities'
+import { ensureDatabase as ensure } from '../../../testUtilities'
import { setupI18n } from '@lingui/core'
import { checkUserBelongsToOrg } from '../check-user-belongs-to-org'
-import englishMessages from '../../locale/en/messages'
-import frenchMessages from '../../locale/fr/messages'
-import dbschema from '../../../database.json'
+import englishMessages from '../../../locale/en/messages'
+import frenchMessages from '../../../locale/fr/messages'
+import dbschema from '../../../../database.json'
const { DB_PASS: rootPass, DB_URL: url } = process.env
diff --git a/api/src/auth/__tests__/check-user-is-admin-for-user.test.js b/api/src/auth/checks/__tests__/check-user-is-admin-for-user.test.js
similarity index 98%
rename from api/src/auth/__tests__/check-user-is-admin-for-user.test.js
rename to api/src/auth/checks/__tests__/check-user-is-admin-for-user.test.js
index 5146267b56..2a14fe5334 100644
--- a/api/src/auth/__tests__/check-user-is-admin-for-user.test.js
+++ b/api/src/auth/checks/__tests__/check-user-is-admin-for-user.test.js
@@ -1,11 +1,11 @@
import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../testUtilities'
+import { ensureDatabase as ensure } from '../../../testUtilities'
import { setupI18n } from '@lingui/core'
import { checkUserIsAdminForUser } from '../index'
-import englishMessages from '../../locale/en/messages'
-import frenchMessages from '../../locale/fr/messages'
-import dbschema from '../../../database.json'
+import englishMessages from '../../../locale/en/messages'
+import frenchMessages from '../../../locale/fr/messages'
+import dbschema from '../../../../database.json'
const { DB_PASS: rootPass, DB_URL: url } = process.env
diff --git a/api/src/auth/check-domain-ownership.js b/api/src/auth/checks/check-domain-ownership.js
similarity index 100%
rename from api/src/auth/check-domain-ownership.js
rename to api/src/auth/checks/check-domain-ownership.js
diff --git a/api/src/auth/check-domain-permission.js b/api/src/auth/checks/check-domain-permission.js
similarity index 100%
rename from api/src/auth/check-domain-permission.js
rename to api/src/auth/checks/check-domain-permission.js
diff --git a/api/src/auth/check-org-owner.js b/api/src/auth/checks/check-org-owner.js
similarity index 100%
rename from api/src/auth/check-org-owner.js
rename to api/src/auth/checks/check-org-owner.js
diff --git a/api/src/auth/check-permission.js b/api/src/auth/checks/check-permission.js
similarity index 100%
rename from api/src/auth/check-permission.js
rename to api/src/auth/checks/check-permission.js
diff --git a/api/src/auth/check-super-admin.js b/api/src/auth/checks/check-super-admin.js
similarity index 100%
rename from api/src/auth/check-super-admin.js
rename to api/src/auth/checks/check-super-admin.js
diff --git a/api/src/auth/check-user-belongs-to-org.js b/api/src/auth/checks/check-user-belongs-to-org.js
similarity index 100%
rename from api/src/auth/check-user-belongs-to-org.js
rename to api/src/auth/checks/check-user-belongs-to-org.js
diff --git a/api/src/auth/check-user-is-admin-for-user.js b/api/src/auth/checks/check-user-is-admin-for-user.js
similarity index 100%
rename from api/src/auth/check-user-is-admin-for-user.js
rename to api/src/auth/checks/check-user-is-admin-for-user.js
diff --git a/api/src/auth/checks/index.js b/api/src/auth/checks/index.js
new file mode 100644
index 0000000000..0aaa93dda3
--- /dev/null
+++ b/api/src/auth/checks/index.js
@@ -0,0 +1,7 @@
+export * from './check-domain-ownership'
+export * from './check-domain-permission'
+export * from './check-org-owner'
+export * from './check-permission'
+export * from './check-super-admin'
+export * from './check-user-belongs-to-org'
+export * from './check-user-is-admin-for-user'
diff --git a/api/src/auth/data-source.js b/api/src/auth/data-source.js
new file mode 100644
index 0000000000..67389d24b6
--- /dev/null
+++ b/api/src/auth/data-source.js
@@ -0,0 +1,9 @@
+import { loadPermissionByOrgId, loadDomainPermissionByDomainId, loadOrgOwnerByOrgId } from './loaders'
+
+export class AuthDataSource {
+ constructor({ query, userKey, i18n }) {
+ this.permissionByOrgId = loadPermissionByOrgId({ query, userKey, i18n })
+ this.domainPermissionByDomainId = loadDomainPermissionByDomainId({ query, userKey, i18n })
+ this.orgOwnerByOrgId = loadOrgOwnerByOrgId({ query, userKey, i18n })
+ }
+}
diff --git a/api/src/auth/__tests__/tfa-required.test.js b/api/src/auth/guards/__tests__/tfa-required.test.js
similarity index 96%
rename from api/src/auth/__tests__/tfa-required.test.js
rename to api/src/auth/guards/__tests__/tfa-required.test.js
index 6e719eb568..c48657cef0 100644
--- a/api/src/auth/__tests__/tfa-required.test.js
+++ b/api/src/auth/guards/__tests__/tfa-required.test.js
@@ -1,8 +1,8 @@
import { setupI18n } from '@lingui/core'
import { tfaRequired } from '../index'
-import englishMessages from '../../locale/en/messages'
-import frenchMessages from '../../locale/fr/messages'
+import englishMessages from '../../../locale/en/messages'
+import frenchMessages from '../../../locale/fr/messages'
describe('given the tfaRequired function', () => {
let i18n, user
diff --git a/api/src/auth/__tests__/user-required.test.js b/api/src/auth/guards/__tests__/user-required.test.js
similarity index 96%
rename from api/src/auth/__tests__/user-required.test.js
rename to api/src/auth/guards/__tests__/user-required.test.js
index 24c300d331..19c4a72715 100644
--- a/api/src/auth/__tests__/user-required.test.js
+++ b/api/src/auth/guards/__tests__/user-required.test.js
@@ -1,12 +1,12 @@
import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../testUtilities'
+import { ensureDatabase as ensure } from '../../../testUtilities'
import { setupI18n } from '@lingui/core'
-import { loadUserByKey, loadUserByUserName } from '../../user/loaders'
+import { loadUserByKey, loadUserByUserName } from '../../../user/loaders'
import { userRequired } from '../index'
-import englishMessages from '../../locale/en/messages'
-import frenchMessages from '../../locale/fr/messages'
-import dbschema from '../../../database.json'
+import englishMessages from '../../../locale/en/messages'
+import frenchMessages from '../../../locale/fr/messages'
+import dbschema from '../../../../database.json'
const { DB_PASS: rootPass, DB_URL: url } = process.env
diff --git a/api/src/auth/__tests__/verified-required.test.js b/api/src/auth/guards/__tests__/verified-required.test.js
similarity index 96%
rename from api/src/auth/__tests__/verified-required.test.js
rename to api/src/auth/guards/__tests__/verified-required.test.js
index 8a9d25cb5a..4ea31d45de 100644
--- a/api/src/auth/__tests__/verified-required.test.js
+++ b/api/src/auth/guards/__tests__/verified-required.test.js
@@ -1,8 +1,8 @@
import { setupI18n } from '@lingui/core'
import { verifiedRequired } from '../index'
-import englishMessages from '../../locale/en/messages'
-import frenchMessages from '../../locale/fr/messages'
+import englishMessages from '../../../locale/en/messages'
+import frenchMessages from '../../../locale/fr/messages'
describe('given the verifiedRequired function', () => {
let i18n, user
diff --git a/api/src/auth/guards/index.js b/api/src/auth/guards/index.js
new file mode 100644
index 0000000000..5a21e03fae
--- /dev/null
+++ b/api/src/auth/guards/index.js
@@ -0,0 +1,4 @@
+export * from './super-admin-required'
+export * from './tfa-required'
+export * from './user-required'
+export * from './verified-required'
diff --git a/api/src/auth/super-admin-required.js b/api/src/auth/guards/super-admin-required.js
similarity index 100%
rename from api/src/auth/super-admin-required.js
rename to api/src/auth/guards/super-admin-required.js
diff --git a/api/src/auth/tfa-required.js b/api/src/auth/guards/tfa-required.js
similarity index 100%
rename from api/src/auth/tfa-required.js
rename to api/src/auth/guards/tfa-required.js
diff --git a/api/src/auth/user-required.js b/api/src/auth/guards/user-required.js
similarity index 100%
rename from api/src/auth/user-required.js
rename to api/src/auth/guards/user-required.js
diff --git a/api/src/auth/verified-required.js b/api/src/auth/guards/verified-required.js
similarity index 100%
rename from api/src/auth/verified-required.js
rename to api/src/auth/guards/verified-required.js
diff --git a/api/src/auth/index.js b/api/src/auth/index.js
index beba36ce38..2f77a785a2 100644
--- a/api/src/auth/index.js
+++ b/api/src/auth/index.js
@@ -1,14 +1,4 @@
-export * from './check-domain-ownership'
-export * from './check-domain-permission'
-export * from './check-org-owner'
-export * from './check-permission'
-export * from './check-super-admin'
-export * from './check-user-belongs-to-org'
-export * from './check-user-is-admin-for-user'
-export * from './generate-jwt'
-export * from './salted-hash'
-export * from './super-admin-required'
-export * from './user-required'
-export * from './verified-required'
-export * from './verify-jwt'
-export * from './tfa-required'
+export * from './checks'
+export * from './guards'
+export * from './utils'
+export * from './data-source'
diff --git a/api/src/auth/loaders/__tests__/load-domain-permission-by-domain-id.test.js b/api/src/auth/loaders/__tests__/load-domain-permission-by-domain-id.test.js
new file mode 100644
index 0000000000..60344802b4
--- /dev/null
+++ b/api/src/auth/loaders/__tests__/load-domain-permission-by-domain-id.test.js
@@ -0,0 +1,206 @@
+import { dbNameFromFile } from 'arango-tools'
+import { ensureDatabase as ensure } from '../../../testUtilities'
+import { setupI18n } from '@lingui/core'
+
+import { loadDomainPermissionByDomainId } from '../load-domain-permission-by-domain-id'
+import englishMessages from '../../../locale/en/messages'
+import frenchMessages from '../../../locale/fr/messages'
+import dbschema from '../../../../database.json'
+
+const { DB_PASS: rootPass, DB_URL: url } = process.env
+
+describe('given the loadDomainPermissionByDomainId loader', () => {
+ let query, drop, truncate, collections, org, domain, i18n
+
+ const consoleOutput = []
+ const mockedError = (output) => consoleOutput.push(output)
+
+ beforeAll(() => {
+ console.error = mockedError
+ })
+ afterEach(() => {
+ consoleOutput.length = 0
+ })
+
+ describe('given a successful domain permission load', () => {
+ let user
+
+ beforeAll(async () => {
+ ;({ query, drop, truncate, collections } = await ensure({
+ variables: {
+ dbname: dbNameFromFile(__filename),
+ username: 'root',
+ rootPassword: rootPass,
+ password: rootPass,
+ url,
+ },
+ schema: dbschema,
+ }))
+ })
+
+ beforeEach(async () => {
+ user = await collections.users.save({
+ userName: 'test.account@istio.actually.exists',
+ displayName: 'Test Account',
+ tfaValidated: false,
+ emailValidated: false,
+ })
+ org = await collections.organizations.save({
+ verified: false,
+ orgDetails: {
+ en: {
+ slug: 'treasury-board-secretariat',
+ acronym: 'TBS',
+ name: 'Treasury Board of Canada Secretariat',
+ zone: 'FED',
+ sector: 'TBS',
+ country: 'Canada',
+ province: 'Ontario',
+ city: 'Ottawa',
+ },
+ fr: {
+ slug: 'secretariat-conseil-tresor',
+ acronym: 'SCT',
+ name: 'Secrétariat du Conseil Trésor du Canada',
+ zone: 'FED',
+ sector: 'TBS',
+ country: 'Canada',
+ province: 'Ontario',
+ city: 'Ottawa',
+ },
+ },
+ })
+ domain = await collections.domains.save({
+ domain: 'test.gc.ca',
+ slug: 'test-gc-ca',
+ lastRan: null,
+ selectors: [],
+ })
+ await collections.claims.save({ _from: org._id, _to: domain._id })
+ })
+
+ afterEach(async () => {
+ await truncate()
+ })
+
+ afterAll(async () => {
+ await drop()
+ })
+
+ describe('when user is affiliated with an org that claims the domain', () => {
+ beforeEach(async () => {
+ await collections.affiliations.save({
+ _from: org._id,
+ _to: user._id,
+ permission: 'user',
+ })
+ })
+
+ it('returns true', async () => {
+ const loader = loadDomainPermissionByDomainId({ query, userKey: user._key, i18n: {} })
+ const result = await loader.load(domain._id)
+ expect(result).toBe(true)
+ })
+ })
+
+ describe('when user has no affiliation with any org claiming the domain', () => {
+ it('returns false', async () => {
+ const loader = loadDomainPermissionByDomainId({ query, userKey: user._key, i18n: {} })
+ const result = await loader.load(domain._id)
+ expect(result).toBe(false)
+ })
+ })
+
+ describe('when loading multiple domain IDs in one batch', () => {
+ let domain2
+
+ beforeEach(async () => {
+ domain2 = await collections.domains.save({
+ domain: 'test2.gc.ca',
+ slug: 'test2-gc-ca',
+ lastRan: null,
+ selectors: [],
+ })
+ await collections.affiliations.save({ _from: org._id, _to: user._id, permission: 'user' })
+ })
+
+ it('returns correct permissions for each domain in a single batch', async () => {
+ const loader = loadDomainPermissionByDomainId({ query, userKey: user._key, i18n: {} })
+ const [perm1, perm2] = await loader.loadMany([domain._id, domain2._id])
+ expect(perm1).toBe(true)
+ expect(perm2).toBe(false)
+ })
+ })
+ })
+
+ describe('given an unsuccessful domain permission load', () => {
+ describe('language is set to english', () => {
+ beforeAll(() => {
+ i18n = setupI18n({
+ locale: 'en',
+ localeData: { en: { plurals: {} }, fr: { plurals: {} } },
+ locales: ['en', 'fr'],
+ messages: { en: englishMessages.messages, fr: frenchMessages.messages },
+ })
+ })
+
+ describe('database error on super admin check', () => {
+ it('throws an error', async () => {
+ const mockQuery = jest.fn().mockRejectedValue(new Error('Database error occurred.'))
+ const loader = loadDomainPermissionByDomainId({ query: mockQuery, userKey: '1', i18n })
+
+ await expect(loader.load('domains/1')).rejects.toThrow(
+ 'Permission check error. Unable to request domain information.',
+ )
+
+ expect(consoleOutput).toEqual([
+ `Database error when checking super admin permission for user: users/1: Error: Database error occurred.`,
+ ])
+ })
+ })
+
+ describe('database error on batch domain permission check', () => {
+ it('throws an error', async () => {
+ const mockQuery = jest
+ .fn()
+ .mockResolvedValueOnce({ count: undefined })
+ .mockRejectedValue(new Error('Database error occurred.'))
+
+ const loader = loadDomainPermissionByDomainId({ query: mockQuery, userKey: '1', i18n })
+
+ await expect(loader.load('domains/1')).rejects.toThrow(
+ 'Permission check error. Unable to request domain information.',
+ )
+
+ expect(consoleOutput).toEqual([
+ `Database error when checking domain permissions for user: users/1: Error: Database error occurred.`,
+ ])
+ })
+ })
+
+ describe('cursor error on batch domain permission check', () => {
+ it('throws an error', async () => {
+ const errorCursor = {
+ forEach() {
+ throw new Error('Cursor error occurred.')
+ },
+ }
+ const mockQuery = jest
+ .fn()
+ .mockResolvedValueOnce({ count: undefined })
+ .mockResolvedValue(errorCursor)
+
+ const loader = loadDomainPermissionByDomainId({ query: mockQuery, userKey: '1', i18n })
+
+ await expect(loader.load('domains/1')).rejects.toThrow(
+ 'Permission check error. Unable to request domain information.',
+ )
+
+ expect(consoleOutput).toEqual([
+ `Cursor error when checking domain permissions for user: users/1: Error: Cursor error occurred.`,
+ ])
+ })
+ })
+ })
+ })
+})
diff --git a/api/src/auth/loaders/__tests__/load-org-owner-by-org-id.test.js b/api/src/auth/loaders/__tests__/load-org-owner-by-org-id.test.js
new file mode 100644
index 0000000000..1812c0c96a
--- /dev/null
+++ b/api/src/auth/loaders/__tests__/load-org-owner-by-org-id.test.js
@@ -0,0 +1,200 @@
+import { dbNameFromFile } from 'arango-tools'
+import { ensureDatabase as ensure } from '../../../testUtilities'
+import { setupI18n } from '@lingui/core'
+
+import { loadOrgOwnerByOrgId } from '../load-org-owner-by-org-id'
+import englishMessages from '../../../locale/en/messages'
+import frenchMessages from '../../../locale/fr/messages'
+import dbschema from '../../../../database.json'
+
+const { DB_PASS: rootPass, DB_URL: url } = process.env
+
+describe('given the loadOrgOwnerByOrgId loader', () => {
+ let query, drop, truncate, collections, user, org, i18n
+
+ const consoleOutput = []
+ const mockedError = (output) => consoleOutput.push(output)
+
+ beforeAll(() => {
+ console.error = mockedError
+ })
+ afterEach(() => {
+ consoleOutput.length = 0
+ })
+
+ describe('given a successful org owner load', () => {
+ beforeAll(async () => {
+ ;({ query, drop, truncate, collections } = await ensure({
+ variables: {
+ dbname: dbNameFromFile(__filename),
+ username: 'root',
+ rootPassword: rootPass,
+ password: rootPass,
+ url,
+ },
+ schema: dbschema,
+ }))
+ })
+
+ beforeEach(async () => {
+ user = await collections.users.save({
+ userName: 'test.account@istio.actually.exists',
+ displayName: 'Test Account',
+ tfaValidated: false,
+ emailValidated: false,
+ })
+ org = await collections.organizations.save({
+ orgDetails: {
+ en: {
+ slug: 'treasury-board-secretariat',
+ acronym: 'TBS',
+ name: 'Treasury Board of Canada Secretariat',
+ zone: 'FED',
+ sector: 'TBS',
+ country: 'Canada',
+ province: 'Ontario',
+ city: 'Ottawa',
+ },
+ fr: {
+ slug: 'secretariat-conseil-tresor',
+ acronym: 'SCT',
+ name: 'Secrétariat du Conseil Trésor du Canada',
+ zone: 'FED',
+ sector: 'TBS',
+ country: 'Canada',
+ province: 'Ontario',
+ city: 'Ottawa',
+ },
+ },
+ })
+ })
+
+ afterEach(async () => {
+ await truncate()
+ })
+
+ afterAll(async () => {
+ await drop()
+ })
+
+ describe('when user is the owner', () => {
+ beforeEach(async () => {
+ await collections.affiliations.save({ _from: org._id, _to: user._id, permission: 'owner' })
+ })
+
+ it('returns true', async () => {
+ const loader = loadOrgOwnerByOrgId({ query, userKey: user._key, i18n: {} })
+ const result = await loader.load(org._id)
+ expect(result).toBe(true)
+ })
+ })
+
+ describe('when user is not the owner', () => {
+ beforeEach(async () => {
+ await collections.affiliations.save({ _from: org._id, _to: user._id, permission: 'admin' })
+ })
+
+ it('returns false', async () => {
+ const loader = loadOrgOwnerByOrgId({ query, userKey: user._key, i18n: {} })
+ const result = await loader.load(org._id)
+ expect(result).toBe(false)
+ })
+ })
+
+ describe('when user has no affiliation', () => {
+ it('returns false', async () => {
+ const loader = loadOrgOwnerByOrgId({ query, userKey: user._key, i18n: {} })
+ const result = await loader.load(org._id)
+ expect(result).toBe(false)
+ })
+ })
+
+ describe('when loading multiple org IDs in one batch', () => {
+ let org2
+
+ beforeEach(async () => {
+ org2 = await collections.organizations.save({
+ orgDetails: {
+ en: {
+ slug: 'second-org',
+ acronym: 'SO',
+ name: 'Second Organization',
+ zone: 'FED',
+ sector: 'SO',
+ country: 'Canada',
+ province: 'Ontario',
+ city: 'Ottawa',
+ },
+ fr: {
+ slug: 'deuxieme-org',
+ acronym: 'DO',
+ name: 'Deuxième Organisation',
+ zone: 'FED',
+ sector: 'DO',
+ country: 'Canada',
+ province: 'Ontario',
+ city: 'Ottawa',
+ },
+ },
+ })
+ await collections.affiliations.save({ _from: org._id, _to: user._id, permission: 'owner' })
+ await collections.affiliations.save({ _from: org2._id, _to: user._id, permission: 'admin' })
+ })
+
+ it('returns correct ownership status for each org in a single batch', async () => {
+ const loader = loadOrgOwnerByOrgId({ query, userKey: user._key, i18n: {} })
+ const [isOwner1, isOwner2] = await loader.loadMany([org._id, org2._id])
+ expect(isOwner1).toBe(true)
+ expect(isOwner2).toBe(false)
+ })
+ })
+ })
+
+ describe('given an unsuccessful org owner load', () => {
+ describe('language is set to english', () => {
+ beforeAll(() => {
+ i18n = setupI18n({
+ locale: 'en',
+ localeData: { en: { plurals: {} }, fr: { plurals: {} } },
+ locales: ['en', 'fr'],
+ messages: { en: englishMessages.messages, fr: frenchMessages.messages },
+ })
+ })
+
+ describe('database error occurs', () => {
+ it('throws an error', async () => {
+ const mockQuery = jest.fn().mockRejectedValue(new Error('Database error occurred.'))
+ const loader = loadOrgOwnerByOrgId({ query: mockQuery, userKey: '1', i18n })
+
+ await expect(loader.load('organizations/1')).rejects.toThrow(
+ 'Unable to load owner information. Please try again.',
+ )
+
+ expect(consoleOutput).toEqual([
+ `Database error when checking org ownership for user: 1: Error: Database error occurred.`,
+ ])
+ })
+ })
+
+ describe('cursor error occurs', () => {
+ it('throws an error', async () => {
+ const errorCursor = {
+ forEach() {
+ throw new Error('Cursor error occurred.')
+ },
+ }
+ const mockQuery = jest.fn().mockResolvedValue(errorCursor)
+ const loader = loadOrgOwnerByOrgId({ query: mockQuery, userKey: '1', i18n })
+
+ await expect(loader.load('organizations/1')).rejects.toThrow(
+ 'Unable to load owner information. Please try again.',
+ )
+
+ expect(consoleOutput).toEqual([
+ `Cursor error when checking org ownership for user: 1: Error: Cursor error occurred.`,
+ ])
+ })
+ })
+ })
+ })
+})
diff --git a/api/src/auth/loaders/__tests__/load-permission-by-org-id.test.js b/api/src/auth/loaders/__tests__/load-permission-by-org-id.test.js
new file mode 100644
index 0000000000..145bf1fa77
--- /dev/null
+++ b/api/src/auth/loaders/__tests__/load-permission-by-org-id.test.js
@@ -0,0 +1,263 @@
+import { dbNameFromFile } from 'arango-tools'
+import { ensureDatabase as ensure } from '../../../testUtilities'
+import { setupI18n } from '@lingui/core'
+
+import { loadPermissionByOrgId } from '../load-permission-by-org-id'
+import englishMessages from '../../../locale/en/messages'
+import frenchMessages from '../../../locale/fr/messages'
+import dbschema from '../../../../database.json'
+
+const { DB_PASS: rootPass, DB_URL: url } = process.env
+
+describe('given the loadPermissionByOrgId loader', () => {
+ let query, drop, truncate, collections, i18n
+
+ const consoleOutput = []
+ const mockedError = (output) => consoleOutput.push(output)
+
+ beforeAll(() => {
+ console.error = mockedError
+ })
+ afterEach(() => {
+ consoleOutput.length = 0
+ })
+
+ describe('given a successful permission load', () => {
+ let user, org
+
+ beforeAll(async () => {
+ ;({ query, drop, truncate, collections } = await ensure({
+ variables: {
+ dbname: dbNameFromFile(__filename),
+ username: 'root',
+ rootPassword: rootPass,
+ password: rootPass,
+ url,
+ },
+ schema: dbschema,
+ }))
+ })
+
+ beforeEach(async () => {
+ user = await collections.users.save({
+ userName: 'test.account@istio.actually.exists',
+ displayName: 'Test Account',
+ tfaValidated: false,
+ emailValidated: false,
+ })
+ org = await collections.organizations.save({
+ verified: false,
+ orgDetails: {
+ en: {
+ slug: 'treasury-board-secretariat',
+ acronym: 'TBS',
+ name: 'Treasury Board of Canada Secretariat',
+ zone: 'FED',
+ sector: 'TBS',
+ country: 'Canada',
+ province: 'Ontario',
+ city: 'Ottawa',
+ },
+ fr: {
+ slug: 'secretariat-conseil-tresor',
+ acronym: 'SCT',
+ name: 'Secrétariat du Conseil Trésor du Canada',
+ zone: 'FED',
+ sector: 'TBS',
+ country: 'Canada',
+ province: 'Ontario',
+ city: 'Ottawa',
+ },
+ },
+ })
+ })
+
+ afterEach(async () => {
+ await truncate()
+ })
+
+ afterAll(async () => {
+ await drop()
+ })
+
+ describe('when user is a super admin', () => {
+ beforeEach(async () => {
+ await collections.affiliations.save({
+ _from: org._id,
+ _to: user._id,
+ permission: 'super_admin',
+ })
+ })
+
+ it('returns super_admin for all requested org IDs', async () => {
+ const loader = loadPermissionByOrgId({ query, userKey: user._key, i18n: {} })
+ const [result] = await loader.loadMany([org._id])
+ expect(result).toEqual('super_admin')
+ })
+ })
+
+ describe('when user is an admin', () => {
+ beforeEach(async () => {
+ await collections.affiliations.save({
+ _from: org._id,
+ _to: user._id,
+ permission: 'admin',
+ })
+ })
+
+ it('returns admin', async () => {
+ const loader = loadPermissionByOrgId({ query, userKey: user._key, i18n: {} })
+ const result = await loader.load(org._id)
+ expect(result).toEqual('admin')
+ })
+ })
+
+ describe('when user is a regular user', () => {
+ beforeEach(async () => {
+ await collections.affiliations.save({
+ _from: org._id,
+ _to: user._id,
+ permission: 'user',
+ })
+ })
+
+ it('returns user', async () => {
+ const loader = loadPermissionByOrgId({ query, userKey: user._key, i18n: {} })
+ const result = await loader.load(org._id)
+ expect(result).toEqual('user')
+ })
+ })
+
+ describe('when user has no affiliation with the org', () => {
+ it('returns null', async () => {
+ const loader = loadPermissionByOrgId({ query, userKey: user._key, i18n: {} })
+ const result = await loader.load(org._id)
+ expect(result).toBeNull()
+ })
+ })
+
+ describe('when loading multiple org IDs in one batch', () => {
+ let org2
+
+ beforeEach(async () => {
+ org2 = await collections.organizations.save({
+ verified: false,
+ orgDetails: {
+ en: {
+ slug: 'second-org',
+ acronym: 'SO',
+ name: 'Second Organization',
+ zone: 'FED',
+ sector: 'SO',
+ country: 'Canada',
+ province: 'Ontario',
+ city: 'Ottawa',
+ },
+ fr: {
+ slug: 'deuxieme-org',
+ acronym: 'DO',
+ name: 'Deuxième Organisation',
+ zone: 'FED',
+ sector: 'DO',
+ country: 'Canada',
+ province: 'Ontario',
+ city: 'Ottawa',
+ },
+ },
+ })
+ await collections.affiliations.save({ _from: org._id, _to: user._id, permission: 'admin' })
+ await collections.affiliations.save({ _from: org2._id, _to: user._id, permission: 'user' })
+ })
+
+ it('returns correct permissions for each org in a single batch', async () => {
+ const loader = loadPermissionByOrgId({ query, userKey: user._key, i18n: {} })
+ const [perm1, perm2] = await loader.loadMany([org._id, org2._id])
+ expect(perm1).toEqual('admin')
+ expect(perm2).toEqual('user')
+ })
+ })
+ })
+
+ describe('given an unsuccessful permission load', () => {
+ describe('language is set to english', () => {
+ beforeAll(() => {
+ i18n = setupI18n({
+ locale: 'en',
+ localeData: { en: { plurals: {} }, fr: { plurals: {} } },
+ locales: ['en', 'fr'],
+ messages: { en: englishMessages.messages, fr: frenchMessages.messages },
+ })
+ })
+
+ describe('database error on super admin check', () => {
+ it('throws an error', async () => {
+ const mockQuery = jest.fn().mockRejectedValue(new Error('Database error occurred.'))
+ const loader = loadPermissionByOrgId({ query: mockQuery, userKey: '1', i18n })
+
+ await expect(loader.load('organizations/1')).rejects.toThrow('Authentication error. Please sign in.')
+
+ expect(consoleOutput).toEqual([
+ `Database error when checking super admin permission for user: users/1: Error: Database error occurred.`,
+ ])
+ })
+ })
+
+ describe('cursor error on super admin check', () => {
+ it('throws an error', async () => {
+ const cursor = {
+ next() {
+ throw new Error('Cursor error occurred.')
+ },
+ }
+ const mockQuery = jest.fn().mockResolvedValue(cursor)
+ const loader = loadPermissionByOrgId({ query: mockQuery, userKey: '1', i18n })
+
+ await expect(loader.load('organizations/1')).rejects.toThrow('Unable to check permission. Please try again.')
+
+ expect(consoleOutput).toEqual([
+ `Cursor error when checking super admin permission for user: users/1: Error: Cursor error occurred.`,
+ ])
+ })
+ })
+
+ describe('database error on batch permission check', () => {
+ it('throws an error', async () => {
+ const mockQuery = jest
+ .fn()
+ .mockResolvedValueOnce({ next: () => undefined })
+ .mockRejectedValue(new Error('Database error occurred.'))
+
+ const loader = loadPermissionByOrgId({ query: mockQuery, userKey: '1', i18n })
+
+ await expect(loader.load('organizations/1')).rejects.toThrow('Authentication error. Please sign in.')
+
+ expect(consoleOutput).toEqual([
+ `Database error when checking permissions for user: users/1: Error: Database error occurred.`,
+ ])
+ })
+ })
+
+ describe('cursor error on batch permission check', () => {
+ it('throws an error', async () => {
+ const errorCursor = {
+ forEach() {
+ throw new Error('Cursor error occurred.')
+ },
+ }
+ const mockQuery = jest
+ .fn()
+ .mockResolvedValueOnce({ next: () => undefined })
+ .mockResolvedValue(errorCursor)
+
+ const loader = loadPermissionByOrgId({ query: mockQuery, userKey: '1', i18n })
+
+ await expect(loader.load('organizations/1')).rejects.toThrow('Unable to check permission. Please try again.')
+
+ expect(consoleOutput).toEqual([
+ `Cursor error when checking permissions for user: users/1: Error: Cursor error occurred.`,
+ ])
+ })
+ })
+ })
+ })
+})
diff --git a/api/src/auth/loaders/index.js b/api/src/auth/loaders/index.js
new file mode 100644
index 0000000000..ed64fc5701
--- /dev/null
+++ b/api/src/auth/loaders/index.js
@@ -0,0 +1,3 @@
+export * from './load-permission-by-org-id'
+export * from './load-domain-permission-by-domain-id'
+export * from './load-org-owner-by-org-id'
diff --git a/api/src/auth/loaders/load-domain-permission-by-domain-id.js b/api/src/auth/loaders/load-domain-permission-by-domain-id.js
new file mode 100644
index 0000000000..ce2f8b3cef
--- /dev/null
+++ b/api/src/auth/loaders/load-domain-permission-by-domain-id.js
@@ -0,0 +1,65 @@
+import DataLoader from 'dataloader'
+import { t } from '@lingui/macro'
+
+export const loadDomainPermissionByDomainId = ({ query, userKey, i18n }) =>
+ new DataLoader(async (domainIds) => {
+ const userKeyString = `users/${userKey}`
+
+ // Check super admin once for the whole batch (mirrors existing checkDomainPermission logic)
+ let superAdminCursor
+ try {
+ superAdminCursor = await query`
+ WITH affiliations, organizations, users
+ FOR v, e IN 1..1 ANY ${userKeyString} affiliations
+ FILTER e.permission == 'super_admin'
+ RETURN e._from
+ `
+ } catch (err) {
+ console.error(`Database error when checking super admin permission for user: ${userKeyString}: ${err}`)
+ throw new Error(i18n._(t`Permission check error. Unable to request domain information.`))
+ }
+
+ if (superAdminCursor.count > 0) {
+ return domainIds.map(() => true)
+ }
+
+ // Batch domain permission check across all domain IDs in one query
+ let cursor
+ try {
+ cursor = await query`
+ WITH affiliations, claims, domains, organizations, users
+ LET userAffiliations = (
+ FOR v, e IN 1..1 ANY ${userKeyString} affiliations
+ FILTER e.permission != "pending"
+ RETURN v
+ )
+ LET hasVerifiedOrgAffiliation = POSITION(userAffiliations[*].verified, true)
+ FOR domainId IN ${domainIds}
+ LET domainOrgClaims = (
+ FOR v, e IN 1..1 ANY domainId claims
+ RETURN v
+ )
+ LET domainBelongsToVerifiedOrg = POSITION(domainOrgClaims[*].verified, true)
+ LET affiliatedClaims = INTERSECTION(userAffiliations, domainOrgClaims)
+ RETURN {
+ domainId: domainId,
+ permitted: (domainBelongsToVerifiedOrg && hasVerifiedOrgAffiliation) || LENGTH(affiliatedClaims) > 0
+ }
+ `
+ } catch (err) {
+ console.error(`Database error when checking domain permissions for user: ${userKeyString}: ${err}`)
+ throw new Error(i18n._(t`Permission check error. Unable to request domain information.`))
+ }
+
+ const permMap = {}
+ try {
+ await cursor.forEach(({ domainId, permitted }) => {
+ permMap[domainId] = permitted
+ })
+ } catch (err) {
+ console.error(`Cursor error when checking domain permissions for user: ${userKeyString}: ${err}`)
+ throw new Error(i18n._(t`Permission check error. Unable to request domain information.`))
+ }
+
+ return domainIds.map((id) => permMap[id] ?? false)
+ })
diff --git a/api/src/auth/loaders/load-org-owner-by-org-id.js b/api/src/auth/loaders/load-org-owner-by-org-id.js
new file mode 100644
index 0000000000..88232815d6
--- /dev/null
+++ b/api/src/auth/loaders/load-org-owner-by-org-id.js
@@ -0,0 +1,37 @@
+import DataLoader from 'dataloader'
+import { t } from '@lingui/macro'
+
+export const loadOrgOwnerByOrgId = ({ query, userKey, i18n }) =>
+ new DataLoader(async (orgIds) => {
+ const userIdString = `users/${userKey}`
+
+ let cursor
+ try {
+ cursor = await query`
+ WITH affiliations, organizations, users
+ LET userId = ${userIdString}
+ FOR orgId IN ${orgIds}
+ LET isOwner = FIRST(
+ FOR v, e IN 1..1 OUTBOUND orgId affiliations
+ FILTER e._to == userId
+ RETURN e.permission == "owner"
+ )
+ RETURN { orgId: orgId, isOwner: isOwner == true }
+ `
+ } catch (err) {
+ console.error(`Database error when checking org ownership for user: ${userKey}: ${err}`)
+ throw new Error(i18n._(t`Unable to load owner information. Please try again.`))
+ }
+
+ const ownerMap = {}
+ try {
+ await cursor.forEach(({ orgId, isOwner }) => {
+ ownerMap[orgId] = isOwner
+ })
+ } catch (err) {
+ console.error(`Cursor error when checking org ownership for user: ${userKey}: ${err}`)
+ throw new Error(i18n._(t`Unable to load owner information. Please try again.`))
+ }
+
+ return orgIds.map((id) => ownerMap[id] ?? false)
+ })
diff --git a/api/src/auth/loaders/load-permission-by-org-id.js b/api/src/auth/loaders/load-permission-by-org-id.js
new file mode 100644
index 0000000000..cccc12aac5
--- /dev/null
+++ b/api/src/auth/loaders/load-permission-by-org-id.js
@@ -0,0 +1,77 @@
+import DataLoader from 'dataloader'
+import { t } from '@lingui/macro'
+
+export const loadPermissionByOrgId = ({ query, userKey, i18n }) =>
+ new DataLoader(async (orgIds) => {
+ const userKeyString = `users/${userKey}`
+
+ // Check for super admin once for the whole batch
+ let superAdminCursor
+ try {
+ superAdminCursor = await query`
+ WITH affiliations, organizations, users
+ FOR v, e IN 1..1 INBOUND ${userKeyString} affiliations
+ FILTER e.permission == "super_admin"
+ RETURN e.permission
+ `
+ } catch (err) {
+ console.error(`Database error when checking super admin permission for user: ${userKeyString}: ${err}`)
+ throw new Error(i18n._(t`Authentication error. Please sign in.`))
+ }
+
+ let superAdminPermission
+ try {
+ superAdminPermission = await superAdminCursor.next()
+ } catch (err) {
+ console.error(`Cursor error when checking super admin permission for user: ${userKeyString}: ${err}`)
+ throw new Error(i18n._(t`Unable to check permission. Please try again.`))
+ }
+
+ if (superAdminPermission === 'super_admin') {
+ return orgIds.map(() => 'super_admin')
+ }
+
+ // Batch permission check across all org IDs in one query
+ let cursor
+ try {
+ cursor = await query`
+ WITH affiliations, organizations, users
+ LET userAffiliations = (
+ FOR v, e IN 1..1 ANY ${userKeyString} affiliations
+ FILTER e.permission != "pending"
+ RETURN v
+ )
+ LET hasVerifiedOrgAffiliation = POSITION(userAffiliations[*].verified, true)
+ FOR orgId IN ${orgIds}
+ LET org = DOCUMENT(orgId)
+ LET orgIsVerified = org.verified
+ LET userOrgAffiliation = FIRST(
+ FOR v, e IN 1..1 ANY ${userKeyString} affiliations
+ FILTER e._from == orgId
+ RETURN e
+ )
+ RETURN {
+ orgId: orgId,
+ permission: userOrgAffiliation.permission IN ["user", "admin", "owner", "super_admin"] ? userOrgAffiliation.permission
+ : (orgIsVerified && hasVerifiedOrgAffiliation) ? "user"
+ : userOrgAffiliation.permission == "pending" ? userOrgAffiliation
+ : null
+ }
+ `
+ } catch (err) {
+ console.error(`Database error when checking permissions for user: ${userKeyString}: ${err}`)
+ throw new Error(i18n._(t`Authentication error. Please sign in.`))
+ }
+
+ const permMap = {}
+ try {
+ await cursor.forEach(({ orgId, permission }) => {
+ permMap[orgId] = permission
+ })
+ } catch (err) {
+ console.error(`Cursor error when checking permissions for user: ${userKeyString}: ${err}`)
+ throw new Error(i18n._(t`Unable to check permission. Please try again.`))
+ }
+
+ return orgIds.map((id) => permMap[id] ?? null)
+ })
diff --git a/api/src/auth/__tests__/generate-jwt.test.js b/api/src/auth/utils/__tests__/generate-jwt.test.js
similarity index 100%
rename from api/src/auth/__tests__/generate-jwt.test.js
rename to api/src/auth/utils/__tests__/generate-jwt.test.js
diff --git a/api/src/auth/__tests__/salted-hash.test.js b/api/src/auth/utils/__tests__/salted-hash.test.js
similarity index 100%
rename from api/src/auth/__tests__/salted-hash.test.js
rename to api/src/auth/utils/__tests__/salted-hash.test.js
diff --git a/api/src/auth/__tests__/verify-jwt.test.js b/api/src/auth/utils/__tests__/verify-jwt.test.js
similarity index 95%
rename from api/src/auth/__tests__/verify-jwt.test.js
rename to api/src/auth/utils/__tests__/verify-jwt.test.js
index a24e851c48..f53cf66a7f 100644
--- a/api/src/auth/__tests__/verify-jwt.test.js
+++ b/api/src/auth/utils/__tests__/verify-jwt.test.js
@@ -2,8 +2,8 @@ import jwt from 'jsonwebtoken'
import {setupI18n} from '@lingui/core'
import {verifyToken} from '../index'
-import englishMessages from '../../locale/en/messages'
-import frenchMessages from '../../locale/fr/messages'
+import englishMessages from '../../../locale/en/messages'
+import frenchMessages from '../../../locale/fr/messages'
const {AUTHENTICATED_KEY} = process.env
diff --git a/api/src/auth/generate-jwt.js b/api/src/auth/utils/generate-jwt.js
similarity index 100%
rename from api/src/auth/generate-jwt.js
rename to api/src/auth/utils/generate-jwt.js
diff --git a/api/src/auth/utils/index.js b/api/src/auth/utils/index.js
new file mode 100644
index 0000000000..d6160f558e
--- /dev/null
+++ b/api/src/auth/utils/index.js
@@ -0,0 +1,3 @@
+export * from './generate-jwt'
+export * from './salted-hash'
+export * from './verify-jwt'
diff --git a/api/src/auth/salted-hash.js b/api/src/auth/utils/salted-hash.js
similarity index 100%
rename from api/src/auth/salted-hash.js
rename to api/src/auth/utils/salted-hash.js
diff --git a/api/src/auth/verify-jwt.js b/api/src/auth/utils/verify-jwt.js
similarity index 100%
rename from api/src/auth/verify-jwt.js
rename to api/src/auth/utils/verify-jwt.js
diff --git a/api/src/create-context.js b/api/src/create-context.js
index 84d1a7e963..ee4bcc9f05 100644
--- a/api/src/create-context.js
+++ b/api/src/create-context.js
@@ -7,7 +7,16 @@ import jwt from 'jsonwebtoken'
import { loadUserByKey } from './user/loaders'
import { cleanseInput, decryptPhoneNumber, slugify } from './validators'
import { initializeLoaders } from './initialize-loaders'
+import { SummariesDataSource } from './summaries'
+import { DnsScanDataSource } from './dns-scan'
+import { WebScanDataSource } from './web-scan'
+import { AuditLogsDataSource } from './audit-logs'
+import { AdditionalFindingsDataSource } from './additional-findings'
+import { GuidanceTagDataSource } from './guidance-tag'
+import { OrganizationDataSource } from './organization'
+import { TagsDataSource } from './tags'
import {
+ AuthDataSource,
checkDomainOwnership,
checkDomainPermission,
checkOrgOwner,
@@ -33,6 +42,7 @@ import {
sendPasswordResetEmail,
sendUpdatedUserNameEmail,
sendVerificationEmail,
+ sendRoleChangeEmail,
} from './notify'
export async function createContext({
@@ -130,10 +140,21 @@ export async function createContext({
i18n,
}),
sendVerificationEmail: sendVerificationEmail({ notifyClient, i18n }),
+ sendRoleChangeEmail: sendRoleChangeEmail({ notifyClient, i18n }),
+ },
+ dataSources: {
+ auth: new AuthDataSource({ query, userKey, i18n }),
+ summaries: new SummariesDataSource({ query, userKey, cleanseInput, i18n }),
+ additionalFindings: new AdditionalFindingsDataSource({ query, userKey, i18n, language: request.language }),
+ auditLogs: new AuditLogsDataSource({ query, userKey, cleanseInput, i18n, transaction, collections }),
+ dnsScan: new DnsScanDataSource({ query, userKey, cleanseInput, i18n }),
+ guidanceTag: new GuidanceTagDataSource({ query, userKey, i18n, language: request.language, cleanseInput }),
+ organization: new OrganizationDataSource({ query, userKey, i18n, language: request.language, cleanseInput, loginRequiredBool, transaction, collections }),
+ tags: new TagsDataSource({ query, userKey, i18n, language: request.language, transaction, collections }),
+ webScan: new WebScanDataSource({ query, userKey, cleanseInput, i18n }),
},
loaders: initializeLoaders({
query,
- db,
userKey,
i18n,
language: request.language,
diff --git a/api/src/dmarc-summaries/objects/__tests__/dkim-failure-table.test.js b/api/src/dmarc-summaries/objects/__tests__/dkim-failure-table.test.js
index e69d17b6d7..133de70e0f 100644
--- a/api/src/dmarc-summaries/objects/__tests__/dkim-failure-table.test.js
+++ b/api/src/dmarc-summaries/objects/__tests__/dkim-failure-table.test.js
@@ -164,8 +164,8 @@ describe('given the dkimFailureTable gql object', () => {
{ guidance: 'agg1' },
{},
{
- loaders: {
- loadGuidanceTagByTagId: jest.fn().mockReturnValue([expectedResults]),
+ dataSources: {
+ guidanceTag: { byTagId: jest.fn().mockReturnValue([expectedResults]) },
},
},
),
@@ -183,8 +183,8 @@ describe('given the dkimFailureTable gql object', () => {
{ guidance: null },
{},
{
- loaders: {
- loadGuidanceTagByTagId: jest.fn().mockReturnValue(expectedResults),
+ dataSources: {
+ guidanceTag: { byTagId: jest.fn().mockReturnValue(expectedResults) },
},
},
),
diff --git a/api/src/dmarc-summaries/objects/__tests__/spf-failure-table.test.js b/api/src/dmarc-summaries/objects/__tests__/spf-failure-table.test.js
index 51f78bccce..c35d341b5b 100644
--- a/api/src/dmarc-summaries/objects/__tests__/spf-failure-table.test.js
+++ b/api/src/dmarc-summaries/objects/__tests__/spf-failure-table.test.js
@@ -130,8 +130,8 @@ describe('given spfFailureTable gql object', () => {
{ guidance: 'agg1' },
{},
{
- loaders: {
- loadGuidanceTagByTagId: jest.fn().mockReturnValue([expectedResult]),
+ dataSources: {
+ guidanceTag: { byTagId: jest.fn().mockReturnValue([expectedResult]) },
},
},
),
@@ -149,8 +149,8 @@ describe('given spfFailureTable gql object', () => {
{ guidance: null },
{},
{
- loaders: {
- loadGuidanceTagByTagId: jest.fn().mockReturnValue(expectedResult),
+ dataSources: {
+ guidanceTag: { byTagId: jest.fn().mockReturnValue(expectedResult) },
},
},
),
diff --git a/api/src/dmarc-summaries/objects/dkim-failure-table.js b/api/src/dmarc-summaries/objects/dkim-failure-table.js
index 0cf8c738a1..140022b472 100644
--- a/api/src/dmarc-summaries/objects/dkim-failure-table.js
+++ b/api/src/dmarc-summaries/objects/dkim-failure-table.js
@@ -49,9 +49,9 @@ export const dkimFailureTableType = new GraphQLObjectType({
guidanceTag: {
type: guidanceTagType,
description: 'Guidance for any issues that were found from the report.',
- resolve: async ({ guidance }, _args, { loaders: { loadGuidanceTagByTagId } }) => {
+ resolve: async ({ guidance }, _args, { dataSources: { guidanceTag } }) => {
if (guidance) {
- const guidanceTags = await loadGuidanceTagByTagId({ tags: [guidance] })
+ const guidanceTags = await guidanceTag.byTagId({ tags: [guidance] })
return guidanceTags[0]
}
return {}
diff --git a/api/src/dmarc-summaries/objects/spf-failure-table.js b/api/src/dmarc-summaries/objects/spf-failure-table.js
index bb5695fdb4..f15cddf528 100644
--- a/api/src/dmarc-summaries/objects/spf-failure-table.js
+++ b/api/src/dmarc-summaries/objects/spf-failure-table.js
@@ -28,9 +28,9 @@ export const spfFailureTableType = new GraphQLObjectType({
guidanceTag: {
type: guidanceTagType,
description: 'Guidance for any issues that were found from the report.',
- resolve: async ({ guidance }, _args, { loaders: { loadGuidanceTagByTagId } }) => {
+ resolve: async ({ guidance }, _args, { dataSources: { guidanceTag } }) => {
if (guidance) {
- const guidanceTags = await loadGuidanceTagByTagId({ tags: [guidance] })
+ const guidanceTags = await guidanceTag.byTagId({ tags: [guidance] })
return guidanceTags[0]
}
return {}
diff --git a/api/src/dns-scan/data-source.js b/api/src/dns-scan/data-source.js
new file mode 100644
index 0000000000..b7d2321215
--- /dev/null
+++ b/api/src/dns-scan/data-source.js
@@ -0,0 +1,8 @@
+import { loadDnsByKey, loadDnsConnectionsByDomainId } from './loaders'
+
+export class DnsScanDataSource {
+ constructor({ query, userKey, cleanseInput, i18n }) {
+ this.byKey = loadDnsByKey({ query, userKey, i18n })
+ this.getConnectionsByDomainId = loadDnsConnectionsByDomainId({ query, userKey, cleanseInput, i18n })
+ }
+}
diff --git a/api/src/dns-scan/index.js b/api/src/dns-scan/index.js
index 6d2a5b5879..52de3be3af 100644
--- a/api/src/dns-scan/index.js
+++ b/api/src/dns-scan/index.js
@@ -1,3 +1,4 @@
+export * from './data-source'
export * from './inputs'
export * from './loaders'
export * from './objects'
diff --git a/api/src/dns-scan/loaders/index.js b/api/src/dns-scan/loaders/index.js
index 6d093db6d4..9b63653ab8 100644
--- a/api/src/dns-scan/loaders/index.js
+++ b/api/src/dns-scan/loaders/index.js
@@ -1,3 +1,2 @@
export * from './load-dns-by-key'
export * from './load-dns-connections-by-domain-id'
-export * from './load-mx-record-diff-by-domain-id'
diff --git a/api/src/dns-scan/loaders/load-mx-record-diff-by-domain-id.js b/api/src/dns-scan/loaders/load-mx-record-diff-by-domain-id.js
deleted file mode 100644
index a84eeb956d..0000000000
--- a/api/src/dns-scan/loaders/load-mx-record-diff-by-domain-id.js
+++ /dev/null
@@ -1,241 +0,0 @@
-import { aql } from 'arangojs'
-import { t } from '@lingui/macro'
-
-export const loadMxRecordDiffByDomainId =
- ({ query, userKey, cleanseInput, i18n }) =>
- async ({ limit, domainId, startDate, endDate, after, before, offset, orderBy }) => {
- if (limit === undefined) {
- console.warn(`User: ${userKey} did not set \`limit\` argument for: loadMxRecordDiffByDomainId.`)
- throw new Error(i18n._(t`You must provide a \`limit\` value to properly paginate the \`MXRecord\` connection.`))
- }
-
- if (limit <= 0 || limit > 100) {
- console.warn(`User: ${userKey} set \`limit\` argument outside accepted range: loadMxRecordDiffByDomainId.`)
- throw new Error(
- i18n._(
- t`You must provide a \`limit\` value in the range of 1-100 to properly paginate the \`MXRecord\` connection.`,
- ),
- )
- }
-
- const paginationMethodCount = [before, after, offset].reduce(
- (paginationMethod, currentValue) => currentValue + (paginationMethod === undefined),
- 0,
- )
-
- if (paginationMethodCount > 1) {
- console.warn(`User: ${userKey} set multiple pagination methods for: loadMxRecordDiffByDomainId.`)
- throw new Error(
- i18n._(
- t`You must provide at most one pagination method (\`before\`, \`after\`, \`offset\`) value to properly paginate the \`MXRecord\` connection.`,
- ),
- )
- }
-
- before = cleanseInput(before)
- after = cleanseInput(after)
-
- const usingRelayExplicitly = !!(before || after)
-
- const resolveCursor = (cursor) => {
- const cursorString = Buffer.from(cursor, 'base64').toString('utf8').split('|')
-
- return cursorString.reduce((acc, currentValue) => {
- const [type, id] = currentValue.split('::')
- acc.push({ type, id })
- return acc
- }, [])
- }
- let relayBeforeTemplate = aql``
- let relayAfterTemplate = aql``
- if (usingRelayExplicitly) {
- const cursorList = resolveCursor(after || before)
-
- if (cursorList.length === 0 || cursorList > 2) {
- // TODO: throw error
- }
-
- if (cursorList.at(-1).type !== 'id') {
- // id field should always be last property
- // TODO: throw error
- }
-
- const orderByDirectionArrow =
- orderBy?.direction === 'DESC' ? aql`<` : orderBy?.direction === 'ASC' ? aql`>` : null
- const reverseOrderByDirectionArrow =
- orderBy?.direction === 'DESC' ? aql`>` : orderBy?.direction === 'ASC' ? aql`<` : null
-
- relayBeforeTemplate = aql`FILTER TO_NUMBER(dnsScan._key) < TO_NUMBER(${cursorList[0].id})`
- relayAfterTemplate = aql`FILTER TO_NUMBER(dnsScan._key) > TO_NUMBER(${cursorList[0].id})`
-
- if (cursorList.length === 2) {
- relayAfterTemplate = aql`
- FILTER dnsScan.${cursorList[0].type} ${orderByDirectionArrow || aql`>`} ${cursorList[0].id}
- OR (dnsScan.${cursorList[0].type} == ${cursorList[0].id}
- AND TO_NUMBER(dnsScan._key) > TO_NUMBER(${cursorList[1].id}))
- `
-
- relayBeforeTemplate = aql`
- FILTER dnsScan.${cursorList[0].type} ${reverseOrderByDirectionArrow || aql`<`} ${cursorList[0].id}
- OR (dnsScan.${cursorList[0].type} == ${cursorList[0].id}
- AND TO_NUMBER(dnsScan._key) < TO_NUMBER(${cursorList[1].id}))
- `
- }
- }
-
- const relayDirectionString = before ? aql`DESC` : aql`ASC`
-
- let sortTemplate
- if (!orderBy) {
- sortTemplate = aql`SORT TO_NUMBER(dnsScan._key) ${relayDirectionString}`
- } else {
- sortTemplate = aql`SORT dnsScan.${orderBy.field} ${orderBy.direction}, TO_NUMBER(dnsScan._key) ${relayDirectionString}`
- }
-
- let startDateFilter = aql``
- if (typeof startDate !== 'undefined') {
- startDateFilter = aql`
- FILTER DATE_FORMAT(dnsScan.timestamp, '%yyyy-%mm-%dd') >= DATE_FORMAT(${startDate}, '%yyyy-%mm-%dd')`
- }
-
- let endDateFilter = aql``
- if (typeof endDate !== 'undefined') {
- endDateFilter = aql`
- FILTER DATE_FORMAT(dnsScan.timestamp, '%yyyy-%mm-%dd') <= DATE_FORMAT(${endDate}, '%yyyy-%mm-%dd')`
- }
-
- const removeExtraSliceTemplate = aql`SLICE(dnsScansPlusOne, 0, ${limit})`
- const dnsScanQuery = aql`
- WITH dns, domains
- LET dnsScansPlusOne = (
- FOR dnsScan, e IN 1 OUTBOUND ${domainId} domainsDNS
- FILTER dnsScan.mxRecords.diff == true
- ${startDateFilter}
- ${endDateFilter}
- ${before ? relayBeforeTemplate : relayAfterTemplate}
- ${sortTemplate}
- LIMIT ${limit + 1}
- RETURN { id: dnsScan._key, _type: "dnsScan", timestamp: dnsScan.timestamp, mxRecords: dnsScan.mxRecords }
- )
- LET hasMoreRelayPage = LENGTH(dnsScansPlusOne) == ${limit} + 1
- LET hasReversePage = ${!usingRelayExplicitly} ? false : (LENGTH(
- FOR dnsScan, e IN 1 OUTBOUND ${domainId} domainsDNS
- FILTER dnsScan.mxRecords.diff == true
- ${startDateFilter}
- ${endDateFilter}
- ${before ? relayAfterTemplate : relayBeforeTemplate}
- LIMIT 1
- RETURN true
- ) > 0) ? true : false
- LET totalCount = COUNT(
- FOR dnsScan, e IN 1 OUTBOUND ${domainId} domainsDNS
- FILTER dnsScan.mxRecords.diff == true
- ${startDateFilter}
- ${endDateFilter}
- RETURN true
- )
- LET mxRecords = ${removeExtraSliceTemplate}
-
- RETURN {
- "mxRecords": mxRecords,
- "hasMoreRelayPage": hasMoreRelayPage,
- "hasReversePage": hasReversePage,
- "totalCount": totalCount
- }
- `
-
- let mxRecordCursor
- try {
- mxRecordCursor = await query`${dnsScanQuery}`
- } catch (err) {
- console.error(
- `Database error occurred while user: ${userKey} was trying to get cursor for DNS document with cursor '${
- after || before
- }' for domain '${domainId}', error: ${err}`,
- )
- throw new Error(i18n._(t`Unable to load DNS scan(s). Please try again.`))
- }
-
- let mxRecordInfo
- try {
- mxRecordInfo = await mxRecordCursor.next()
- } catch (err) {
- console.error(
- `Cursor error occurred while user: ${userKey} was trying to get DNS information for ${domainId}, error: ${err}`,
- )
- throw new Error(i18n._(t`Unable to load DNS scan(s). Please try again.`))
- }
-
- const mxRecords = mxRecordInfo.mxRecords
-
- if (mxRecords.length === 0) {
- return {
- edges: [],
- totalCount: mxRecordInfo.totalCount,
- pageInfo: {
- hasPreviousPage: !usingRelayExplicitly
- ? false
- : after
- ? mxRecordInfo.hasReversePage
- : mxRecordInfo.hasMoreRelayPage,
- hasNextPage: after || !usingRelayExplicitly ? mxRecordInfo.hasMoreRelayPage : mxRecordInfo.hasReversePage,
- startCursor: null,
- endCursor: null,
- },
- }
- }
-
- const toCursorString = (cursorObjects) => {
- const cursorStringArray = cursorObjects.reduce((acc, cursorObject) => {
- if (cursorObject.type === undefined || cursorObject.id === undefined) {
- // TODO: throw error
- }
- acc.push(`${cursorObject.type}::${cursorObject.id}`)
- return acc
- }, [])
- const cursorString = cursorStringArray.join('|')
- return Buffer.from(cursorString, 'utf8').toString('base64')
- }
-
- const edges = mxRecords.map((mxRecord) => {
- let cursor
- if (orderBy) {
- cursor = toCursorString([
- {
- type: orderBy.field,
- id: mxRecord[orderBy.field],
- },
- {
- type: 'id',
- id: mxRecord._key,
- },
- ])
- } else {
- cursor = toCursorString([
- {
- type: 'id',
- id: mxRecord._key,
- },
- ])
- }
- return {
- cursor: cursor,
- node: mxRecord,
- }
- })
-
- return {
- edges: edges,
- totalCount: mxRecordInfo.totalCount,
- pageInfo: {
- hasPreviousPage: !usingRelayExplicitly
- ? false
- : after
- ? mxRecordInfo.hasReversePage
- : mxRecordInfo.hasMoreRelayPage,
- hasNextPage: after || !usingRelayExplicitly ? mxRecordInfo.hasMoreRelayPage : mxRecordInfo.hasReversePage,
- endCursor: edges.length > 0 ? edges.at(-1).cursor : null,
- startCursor: edges.length > 0 ? edges[0].cursor : null,
- },
- }
- }
diff --git a/api/src/dns-scan/objects/dkim-selector-result.js b/api/src/dns-scan/objects/dkim-selector-result.js
index 48ca2cd31c..0a51b0a474 100644
--- a/api/src/dns-scan/objects/dkim-selector-result.js
+++ b/api/src/dns-scan/objects/dkim-selector-result.js
@@ -42,22 +42,22 @@ export const dkimSelectorResultType = new GraphQLObjectType({
positiveTags: {
type: new GraphQLList(guidanceTagType),
description: `List of positive tags for the scanned domain from this scan.`,
- resolve: async ({ positiveTags }, _, { loaders: { loadDkimGuidanceTagByTagId } }) => {
- return await loadDkimGuidanceTagByTagId({ tags: positiveTags })
+ resolve: async ({ positiveTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.dkimByTagId({ tags: positiveTags })
},
},
neutralTags: {
type: new GraphQLList(guidanceTagType),
description: `List of neutral tags for the scanned domain from this scan.`,
- resolve: async ({ neutralTags }, _, { loaders: { loadDkimGuidanceTagByTagId } }) => {
- return await loadDkimGuidanceTagByTagId({ tags: neutralTags })
+ resolve: async ({ neutralTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.dkimByTagId({ tags: neutralTags })
},
},
negativeTags: {
type: new GraphQLList(guidanceTagType),
description: `List of negative tags for the scanned domain from this scan.`,
- resolve: async ({ negativeTags }, _, { loaders: { loadDkimGuidanceTagByTagId } }) => {
- return await loadDkimGuidanceTagByTagId({ tags: negativeTags })
+ resolve: async ({ negativeTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.dkimByTagId({ tags: negativeTags })
},
},
}),
diff --git a/api/src/dns-scan/objects/dkim.js b/api/src/dns-scan/objects/dkim.js
index 6eae47c02b..ed5ab22d16 100644
--- a/api/src/dns-scan/objects/dkim.js
+++ b/api/src/dns-scan/objects/dkim.js
@@ -13,22 +13,22 @@ export const dkimType = new GraphQLObjectType({
positiveTags: {
type: new GraphQLList(guidanceTagType),
description: `List of positive tags for the scanned domain from this scan.`,
- resolve: async ({ positiveTags }, _, { loaders: { loadGuidanceTagByTagId } }) => {
- return await loadGuidanceTagByTagId({ tags: positiveTags })
+ resolve: async ({ positiveTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.byTagId({ tags: positiveTags })
},
},
neutralTags: {
type: new GraphQLList(guidanceTagType),
description: `List of neutral tags for the scanned domain from this scan.`,
- resolve: async ({ neutralTags }, _, { loaders: { loadGuidanceTagByTagId } }) => {
- return await loadGuidanceTagByTagId({ tags: neutralTags })
+ resolve: async ({ neutralTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.byTagId({ tags: neutralTags })
},
},
negativeTags: {
type: new GraphQLList(guidanceTagType),
description: `List of negative tags for the scanned domain from this scan.`,
- resolve: async ({ negativeTags }, _, { loaders: { loadGuidanceTagByTagId } }) => {
- return await loadGuidanceTagByTagId({ tags: negativeTags })
+ resolve: async ({ negativeTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.byTagId({ tags: negativeTags })
},
},
selectors: {
diff --git a/api/src/dns-scan/objects/dmarc.js b/api/src/dns-scan/objects/dmarc.js
index 323de4ef31..dcaf40eb53 100644
--- a/api/src/dns-scan/objects/dmarc.js
+++ b/api/src/dns-scan/objects/dmarc.js
@@ -39,22 +39,22 @@ subdomains where mail is failing the DMARC authentication and alignment checks.`
positiveTags: {
type: new GraphQLList(guidanceTagType),
description: `List of positive tags for the scanned domain from this scan.`,
- resolve: async ({ positiveTags }, _, { loaders: { loadGuidanceTagByTagId } }) => {
- return await loadGuidanceTagByTagId({ tags: positiveTags })
+ resolve: async ({ positiveTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.byTagId({ tags: positiveTags })
},
},
neutralTags: {
type: new GraphQLList(guidanceTagType),
description: `List of neutral tags for the scanned domain from this scan.`,
- resolve: async ({ neutralTags }, _, { loaders: { loadGuidanceTagByTagId } }) => {
- return await loadGuidanceTagByTagId({ tags: neutralTags })
+ resolve: async ({ neutralTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.byTagId({ tags: neutralTags })
},
},
negativeTags: {
type: new GraphQLList(guidanceTagType),
description: `List of negative tags for the scanned domain from this scan.`,
- resolve: async ({ negativeTags }, _, { loaders: { loadGuidanceTagByTagId } }) => {
- return await loadGuidanceTagByTagId({ tags: negativeTags })
+ resolve: async ({ negativeTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.byTagId({ tags: negativeTags })
},
},
}),
diff --git a/api/src/dns-scan/objects/index.js b/api/src/dns-scan/objects/index.js
index 1308111823..3ff3084458 100644
--- a/api/src/dns-scan/objects/index.js
+++ b/api/src/dns-scan/objects/index.js
@@ -3,6 +3,5 @@ export * from './dkim-selector-result'
export * from './dmarc'
export * from './dns-scan'
export * from './dns-scan-connection'
-export * from './mx-record-connection'
export * from './mx-record'
export * from './spf'
diff --git a/api/src/dns-scan/objects/mx-record-connection.js b/api/src/dns-scan/objects/mx-record-connection.js
deleted file mode 100644
index f33a7e3143..0000000000
--- a/api/src/dns-scan/objects/mx-record-connection.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import { GraphQLInt } from 'graphql'
-import { connectionDefinitions } from 'graphql-relay'
-
-import { mxRecordDiffType } from './mx-record'
-
-export const mxRecordConnection = connectionDefinitions({
- name: 'MXRecordDiff',
- nodeType: mxRecordDiffType,
- connectionFields: () => ({
- totalCount: {
- type: GraphQLInt,
- description: 'The total amount of DNS scans related to a given domain.',
- resolve: ({ totalCount }) => totalCount,
- },
- }),
-})
diff --git a/api/src/dns-scan/objects/mx-record.js b/api/src/dns-scan/objects/mx-record.js
index d6ed6341ac..f4a339f4f0 100644
--- a/api/src/dns-scan/objects/mx-record.js
+++ b/api/src/dns-scan/objects/mx-record.js
@@ -1,6 +1,4 @@
import { GraphQLInt, GraphQLList, GraphQLObjectType, GraphQLString } from 'graphql'
-import { GraphQLDateTime } from 'graphql-scalars'
-import { globalIdField } from 'graphql-relay'
export const mxHostType = new GraphQLObjectType({
name: 'MXHost',
@@ -38,20 +36,3 @@ export const mxRecordType = new GraphQLObjectType({
},
}),
})
-
-export const mxRecordDiffType = new GraphQLObjectType({
- name: 'MXRecordDiff',
- fields: () => ({
- id: globalIdField('dns'),
- timestamp: {
- type: GraphQLDateTime,
- description: `The time when the scan was initiated.`,
- resolve: ({ timestamp }) => new Date(timestamp),
- },
- mxRecords: {
- type: mxRecordType,
- description: `The MX records for the domain (if they exist).`,
- resolve: ({ mxRecords }) => mxRecords,
- },
- }),
-})
diff --git a/api/src/dns-scan/objects/spf.js b/api/src/dns-scan/objects/spf.js
index 5e2fdd791e..9104d7aa14 100644
--- a/api/src/dns-scan/objects/spf.js
+++ b/api/src/dns-scan/objects/spf.js
@@ -27,22 +27,22 @@ export const spfType = new GraphQLObjectType({
positiveTags: {
type: new GraphQLList(guidanceTagType),
description: `List of positive tags for the scanned domain from this scan.`,
- resolve: async ({ positiveTags }, _, { loaders: { loadGuidanceTagByTagId } }) => {
- return await loadGuidanceTagByTagId({ tags: positiveTags })
+ resolve: async ({ positiveTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.byTagId({ tags: positiveTags })
},
},
neutralTags: {
type: new GraphQLList(guidanceTagType),
description: `List of neutral tags for the scanned domain from this scan.`,
- resolve: async ({ neutralTags }, _, { loaders: { loadGuidanceTagByTagId } }) => {
- return await loadGuidanceTagByTagId({ tags: neutralTags })
+ resolve: async ({ neutralTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.byTagId({ tags: neutralTags })
},
},
negativeTags: {
type: new GraphQLList(guidanceTagType),
description: `List of negative tags for the scanned domain from this scan.`,
- resolve: async ({ negativeTags }, _, { loaders: { loadGuidanceTagByTagId } }) => {
- return await loadGuidanceTagByTagId({ tags: negativeTags })
+ resolve: async ({ negativeTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.byTagId({ tags: negativeTags })
},
},
}),
diff --git a/api/src/domain/helpers/__tests__/build-domain-filters.test.js b/api/src/domain/helpers/__tests__/build-domain-filters.test.js
new file mode 100644
index 0000000000..6bc33450a2
--- /dev/null
+++ b/api/src/domain/helpers/__tests__/build-domain-filters.test.js
@@ -0,0 +1,267 @@
+import { buildDomainFilters } from '../build-domain-filters'
+
+// Helper to extract the query string and bind vars from an aql result,
+// stripping the accumulated prefix so assertions stay readable.
+function parse(result) {
+ return {
+ query: result.query,
+ bindVars: result.bindVars,
+ }
+}
+
+// ─── Empty / no-op cases ────────────────────────────────────────────────────
+
+describe('buildDomainFilters – empty / no-op', () => {
+ it('returns an empty aql fragment when filters is undefined', () => {
+ const result = buildDomainFilters({})
+ expect(result.query).toBe('')
+ expect(result.bindVars).toEqual({})
+ })
+
+ it('returns an empty aql fragment when filters is null', () => {
+ const result = buildDomainFilters({ filters: null })
+ expect(result.query).toBe('')
+ expect(result.bindVars).toEqual({})
+ })
+
+ it('returns an empty aql fragment when filters is an empty array', () => {
+ const result = buildDomainFilters({ filters: [] })
+ expect(result.query).toBe('')
+ expect(result.bindVars).toEqual({})
+ })
+})
+
+// ─── Status filters ─────────────────────────────────────────────────────────
+
+describe('buildDomainFilters – status filters (==)', () => {
+ const STATUS_CASES = [
+ ['dmarc-status', 'v.status.dmarc'],
+ ['dkim-status', 'v.status.dkim'],
+ ['https-status', 'v.status.https'],
+ ['spf-status', 'v.status.spf'],
+ ['ciphers-status', 'v.status.ciphers'],
+ ['curves-status', 'v.status.curves'],
+ ['hsts-status', 'v.status.hsts'],
+ ['policy-status', 'v.status.policy'],
+ ['protocols-status', 'v.status.protocols'],
+ ['certificates-status', 'v.status.certificates'],
+ ]
+
+ test.each(STATUS_CASES)('%s maps to %s with == comparison', (filterCategory, aqlField) => {
+ const { query, bindVars } = parse(
+ buildDomainFilters({
+ filters: [{ filterCategory, comparison: '==', filterValue: 'pass' }],
+ }),
+ )
+ expect(query).toContain(`FILTER ${aqlField} ==`)
+ expect(Object.values(bindVars)).toContain('pass')
+ })
+})
+
+describe('buildDomainFilters – status filters (!=)', () => {
+ it('uses != comparison operator for dmarc-status', () => {
+ const { query, bindVars } = parse(
+ buildDomainFilters({
+ filters: [{ filterCategory: 'dmarc-status', comparison: '!=', filterValue: 'fail' }],
+ }),
+ )
+ expect(query).toContain('FILTER v.status.dmarc !=')
+ expect(Object.values(bindVars)).toContain('fail')
+ })
+
+ it('uses != comparison operator for https-status', () => {
+ const { query } = parse(
+ buildDomainFilters({
+ filters: [{ filterCategory: 'https-status', comparison: '!=', filterValue: 'info' }],
+ }),
+ )
+ expect(query).toContain('FILTER v.status.https !=')
+ })
+})
+
+// ─── Tag filters – mapped fields ─────────────────────────────────────────────
+
+describe('buildDomainFilters – tags filter (mapped fields)', () => {
+ const TAG_CASES = [
+ ['archived', 'v.archived', true],
+ ['nxdomain', 'v.rcode', 'NXDOMAIN'],
+ ['blocked', 'v.blocked', true],
+ ['wildcard-sibling', 'v.wildcardSibling', true],
+ ['wildcard-entry', 'v.wildcardEntry', true],
+ ['scan-pending', 'v.webScanPending', true],
+ ['has-entrust-certificate', 'v.hasEntrustCertificate', true],
+ ['cve-detected', 'v.cveDetected', true],
+ ['cvd-enrolled', 'v.cvdEnrollment.status', 'enrolled'],
+ ['cvd-pending', 'v.cvdEnrollment.status', 'pending'],
+ ]
+
+ test.each(TAG_CASES)('tag value "%s" filters on field %s', (filterValue, aqlField) => {
+ const { query } = parse(
+ buildDomainFilters({
+ filters: [{ filterCategory: 'tags', comparison: '==', filterValue }],
+ }),
+ )
+ expect(query).toContain(`FILTER ${aqlField}`)
+ })
+
+ it('applies != comparison for a mapped tag (archived)', () => {
+ const { query } = parse(
+ buildDomainFilters({
+ filters: [{ filterCategory: 'tags', comparison: '!=', filterValue: 'archived' }],
+ }),
+ )
+ expect(query).toContain('FILTER v.archived !=')
+ })
+})
+
+describe('buildDomainFilters – tags filter (unmapped / free-form)', () => {
+ it('falls back to POSITION(e.tags, ...) for an unknown tag value', () => {
+ const { query, bindVars } = parse(
+ buildDomainFilters({
+ filters: [{ filterCategory: 'tags', comparison: '==', filterValue: 'some-custom-tag' }],
+ }),
+ )
+ expect(query).toContain('FILTER POSITION(e.tags,')
+ expect(query).toContain('== true')
+ expect(Object.values(bindVars)).toContain('some-custom-tag')
+ })
+
+ it('uses != with POSITION for an unknown tag with != comparison', () => {
+ const { query } = parse(
+ buildDomainFilters({
+ filters: [{ filterCategory: 'tags', comparison: '!=', filterValue: 'another-tag' }],
+ }),
+ )
+ expect(query).toContain('POSITION(e.tags,')
+ expect(query).toContain('!= true')
+ })
+})
+
+// ─── Other filter categories ─────────────────────────────────────────────────
+
+describe('buildDomainFilters – asset-state filter', () => {
+ it('filters on e.assetState with == comparison', () => {
+ const { query, bindVars } = parse(
+ buildDomainFilters({
+ filters: [{ filterCategory: 'asset-state', comparison: '==', filterValue: 'approved' }],
+ }),
+ )
+ expect(query).toContain('FILTER e.assetState ==')
+ expect(Object.values(bindVars)).toContain('approved')
+ })
+
+ it('filters on e.assetState with != comparison', () => {
+ const { query } = parse(
+ buildDomainFilters({
+ filters: [{ filterCategory: 'asset-state', comparison: '!=', filterValue: 'hidden' }],
+ }),
+ )
+ expect(query).toContain('FILTER e.assetState !=')
+ })
+})
+
+describe('buildDomainFilters – guidance-tag filter', () => {
+ it('filters using POSITION(negativeTags, ...) with == comparison', () => {
+ const { query, bindVars } = parse(
+ buildDomainFilters({
+ filters: [{ filterCategory: 'guidance-tag', comparison: '==', filterValue: 'weak-cipher' }],
+ }),
+ )
+ expect(query).toContain('FILTER POSITION(negativeTags,')
+ expect(query).toContain('== true')
+ expect(Object.values(bindVars)).toContain('weak-cipher')
+ })
+
+ it('filters using POSITION(negativeTags, ...) with != comparison', () => {
+ const { query } = parse(
+ buildDomainFilters({
+ filters: [{ filterCategory: 'guidance-tag', comparison: '!=', filterValue: 'weak-cipher' }],
+ }),
+ )
+ expect(query).toContain('FILTER POSITION(negativeTags,')
+ expect(query).toContain('!= true')
+ })
+})
+
+describe('buildDomainFilters – dmarc-phase filter', () => {
+ it('filters on v.phase with == comparison', () => {
+ const { query, bindVars } = parse(
+ buildDomainFilters({
+ filters: [{ filterCategory: 'dmarc-phase', comparison: '==', filterValue: 'assess' }],
+ }),
+ )
+ expect(query).toContain('FILTER v.phase ==')
+ expect(Object.values(bindVars)).toContain('assess')
+ })
+
+ it('filters on v.phase with != comparison', () => {
+ const { query } = parse(
+ buildDomainFilters({
+ filters: [{ filterCategory: 'dmarc-phase', comparison: '!=', filterValue: 'deploy' }],
+ }),
+ )
+ expect(query).toContain('FILTER v.phase !=')
+ })
+})
+
+describe('buildDomainFilters – unknown filterCategory', () => {
+ it('silently skips an unrecognised filter category', () => {
+ const { query, bindVars } = parse(
+ buildDomainFilters({
+ filters: [{ filterCategory: 'totally-unknown', comparison: '==', filterValue: 'x' }],
+ }),
+ )
+ // The accumulated fragment should be empty — nothing appended
+ expect(query).toBe('')
+ expect(bindVars).toEqual({})
+ })
+})
+
+// ─── Multiple filters combined ───────────────────────────────────────────────
+
+describe('buildDomainFilters – multiple filters', () => {
+ it('accumulates all filters into a single AQL fragment', () => {
+ const { query, bindVars } = parse(
+ buildDomainFilters({
+ filters: [
+ { filterCategory: 'dmarc-status', comparison: '==', filterValue: 'pass' },
+ { filterCategory: 'https-status', comparison: '!=', filterValue: 'fail' },
+ { filterCategory: 'asset-state', comparison: '==', filterValue: 'approved' },
+ ],
+ }),
+ )
+ expect(query).toContain('FILTER v.status.dmarc ==')
+ expect(query).toContain('FILTER v.status.https !=')
+ expect(query).toContain('FILTER e.assetState ==')
+ expect(Object.values(bindVars)).toContain('pass')
+ expect(Object.values(bindVars)).toContain('fail')
+ expect(Object.values(bindVars)).toContain('approved')
+ })
+
+ it('combines a mapped tag filter with a status filter', () => {
+ const { query } = parse(
+ buildDomainFilters({
+ filters: [
+ { filterCategory: 'tags', comparison: '==', filterValue: 'blocked' },
+ { filterCategory: 'spf-status', comparison: '==', filterValue: 'pass' },
+ ],
+ }),
+ )
+ expect(query).toContain('FILTER v.blocked')
+ expect(query).toContain('FILTER v.status.spf')
+ })
+
+ it('handles an unknown filter mixed with a valid one without losing the valid one', () => {
+ const { query } = parse(
+ buildDomainFilters({
+ filters: [
+ { filterCategory: 'dmarc-phase', comparison: '==', filterValue: 'assess' },
+ { filterCategory: 'not-a-real-category', comparison: '==', filterValue: 'nope' },
+ ],
+ }),
+ )
+ expect(query).toContain('FILTER v.phase ==')
+ // The unknown category should not add anything extra
+ expect(query).not.toContain('nope')
+ })
+})
diff --git a/api/src/domain/helpers/build-domain-filters.js b/api/src/domain/helpers/build-domain-filters.js
new file mode 100644
index 0000000000..e43039d971
--- /dev/null
+++ b/api/src/domain/helpers/build-domain-filters.js
@@ -0,0 +1,121 @@
+import { aql } from 'arangojs'
+
+// Maps filter categories to their AQL field paths
+const STATUS_FILTER_MAP = {
+ 'dmarc-status': 'v.status.dmarc',
+ 'dkim-status': 'v.status.dkim',
+ 'https-status': 'v.status.https',
+ 'spf-status': 'v.status.spf',
+ 'ciphers-status': 'v.status.ciphers',
+ 'curves-status': 'v.status.curves',
+ 'hsts-status': 'v.status.hsts',
+ 'policy-status': 'v.status.policy',
+ 'protocols-status': 'v.status.protocols',
+ 'certificates-status': 'v.status.certificates',
+}
+
+// Maps tag filter values to { field, value } pairs for direct field comparisons
+const TAG_FIELD_MAP = {
+ archived: { field: 'v.archived', value: true },
+ nxdomain: { field: 'v.rcode', value: 'NXDOMAIN' },
+ blocked: { field: 'v.blocked', value: true },
+ 'wildcard-sibling': { field: 'v.wildcardSibling', value: true },
+ 'wildcard-entry': { field: 'v.wildcardEntry', value: true },
+ 'scan-pending': { field: 'v.webScanPending', value: true },
+ 'has-entrust-certificate': { field: 'v.hasEntrustCertificate', value: true },
+ 'cve-detected': { field: 'v.cveDetected', value: true },
+ 'cvd-enrolled': { field: 'v.cvdEnrollment.status', value: 'enrolled' },
+ 'cvd-pending': { field: 'v.cvdEnrollment.status', value: 'pending' },
+ 'cvd-deny': { field: 'v.cvdEnrollment.status', value: 'deny' },
+}
+
+function buildComparison(comparison) {
+ return comparison === '==' ? aql`==` : aql`!=`
+}
+
+function buildStatusFilter(accumulated, field, comparison, filterValue) {
+ // AQL doesn't support dynamic field access, so we need a switch here.
+ // The field string is only ever sourced from STATUS_FILTER_MAP above, never user input.
+ switch (field) {
+ case 'v.status.dmarc':
+ return aql`${accumulated} FILTER v.status.dmarc ${comparison} ${filterValue}`
+ case 'v.status.dkim':
+ return aql`${accumulated} FILTER v.status.dkim ${comparison} ${filterValue}`
+ case 'v.status.https':
+ return aql`${accumulated} FILTER v.status.https ${comparison} ${filterValue}`
+ case 'v.status.spf':
+ return aql`${accumulated} FILTER v.status.spf ${comparison} ${filterValue}`
+ case 'v.status.ciphers':
+ return aql`${accumulated} FILTER v.status.ciphers ${comparison} ${filterValue}`
+ case 'v.status.curves':
+ return aql`${accumulated} FILTER v.status.curves ${comparison} ${filterValue}`
+ case 'v.status.hsts':
+ return aql`${accumulated} FILTER v.status.hsts ${comparison} ${filterValue}`
+ case 'v.status.policy':
+ return aql`${accumulated} FILTER v.status.policy ${comparison} ${filterValue}`
+ case 'v.status.protocols':
+ return aql`${accumulated} FILTER v.status.protocols ${comparison} ${filterValue}`
+ case 'v.status.certificates':
+ return aql`${accumulated} FILTER v.status.certificates ${comparison} ${filterValue}`
+ default:
+ return accumulated
+ }
+}
+
+function buildTagFilter(accumulated, comparison, filterValue) {
+ const mapped = TAG_FIELD_MAP[filterValue]
+
+ if (!mapped) {
+ return aql`${accumulated} FILTER POSITION(e.tags, ${filterValue}) ${comparison} true`
+ }
+
+ // Same dynamic field problem — switch on the known field paths from TAG_FIELD_MAP
+ switch (mapped.field) {
+ case 'v.archived':
+ return aql`${accumulated} FILTER v.archived ${comparison} ${mapped.value}`
+ case 'v.rcode':
+ return aql`${accumulated} FILTER v.rcode ${comparison} ${mapped.value}`
+ case 'v.blocked':
+ return aql`${accumulated} FILTER v.blocked ${comparison} ${mapped.value}`
+ case 'v.wildcardSibling':
+ return aql`${accumulated} FILTER v.wildcardSibling ${comparison} ${mapped.value}`
+ case 'v.wildcardEntry':
+ return aql`${accumulated} FILTER v.wildcardEntry ${comparison} ${mapped.value}`
+ case 'v.webScanPending':
+ return aql`${accumulated} FILTER v.webScanPending ${comparison} ${mapped.value}`
+ case 'v.hasEntrustCertificate':
+ return aql`${accumulated} FILTER v.hasEntrustCertificate ${comparison} ${mapped.value}`
+ case 'v.cveDetected':
+ return aql`${accumulated} FILTER v.cveDetected ${comparison} ${mapped.value}`
+ case 'v.cvdEnrollment.status':
+ return aql`${accumulated} FILTER v.cvdEnrollment.status ${comparison} ${mapped.value}`
+ default:
+ return accumulated
+ }
+}
+
+function buildSingleFilter(accumulated, { filterCategory, comparison, filterValue }) {
+ const cmp = buildComparison(comparison)
+
+ if (filterCategory in STATUS_FILTER_MAP) {
+ return buildStatusFilter(accumulated, STATUS_FILTER_MAP[filterCategory], cmp, filterValue)
+ }
+
+ switch (filterCategory) {
+ case 'tags':
+ return buildTagFilter(accumulated, cmp, filterValue)
+ case 'asset-state':
+ return aql`${accumulated} FILTER e.assetState ${cmp} ${filterValue}`
+ case 'guidance-tag':
+ return aql`${accumulated} FILTER POSITION(negativeTags, ${filterValue}) ${cmp} true`
+ case 'dmarc-phase':
+ return aql`${accumulated} FILTER v.phase ${cmp} ${filterValue}`
+ default:
+ return accumulated
+ }
+}
+
+export function buildDomainFilters({ filters }) {
+ if (!filters?.length) return aql``
+ return filters.reduce(buildSingleFilter, aql``)
+}
diff --git a/api/src/domain/helpers/index.js b/api/src/domain/helpers/index.js
new file mode 100644
index 0000000000..2e6a27b84a
--- /dev/null
+++ b/api/src/domain/helpers/index.js
@@ -0,0 +1 @@
+export * from './build-domain-filters'
diff --git a/api/src/domain/loaders/load-domain-connections-by-organizations-id.js b/api/src/domain/loaders/load-domain-connections-by-organizations-id.js
index b8dde82124..14dd6d7a55 100644
--- a/api/src/domain/loaders/load-domain-connections-by-organizations-id.js
+++ b/api/src/domain/loaders/load-domain-connections-by-organizations-id.js
@@ -1,6 +1,7 @@
import { aql } from 'arangojs'
import { fromGlobalId, toGlobalId } from 'graphql-relay'
import { t } from '@lingui/macro'
+import { buildDomainFilters } from '../helpers'
export const loadDomainConnectionsByOrgId =
({ query, userKey, cleanseInput, i18n, auth: { loginRequiredBool } }) =>
@@ -288,129 +289,7 @@ export const loadDomainConnectionsByOrgId =
}
}
- let domainFilters = aql``
- if (typeof filters !== 'undefined') {
- filters.forEach(({ filterCategory, comparison, filterValue }) => {
- if (comparison === '==') {
- comparison = aql`==`
- } else {
- comparison = aql`!=`
- }
- if (filterCategory === 'dmarc-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.dmarc ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'dkim-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.dkim ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'https-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.https ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'spf-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.spf ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'ciphers-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.ciphers ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'curves-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.curves ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'hsts-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.hsts ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'policy-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.policy ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'protocols-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.protocols ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'certificates-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.certificates ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'tags') {
- if (filterValue === 'archived') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.archived ${comparison} true
- `
- } else if (filterValue === 'nxdomain') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.rcode ${comparison} "NXDOMAIN"
- `
- } else if (filterValue === 'blocked') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.blocked ${comparison} true
- `
- } else if (filterValue === 'wildcard-sibling') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.wildcardSibling ${comparison} true
- `
- } else if (filterValue === 'wildcard-entry') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.wildcardEntry ${comparison} true
- `
- } else if (filterValue === 'scan-pending') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.webScanPending ${comparison} true
- `
- } else if (filterValue === 'has-entrust-certificate') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.hasEntrustCertificate ${comparison} true
- `
- } else if (filterValue === 'cve-detected') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.cveDetected ${comparison} true
- `
- } else {
- domainFilters = aql`
- ${domainFilters}
- FILTER POSITION(e.tags, ${filterValue}) ${comparison} true
- `
- }
- } else if (filterCategory === 'asset-state') {
- domainFilters = aql`
- ${domainFilters}
- FILTER e.assetState ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'guidance-tag') {
- domainFilters = aql`
- ${domainFilters}
- FILTER POSITION(negativeTags, ${filterValue}) ${comparison} true
- `
- } else if (filterCategory === 'dmarc-phase') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.phase ${comparison} ${filterValue}
- `
- }
- })
- }
+ const domainFilters = buildDomainFilters({ filters })
let domainQuery = aql``
let loopString = aql`FOR domain IN collectedDomains`
diff --git a/api/src/domain/loaders/load-domain-connections-by-user-id.js b/api/src/domain/loaders/load-domain-connections-by-user-id.js
index 392648a354..b15b39d901 100644
--- a/api/src/domain/loaders/load-domain-connections-by-user-id.js
+++ b/api/src/domain/loaders/load-domain-connections-by-user-id.js
@@ -1,6 +1,7 @@
import { aql } from 'arangojs'
import { fromGlobalId, toGlobalId } from 'graphql-relay'
import { t } from '@lingui/macro'
+import { buildDomainFilters } from '../helpers'
export const loadDomainConnectionsByUserId =
({ query, userKey, cleanseInput, i18n, auth: { loginRequiredBool } }) =>
@@ -315,114 +316,7 @@ export const loadDomainConnectionsByUserId =
}
}
- let domainFilters = aql``
- if (typeof filters !== 'undefined') {
- filters.forEach(({ filterCategory, comparison, filterValue }) => {
- if (comparison === '==') {
- comparison = aql`==`
- } else {
- comparison = aql`!=`
- }
- if (filterCategory === 'dmarc-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.dmarc ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'dkim-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.dkim ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'https-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.https ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'spf-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.spf ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'ciphers-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.ciphers ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'curves-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.curves ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'hsts-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.hsts ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'policy-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.policy ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'protocols-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.protocols ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'certificates-status') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.status.certificates ${comparison} ${filterValue}
- `
- } else if (filterCategory === 'tags') {
- if (filterValue === 'archived') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.archived ${comparison} true
- `
- } else if (filterValue === 'nxdomain') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.rcode ${comparison} "NXDOMAIN"
- `
- } else if (filterValue === 'blocked') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.blocked ${comparison} true
- `
- } else if (filterValue === 'wildcard-sibling') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.wildcardSibling ${comparison} true
- `
- } else if (filterValue === 'wildcard-entry') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.wildcardEntry ${comparison} true
- `
- } else if (filterValue === 'scan-pending') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.webScanPending ${comparison} true
- `
- } else if (filterValue === 'has-entrust-certificate') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.hasEntrustCertificate ${comparison} true
- `
- } else if (filterValue === 'cve-detected') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.cveDetected ${comparison} true
- `
- }
- } else if (filterCategory === 'dmarc-phase') {
- domainFilters = aql`
- ${domainFilters}
- FILTER v.phase ${comparison} ${filterValue}
- `
- }
- })
- }
+ const domainFilters = buildDomainFilters({ filters })
let domainKeysQuery
if (myTracker) {
diff --git a/api/src/domain/mutations/__tests__/create-domain.test.js b/api/src/domain/mutations/__tests__/create-domain.test.js
index 71e9b279f4..26c60b9e6b 100644
--- a/api/src/domain/mutations/__tests__/create-domain.test.js
+++ b/api/src/domain/mutations/__tests__/create-domain.test.js
@@ -17,9 +17,11 @@ import {
verifiedRequired,
tfaRequired,
checkDomainPermission,
+ AuthDataSource,
} from '../../../auth'
import { loadDkimSelectorsByDomainId, loadDomainByDomain } from '../../loaders'
import { loadOrgByKey, loadOrgConnectionsByDomainId } from '../../../organization/loaders'
+import { OrganizationDataSource } from '../../../organization/data-source'
import { loadUserByKey } from '../../../user/loaders'
import dbschema from '../../../../database.json'
import { collectionNames } from '../../../collection-names'
@@ -33,6 +35,20 @@ describe('create a domain', () => {
const mockedInfo = (output) => consoleOutput.push(output)
const mockedWarn = (output) => consoleOutput.push(output)
const mockedError = (output) => consoleOutput.push(output)
+
+ const i18n = setupI18n({
+ locale: 'en',
+ localeData: {
+ en: { plurals: {} },
+ fr: { plurals: {} },
+ },
+ locales: ['en', 'fr'],
+ messages: {
+ en: englishMessages.messages,
+ fr: frenchMessages.messages,
+ },
+ })
+
beforeAll(async () => {
console.info = mockedInfo
console.warn = mockedWarn
@@ -47,18 +63,6 @@ describe('create a domain', () => {
consoleOutput.length = 0
})
describe('given a successful domain creation', () => {
- const i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
beforeAll(async () => {
;({ query, drop, truncate, collections, transaction } = await ensure({
variables: {
@@ -204,6 +208,19 @@ describe('create a domain', () => {
verifiedRequired: verifiedRequired({}),
tfaRequired: tfaRequired({}),
},
+ dataSources: {
+ auth: new AuthDataSource({ query, userKey: user._key }),
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ loginRequiredBool: true,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
query,
@@ -365,6 +382,19 @@ describe('create a domain', () => {
verifiedRequired: verifiedRequired({}),
tfaRequired: tfaRequired({}),
},
+ dataSources: {
+ auth: new AuthDataSource({ query, userKey: user._key }),
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ loginRequiredBool: true,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
query,
@@ -502,6 +532,19 @@ describe('create a domain', () => {
verifiedRequired: verifiedRequired({}),
tfaRequired: tfaRequired({}),
},
+ dataSources: {
+ auth: new AuthDataSource({ query, userKey: user._key }),
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ loginRequiredBool: true,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
query,
@@ -679,6 +722,19 @@ describe('create a domain', () => {
verifiedRequired: verifiedRequired({}),
tfaRequired: tfaRequired({}),
},
+ dataSources: {
+ auth: new AuthDataSource({ query, userKey: user._key }),
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ loginRequiredBool: true,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
query,
@@ -819,6 +875,19 @@ describe('create a domain', () => {
verifiedRequired: verifiedRequired({}),
tfaRequired: tfaRequired({}),
},
+ dataSources: {
+ auth: new AuthDataSource({ query, userKey: user._key }),
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ loginRequiredBool: true,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
query,
@@ -960,6 +1029,19 @@ describe('create a domain', () => {
verifiedRequired: verifiedRequired({}),
tfaRequired: tfaRequired({}),
},
+ dataSources: {
+ auth: new AuthDataSource({ query, userKey: user._key }),
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ loginRequiredBool: true,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
query,
@@ -1030,30 +1112,28 @@ describe('create a domain', () => {
})
describe('given an unsuccessful domain creation', () => {
let i18n
- describe('request language is english', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
+ beforeAll(() => {
+ i18n = setupI18n({
+ locale: 'en',
+ localeData: {
+ en: { plurals: {} },
+ fr: { plurals: {} },
+ },
+ locales: ['en', 'fr'],
+ messages: {
+ en: englishMessages.messages,
+ fr: frenchMessages.messages,
+ },
})
- describe('org does not exist', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
+ })
+ describe('org does not exist', () => {
+ it('returns an error', async () => {
+ const response = await graphql({
+ schema,
+ source: `
mutation {
createDomain(
- input: { orgId: "b3JnYW5pemF0aW9uOjE=", domain: "test.gc.ca"
- assetState: APPROVED }
+ input: { orgId: "b3JnYW5pemF0aW9uOjE=", domain: "test.gc.ca", assetState: APPROVED, cvdEnrollment: { status: ENROLLED } }
) {
result {
... on Domain {
@@ -1068,6 +1148,9 @@ describe('create a domain', () => {
spf
ssl
}
+ cvdEnrollment {
+ status
+ }
organizations(first: 5) {
edges {
node {
@@ -1085,74 +1168,149 @@ describe('create a domain', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: 123,
+ publish: jest.fn(),
+ auth: {
+ checkDomainPermission: checkDomainPermission({
+ i18n,
+ userKey: user._key,
+ query,
+ }),
+ checkPermission: jest.fn(),
+ saltedHash: jest.fn(),
+ userRequired: jest.fn(),
+ verifiedRequired: jest.fn(),
+ tfaRequired: jest.fn(),
+ },
+ loaders: {
+ loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
+ query,
+ userKey: user._key,
+ cleanseInput,
+ i18n,
+ auth: { loginRequiredBool: true },
+ }),
+ loadDomainByDomain: {
+ load: jest.fn(),
},
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: user._key,
- query,
- }),
- checkPermission: jest.fn(),
- saltedHash: jest.fn(),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
+ loadOrgByKey: {
+ load: jest.fn().mockReturnValue(undefined),
},
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: user._key,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn(),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
+ loadOrgConnectionsByDomainId: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
},
- validators: { cleanseInput, slugify },
},
- })
+ validators: { cleanseInput, slugify },
+ },
+ })
- const error = {
- data: {
- createDomain: {
- result: {
- code: 400,
- description: 'Unable to create domain in unknown organization.',
- },
+ const error = {
+ data: {
+ createDomain: {
+ result: {
+ code: 400,
+ description: 'Unable to create domain in unknown organization.',
},
},
- }
+ },
+ }
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to create a domain to an organization: 1 that does not exist.`,
- ])
+ expect(response).toEqual(error)
+ expect(consoleOutput).toEqual([
+ `User: 123 attempted to create a domain to an organization: 1 that does not exist.`,
+ ])
+ })
+
+ it('returns the domain with cvdEnrollment status not-enrolled when not provided', async () => {
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ createDomain(
+ input: { orgId: "b3JnYW5pemF0aW9uOjE=", domain: "test.gc.ca", assetState: APPROVED }
+ ) {
+ result {
+ ... on Domain {
+ cvdEnrollment {
+ status
+ }
+ }
+ }
+ }
+ }
+ `,
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: 123,
+ publish: jest.fn(),
+ auth: {
+ checkDomainPermission: checkDomainPermission({
+ i18n,
+ userKey: user._key,
+ query,
+ }),
+ checkPermission: jest.fn(),
+ saltedHash: jest.fn(),
+ userRequired: jest.fn(),
+ verifiedRequired: jest.fn(),
+ tfaRequired: jest.fn(),
+ },
+ loaders: {
+ loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
+ query,
+ userKey: user._key,
+ cleanseInput,
+ i18n,
+ auth: { loginRequiredBool: true },
+ }),
+ loadDomainByDomain: {
+ load: jest.fn(),
+ },
+ loadOrgByKey: {
+ load: jest.fn().mockReturnValue(undefined),
+ },
+ loadOrgConnectionsByDomainId: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
+ },
+ },
+ validators: { cleanseInput, slugify },
+ },
})
+ // Should default to not-enrolled
+ if (
+ response.data &&
+ response.data.createDomain &&
+ response.data.createDomain.result &&
+ response.data.createDomain.result.cvdEnrollment
+ ) {
+ expect(response.data.createDomain.result.cvdEnrollment.status).toBe('not-enrolled')
+ }
})
- describe('user does not belong to organization', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
+ })
+ })
+ describe('user does not belong to organization', () => {
+ it('returns an error', async () => {
+ const response = await graphql({
+ schema,
+ source: `
mutation {
createDomain(
input: {
@@ -1191,76 +1349,76 @@ describe('create a domain', () => {
}
}
`,
- rootValue: null,
- contextValue: {
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query,
+ collections: collectionNames,
+ transaction,
+ userKey: 123,
+ publish: jest.fn(),
+ auth: {
+ checkDomainPermission: checkDomainPermission({
i18n,
- request: {
- language: 'en',
- },
+ userKey: user._key,
query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: user._key,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue(undefined),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: user._key,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn(),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
+ }),
+ checkPermission: jest.fn().mockReturnValue(undefined),
+ userRequired: jest.fn(),
+ saltedHash: jest.fn(),
+ verifiedRequired: jest.fn(),
+ tfaRequired: jest.fn(),
+ },
+ loaders: {
+ loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
+ query,
+ userKey: user._key,
+ cleanseInput,
+ i18n,
+ auth: { loginRequiredBool: true },
+ }),
+ loadDomainByDomain: {
+ load: jest.fn(),
},
- })
-
- const error = {
- data: {
- createDomain: {
- result: {
- code: 400,
- description: 'Permission Denied: Please contact organization user for help with creating domain.',
- },
- },
+ loadOrgByKey: {
+ load: jest.fn().mockReturnValue({
+ slug: 'treasury-board-secretariat',
+ }),
},
- }
-
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to create a domain in: treasury-board-secretariat, however they do not have permission to do so.`,
- ])
- })
+ loadOrgConnectionsByDomainId: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
+ },
+ },
+ validators: { cleanseInput, slugify },
+ },
})
- describe('the domain already exists in the given organization', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
+
+ const error = {
+ data: {
+ createDomain: {
+ result: {
+ code: 400,
+ description: 'Permission Denied: Please contact organization user for help with creating domain.',
+ },
+ },
+ },
+ }
+
+ expect(response).toEqual(error)
+ expect(consoleOutput).toEqual([
+ `User: 123 attempted to create a domain in: treasury-board-secretariat, however they do not have permission to do so.`,
+ ])
+ })
+ })
+ describe('the domain already exists in the given organization', () => {
+ it('returns an error', async () => {
+ const response = await graphql({
+ schema,
+ source: `
mutation {
createDomain(
input: {
@@ -1299,79 +1457,79 @@ describe('create a domain', () => {
}
}
`,
- rootValue: null,
- contextValue: {
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query: jest.fn().mockReturnValue({
+ next: jest.fn().mockReturnValue({}),
+ }),
+ collections: collectionNames,
+ transaction,
+ userKey: 123,
+ publish: jest.fn(),
+ auth: {
+ checkDomainPermission: checkDomainPermission({
i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValue({}),
+ userKey: user._key,
+ query,
+ }),
+ checkPermission: jest.fn().mockReturnValue('admin'),
+ userRequired: jest.fn(),
+ saltedHash: jest.fn(),
+ verifiedRequired: jest.fn(),
+ tfaRequired: jest.fn(),
+ },
+ loaders: {
+ loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
+ query,
+ userKey: user._key,
+ cleanseInput,
+ i18n,
+ auth: { loginRequiredBool: true },
+ }),
+ loadDomainByDomain: {
+ load: jest.fn(),
+ },
+ loadOrgByKey: {
+ load: jest.fn().mockReturnValue({
+ slug: 'treasury-board-secretariat',
}),
- collections: collectionNames,
- transaction,
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: user._key,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: user._key,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn(),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
},
- })
+ loadOrgConnectionsByDomainId: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
+ },
+ },
+ validators: { cleanseInput, slugify },
+ },
+ })
- const error = {
- data: {
- createDomain: {
- result: {
- code: 400,
- description: 'Unable to create domain, organization has already claimed it.',
- },
- },
+ const error = {
+ data: {
+ createDomain: {
+ result: {
+ code: 400,
+ description: 'Unable to create domain, organization has already claimed it.',
},
- }
+ },
+ },
+ }
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to create a domain for: treasury-board-secretariat, however that org already has that domain claimed.`,
- ])
- })
- })
- describe('database error occurs', () => {
- describe('when checking to see if org already contains domain', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
+ expect(response).toEqual(error)
+ expect(consoleOutput).toEqual([
+ `User: 123 attempted to create a domain for: treasury-board-secretariat, however that org already has that domain claimed.`,
+ ])
+ })
+ })
+ describe('database error occurs', () => {
+ describe('when checking to see if org already contains domain', () => {
+ it('returns an error message', async () => {
+ const response = await graphql({
+ schema,
+ source: `
mutation {
createDomain(
input: {
@@ -1410,69 +1568,69 @@ describe('create a domain', () => {
}
}
`,
- rootValue: null,
- contextValue: {
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query: jest.fn().mockRejectedValue(new Error('Database error occurred.')),
+ collections: collectionNames,
+ transaction,
+ userKey: 123,
+ publish: jest.fn(),
+ auth: {
+ checkDomainPermission: checkDomainPermission({
i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockRejectedValue(new Error('Database error occurred.')),
- collections: collectionNames,
- transaction,
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: user._key,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: user._key,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn(),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
+ userKey: user._key,
+ query,
+ }),
+ checkPermission: jest.fn().mockReturnValue('admin'),
+ userRequired: jest.fn(),
+ saltedHash: jest.fn(),
+ verifiedRequired: jest.fn(),
+ tfaRequired: jest.fn(),
+ },
+ loaders: {
+ loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
+ query,
+ userKey: user._key,
+ cleanseInput,
+ i18n,
+ auth: { loginRequiredBool: true },
+ }),
+ loadDomainByDomain: {
+ load: jest.fn(),
+ },
+ loadOrgByKey: {
+ load: jest.fn().mockReturnValue({
+ slug: 'treasury-board-secretariat',
+ }),
+ },
+ loadOrgConnectionsByDomainId: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
},
- })
+ },
+ validators: { cleanseInput, slugify },
+ },
+ })
- const error = [new GraphQLError('Unable to create domain. Please try again.')]
+ const error = [new GraphQLError('Unable to create domain. Please try again.')]
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Database error occurred while running check to see if domain already exists in an org: Error: Database error occurred.`,
- ])
- })
- })
+ expect(response.errors).toEqual(error)
+ expect(consoleOutput).toEqual([
+ `Database error occurred while running check to see if domain already exists in an org: Error: Database error occurred.`,
+ ])
})
- describe('cursor error occurs', () => {
- describe('when checking to see if org already contains domain', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
+ })
+ })
+ describe('cursor error occurs', () => {
+ describe('when checking to see if org already contains domain', () => {
+ it('returns an error message', async () => {
+ const response = await graphql({
+ schema,
+ source: `
mutation {
createDomain(
input: {
@@ -1511,69 +1669,69 @@ describe('create a domain', () => {
}
}
`,
- rootValue: null,
- contextValue: {
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query: jest.fn().mockReturnValue({
+ next: jest.fn().mockRejectedValue(new Error('Cursor error occurred.')),
+ }),
+ collections: collectionNames,
+ transaction,
+ userKey: 123,
+ publish: jest.fn(),
+ auth: {
+ checkDomainPermission: checkDomainPermission({
i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockRejectedValue(new Error('Cursor error occurred.')),
+ userKey: user._key,
+ query,
+ }),
+ checkPermission: jest.fn().mockReturnValue('admin'),
+ userRequired: jest.fn(),
+ saltedHash: jest.fn(),
+ verifiedRequired: jest.fn(),
+ tfaRequired: jest.fn(),
+ },
+ loaders: {
+ loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
+ query,
+ userKey: user._key,
+ cleanseInput,
+ i18n,
+ auth: { loginRequiredBool: true },
+ }),
+ loadDomainByDomain: {
+ load: jest.fn(),
+ },
+ loadOrgByKey: {
+ load: jest.fn().mockReturnValue({
+ slug: 'treasury-board-secretariat',
}),
- collections: collectionNames,
- transaction,
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: user._key,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: user._key,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn(),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
},
- })
+ loadOrgConnectionsByDomainId: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
+ },
+ },
+ validators: { cleanseInput, slugify },
+ },
+ })
- const error = [new GraphQLError('Unable to create domain. Please try again.')]
+ const error = [new GraphQLError('Unable to create domain. Please try again.')]
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Cursor error occurred while running check to see if domain already exists in an org: Error: Cursor error occurred.`,
- ])
- })
- })
- describe('when gathering inserted domain', () => {
- it('throws an error', async () => {
- const response = await graphql({
- schema,
- source: `
+ expect(response.errors).toEqual(error)
+ expect(consoleOutput).toEqual([
+ `Cursor error occurred while running check to see if domain already exists in an org: Error: Cursor error occurred.`,
+ ])
+ })
+ })
+ describe('when gathering inserted domain', () => {
+ it('throws an error', async () => {
+ const response = await graphql({
+ schema,
+ source: `
mutation {
createDomain(
input: {
@@ -1612,77 +1770,77 @@ describe('create a domain', () => {
}
}
`,
- rootValue: null,
- contextValue: {
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query: jest.fn().mockReturnValue({
+ next: jest.fn().mockReturnValue(undefined),
+ }),
+ collections: collectionNames,
+ transaction: jest.fn().mockReturnValue({
+ step: jest.fn().mockReturnValueOnce({
+ next: jest.fn().mockRejectedValue(new Error('cursor error')),
+ }),
+ abort: jest.fn(),
+ }),
+ userKey: 123,
+ publish: jest.fn(),
+ auth: {
+ checkDomainPermission: checkDomainPermission({
i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValue(undefined),
- }),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockReturnValueOnce({
- next: jest.fn().mockRejectedValue(new Error('cursor error')),
- }),
- abort: jest.fn(),
+ userKey: user._key,
+ query,
+ }),
+ checkPermission: jest.fn().mockReturnValue('admin'),
+ userRequired: jest.fn(),
+ saltedHash: jest.fn(),
+ verifiedRequired: jest.fn(),
+ tfaRequired: jest.fn(),
+ },
+ loaders: {
+ loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
+ query,
+ userKey: user._key,
+ cleanseInput,
+ i18n,
+ auth: { loginRequiredBool: true },
+ }),
+ loadDomainByDomain: {
+ load: jest.fn(),
+ },
+ loadOrgByKey: {
+ load: jest.fn().mockReturnValue({
+ slug: 'treasury-board-secretariat',
}),
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: user._key,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: user._key,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn(),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
},
- })
+ loadOrgConnectionsByDomainId: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
+ },
+ },
+ validators: { cleanseInput, slugify },
+ },
+ })
- const error = [new GraphQLError('Unable to create domain. Please try again.')]
+ const error = [new GraphQLError('Unable to create domain. Please try again.')]
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Cursor error occurred for user: 123 when inserting new domain: Error: cursor error`,
- ])
- })
- })
+ expect(response.errors).toEqual(error)
+ expect(consoleOutput).toEqual([
+ `Cursor error occurred for user: 123 when inserting new domain: Error: cursor error`,
+ ])
})
- describe('transaction step error occurs', () => {
- describe('when creating a new domain', () => {
- describe('when inserting new domain', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
+ })
+ })
+ describe('transaction step error occurs', () => {
+ describe('when creating a new domain', () => {
+ describe('when inserting new domain', () => {
+ it('returns an error message', async () => {
+ const response = await graphql({
+ schema,
+ source: `
mutation {
createDomain(
input: {
@@ -1721,799 +1879,24 @@ describe('create a domain', () => {
}
}
`,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValue(undefined),
- }),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: user._key,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: user._key,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn(),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
- },
- })
-
- const error = [new GraphQLError('Unable to create domain. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction step error occurred for user: 123 when inserting new domain: Error: trx step error`,
- ])
- })
- })
- describe('when inserting new edge', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createDomain(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- domain: "test.gc.ca"
- assetState: APPROVED
- }
- ) {
- result {
- ... on Domain {
- id
- domain
- lastRan
- selectors
- status {
- dkim
- dmarc
- https
- spf
- ssl
- }
- organizations(first: 5) {
- edges {
- node {
- id
- name
- }
- }
- }
- }
- ... on DomainError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValue(undefined),
- }),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest
- .fn()
- .mockReturnValueOnce({
- next: jest.fn(),
- })
- .mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: user._key,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: user._key,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn(),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
- },
- })
-
- const error = [new GraphQLError('Unable to create domain. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction step error occurred for user: 123 when inserting new domain edge: Error: trx step error`,
- ])
- })
- })
- })
- describe('when domain already exists', () => {
- describe('when upserting domain', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createDomain(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- domain: "test.gc.ca"
- assetState: APPROVED
- }
- ) {
- result {
- ... on Domain {
- id
- domain
- lastRan
- selectors
- status {
- dkim
- dmarc
- https
- spf
- ssl
- }
- organizations(first: 5) {
- edges {
- node {
- id
- name
- }
- }
- }
- }
- ... on DomainError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValueOnce(undefined),
- }),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: user._key,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: user._key,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn().mockReturnValue({
- domain: 'domain.ca',
- selectors: [],
- status: {},
- lastRan: '',
- }),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
- },
- })
-
- const error = [new GraphQLError('Unable to create domain. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction step error occurred for user: 123 when inserting new domain: Error: trx step error`,
- ])
- })
- })
- describe('when inserting edge to new org', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createDomain(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- domain: "test.gc.ca"
- assetState: APPROVED
- }
- ) {
- result {
- ... on Domain {
- id
- domain
- lastRan
- selectors
- status {
- dkim
- dmarc
- https
- spf
- ssl
- }
- organizations(first: 5) {
- edges {
- node {
- id
- name
- }
- }
- }
- }
- ... on DomainError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValueOnce(undefined),
- }),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest
- .fn()
- .mockReturnValueOnce({ next: jest.fn().mockReturnValue() })
- .mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: 123,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: 123,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn().mockReturnValue({
- domain: 'domain.ca',
- selectors: [],
- status: {},
- lastRan: '',
- }),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
- },
- })
-
- const error = [new GraphQLError('Unable to create domain. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction step error occurred for user: 123 when inserting new domain edge: Error: trx step error`,
- ])
- })
- })
- })
- })
- describe('transaction commit error occurs', () => {
- describe('when committing transaction', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createDomain(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- domain: "test.gc.ca"
- assetState: APPROVED
- }
- ) {
- result {
- ... on Domain {
- id
- domain
- lastRan
- selectors
- status {
- dkim
- dmarc
- https
- spf
- ssl
- }
- organizations(first: 5) {
- edges {
- node {
- id
- name
- }
- }
- }
- }
- ... on DomainError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValue(undefined),
- }),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockReturnValue({ next: jest.fn().mockReturnValue() }),
- commit: jest.fn().mockRejectedValue(new Error('trx commit error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: 123,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: 123,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn().mockReturnValue({
- domain: 'domain.ca',
- selectors: [],
- status: {},
- lastRan: '',
- }),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
- },
- })
-
- const error = [new GraphQLError('Unable to create domain. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction commit error occurred while user: 123 was creating domain: Error: trx commit error`,
- ])
- })
- })
- })
- })
- describe('request language is french', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'fr',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('org does not exist', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createDomain(
- input: { orgId: "b3JnYW5pemF0aW9uOjE=", domain: "test.gc.ca"
- assetState: APPROVED }
- ) {
- result {
- ... on Domain {
- id
- domain
- lastRan
- selectors
- status {
- dkim
- dmarc
- https
- spf
- ssl
- }
- organizations(first: 5) {
- edges {
- node {
- id
- name
- }
- }
- }
- }
- ... on DomainError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: user._key,
- query,
- }),
- checkPermission: jest.fn(),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: user._key,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn(),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
- },
- })
-
- const error = {
- data: {
- createDomain: {
- result: {
- code: 400,
- description: 'Impossible de créer un domaine dans une organisation inconnue.',
- },
- },
- },
- }
-
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to create a domain to an organization: 1 that does not exist.`,
- ])
- })
- })
- describe('user does not belong to organization', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createDomain(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- domain: "test.gc.ca"
- assetState: APPROVED
- }
- ) {
- result {
- ... on Domain {
- id
- domain
- lastRan
- selectors
- status {
- dkim
- dmarc
- https
- spf
- ssl
- }
- organizations(first: 5) {
- edges {
- node {
- id
- name
- }
- }
- }
- }
- ... on DomainError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: user._key,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue(undefined),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: user._key,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn(),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
- },
- })
-
- const error = {
- data: {
- createDomain: {
- result: {
- code: 400,
- description:
- "Permission refusée : Veuillez contacter l'utilisateur de l'organisation pour obtenir de l'aide sur la création du domaine.",
- },
- },
- },
- }
-
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to create a domain in: treasury-board-secretariat, however they do not have permission to do so.`,
- ])
- })
- })
- describe('the domain already exists in the given organization', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createDomain(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- domain: "test.gc.ca"
- assetState: APPROVED
- }
- ) {
- result {
- ... on Domain {
- id
- domain
- lastRan
- selectors
- status {
- dkim
- dmarc
- https
- spf
- ssl
- }
- organizations(first: 5) {
- edges {
- node {
- id
- name
- }
- }
- }
- }
- ... on DomainError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValue({}),
- }),
- collections: collectionNames,
- transaction,
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query: jest.fn().mockReturnValue({
+ next: jest.fn().mockReturnValue(undefined),
+ }),
+ collections: collectionNames,
+ transaction: jest.fn().mockReturnValue({
+ step: jest.fn().mockRejectedValue(new Error('trx step error')),
+ abort: jest.fn(),
+ }),
+ userKey: 123,
+ publish: jest.fn(),
+ auth: {
+ checkDomainPermission: checkDomainPermission({
i18n,
userKey: user._key,
query,
@@ -2531,462 +1914,37 @@ describe('create a domain', () => {
cleanseInput,
i18n,
auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn(),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
- },
- })
-
- const error = {
- data: {
- createDomain: {
- result: {
- code: 400,
- description: "Impossible de créer le domaine, l'organisation l'a déjà réclamé.",
- },
- },
- },
- }
-
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to create a domain for: treasury-board-secretariat, however that org already has that domain claimed.`,
- ])
- })
- })
- describe('database error occurs', () => {
- describe('when checking to see if org already contains domain', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createDomain(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- domain: "test.gc.ca"
- assetState: APPROVED
- }
- ) {
- result {
- ... on Domain {
- id
- domain
- lastRan
- selectors
- status {
- dkim
- dmarc
- https
- spf
- ssl
- }
- organizations(first: 5) {
- edges {
- node {
- id
- name
- }
- }
- }
- }
- ... on DomainError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockRejectedValue(new Error('Database error occurred.')),
- collections: collectionNames,
- transaction,
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: user._key,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: user._key,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn(),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
- },
- })
-
- const error = [new GraphQLError('Impossible de créer un domaine. Veuillez réessayer.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Database error occurred while running check to see if domain already exists in an org: Error: Database error occurred.`,
- ])
- })
- })
- })
- describe('cursor error occurs', () => {
- describe('when checking to see if org already contains domain', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createDomain(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- domain: "test.gc.ca"
- assetState: APPROVED
- }
- ) {
- result {
- ... on Domain {
- id
- domain
- lastRan
- selectors
- status {
- dkim
- dmarc
- https
- spf
- ssl
- }
- organizations(first: 5) {
- edges {
- node {
- id
- name
- }
- }
- }
- }
- ... on DomainError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockRejectedValue(new Error('Cursor error occurred.')),
- }),
- collections: collectionNames,
- transaction,
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: user._key,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: user._key,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn(),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
- },
- })
-
- const error = [new GraphQLError('Impossible de créer un domaine. Veuillez réessayer.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Cursor error occurred while running check to see if domain already exists in an org: Error: Cursor error occurred.`,
- ])
- })
- })
- describe('when gathering inserted domain', () => {
- it('throws an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createDomain(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- domain: "test.gc.ca"
- assetState: APPROVED
- }
- ) {
- result {
- ... on Domain {
- id
- domain
- lastRan
- selectors
- status {
- dkim
- dmarc
- https
- spf
- ssl
- }
- organizations(first: 5) {
- edges {
- node {
- id
- name
- }
- }
- }
- }
- ... on DomainError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValue(undefined),
- }),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockReturnValueOnce({
- next: jest.fn().mockRejectedValue(new Error('cursor error')),
- }),
- abort: jest.fn(),
- }),
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: 123,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: 123,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn(),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
- },
- })
-
- const error = [new GraphQLError('Impossible de créer un domaine. Veuillez réessayer.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Cursor error occurred for user: 123 when inserting new domain: Error: cursor error`,
- ])
- })
- })
- })
- describe('transaction step error occurs', () => {
- describe('when creating a new domain', () => {
- describe('when inserting new domain', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createDomain(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- domain: "test.gc.ca"
- assetState: APPROVED
- }
- ) {
- result {
- ... on Domain {
- id
- domain
- lastRan
- selectors
- status {
- dkim
- dmarc
- https
- spf
- ssl
- }
- organizations(first: 5) {
- edges {
- node {
- id
- name
- }
- }
- }
- }
- ... on DomainError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValue(undefined),
- }),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
+ }),
+ loadDomainByDomain: {
+ load: jest.fn(),
+ },
+ loadOrgByKey: {
+ load: jest.fn().mockReturnValue({
+ slug: 'treasury-board-secretariat',
}),
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: user._key,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: user._key,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn(),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
},
- })
+ loadOrgConnectionsByDomainId: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
+ },
+ },
+ validators: { cleanseInput, slugify },
+ },
+ })
- const error = [new GraphQLError('Impossible de créer un domaine. Veuillez réessayer.')]
+ const error = [new GraphQLError('Unable to create domain. Please try again.')]
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction step error occurred for user: 123 when inserting new domain: Error: trx step error`,
- ])
- })
- })
- describe('when inserting new edge', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
+ expect(response.errors).toEqual(error)
+ expect(consoleOutput).toEqual([
+ `Transaction step error occurred for user: 123 when inserting new domain: Error: trx step error`,
+ ])
+ })
+ })
+ describe('when inserting new edge', () => {
+ it('returns an error message', async () => {
+ const response = await graphql({
+ schema,
+ source: `
mutation {
createDomain(
input: {
@@ -3025,79 +1983,79 @@ describe('create a domain', () => {
}
}
`,
- rootValue: null,
- contextValue: {
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query: jest.fn().mockReturnValue({
+ next: jest.fn().mockReturnValue(undefined),
+ }),
+ collections: collectionNames,
+ transaction: jest.fn().mockReturnValue({
+ step: jest
+ .fn()
+ .mockReturnValueOnce({
+ next: jest.fn(),
+ })
+ .mockRejectedValue(new Error('trx step error')),
+ abort: jest.fn(),
+ }),
+ userKey: 123,
+ publish: jest.fn(),
+ auth: {
+ checkDomainPermission: checkDomainPermission({
i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValue(undefined),
- }),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest
- .fn()
- .mockReturnValueOnce({
- next: jest.fn(),
- })
- .mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
+ userKey: user._key,
+ query,
+ }),
+ checkPermission: jest.fn().mockReturnValue('admin'),
+ userRequired: jest.fn(),
+ saltedHash: jest.fn(),
+ verifiedRequired: jest.fn(),
+ tfaRequired: jest.fn(),
+ },
+ loaders: {
+ loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
+ query,
+ userKey: user._key,
+ cleanseInput,
+ i18n,
+ auth: { loginRequiredBool: true },
+ }),
+ loadDomainByDomain: {
+ load: jest.fn(),
+ },
+ loadOrgByKey: {
+ load: jest.fn().mockReturnValue({
+ slug: 'treasury-board-secretariat',
}),
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: user._key,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: user._key,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn(),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
},
- })
+ loadOrgConnectionsByDomainId: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
+ },
+ },
+ validators: { cleanseInput, slugify },
+ },
+ })
- const error = [new GraphQLError('Impossible de créer un domaine. Veuillez réessayer.')]
+ const error = [new GraphQLError('Unable to create domain. Please try again.')]
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction step error occurred for user: 123 when inserting new domain edge: Error: trx step error`,
- ])
- })
- })
+ expect(response.errors).toEqual(error)
+ expect(consoleOutput).toEqual([
+ `Transaction step error occurred for user: 123 when inserting new domain edge: Error: trx step error`,
+ ])
})
- describe('when domain already exists', () => {
- describe('when upserting domain', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
+ })
+ })
+ describe('when domain already exists', () => {
+ describe('when upserting domain', () => {
+ it('returns an error message', async () => {
+ const response = await graphql({
+ schema,
+ source: `
mutation {
createDomain(
input: {
@@ -3136,77 +2094,77 @@ describe('create a domain', () => {
}
}
`,
- rootValue: null,
- contextValue: {
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query: jest.fn().mockReturnValue({
+ next: jest.fn().mockReturnValueOnce(undefined),
+ }),
+ collections: collectionNames,
+ transaction: jest.fn().mockReturnValue({
+ step: jest.fn().mockRejectedValue(new Error('trx step error')),
+ abort: jest.fn(),
+ }),
+ userKey: 123,
+ publish: jest.fn(),
+ auth: {
+ checkDomainPermission: checkDomainPermission({
i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValueOnce(undefined),
+ userKey: user._key,
+ query,
+ }),
+ checkPermission: jest.fn().mockReturnValue('admin'),
+ userRequired: jest.fn(),
+ saltedHash: jest.fn(),
+ verifiedRequired: jest.fn(),
+ tfaRequired: jest.fn(),
+ },
+ loaders: {
+ loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
+ query,
+ userKey: user._key,
+ cleanseInput,
+ i18n,
+ auth: { loginRequiredBool: true },
+ }),
+ loadDomainByDomain: {
+ load: jest.fn().mockReturnValue({
+ domain: 'domain.ca',
+ selectors: [],
+ status: {},
+ lastRan: '',
}),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
+ },
+ loadOrgByKey: {
+ load: jest.fn().mockReturnValue({
+ slug: 'treasury-board-secretariat',
}),
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: user._key,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: user._key,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn().mockReturnValue({
- domain: 'domain.ca',
- selectors: [],
- status: {},
- lastRan: '',
- }),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
},
- })
+ loadOrgConnectionsByDomainId: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
+ },
+ },
+ validators: { cleanseInput, slugify },
+ },
+ })
- const error = [new GraphQLError('Impossible de créer un domaine. Veuillez réessayer.')]
+ const error = [new GraphQLError('Unable to create domain. Please try again.')]
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction step error occurred for user: 123 when inserting new domain: Error: trx step error`,
- ])
- })
- })
- describe('when inserting edge to new org', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
+ expect(response.errors).toEqual(error)
+ expect(consoleOutput).toEqual([
+ `Transaction step error occurred for user: 123 when inserting new domain: Error: trx step error`,
+ ])
+ })
+ })
+ describe('when inserting edge to new org', () => {
+ it('returns an error message', async () => {
+ const response = await graphql({
+ schema,
+ source: `
mutation {
createDomain(
input: {
@@ -3245,83 +2203,83 @@ describe('create a domain', () => {
}
}
`,
- rootValue: null,
- contextValue: {
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query: jest.fn().mockReturnValue({
+ next: jest.fn().mockReturnValueOnce(undefined),
+ }),
+ collections: collectionNames,
+ transaction: jest.fn().mockReturnValue({
+ step: jest
+ .fn()
+ .mockReturnValueOnce({ next: jest.fn().mockReturnValue() })
+ .mockRejectedValue(new Error('trx step error')),
+ abort: jest.fn(),
+ }),
+ userKey: 123,
+ publish: jest.fn(),
+ auth: {
+ checkDomainPermission: checkDomainPermission({
i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValueOnce(undefined),
+ userKey: 123,
+ query,
+ }),
+ checkPermission: jest.fn().mockReturnValue('admin'),
+ userRequired: jest.fn(),
+ saltedHash: jest.fn(),
+ verifiedRequired: jest.fn(),
+ tfaRequired: jest.fn(),
+ },
+ loaders: {
+ loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
+ query,
+ userKey: 123,
+ cleanseInput,
+ i18n,
+ auth: { loginRequiredBool: true },
+ }),
+ loadDomainByDomain: {
+ load: jest.fn().mockReturnValue({
+ domain: 'domain.ca',
+ selectors: [],
+ status: {},
+ lastRan: '',
}),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest
- .fn()
- .mockReturnValueOnce({ next: jest.fn().mockReturnValueOnce(undefined) })
- .mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
+ },
+ loadOrgByKey: {
+ load: jest.fn().mockReturnValue({
+ slug: 'treasury-board-secretariat',
}),
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: 123,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: 123,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn().mockReturnValue({
- domain: 'domain.ca',
- selectors: [],
- status: {},
- lastRan: '',
- }),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
},
- })
+ loadOrgConnectionsByDomainId: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
+ },
+ },
+ validators: { cleanseInput, slugify },
+ },
+ })
- const error = [new GraphQLError('Impossible de créer un domaine. Veuillez réessayer.')]
+ const error = [new GraphQLError('Unable to create domain. Please try again.')]
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction step error occurred for user: 123 when inserting new domain edge: Error: trx step error`,
- ])
- })
- })
+ expect(response.errors).toEqual(error)
+ expect(consoleOutput).toEqual([
+ `Transaction step error occurred for user: 123 when inserting new domain edge: Error: trx step error`,
+ ])
})
})
- describe('transaction commit error occurs', () => {
- describe('when committing transaction', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
+ })
+ })
+ describe('transaction commit error occurs', () => {
+ describe('when committing transaction', () => {
+ it('returns an error message', async () => {
+ const response = await graphql({
+ schema,
+ source: `
mutation {
createDomain(
input: {
@@ -3360,73 +2318,71 @@ describe('create a domain', () => {
}
}
`,
- rootValue: null,
- contextValue: {
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: {
+ language: 'en',
+ },
+ query: jest.fn().mockReturnValue({
+ next: jest.fn().mockReturnValue(undefined),
+ }),
+ collections: collectionNames,
+ transaction: jest.fn().mockReturnValue({
+ step: jest.fn().mockReturnValue({ next: jest.fn().mockReturnValue() }),
+ commit: jest.fn().mockRejectedValue(new Error('trx commit error')),
+ abort: jest.fn(),
+ }),
+ userKey: 123,
+ publish: jest.fn(),
+ auth: {
+ checkDomainPermission: checkDomainPermission({
i18n,
- request: {
- language: 'en',
- },
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValueOnce(undefined),
+ userKey: 123,
+ query,
+ }),
+ checkPermission: jest.fn().mockReturnValue('admin'),
+ userRequired: jest.fn(),
+ saltedHash: jest.fn(),
+ verifiedRequired: jest.fn(),
+ tfaRequired: jest.fn(),
+ },
+ loaders: {
+ loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
+ query,
+ userKey: 123,
+ cleanseInput,
+ i18n,
+ auth: { loginRequiredBool: true },
+ }),
+ loadDomainByDomain: {
+ load: jest.fn().mockReturnValue({
+ domain: 'domain.ca',
+ selectors: [],
+ status: {},
+ lastRan: '',
}),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockReturnValue({ next: jest.fn().mockReturnValueOnce(undefined) }),
- commit: jest.fn().mockRejectedValue(new Error('trx commit error')),
- abort: jest.fn(),
+ },
+ loadOrgByKey: {
+ load: jest.fn().mockReturnValue({
+ slug: 'treasury-board-secretariat',
}),
- userKey: 123,
- publish: jest.fn(),
- auth: {
- checkDomainPermission: checkDomainPermission({
- i18n,
- userKey: 123,
- query,
- }),
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn(),
- saltedHash: jest.fn(),
- verifiedRequired: jest.fn(),
- tfaRequired: jest.fn(),
- },
- loaders: {
- loadDkimSelectorsByDomainId: loadDkimSelectorsByDomainId({
- query,
- userKey: 123,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool: true },
- }),
- loadDomainByDomain: {
- load: jest.fn().mockReturnValue({
- domain: 'domain.ca',
- selectors: [],
- status: {},
- lastRan: '',
- }),
- },
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- slug: 'treasury-board-secretariat',
- }),
- },
- loadOrgConnectionsByDomainId: jest.fn(),
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- validators: { cleanseInput, slugify },
},
- })
+ loadOrgConnectionsByDomainId: jest.fn(),
+ loadUserByKey: {
+ load: jest.fn(),
+ },
+ },
+ validators: { cleanseInput, slugify },
+ },
+ })
- const error = [new GraphQLError('Impossible de créer un domaine. Veuillez réessayer.')]
+ const error = [new GraphQLError('Unable to create domain. Please try again.')]
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction commit error occurred while user: 123 was creating domain: Error: trx commit error`,
- ])
- })
- })
+ expect(response.errors).toEqual(error)
+ expect(consoleOutput).toEqual([
+ `Transaction commit error occurred while user: 123 was creating domain: Error: trx commit error`,
+ ])
})
})
})
diff --git a/api/src/domain/mutations/__tests__/update-domain.test.js b/api/src/domain/mutations/__tests__/update-domain.test.js
index e40488f213..f5e26e75ec 100644
--- a/api/src/domain/mutations/__tests__/update-domain.test.js
+++ b/api/src/domain/mutations/__tests__/update-domain.test.js
@@ -9,7 +9,14 @@ import { createMutationSchema } from '../../../mutation'
import englishMessages from '../../../locale/en/messages'
import frenchMessages from '../../../locale/fr/messages'
import { cleanseInput, slugify } from '../../../validators'
-import { checkPermission, userRequired, verifiedRequired, tfaRequired, checkDomainPermission } from '../../../auth'
+import {
+ checkPermission,
+ userRequired,
+ verifiedRequired,
+ tfaRequired,
+ checkDomainPermission,
+ AuthDataSource,
+} from '../../../auth'
import { loadDkimSelectorsByDomainId, loadDomainByKey } from '../../loaders'
import { loadOrgByKey } from '../../../organization/loaders'
import { loadUserByKey } from '../../../user/loaders'
@@ -181,6 +188,9 @@ describe('updating a domain', () => {
verifiedRequired: verifiedRequired({}),
tfaRequired: tfaRequired({}),
},
+ dataSources: {
+ auth: new AuthDataSource({ query, userKey: user._key }),
+ },
validators: {
cleanseInput,
slugify,
@@ -274,6 +284,9 @@ describe('updating a domain', () => {
verifiedRequired: verifiedRequired({}),
tfaRequired: tfaRequired({}),
},
+ dataSources: {
+ auth: new AuthDataSource({ query, userKey: user._key }),
+ },
validators: {
cleanseInput,
slugify,
@@ -367,6 +380,9 @@ describe('updating a domain', () => {
verifiedRequired: verifiedRequired({}),
tfaRequired: tfaRequired({}),
},
+ dataSources: {
+ auth: new AuthDataSource({ query, userKey: user._key }),
+ },
validators: {
cleanseInput,
slugify,
diff --git a/api/src/domain/mutations/__tests__/update-domains-by-filters.test.js b/api/src/domain/mutations/__tests__/update-domains-by-filters.test.js
index 8d5e910bbb..373aa89997 100644
--- a/api/src/domain/mutations/__tests__/update-domains-by-filters.test.js
+++ b/api/src/domain/mutations/__tests__/update-domains-by-filters.test.js
@@ -162,7 +162,6 @@ describe('updateDomainsByFilters mutation', () => {
validators: { cleanseInput },
},
})
- console.log(response)
expect(response.data.updateDomainsByFilters.result.status).toMatch(
/Successfully updated 1 domain\(s\) in treasury-board-secretariat/,
)
diff --git a/api/src/domain/mutations/create-domain.js b/api/src/domain/mutations/create-domain.js
index 3b0d27a7e5..4460f8f55e 100644
--- a/api/src/domain/mutations/create-domain.js
+++ b/api/src/domain/mutations/create-domain.js
@@ -7,6 +7,8 @@ import { Domain } from '../../scalars'
import { logActivity } from '../../audit-logs/mutations/log-activity'
import { AssetStateEnums } from '../../enums'
import { headers } from 'nats'
+import { CvdEnrollmentInputOptions } from '../../additional-findings/input/cvd-enrollment-options'
+import ac from '../../access-control'
export const createDomain = new mutationWithClientMutationId({
name: 'CreateDomain',
@@ -32,6 +34,11 @@ export const createDomain = new mutationWithClientMutationId({
description: 'Value that determines how the domain relates to the organization.',
type: new GraphQLNonNull(AssetStateEnums),
},
+ cvdEnrollment: {
+ description:
+ 'The Coordinated Vulnerability Disclosure (CVD) enrollment details for this domain, including HackerOne integration status and CVSS requirements.',
+ type: CvdEnrollmentInputOptions,
+ },
}),
outputFields: () => ({
result: {
@@ -93,9 +100,11 @@ export const createDomain = new mutationWithClientMutationId({
if (typeof args.assetState !== 'undefined') {
assetState = cleanseInput(args.assetState)
} else {
- assetState = ''
+ assetState = 'approved'
}
+ const cvdEnrollment = args.cvdEnrollment || { status: 'not-enrolled' }
+
// Check to see if org exists
const org = await loadOrgByKey.load(orgId)
@@ -111,7 +120,7 @@ export const createDomain = new mutationWithClientMutationId({
// Check to see if user belongs to org
const permission = await checkPermission({ orgId: org._id })
- if (!['admin', 'owner', 'super_admin'].includes(permission)) {
+ if (!ac.can(permission).createOwn('domain').granted) {
console.warn(
`User: ${userKey} attempted to create a domain in: ${org.slug}, however they do not have permission to do so.`,
)
@@ -122,6 +131,17 @@ export const createDomain = new mutationWithClientMutationId({
}
}
+ // ensure only owners can enroll or deny domains
+ if (
+ !ac.can(permission).createOwn('cvd-enrollment').granted &&
+ ['enrolled', 'deny'].includes(cvdEnrollment.status)
+ ) {
+ console.warn(
+ `User: ${userKey} attempted to update the CVD enrollment for domain: ${domain} in org: ${orgId}, however they do not have permission in that org.`,
+ )
+ cvdEnrollment.status = cvdEnrollment.status === 'enrolled' ? 'pending' : 'not-enrolled'
+ }
+
const insertDomain = {
domain: domain.toLowerCase(),
lastRan: null,
@@ -138,8 +158,9 @@ export const createDomain = new mutationWithClientMutationId({
spf: 'info',
ssl: 'info',
},
- archived: archived,
+ archived,
ignoreRua: false,
+ cvdEnrollment,
}
// Check to see if domain already belongs to same org
@@ -260,6 +281,14 @@ export const createDomain = new mutationWithClientMutationId({
})
}
+ if (typeof cvdEnrollment !== 'undefined') {
+ updatedProperties.push({
+ name: 'cvdEnrollment',
+ oldValue: null,
+ newValue: cvdEnrollment.enrollment,
+ })
+ }
+
await logActivity({
transaction,
collections,
diff --git a/api/src/domain/mutations/remove-domain.js b/api/src/domain/mutations/remove-domain.js
index ecb747cb06..bde0ff54af 100644
--- a/api/src/domain/mutations/remove-domain.js
+++ b/api/src/domain/mutations/remove-domain.js
@@ -5,6 +5,7 @@ import { t } from '@lingui/macro'
import { removeDomainUnion } from '../unions'
import { logActivity } from '../../audit-logs/mutations/log-activity'
import { DomainRemovalReasonEnum } from '../../enums'
+import ac from '../../access-control'
export const removeDomain = new mutationWithClientMutationId({
name: 'RemoveDomain',
@@ -85,7 +86,7 @@ export const removeDomain = new mutationWithClientMutationId({
// Get permission
const permission = await checkPermission({ orgId: org._id })
- if (['admin', 'owner', 'super_admin'].includes(permission) === false) {
+ if (!ac.can(permission).deleteOwn('domain').granted) {
console.warn(
`User: ${userKey} attempted to remove ${domain.domain} in ${org.slug} however they do not have permission in that org.`,
)
@@ -98,7 +99,7 @@ export const removeDomain = new mutationWithClientMutationId({
// Check to see if domain belongs to verified check org
// if domain returns NXDOMAIN, allow removal
- if (org.verified && permission !== 'super_admin' && domain.rcode !== 'NXDOMAIN') {
+ if (org.verified && !ac.can(permission).deleteAny('domain').granted && domain.rcode !== 'NXDOMAIN') {
console.warn(
`User: ${userKey} attempted to remove ${domain.domain} in ${org.slug} but does not have permission to remove a domain from a verified check org.`,
)
diff --git a/api/src/domain/mutations/request-scan.js b/api/src/domain/mutations/request-scan.js
index 33c9389afd..c75eff28ce 100644
--- a/api/src/domain/mutations/request-scan.js
+++ b/api/src/domain/mutations/request-scan.js
@@ -33,7 +33,8 @@ export const requestScan = new mutationWithClientMutationId({
request: { ip },
publish,
auth: { checkDomainPermission, userRequired, verifiedRequired },
- loaders: { loadDomainByDomain, loadWebConnectionsByDomainId, loadWebScansByWebId },
+ loaders: { loadDomainByDomain },
+ dataSources: { webScan },
validators: { cleanseInput },
},
) => {
@@ -101,7 +102,7 @@ export const requestScan = new mutationWithClientMutationId({
// Check to see if a scan is already pending
try {
- const webConnections = await loadWebConnectionsByDomainId({
+ const webConnections = await webScan.getConnectionsByDomainId({
domainId: domain._id,
limit: 1,
orderBy: { field: 'timestamp', direction: 'DESC' },
@@ -109,7 +110,7 @@ export const requestScan = new mutationWithClientMutationId({
})
if (webConnections.edges.length > 0) {
const webConnection = webConnections.edges[0].node
- const webScans = await loadWebScansByWebId({ webId: webConnection._id })
+ const webScans = await webScan.getScansByWebId({ webId: webConnection._id })
webScans.forEach((result) => {
const timeDifferenceInMinutes = (Date.now() - new Date(webConnection.timestamp).getTime()) / 1000 / 60
if (result.status.toUpperCase() === 'PENDING' && timeDifferenceInMinutes < 30) {
diff --git a/api/src/domain/mutations/update-domain.js b/api/src/domain/mutations/update-domain.js
index 905cfae28d..a0ff59ea96 100644
--- a/api/src/domain/mutations/update-domain.js
+++ b/api/src/domain/mutations/update-domain.js
@@ -5,6 +5,8 @@ import { t } from '@lingui/macro'
import { updateDomainUnion } from '../unions'
import { logActivity } from '../../audit-logs/mutations/log-activity'
import { AssetStateEnums } from '../../enums'
+import { CvdEnrollmentInputOptions } from '../../additional-findings/input/cvd-enrollment-options'
+import ac from '../../access-control'
export const updateDomain = new mutationWithClientMutationId({
name: 'UpdateDomain',
@@ -34,6 +36,11 @@ export const updateDomain = new mutationWithClientMutationId({
description: 'Value that determines how the domain relates to the organization.',
type: AssetStateEnums,
},
+ cvdEnrollment: {
+ description:
+ 'The Coordinated Vulnerability Disclosure (CVD) enrollment details for this domain, including HackerOne integration status and CVSS requirements.',
+ type: CvdEnrollmentInputOptions,
+ },
}),
outputFields: () => ({
result: {
@@ -93,7 +100,14 @@ export const updateDomain = new mutationWithClientMutationId({
if (typeof args.assetState !== 'undefined') {
assetState = cleanseInput(args.assetState)
} else {
- assetState = ''
+ assetState = null
+ }
+
+ let cvdEnrollment
+ if (typeof args.cvdEnrollment !== 'undefined') {
+ cvdEnrollment = args.cvdEnrollment
+ } else {
+ cvdEnrollment = null
}
// Check to see if domain exists
@@ -127,7 +141,7 @@ export const updateDomain = new mutationWithClientMutationId({
// Check permission
const permission = await checkPermission({ orgId: org._id })
- if (!['admin', 'owner', 'super_admin'].includes(permission)) {
+ if (!ac.can(permission).updateOwn('domain').granted) {
console.warn(
`User: ${userKey} attempted to update domain: ${domainId} for org: ${orgId}, however they do not have permission in that org.`,
)
@@ -165,6 +179,16 @@ export const updateDomain = new mutationWithClientMutationId({
}
}
+ if (
+ !ac.can(permission).updateOwn('cvd-enrollment').granted &&
+ ['enrolled', 'deny'].includes(cvdEnrollment?.status)
+ ) {
+ console.warn(
+ `User: ${userKey} attempted to update the CVD enrollment for domain: ${domainId} in org: ${orgId}, however they do not have permission in that org.`,
+ )
+ cvdEnrollment.status = cvdEnrollment.status === 'enrolled' ? 'pending' : 'not-enrolled'
+ }
+
// Setup Transaction
const trx = await transaction(collections)
@@ -172,6 +196,7 @@ export const updateDomain = new mutationWithClientMutationId({
const domainToInsert = {
archived: typeof archived !== 'undefined' ? archived : domain?.archived,
ignoreRua: typeof args.ignoreRua !== 'undefined' ? args.ignoreRua : domain?.ignoreRua,
+ cvdEnrollment: typeof cvdEnrollment !== 'undefined' ? cvdEnrollment : domain?.cvdEnrollment,
}
try {
@@ -262,6 +287,14 @@ export const updateDomain = new mutationWithClientMutationId({
})
}
+ if (typeof cvdEnrollment !== 'undefined' && cvdEnrollment?.status !== domain?.cvdEnrollment?.status) {
+ updatedProperties.push({
+ name: 'cvdEnrollment',
+ oldValue: JSON.stringify(domain.cvdEnrollment?.status),
+ newValue: JSON.stringify(cvdEnrollment.status),
+ })
+ }
+
if (JSON.stringify(claim.tags) !== JSON.stringify(claimToInsert.tags)) {
updatedProperties.push({
name: 'tags',
diff --git a/api/src/domain/mutations/update-domains-by-domain-ids.js b/api/src/domain/mutations/update-domains-by-domain-ids.js
index 79ad02e0aa..17d0fad6c2 100644
--- a/api/src/domain/mutations/update-domains-by-domain-ids.js
+++ b/api/src/domain/mutations/update-domains-by-domain-ids.js
@@ -3,6 +3,7 @@ import { bulkModifyDomainsUnion } from '../unions'
import { GraphQLID, GraphQLList, GraphQLNonNull, GraphQLString } from 'graphql'
import { t } from '@lingui/macro'
import { logActivity } from '../../audit-logs'
+import ac from '../../access-control'
export const updateDomainsByDomainIds = new mutationWithClientMutationId({
name: 'UpdateDomainsByDomainIds',
@@ -70,7 +71,7 @@ export const updateDomainsByDomainIds = new mutationWithClientMutationId({
// Check to see if user belongs to org
const permission = await checkPermission({ orgId: org._id })
- if (!['super_admin', 'owner', 'admin'].includes(permission)) {
+ if (!ac.can(permission).updateOwn('domain').granted) {
console.warn(
`User: ${userKey} attempted to update domains in: ${org.slug}, however they do not have permission to do so.`,
)
diff --git a/api/src/domain/mutations/update-domains-by-filters.js b/api/src/domain/mutations/update-domains-by-filters.js
index 64919e8ee7..743d7a7950 100644
--- a/api/src/domain/mutations/update-domains-by-filters.js
+++ b/api/src/domain/mutations/update-domains-by-filters.js
@@ -5,6 +5,7 @@ import { t } from '@lingui/macro'
import { logActivity } from '../../audit-logs'
import { domainFilter } from '../inputs'
import { aql } from 'arangojs'
+import ac from '../../access-control'
export const updateDomainsByFilters = new mutationWithClientMutationId({
name: 'UpdateDomainsByFilters',
@@ -78,7 +79,7 @@ export const updateDomainsByFilters = new mutationWithClientMutationId({
// Check to see if user belongs to org
const permission = await checkPermission({ orgId: org._id })
- if (!['super_admin', 'owner', 'admin'].includes(permission)) {
+ if (!ac.can(permission).updateOwn('domain').granted) {
console.warn(
`User: ${userKey} attempted to update domains in: ${org.slug}, however they do not have permission to do so.`,
)
diff --git a/api/src/domain/objects/__tests__/domain.test.js b/api/src/domain/objects/__tests__/domain.test.js
index 6d32aadf21..b36bc258dd 100644
--- a/api/src/domain/objects/__tests__/domain.test.js
+++ b/api/src/domain/objects/__tests__/domain.test.js
@@ -88,6 +88,10 @@ describe('given the domain object', () => {
expect(demoType).toHaveProperty('yearlyDmarcSummaries')
expect(demoType.yearlyDmarcSummaries.type).toMatchObject(new GraphQLList(dmarcSummaryType))
})
+ it('has a cvdEnrollment field', () => {
+ const demoType = domainType.getFields()
+ expect(demoType).toHaveProperty('cvdEnrollment')
+ })
})
describe('testing the field resolvers', () => {
const consoleOutput = []
@@ -100,6 +104,37 @@ describe('given the domain object', () => {
consoleOutput.length = 0
})
+ describe('testing the cvdEnrollment resolver', () => {
+ it('returns the resolved value with correct structure when user is authenticated', async () => {
+ const demoType = domainType.getFields()
+ const mockUserRequired = jest.fn()
+ const cvdEnrollmentValue = {
+ status: 'ENROLLED',
+ description: 'Test asset',
+ maxSeverity: 'HIGH',
+ confidentialityRequirement: 'HIGH',
+ integrityRequirement: 'LOW',
+ availabilityRequirement: 'LOW',
+ }
+
+ await expect(
+ demoType.cvdEnrollment.resolve(
+ { cvdEnrollment: cvdEnrollmentValue },
+ {},
+ { auth: { userRequired: mockUserRequired } },
+ ),
+ ).resolves.toEqual(cvdEnrollmentValue)
+ expect(mockUserRequired).toHaveBeenCalled()
+ })
+ it('returns undefined if cvdEnrollment is not present', async () => {
+ const demoType = domainType.getFields()
+ const mockUserRequired = jest.fn()
+ await expect(
+ demoType.cvdEnrollment.resolve({}, {}, { auth: { userRequired: mockUserRequired } }),
+ ).resolves.toBeUndefined()
+ })
+ })
+
describe('testing the id resolver', () => {
it('returns the resolved value', () => {
const demoType = domainType.getFields()
@@ -180,12 +215,14 @@ describe('given the domain object', () => {
expect(
demoType.selectors.resolve(
- { selectors },
+ { _id: 'domains/1', selectors },
{},
{
auth: {
userRequired: jest.fn().mockReturnValue(true),
- checkDomainPermission: jest.fn().mockReturnValue(true),
+ },
+ dataSources: {
+ auth: { domainPermissionByDomainId: { load: jest.fn().mockResolvedValue(true) } },
},
loaders: {
loadDkimSelectorsByDomainId: jest.fn().mockReturnValue(selectors),
@@ -269,8 +306,10 @@ describe('given the domain object', () => {
{ _id: '1' },
{ first: 1 },
{
- loaders: {
- loadOrgConnectionsByDomainId: jest.fn().mockReturnValue(expectedResult),
+ dataSources: {
+ organization: {
+ connectionsByDomainId: jest.fn().mockReturnValue(expectedResult),
+ },
},
auth: {
checkSuperAdmin: jest.fn().mockReturnValue(false),
@@ -288,12 +327,11 @@ describe('given the domain object', () => {
{ _id: '1' },
{ limit: 1 },
{
- loaders: {
- loadWebConnectionsByDomainId: jest.fn().mockReturnValue({ _id: '1', _key: '1' }),
+ dataSources: {
+ auth: { domainPermissionByDomainId: { load: jest.fn().mockResolvedValue(true) } },
+ webScan: { getConnectionsByDomainId: jest.fn().mockReturnValue({ _id: '1', _key: '1' }) },
},
auth: {
- checkDomainPermission: jest.fn().mockReturnValue(true),
- checkSuperAdmin: jest.fn().mockReturnValue(false),
userRequired: jest.fn().mockReturnValue(true),
},
},
@@ -313,12 +351,11 @@ describe('given the domain object', () => {
{ _id: '1' },
{ limit: 1 },
{
- loaders: {
- loadDnsConnectionsByDomainId: jest.fn().mockReturnValue({ _id: '1', _key: '1' }),
+ dataSources: {
+ auth: { domainPermissionByDomainId: { load: jest.fn().mockResolvedValue(true) } },
+ dnsScan: { getConnectionsByDomainId: jest.fn().mockReturnValue({ _id: '1', _key: '1' }) },
},
auth: {
- checkDomainPermission: jest.fn().mockReturnValue(true),
- checkSuperAdmin: jest.fn().mockReturnValue(false),
userRequired: jest.fn().mockReturnValue(true),
},
},
diff --git a/api/src/domain/objects/domain.js b/api/src/domain/objects/domain.js
index b32c24700f..21956c7543 100644
--- a/api/src/domain/objects/domain.js
+++ b/api/src/domain/objects/domain.js
@@ -14,9 +14,9 @@ import { organizationConnection } from '../../organization/objects'
import { GraphQLDateTime } from 'graphql-scalars'
import { dnsOrder } from '../../dns-scan/inputs'
import { webOrder } from '../../web-scan/inputs/web-order'
-import { mxRecordConnection } from '../../dns-scan/objects/mx-record-connection'
import { additionalFinding } from '../../additional-findings/objects/additional-finding'
import { tagType } from '../../tags/objects'
+import { cvdEnrollment } from '../../additional-findings/objects'
export const domainType = new GraphQLObjectType({
name: 'Domain',
@@ -56,10 +56,10 @@ export const domainType = new GraphQLObjectType({
resolve: async (
{ _id },
_,
- { userKey, auth: { checkDomainPermission, userRequired }, loaders: { loadDkimSelectorsByDomainId } },
+ { userKey, auth: { userRequired }, dataSources: { auth: authDS }, loaders: { loadDkimSelectorsByDomainId } },
) => {
await userRequired()
- const permitted = await checkDomainPermission({ domainId: _id })
+ const permitted = await authDS.domainPermissionByDomainId.load(_id)
if (!permitted) {
console.warn(`User: ${userKey} attempted to access selectors for ${_id}, but does not have permission.`)
throw new Error(t`Cannot query domain selectors without permission.`)
@@ -122,10 +122,10 @@ export const domainType = new GraphQLObjectType({
...connectionArgs,
},
description: 'The organization that this domain belongs to.',
- resolve: async ({ _id }, args, { auth: { checkSuperAdmin }, loaders: { loadOrgConnectionsByDomainId } }) => {
+ resolve: async ({ _id }, args, { auth: { checkSuperAdmin }, dataSources: { organization } }) => {
const isSuperAdmin = await checkSuperAdmin()
- return await loadOrgConnectionsByDomainId({
+ return await organization.connectionsByDomainId({
domainId: _id,
isSuperAdmin,
...args,
@@ -154,13 +154,9 @@ export const domainType = new GraphQLObjectType({
...connectionArgs,
},
description: `DNS scan results.`,
- resolve: async (
- { _id },
- args,
- { userKey, auth: { checkDomainPermission, userRequired }, loaders: { loadDnsConnectionsByDomainId } },
- ) => {
+ resolve: async ({ _id }, args, { userKey, auth: { userRequired }, dataSources: { auth: authDS, dnsScan } }) => {
await userRequired()
- const permitted = await checkDomainPermission({ domainId: _id })
+ const permitted = await authDS.domainPermissionByDomainId.load(_id)
if (!permitted) {
console.warn(
`User: ${userKey} attempted to access dns scan results for ${_id}, but does not have permission.`,
@@ -168,49 +164,7 @@ export const domainType = new GraphQLObjectType({
throw new Error(t`Cannot query dns scan results without permission.`)
}
- return await loadDnsConnectionsByDomainId({
- domainId: _id,
- ...args,
- })
- },
- },
- mxRecordDiff: {
- type: mxRecordConnection.connectionType,
- description: 'List of MX record diffs for a given domain.',
- args: {
- startDate: {
- type: GraphQLDateTime,
- description: 'Start date for date filter.',
- },
- endDate: {
- type: GraphQLDateTime,
- description: 'End date for date filter.',
- },
- orderBy: {
- type: dnsOrder,
- description: 'Ordering options for MX connections.',
- },
- limit: {
- type: GraphQLInt,
- description: 'Number of MX scans to retrieve.',
- },
- ...connectionArgs,
- },
- resolve: async (
- { _id },
- args,
- { userKey, auth: { checkDomainPermission, userRequired }, loaders: { loadMxRecordDiffByDomainId } },
- ) => {
- await userRequired()
- const permitted = await checkDomainPermission({ domainId: _id })
- if (!permitted) {
- console.warn(
- `User: ${userKey} attempted to access web scan results for ${_id}, but does not have permission.`,
- )
- throw new Error(t`Cannot query web scan results without permission.`)
- }
-
- return await loadMxRecordDiffByDomainId({
+ return await dnsScan.getConnectionsByDomainId({
domainId: _id,
...args,
})
@@ -242,13 +196,9 @@ export const domainType = new GraphQLObjectType({
},
...connectionArgs,
},
- resolve: async (
- { _id },
- args,
- { userKey, auth: { checkDomainPermission, userRequired }, loaders: { loadWebConnectionsByDomainId } },
- ) => {
+ resolve: async ({ _id }, args, { userKey, auth: { userRequired }, dataSources: { auth: authDS, webScan } }) => {
await userRequired()
- const permitted = await checkDomainPermission({ domainId: _id })
+ const permitted = await authDS.domainPermissionByDomainId.load(_id)
if (!permitted) {
console.warn(
`User: ${userKey} attempted to access web scan results for ${_id}, but does not have permission.`,
@@ -256,7 +206,7 @@ export const domainType = new GraphQLObjectType({
throw new Error(t`Cannot query web scan results without permission.`)
}
- return await loadWebConnectionsByDomainId({
+ return await webScan.getConnectionsByDomainId({
domainId: _id,
...args,
})
@@ -268,10 +218,10 @@ export const domainType = new GraphQLObjectType({
resolve: async (
{ _id },
_,
- { userKey, auth: { checkDomainPermission, userRequired }, loaders: { loadAdditionalFindingsByDomainId } },
+ { userKey, auth: { userRequired }, dataSources: { auth: authDS, additionalFindings } },
) => {
await userRequired()
- const permitted = await checkDomainPermission({ domainId: _id })
+ const permitted = await authDS.domainPermissionByDomainId.load(_id)
if (!permitted) {
console.warn(
`User: ${userKey} attempted to access additional findings for domain: ${_id}, but does not have permission.`,
@@ -279,7 +229,7 @@ export const domainType = new GraphQLObjectType({
throw new Error(t`Cannot query additional findings without permission.`)
}
- return await loadAdditionalFindingsByDomainId({
+ return await additionalFindings.getByDomainId({
domainId: _id,
})
},
@@ -334,7 +284,7 @@ export const domainType = new GraphQLObjectType({
return {
domainKey: _key,
_id: dmarcSummaryEdge._to,
- startDate: startDate,
+ startDate,
}
},
},
@@ -391,10 +341,8 @@ export const domainType = new GraphQLObjectType({
description:
'Value that determines if a user is affiliated with a domain, whether through organization affiliation, verified organization network affiliation, or through super admin status.',
type: GraphQLBoolean,
- resolve: async ({ _id }, __, { auth: { checkDomainPermission } }) => {
- return await checkDomainPermission({
- domainId: _id,
- })
+ resolve: async ({ _id }, __, { dataSources: { auth: authDS } }) => {
+ return await authDS.domainPermissionByDomainId.load(_id)
},
},
ignoreRua: {
@@ -417,6 +365,16 @@ export const domainType = new GraphQLObjectType({
description: `Whether or not a CVE has been detected in the domain's additional findings.`,
resolve: ({ cveDetected }) => cveDetected,
},
+ cvdEnrollment: {
+ type: cvdEnrollment,
+ description:
+ 'The Coordinated Vulnerability Disclosure (CVD) enrollment status and requirements for this domain asset, including HackerOne integration details.',
+ resolve: async ({ cvdEnrollment }, __, { auth: { userRequired } }) => {
+ await userRequired()
+
+ return cvdEnrollment
+ },
+ },
}),
interfaces: [nodeInterface],
description: 'Domain object containing information for a given domain.',
diff --git a/api/src/domain/queries/__tests__/find-domain-by-domain.test.js b/api/src/domain/queries/__tests__/find-domain-by-domain.test.js
index 40559ea2f9..dea6da436b 100644
--- a/api/src/domain/queries/__tests__/find-domain-by-domain.test.js
+++ b/api/src/domain/queries/__tests__/find-domain-by-domain.test.js
@@ -9,7 +9,7 @@ import frenchMessages from '../../../locale/fr/messages'
import { createQuerySchema } from '../../../query'
import { createMutationSchema } from '../../../mutation'
import { cleanseInput } from '../../../validators'
-import { checkDomainPermission, userRequired, verifiedRequired } from '../../../auth'
+import { checkDomainPermission, userRequired, verifiedRequired, AuthDataSource } from '../../../auth'
import { loadDkimSelectorsByDomainId, loadDomainByDomain } from '../../loaders'
import { loadUserByKey } from '../../../user/loaders'
import dbschema from '../../../../database.json'
@@ -142,7 +142,7 @@ describe('given findDomainByDomain query', () => {
contextValue: {
i18n,
userKey: user._key,
- query: query,
+ query,
auth: {
loginRequiredBool: true,
checkDomainPermission: checkDomainPermission({
@@ -155,6 +155,9 @@ describe('given findDomainByDomain query', () => {
}),
verifiedRequired: verifiedRequired({}),
},
+ dataSources: {
+ auth: new AuthDataSource({ query, userKey: user._key }),
+ },
validators: {
cleanseInput,
},
@@ -236,7 +239,7 @@ describe('given findDomainByDomain query', () => {
contextValue: {
i18n,
userKey: 1,
- query: query,
+ query,
auth: {
checkDomainPermission: jest.fn().mockReturnValue(true),
userRequired: jest.fn().mockReturnValue({
@@ -351,7 +354,7 @@ describe('given findDomainByDomain query', () => {
contextValue: {
i18n,
userKey: 1,
- query: query,
+ query,
auth: {
checkDomainPermission: jest.fn().mockReturnValue(true),
userRequired: jest.fn().mockReturnValue({
diff --git a/api/src/domain/queries/__tests__/find-my-domains.test.js b/api/src/domain/queries/__tests__/find-my-domains.test.js
index 9efcba4fac..db218facd9 100644
--- a/api/src/domain/queries/__tests__/find-my-domains.test.js
+++ b/api/src/domain/queries/__tests__/find-my-domains.test.js
@@ -9,7 +9,7 @@ import frenchMessages from '../../../locale/fr/messages'
import { createQuerySchema } from '../../../query'
import { createMutationSchema } from '../../../mutation'
import { cleanseInput } from '../../../validators'
-import { checkDomainPermission, checkSuperAdmin, userRequired, verifiedRequired } from '../../../auth'
+import { AuthDataSource, checkDomainPermission, checkSuperAdmin, userRequired, verifiedRequired } from '../../../auth'
import { loadDkimSelectorsByDomainId, loadDomainConnectionsByUserId } from '../../loaders'
import { loadUserByKey } from '../../../user'
import dbschema from '../../../../database.json'
@@ -195,6 +195,9 @@ describe('given findMyDomainsQuery', () => {
}),
verifiedRequired: verifiedRequired({}),
},
+ dataSources: {
+ auth: new AuthDataSource({ query, userKey: user._key }),
+ },
loaders: {
loadDomainConnectionsByUserId: loadDomainConnectionsByUserId({
query,
diff --git a/api/src/enums/cvd-requirement.js b/api/src/enums/cvd-requirement.js
new file mode 100644
index 0000000000..d37aa1b9c0
--- /dev/null
+++ b/api/src/enums/cvd-requirement.js
@@ -0,0 +1,20 @@
+import { GraphQLEnumType } from 'graphql'
+
+export const CvdRequirementEnums = new GraphQLEnumType({
+ name: 'CvdRequirementEnums',
+ values: {
+ NONE: {
+ value: 'none',
+ description: 'No additional CVSS environmental requirement for this asset.',
+ },
+ LOW: {
+ value: 'low',
+ description: 'Low CVSS environmental requirement for this asset.',
+ },
+ HIGH: {
+ value: 'high',
+ description: 'High CVSS environmental requirement for this asset.',
+ },
+ },
+ description: 'Enumerates the CVSS environmental requirement levels for CVD-enrolled assets.',
+})
diff --git a/api/src/enums/domain-tag-label.js b/api/src/enums/domain-tag-label.js
index 1e9f61599c..6ae43ca99f 100644
--- a/api/src/enums/domain-tag-label.js
+++ b/api/src/enums/domain-tag-label.js
@@ -31,6 +31,19 @@ export const DomainTagLabel = new GraphQLEnumType({
value: 'cve-detected',
description: 'Label for tagging domains that have vulnerabilities.',
},
+ CVD_ENROLLED: {
+ value: 'cvd-enrolled',
+ description: 'Label for tagging domains that are enrolled in the Coordinated Vulnerability Disclosure program.',
+ },
+ CVD_PENDING: {
+ value: 'cvd-pending',
+ description:
+ 'Label for tagging domains that are pending enrollment in the Coordinated Vulnerability Disclosure program.',
+ },
+ CVD_DENY: {
+ value: 'cvd-deny',
+ description: 'Label for tagging domains that have been explicitly excluded from the Coordinated Vulnerability Disclosure program.',
+ },
},
description: 'An enum used to assign and test user-generated domain tags',
})
diff --git a/api/src/enums/enrollment-status.js b/api/src/enums/enrollment-status.js
new file mode 100644
index 0000000000..1ab1c2a334
--- /dev/null
+++ b/api/src/enums/enrollment-status.js
@@ -0,0 +1,24 @@
+import { GraphQLEnumType } from 'graphql'
+
+export const EnrollmentStatusEnums = new GraphQLEnumType({
+ name: 'EnrollmentStatusEnums',
+ values: {
+ ENROLLED: {
+ value: 'enrolled',
+ description: 'The asset is enrolled in the CVD program and eligible for coordinated vulnerability disclosure.',
+ },
+ PENDING: {
+ value: 'pending',
+ description: 'The asset enrollment is pending approval for the CVD program.',
+ },
+ NOT_ENROLLED: {
+ value: 'not-enrolled',
+ description: 'The asset is not enrolled in the CVD program.',
+ },
+ DENY: {
+ value: 'deny',
+ description: 'The asset has been explicitly excluded from the CVD program.',
+ },
+ },
+ description: 'Enumerates the possible enrollment states for the Coordinated Vulnerability Disclosure (CVD) program.',
+})
diff --git a/api/src/enums/index.js b/api/src/enums/index.js
index 67f3eadd17..3cf345b67e 100644
--- a/api/src/enums/index.js
+++ b/api/src/enums/index.js
@@ -33,3 +33,5 @@ export * from './tag-ownership'
export * from './system-filter-value'
export * from './domain-filter-category'
export * from './dmarc-phase'
+export * from './enrollment-status'
+export * from './cvd-requirement'
diff --git a/api/src/guidance-tag/data-source.js b/api/src/guidance-tag/data-source.js
new file mode 100644
index 0000000000..913b78e361
--- /dev/null
+++ b/api/src/guidance-tag/data-source.js
@@ -0,0 +1,35 @@
+import {
+ loadAggregateGuidanceTagByTagId,
+ loadAggregateGuidanceTagConnectionsByTagId,
+ loadDkimGuidanceTagByTagId,
+ loadDkimGuidanceTagConnectionsByTagId,
+ loadDmarcGuidanceTagByTagId,
+ loadDmarcGuidanceTagConnectionsByTagId,
+ loadGuidanceTagByTagId,
+ loadGuidanceTagSummaryConnectionsByTagId,
+ loadHttpsGuidanceTagByTagId,
+ loadHttpsGuidanceTagConnectionsByTagId,
+ loadSpfGuidanceTagByTagId,
+ loadSpfGuidanceTagConnectionsByTagId,
+ loadSslGuidanceTagByTagId,
+ loadSslGuidanceTagConnectionsByTagId,
+} from './loaders'
+
+export class GuidanceTagDataSource {
+ constructor({ query, userKey, i18n, language, cleanseInput }) {
+ this.byTagId = loadGuidanceTagByTagId({ query, userKey, i18n, language })
+ this.summaryConnectionsByTagId = loadGuidanceTagSummaryConnectionsByTagId({ query, userKey, cleanseInput, i18n, language })
+ this.aggregateByTagId = loadAggregateGuidanceTagByTagId({ query, userKey, i18n, language })
+ this.aggregateConnectionsByTagId = loadAggregateGuidanceTagConnectionsByTagId({ query, userKey, cleanseInput, i18n, language })
+ this.dkimByTagId = loadDkimGuidanceTagByTagId({ query, userKey, i18n, language })
+ this.dkimConnectionsByTagId = loadDkimGuidanceTagConnectionsByTagId({ query, userKey, cleanseInput, i18n, language })
+ this.dmarcByTagId = loadDmarcGuidanceTagByTagId({ query, userKey, i18n, language })
+ this.dmarcConnectionsByTagId = loadDmarcGuidanceTagConnectionsByTagId({ query, userKey, cleanseInput, i18n, language })
+ this.httpsByTagId = loadHttpsGuidanceTagByTagId({ query, userKey, i18n, language })
+ this.httpsConnectionsByTagId = loadHttpsGuidanceTagConnectionsByTagId({ query, userKey, cleanseInput, i18n, language })
+ this.spfByTagId = loadSpfGuidanceTagByTagId({ query, userKey, i18n, language })
+ this.spfConnectionsByTagId = loadSpfGuidanceTagConnectionsByTagId({ query, userKey, cleanseInput, i18n, language })
+ this.sslByTagId = loadSslGuidanceTagByTagId({ query, userKey, i18n, language })
+ this.sslConnectionsByTagId = loadSslGuidanceTagConnectionsByTagId({ query, userKey, cleanseInput, i18n, language })
+ }
+}
diff --git a/api/src/guidance-tag/index.js b/api/src/guidance-tag/index.js
index 6d2a5b5879..52de3be3af 100644
--- a/api/src/guidance-tag/index.js
+++ b/api/src/guidance-tag/index.js
@@ -1,3 +1,4 @@
+export * from './data-source'
export * from './inputs'
export * from './loaders'
export * from './objects'
diff --git a/api/src/initialize-loaders.js b/api/src/initialize-loaders.js
index a50134dd5e..1ab26ba52e 100644
--- a/api/src/initialize-loaders.js
+++ b/api/src/initialize-loaders.js
@@ -1,10 +1,8 @@
-import { loadAdditionalFindingsByDomainId, loadTop25Reports } from './additional-findings/loaders'
import {
loadAffiliationByKey,
loadAffiliationConnectionsByUserId,
loadAffiliationConnectionsByOrgId,
} from './affiliation/loaders'
-import { loadAuditLogsByOrgId } from './audit-logs/loaders'
import {
loadDkimFailConnectionsBySumId,
loadDmarcFailConnectionsBySumId,
@@ -24,33 +22,8 @@ import {
loadDomainConnectionsByUserId,
loadDkimSelectorsByDomainId,
} from './domain/loaders'
-import {
- loadAggregateGuidanceTagByTagId,
- loadAggregateGuidanceTagConnectionsByTagId,
- loadDkimGuidanceTagByTagId,
- loadDkimGuidanceTagConnectionsByTagId,
- loadDmarcGuidanceTagByTagId,
- loadDmarcGuidanceTagConnectionsByTagId,
- loadHttpsGuidanceTagByTagId,
- loadHttpsGuidanceTagConnectionsByTagId,
- loadSpfGuidanceTagByTagId,
- loadSpfGuidanceTagConnectionsByTagId,
- loadSslGuidanceTagByTagId,
- loadSslGuidanceTagConnectionsByTagId,
- loadGuidanceTagByTagId,
- loadGuidanceTagSummaryConnectionsByTagId,
-} from './guidance-tag/loaders'
-import {
- loadOrgByKey,
- loadOrgBySlug,
- loadOrgConnectionsByDomainId,
- loadOrgConnectionsByUserId,
- loadAllOrganizationDomainStatuses,
- loadOrganizationDomainStatuses,
- loadOrganizationSummariesByPeriod,
-} from './organization/loaders'
+import { loadOrgByKey, loadOrganizationNamesById } from './organization/loaders'
import { loadMyTrackerByUserId, loadUserByUserName, loadUserByKey, loadUserConnectionsByUserId } from './user/loaders'
-import { loadWebConnectionsByDomainId, loadWebScansByWebId } from './web-scan/loaders'
import {
loadVerifiedDomainsById,
loadVerifiedDomainByKey,
@@ -63,23 +36,10 @@ import {
loadVerifiedOrgConnectionsByDomainId,
loadVerifiedOrgConnections,
} from './verified-organizations/loaders'
-import { loadChartSummaryByKey, loadChartSummariesByPeriod } from './summaries/loaders'
-import { loadDnsConnectionsByDomainId, loadMxRecordDiffByDomainId } from './dns-scan'
-import { loadAllTags, loadTagByTagId, loadTagsByOrg } from './tags'
+import { loadTagByTagId, loadTagsByOrg } from './tags'
-export function initializeLoaders({ query, db, userKey, i18n, language, cleanseInput, loginRequiredBool, moment }) {
+export function initializeLoaders({ query, userKey, i18n, language, cleanseInput, loginRequiredBool, moment }) {
return {
- loadAdditionalFindingsByDomainId: loadAdditionalFindingsByDomainId({
- query,
- userKey,
- i18n,
- }),
- loadAllTags: loadAllTags({
- query,
- userKey,
- i18n,
- language,
- }),
loadTagByTagId: loadTagByTagId({
query,
userKey,
@@ -92,38 +52,6 @@ export function initializeLoaders({ query, db, userKey, i18n, language, cleanseI
i18n,
language,
}),
- loadTop25Reports: loadTop25Reports({
- query,
- userKey,
- i18n,
- language,
- }),
- loadChartSummaryByKey: loadChartSummaryByKey({ query, userKey, i18n }),
- loadChartSummariesByPeriod: loadChartSummariesByPeriod({
- query,
- userKey,
- cleanseInput,
- i18n,
- }),
- loadAggregateGuidanceTagByTagId: loadAggregateGuidanceTagByTagId({
- query,
- userKey,
- i18n,
- language,
- }),
- loadAggregateGuidanceTagConnectionsByTagId: loadAggregateGuidanceTagConnectionsByTagId({
- query,
- userKey,
- i18n,
- cleanseInput,
- language,
- }),
- loadAuditLogsByOrgId: loadAuditLogsByOrgId({
- query,
- userKey,
- i18n,
- cleanseInput,
- }),
loadDkimFailConnectionsBySumId: loadDkimFailConnectionsBySumId({
query,
userKey,
@@ -196,163 +124,8 @@ export function initializeLoaders({ query, db, userKey, i18n, language, cleanseI
i18n,
auth: { loginRequiredBool },
}),
- loadDnsConnectionsByDomainId: loadDnsConnectionsByDomainId({
- query,
- db,
- userKey,
- cleanseInput,
- i18n,
- }),
- loadMxRecordDiffByDomainId: loadMxRecordDiffByDomainId({
- query,
- db,
- userKey,
- cleanseInput,
- i18n,
- }),
- loadWebConnectionsByDomainId: loadWebConnectionsByDomainId({
- query,
- db,
- userKey,
- cleanseInput,
- i18n,
- }),
- loadWebScansByWebId: loadWebScansByWebId({
- query,
- db,
- userKey,
- cleanseInput,
- i18n,
- }),
- loadDkimGuidanceTagByTagId: loadDkimGuidanceTagByTagId({
- query,
- userKey,
- i18n,
- language,
- }),
- loadDkimGuidanceTagConnectionsByTagId: loadDkimGuidanceTagConnectionsByTagId({
- query,
- userKey,
- cleanseInput,
- i18n,
- language,
- }),
- loadDmarcGuidanceTagByTagId: loadDmarcGuidanceTagByTagId({
- query,
- userKey,
- i18n,
- language,
- }),
- loadDmarcGuidanceTagConnectionsByTagId: loadDmarcGuidanceTagConnectionsByTagId({
- query,
- userKey,
- cleanseInput,
- i18n,
- language,
- }),
- loadGuidanceTagSummaryConnectionsByTagId: loadGuidanceTagSummaryConnectionsByTagId({
- query,
- userKey,
- cleanseInput,
- i18n,
- language,
- }),
- loadGuidanceTagByTagId: loadGuidanceTagByTagId({
- query,
- userKey,
- i18n,
- language,
- }),
- loadHttpsGuidanceTagByTagId: loadHttpsGuidanceTagByTagId({
- query,
- userKey,
- i18n,
- language,
- }),
- loadHttpsGuidanceTagConnectionsByTagId: loadHttpsGuidanceTagConnectionsByTagId({
- query,
- userKey,
- cleanseInput,
- i18n,
- language,
- }),
- loadSpfGuidanceTagByTagId: loadSpfGuidanceTagByTagId({
- query,
- userKey,
- i18n,
- language,
- }),
- loadSpfGuidanceTagConnectionsByTagId: loadSpfGuidanceTagConnectionsByTagId({
- query,
- userKey,
- cleanseInput,
- i18n,
- language,
- }),
- loadSslGuidanceTagByTagId: loadSslGuidanceTagByTagId({
- query,
- userKey,
- i18n,
- language,
- }),
- loadSslGuidanceTagConnectionsByTagId: loadSslGuidanceTagConnectionsByTagId({
- query,
- userKey,
- cleanseInput,
- i18n,
- language,
- }),
- loadOrgByKey: loadOrgByKey({
- query,
- language,
- userKey,
- i18n,
- }),
- loadOrgBySlug: loadOrgBySlug({
- query,
- language,
- userKey,
- i18n,
- }),
- loadOrgConnectionsByDomainId: loadOrgConnectionsByDomainId({
- query,
- language,
- userKey,
- cleanseInput,
- i18n,
- auth: { loginRequiredBool },
- }),
- loadOrgConnectionsByUserId: loadOrgConnectionsByUserId({
- query,
- userKey,
- cleanseInput,
- language,
- i18n,
- auth: { loginRequiredBool },
- }),
- loadOrganizationSummariesByPeriod: loadOrganizationSummariesByPeriod({
- query,
- userKey,
- cleanseInput,
- language,
- i18n,
- auth: { loginRequiredBool },
- }),
- loadAllOrganizationDomainStatuses: loadAllOrganizationDomainStatuses({
- query,
- userKey,
- cleanseInput,
- language,
- i18n,
- }),
- loadOrganizationDomainStatuses: loadOrganizationDomainStatuses({
- query,
- userKey,
- cleanseInput,
- language,
- i18n,
- auth: { loginRequiredBool },
- }),
+ loadOrgByKey: loadOrgByKey({ query, language, userKey, i18n }),
+ loadOrganizationNamesById: loadOrganizationNamesById({ query, userKey, i18n }),
loadMyTrackerByUserId: loadMyTrackerByUserId({
query,
language,
diff --git a/api/src/locale/en/messages.po b/api/src/locale/en/messages.po
index 3a7487908d..554afd988e 100644
--- a/api/src/locale/en/messages.po
+++ b/api/src/locale/en/messages.po
@@ -19,8 +19,8 @@ msgstr ""
#: src/dmarc-summaries/loaders/load-dmarc-sum-connections-by-user-id.js:202
#: src/dmarc-summaries/loaders/load-full-pass-connections-by-sum-id.js:83
#: src/dmarc-summaries/loaders/load-spf-failure-connections-by-sum-id.js:83
-#: src/domain/loaders/load-domain-connections-by-organizations-id.js:177
-#: src/domain/loaders/load-domain-connections-by-user-id.js:204
+#: src/domain/loaders/load-domain-connections-by-organizations-id.js:178
+#: src/domain/loaders/load-domain-connections-by-user-id.js:205
#: src/guidance-tag/loaders/load-aggregate-guidance-tags-connections.js:132
#: src/guidance-tag/loaders/load-dkim-guidance-tags-connections.js:136
#: src/guidance-tag/loaders/load-dmarc-guidance-tags-connections.js:136
@@ -66,8 +66,8 @@ msgstr "`{argSet}` on the `DmarcFailureTable` connection cannot be less than zer
msgid "`{argSet}` on the `DmarcSummaries` connection cannot be less than zero."
msgstr "`{argSet}` on the `DmarcSummaries` connection cannot be less than zero."
-#: src/domain/loaders/load-domain-connections-by-organizations-id.js:156
-#: src/domain/loaders/load-domain-connections-by-user-id.js:181
+#: src/domain/loaders/load-domain-connections-by-organizations-id.js:157
+#: src/domain/loaders/load-domain-connections-by-user-id.js:182
msgid "`{argSet}` on the `Domain` connection cannot be less than zero."
msgstr "`{argSet}` on the `Domain` connection cannot be less than zero."
@@ -123,33 +123,35 @@ msgstr "`{argSet}` on the `VerifiedDomain` connection cannot be less than zero."
msgid "`{argSet}` on the `VerifiedOrganization` connection cannot be less than zero."
msgstr "`{argSet}` on the `VerifiedOrganization` connection cannot be less than zero."
-#: src/organization/objects/organization.js:244
+#: src/organization/objects/organization.js:240
#: src/organization/queries/get-all-organization-domain-statuses.js:69
msgid "Assess"
msgstr "Assess"
-#: src/auth/check-permission.js:18
-#: src/auth/check-permission.js:57
-#: src/auth/user-required.js:10
-#: src/auth/user-required.js:21
-#: src/auth/user-required.js:28
+#: src/auth/checks/check-permission.js:18
+#: src/auth/checks/check-permission.js:57
+#: src/auth/guards/user-required.js:10
+#: src/auth/guards/user-required.js:21
+#: src/auth/guards/user-required.js:28
+#: src/auth/loaders/load-permission-by-org-id.js:19
+#: src/auth/loaders/load-permission-by-org-id.js:63
msgid "Authentication error. Please sign in."
msgstr "Authentication error. Please sign in."
-#: src/domain/objects/domain.js:279
+#: src/domain/objects/domain.js:229
msgid "Cannot query additional findings without permission."
msgstr "Cannot query additional findings without permission."
-#: src/organization/objects/organization.js:378
+#: src/organization/objects/organization.js:359
msgid "Cannot query affiliations on organization without admin permission or higher."
msgstr "Cannot query affiliations on organization without admin permission or higher."
#: src/audit-logs/loaders/load-audit-logs-by-org-id.js:224
-#: src/audit-logs/queries/find-audit-logs.js:51
+#: src/audit-logs/queries/find-audit-logs.js:53
msgid "Cannot query audit logs on organization without admin permission or higher."
msgstr "Cannot query audit logs on organization without admin permission or higher."
-#: src/domain/objects/domain.js:168
+#: src/domain/objects/domain.js:164
msgid "Cannot query dns scan results without permission."
msgstr "Cannot query dns scan results without permission."
@@ -157,8 +159,7 @@ msgstr "Cannot query dns scan results without permission."
msgid "Cannot query domain selectors without permission."
msgstr "Cannot query domain selectors without permission."
-#: src/domain/objects/domain.js:210
-#: src/domain/objects/domain.js:256
+#: src/domain/objects/domain.js:206
msgid "Cannot query web scan results without permission."
msgstr "Cannot query web scan results without permission."
@@ -170,7 +171,7 @@ msgstr "CVE is already ignored for this domain."
msgid "CVE is not ignored for this domain."
msgstr "CVE is not ignored for this domain."
-#: src/organization/objects/organization.js:246
+#: src/organization/objects/organization.js:242
#: src/organization/queries/get-all-organization-domain-statuses.js:71
msgid "Deploy"
msgstr "Deploy"
@@ -179,13 +180,13 @@ msgstr "Deploy"
msgid "Email already in use."
msgstr "Email already in use."
-#: src/organization/objects/organization.js:248
+#: src/organization/objects/organization.js:244
#: src/organization/queries/get-all-organization-domain-statuses.js:73
msgid "Enforce"
msgstr "Enforce"
-#: src/domain/mutations/request-scan.js:89
-#: src/domain/mutations/request-scan.js:99
+#: src/domain/mutations/request-scan.js:90
+#: src/domain/mutations/request-scan.js:100
msgid "Error while requesting scan. Please try again."
msgstr "Error while requesting scan. Please try again."
@@ -212,11 +213,11 @@ msgstr "Incorrect token value. Please request a new email."
msgid "Incorrect username or password. Please try again."
msgstr "Incorrect username or password. Please try again."
-#: src/auth/verify-jwt.js:15
+#: src/auth/utils/verify-jwt.js:15
msgid "Invalid token, please sign in."
msgstr "Invalid token, please sign in."
-#: src/organization/objects/organization.js:250
+#: src/organization/objects/organization.js:246
#: src/organization/queries/get-all-organization-domain-statuses.js:75
msgid "Maintain"
msgstr "Maintain"
@@ -229,7 +230,7 @@ msgstr "Message dismissed successfully"
msgid "New passwords do not match."
msgstr "New passwords do not match."
-#: src/organization/queries/find-organization-by-slug.js:41
+#: src/organization/queries/find-organization-by-slug.js:42
#: src/user/queries/find-my-tracker.js:29
msgid "No organization with the provided slug could be found."
msgstr "No organization with the provided slug could be found."
@@ -242,22 +243,22 @@ msgstr "No verified domain with the provided domain could be found."
msgid "No verified organization with the provided slug could be found."
msgstr "No verified organization with the provided slug could be found."
-#: src/organization/mutations/verify-organization.js:81
+#: src/organization/mutations/verify-organization.js:78
msgid "Organization has already been verified."
msgstr "Organization has already been verified."
-#: src/organization/mutations/update-organization.js:184
+#: src/organization/mutations/update-organization.js:167
msgid "Organization name already in use, please choose another and try again."
msgstr "Organization name already in use, please choose another and try again."
-#: src/organization/mutations/create-organization.js:125
+#: src/organization/mutations/create-organization.js:85
msgid "Organization name already in use. Please try again with a different name."
msgstr "Organization name already in use. Please try again with a different name."
-#: src/auth/check-domain-ownership.js:29
-#: src/auth/check-domain-ownership.js:39
-#: src/auth/check-domain-ownership.js:65
-#: src/auth/check-domain-ownership.js:74
+#: src/auth/checks/check-domain-ownership.js:29
+#: src/auth/checks/check-domain-ownership.js:39
+#: src/auth/checks/check-domain-ownership.js:65
+#: src/auth/checks/check-domain-ownership.js:74
msgid "Ownership check error. Unable to request domain information."
msgstr "Ownership check error. Unable to request domain information."
@@ -291,8 +292,8 @@ msgstr "Passing both `first` and `last` to paginate the `DmarcFailureTable` conn
msgid "Passing both `first` and `last` to paginate the `DmarcSummaries` connection is not supported."
msgstr "Passing both `first` and `last` to paginate the `DmarcSummaries` connection is not supported."
-#: src/domain/loaders/load-domain-connections-by-organizations-id.js:147
-#: src/domain/loaders/load-domain-connections-by-user-id.js:172
+#: src/domain/loaders/load-domain-connections-by-organizations-id.js:148
+#: src/domain/loaders/load-domain-connections-by-user-id.js:173
msgid "Passing both `first` and `last` to paginate the `Domain` connection is not supported."
msgstr "Passing both `first` and `last` to paginate the `Domain` connection is not supported."
@@ -365,14 +366,17 @@ msgstr "Password was successfully updated."
msgid "Passwords do not match."
msgstr "Passwords do not match."
-#: src/auth/check-domain-permission.js:22
-#: src/auth/check-domain-permission.js:51
-#: src/auth/check-domain-permission.js:61
+#: src/auth/checks/check-domain-permission.js:22
+#: src/auth/checks/check-domain-permission.js:51
+#: src/auth/checks/check-domain-permission.js:61
+#: src/auth/loaders/load-domain-permission-by-domain-id.js:19
+#: src/auth/loaders/load-domain-permission-by-domain-id.js:51
+#: src/auth/loaders/load-domain-permission-by-domain-id.js:61
msgid "Permission check error. Unable to request domain information."
msgstr "Permission check error. Unable to request domain information."
#: src/organization/queries/find-organization-by-slug.js:50
-#: src/organization/queries/find-organization-by-slug.js:55
+#: src/organization/queries/find-organization-by-slug.js:52
msgid "Permission Denied: Could not retrieve specified organization."
msgstr "Permission Denied: Could not retrieve specified organization."
@@ -388,11 +392,11 @@ msgstr "Permission Denied: Please contact org owner to transfer ownership."
msgid "Permission Denied: Please contact organization admin for help with archiving domains."
msgstr "Permission Denied: Please contact organization admin for help with archiving domains."
-#: src/tags/mutations/create-tag.js:136
+#: src/tags/mutations/create-tag.js:131
msgid "Permission Denied: Please contact organization admin for help with creating tag."
msgstr "Permission Denied: Please contact organization admin for help with creating tag."
-#: src/domain/mutations/remove-domain.js:95
+#: src/domain/mutations/remove-domain.js:96
msgid "Permission Denied: Please contact organization admin for help with removing domain."
msgstr "Permission Denied: Please contact organization admin for help with removing domain."
@@ -400,26 +404,26 @@ msgstr "Permission Denied: Please contact organization admin for help with remov
msgid "Permission Denied: Please contact organization admin for help with removing domains."
msgstr "Permission Denied: Please contact organization admin for help with removing domains."
-#: src/organization/mutations/remove-organization.js:70
+#: src/organization/mutations/remove-organization.js:67
msgid "Permission Denied: Please contact organization admin for help with removing organization."
msgstr "Permission Denied: Please contact organization admin for help with removing organization."
-#: src/affiliation/mutations/remove-user-from-org.js:127
-#: src/affiliation/mutations/remove-user-from-org.js:139
+#: src/affiliation/mutations/remove-user-from-org.js:128
+#: src/affiliation/mutations/remove-user-from-org.js:140
msgid "Permission Denied: Please contact organization admin for help with removing users."
msgstr "Permission Denied: Please contact organization admin for help with removing users."
-#: src/domain/mutations/update-domains-by-domain-ids.js:80
-#: src/domain/mutations/update-domains-by-filters.js:88
+#: src/domain/mutations/update-domains-by-domain-ids.js:81
+#: src/domain/mutations/update-domains-by-filters.js:89
msgid "Permission Denied: Please contact organization admin for help with updating domains."
msgstr "Permission Denied: Please contact organization admin for help with updating domains."
-#: src/organization/mutations/update-organization.js:155
+#: src/organization/mutations/update-organization.js:152
msgid "Permission Denied: Please contact organization admin for help with updating organization."
msgstr "Permission Denied: Please contact organization admin for help with updating organization."
-#: src/tags/mutations/update-tag.js:146
-#: src/tags/mutations/update-tag.js:157
+#: src/tags/mutations/update-tag.js:125
+#: src/tags/mutations/update-tag.js:136
msgid "Permission Denied: Please contact organization admin for help with updating tag."
msgstr "Permission Denied: Please contact organization admin for help with updating tag."
@@ -429,17 +433,15 @@ msgstr "Permission Denied: Please contact organization admin for help with updat
#~ msgid "Permission Denied: Please contact organization admin for help with updating user roles."
#~ msgstr "Permission Denied: Please contact organization admin for help with updating user roles."
-#: src/affiliation/mutations/invite-user-to-org.js:102
+#: src/affiliation/mutations/invite-user-to-org.js:99
msgid "Permission Denied: Please contact organization admin for help with user invitations."
msgstr "Permission Denied: Please contact organization admin for help with user invitations."
-#: src/affiliation/mutations/update-user-role.js:110
-#: src/affiliation/mutations/update-user-role.js:161
-#: src/affiliation/mutations/update-user-role.js:173
+#: src/affiliation/mutations/update-user-role.js:112
msgid "Permission Denied: Please contact organization admin for help with user role changes."
msgstr "Permission Denied: Please contact organization admin for help with user role changes."
-#: src/domain/mutations/create-domain.js:121
+#: src/domain/mutations/create-domain.js:130
msgid "Permission Denied: Please contact organization user for help with creating domain."
msgstr "Permission Denied: Please contact organization user for help with creating domain."
@@ -452,29 +454,29 @@ msgstr "Permission Denied: Please contact organization user for help with creati
#~ msgstr "Permission Denied: Please contact organization user for help with retrieving tags."
#: src/domain/queries/find-domain-by-domain.js:51
-#: src/organization/objects/organization.js:198
+#: src/organization/objects/organization.js:195
msgid "Permission Denied: Please contact organization user for help with retrieving this domain."
msgstr "Permission Denied: Please contact organization user for help with retrieving this domain."
#: src/domain/mutations/request-discovery.js:98
-#: src/domain/mutations/request-scan.js:65
+#: src/domain/mutations/request-scan.js:66
msgid "Permission Denied: Please contact organization user for help with scanning this domain."
msgstr "Permission Denied: Please contact organization user for help with scanning this domain."
-#: src/domain/mutations/update-domain.js:137
+#: src/domain/mutations/update-domain.js:151
msgid "Permission Denied: Please contact organization user for help with updating this domain."
msgstr "Permission Denied: Please contact organization user for help with updating this domain."
-#: src/organization/mutations/archive-organization.js:69
+#: src/organization/mutations/archive-organization.js:66
msgid "Permission Denied: Please contact super admin for help with archiving organization."
msgstr "Permission Denied: Please contact super admin for help with archiving organization."
-#: src/domain/mutations/remove-domain.js:108
+#: src/domain/mutations/remove-domain.js:109
#: src/domain/mutations/remove-organizations-domains.js:106
msgid "Permission Denied: Please contact super admin for help with removing domain."
msgstr "Permission Denied: Please contact super admin for help with removing domain."
-#: src/organization/mutations/remove-organization.js:83
+#: src/organization/mutations/remove-organization.js:80
msgid "Permission Denied: Please contact super admin for help with removing organization."
msgstr "Permission Denied: Please contact super admin for help with removing organization."
@@ -482,18 +484,26 @@ msgstr "Permission Denied: Please contact super admin for help with removing org
#~ msgid "Permission Denied: Please contact super admin for help with scanning this domain."
#~ msgstr "Permission Denied: Please contact super admin for help with scanning this domain."
-#: src/tags/mutations/update-tag.js:168
+#: src/tags/mutations/update-tag.js:147
msgid "Permission Denied: Please contact super admin for help with updating tag."
msgstr "Permission Denied: Please contact super admin for help with updating tag."
-#: src/organization/mutations/verify-organization.js:68
+#: src/affiliation/mutations/invite-user-to-org.js:112
+msgid "Permission Denied: Please contact super admin for help with user invitations."
+msgstr "Permission Denied: Please contact super admin for help with user invitations."
+
+#: src/affiliation/mutations/update-user-role.js:167
+msgid "Permission Denied: Please contact super admin for help with user role changes."
+msgstr "Permission Denied: Please contact super admin for help with user role changes."
+
+#: src/organization/mutations/verify-organization.js:65
msgid "Permission Denied: Please contact super admin for help with verifying this organization."
msgstr "Permission Denied: Please contact super admin for help with verifying this organization."
-#: src/auth/check-user-is-admin-for-user.js:20
-#: src/auth/check-user-is-admin-for-user.js:30
-#: src/auth/check-user-is-admin-for-user.js:63
-#: src/auth/check-user-is-admin-for-user.js:73
+#: src/auth/checks/check-user-is-admin-for-user.js:20
+#: src/auth/checks/check-user-is-admin-for-user.js:30
+#: src/auth/checks/check-user-is-admin-for-user.js:63
+#: src/auth/checks/check-user-is-admin-for-user.js:73
msgid "Permission error, not an admin for this user."
msgstr "Permission error, not an admin for this user."
@@ -501,7 +511,7 @@ msgstr "Permission error, not an admin for this user."
msgid "Permission error: Unable to close other user's account."
msgstr "Permission error: Unable to close other user's account."
-#: src/auth/super-admin-required.js:11
+#: src/auth/guards/super-admin-required.js:11
msgid "Permissions error. You do not have sufficient permissions to access this data."
msgstr "Permissions error. You do not have sufficient permissions to access this data."
@@ -563,8 +573,8 @@ msgstr "Requesting `{amount}` records on the `DmarcFailureTable` connection exce
msgid "Requesting `{amount}` records on the `DmarcSummaries` connection exceeds the `{argSet}` limit of 100 records."
msgstr "Requesting `{amount}` records on the `DmarcSummaries` connection exceeds the `{argSet}` limit of 100 records."
-#: src/domain/loaders/load-domain-connections-by-organizations-id.js:163
-#: src/domain/loaders/load-domain-connections-by-user-id.js:190
+#: src/domain/loaders/load-domain-connections-by-organizations-id.js:164
+#: src/domain/loaders/load-domain-connections-by-user-id.js:191
msgid "Requesting `{amount}` records on the `Domain` connection exceeds the `{argSet}` limit of 100 records."
msgstr "Requesting `{amount}` records on the `Domain` connection exceeds the `{argSet}` limit of 100 records."
@@ -618,7 +628,7 @@ msgstr "Successfully added {domainCount} domain(s) to {0}."
#~ msgstr "Successfully added {domainCount} domains to {0}."
#. placeholder {0}: organization.slug
-#: src/organization/mutations/archive-organization.js:195
+#: src/organization/mutations/archive-organization.js:100
msgid "Successfully archived organization: {0}."
msgstr "Successfully archived organization: {0}."
@@ -627,7 +637,7 @@ msgstr "Successfully archived organization: {0}."
msgid "Successfully closed account."
msgstr "Successfully closed account."
-#: src/domain/mutations/request-scan.js:174
+#: src/domain/mutations/request-scan.js:175
msgid "Successfully dispatched one time scan."
msgstr "Successfully dispatched one time scan."
@@ -643,7 +653,7 @@ msgstr "Successfully dispatched subdomain discovery scan."
msgid "Successfully email verified account."
msgstr "Successfully email verified account."
-#: src/affiliation/mutations/invite-user-to-org.js:288
+#: src/affiliation/mutations/invite-user-to-org.js:282
msgid "Successfully invited user to organization, and sent notification email."
msgstr "Successfully invited user to organization, and sent notification email."
@@ -663,7 +673,7 @@ msgstr "Successfully removed {domainCount} domain(s) from {0}."
#. placeholder {0}: domain.domain
#. placeholder {1}: org.slug
-#: src/domain/mutations/remove-domain.js:372
+#: src/domain/mutations/remove-domain.js:373
msgid "Successfully removed domain: {0} from {1}."
msgstr "Successfully removed domain: {0} from {1}."
@@ -673,19 +683,19 @@ msgid "Successfully removed domain: {0} from favourites."
msgstr "Successfully removed domain: {0} from favourites."
#. placeholder {0}: organization.slug
-#: src/organization/mutations/remove-organization.js:418
+#: src/organization/mutations/remove-organization.js:107
msgid "Successfully removed organization: {0}."
msgstr "Successfully removed organization: {0}."
-#: src/affiliation/mutations/remove-user-from-org.js:200
+#: src/affiliation/mutations/remove-user-from-org.js:201
msgid "Successfully removed user from organization."
msgstr "Successfully removed user from organization."
-#: src/affiliation/mutations/request-org-affiliation.js:247
+#: src/affiliation/mutations/request-org-affiliation.js:231
msgid "Successfully requested invite to organization, and sent notification email."
msgstr "Successfully requested invite to organization, and sent notification email."
-#: src/affiliation/mutations/invite-user-to-org.js:176
+#: src/affiliation/mutations/invite-user-to-org.js:170
msgid "Successfully sent invitation to service, and organization email."
msgstr "Successfully sent invitation to service, and organization email."
@@ -701,13 +711,13 @@ msgstr "Successfully transferred org: {0} ownership to user: {1}"
#. placeholder {0}: org.slug
#. placeholder {1}: tags.join(', ')
-#: src/domain/mutations/update-domains-by-domain-ids.js:178
-#: src/domain/mutations/update-domains-by-filters.js:309
+#: src/domain/mutations/update-domains-by-domain-ids.js:179
+#: src/domain/mutations/update-domains-by-filters.js:310
msgid "Successfully updated {domainCount} domain(s) in {0} with {1}."
msgstr "Successfully updated {domainCount} domain(s) in {0} with {1}."
#. placeholder {0}: currentOrg.slug
-#: src/organization/mutations/verify-organization.js:138
+#: src/organization/mutations/verify-organization.js:90
msgid "Successfully verified organization: {0}."
msgstr "Successfully verified organization: {0}."
@@ -719,9 +729,9 @@ msgstr "Successfully verified phone number, and set TFA send method to text."
#~ msgid "Tag label already in use, please choose another and try again."
#~ msgstr "Tag label already in use, please choose another and try again."
-#: src/tags/mutations/create-tag.js:96
-#: src/tags/mutations/create-tag.js:153
-#: src/tags/mutations/update-tag.js:182
+#: src/tags/mutations/create-tag.js:94
+#: src/tags/mutations/create-tag.js:148
+#: src/tags/mutations/update-tag.js:161
msgid "Tag label already in use. Please try again with a different label."
msgstr "Tag label already in use. Please try again with a different label."
@@ -754,15 +764,14 @@ msgstr "Unable leave organization. Please try again."
msgid "Unable to add domains in unknown organization."
msgstr "Unable to add domains in unknown organization."
-#: src/organization/mutations/archive-organization.js:103
-#: src/organization/mutations/archive-organization.js:114
-#: src/organization/mutations/archive-organization.js:133
-#: src/organization/mutations/archive-organization.js:151
-#: src/organization/mutations/archive-organization.js:161
+#: src/organization/data-source.js:179
+#: src/organization/data-source.js:194
+#: src/organization/data-source.js:209
+#: src/organization/data-source.js:217
msgid "Unable to archive organization. Please try again."
msgstr "Unable to archive organization. Please try again."
-#: src/organization/mutations/archive-organization.js:55
+#: src/organization/mutations/archive-organization.js:52
msgid "Unable to archive unknown organization."
msgstr "Unable to archive unknown organization."
@@ -773,10 +782,12 @@ msgstr "Unable to archive unknown organization."
msgid "Unable to authenticate. Please try again."
msgstr "Unable to authenticate. Please try again."
-#: src/auth/check-permission.js:26
-#: src/auth/check-permission.js:64
-#: src/auth/check-super-admin.js:20
-#: src/auth/check-super-admin.js:30
+#: src/auth/checks/check-permission.js:26
+#: src/auth/checks/check-permission.js:64
+#: src/auth/checks/check-super-admin.js:20
+#: src/auth/checks/check-super-admin.js:30
+#: src/auth/loaders/load-permission-by-org-id.js:27
+#: src/auth/loaders/load-permission-by-org-id.js:73
msgid "Unable to check permission. Please try again."
msgstr "Unable to check permission. Please try again."
@@ -798,20 +809,20 @@ msgstr "Unable to close account. Please try again."
msgid "Unable to confirm completion of the tour. Please try again."
msgstr "Unable to confirm completion of the tour. Please try again."
-#: src/domain/mutations/create-domain.js:107
+#: src/domain/mutations/create-domain.js:116
msgid "Unable to create domain in unknown organization."
msgstr "Unable to create domain in unknown organization."
-#: src/domain/mutations/create-domain.js:178
+#: src/domain/mutations/create-domain.js:199
msgid "Unable to create domain, organization has already claimed it."
msgstr "Unable to create domain, organization has already claimed it."
-#: src/domain/mutations/create-domain.js:160
-#: src/domain/mutations/create-domain.js:168
-#: src/domain/mutations/create-domain.js:200
-#: src/domain/mutations/create-domain.js:209
-#: src/domain/mutations/create-domain.js:229
-#: src/domain/mutations/create-domain.js:237
+#: src/domain/mutations/create-domain.js:181
+#: src/domain/mutations/create-domain.js:189
+#: src/domain/mutations/create-domain.js:221
+#: src/domain/mutations/create-domain.js:230
+#: src/domain/mutations/create-domain.js:250
+#: src/domain/mutations/create-domain.js:258
msgid "Unable to create domain. Please try again."
msgstr "Unable to create domain. Please try again."
@@ -819,22 +830,22 @@ msgstr "Unable to create domain. Please try again."
msgid "Unable to create domains. Please try again."
msgstr "Unable to create domains. Please try again."
-#: src/organization/mutations/create-organization.js:185
-#: src/organization/mutations/create-organization.js:206
-#: src/organization/mutations/create-organization.js:216
+#: src/organization/data-source.js:58
+#: src/organization/data-source.js:76
+#: src/organization/data-source.js:84
msgid "Unable to create organization. Please try again."
msgstr "Unable to create organization. Please try again."
-#: src/tags/mutations/create-tag.js:124
+#: src/tags/mutations/create-tag.js:119
msgid "Unable to create tag in unknown organization."
msgstr "Unable to create tag in unknown organization."
-#: src/tags/mutations/create-tag.js:113
+#: src/tags/mutations/create-tag.js:108
msgid "Unable to create tag, tagId already in use."
msgstr "Unable to create tag, tagId already in use."
-#: src/tags/mutations/create-tag.js:172
-#: src/tags/mutations/create-tag.js:180
+#: src/tags/data-source.js:58
+#: src/tags/data-source.js:65
msgid "Unable to create tag. Please try again."
msgstr "Unable to create tag. Please try again."
@@ -853,8 +864,7 @@ msgstr "Unable to dismiss message. Please try again."
#~ msgid "Unable to dispatch one time scan. Please try again."
#~ msgstr "Unable to dispatch one time scan. Please try again."
-#: src/organization/objects/organization.js:275
-#: src/organization/objects/organization.js:285
+#: src/organization/objects/organization.js:265
msgid "Unable to export organization. Please try again."
msgstr "Unable to export organization. Please try again."
@@ -973,26 +983,25 @@ msgstr "Unable to find verified organization(s). Please try again."
msgid "Unable to ignore CVE. Please try again."
msgstr "Unable to ignore CVE. Please try again."
-#: src/affiliation/mutations/invite-user-to-org.js:120
-#: src/affiliation/mutations/invite-user-to-org.js:130
-#: src/affiliation/mutations/invite-user-to-org.js:196
+#: src/affiliation/mutations/invite-user-to-org.js:124
+#: src/affiliation/mutations/invite-user-to-org.js:190
msgid "Unable to invite user to organization. Please try again."
msgstr "Unable to invite user to organization. Please try again."
-#: src/affiliation/mutations/invite-user-to-org.js:208
+#: src/affiliation/mutations/invite-user-to-org.js:202
msgid "Unable to invite user to organization. User is already affiliated with organization."
msgstr "Unable to invite user to organization. User is already affiliated with organization."
-#: src/affiliation/mutations/invite-user-to-org.js:83
+#: src/affiliation/mutations/invite-user-to-org.js:84
msgid "Unable to invite user to unknown organization."
msgstr "Unable to invite user to unknown organization."
-#: src/affiliation/mutations/invite-user-to-org.js:238
-#: src/affiliation/mutations/invite-user-to-org.js:259
+#: src/affiliation/mutations/invite-user-to-org.js:232
+#: src/affiliation/mutations/invite-user-to-org.js:253
msgid "Unable to invite user. Please try again."
msgstr "Unable to invite user. Please try again."
-#: src/affiliation/mutations/invite-user-to-org.js:69
+#: src/affiliation/mutations/invite-user-to-org.js:70
msgid "Unable to invite yourself to an org."
msgstr "Unable to invite yourself to an org."
@@ -1010,7 +1019,7 @@ msgstr "Unable to leave undefined organization."
msgid "Unable to load additional findings. Please try again."
msgstr "Unable to load additional findings. Please try again."
-#: src/auth/check-user-belongs-to-org.js:20
+#: src/auth/checks/check-user-belongs-to-org.js:20
msgid "Unable to load affiliation information. Please try again."
msgstr "Unable to load affiliation information. Please try again."
@@ -1055,8 +1064,8 @@ msgstr "Unable to load DKIM guidance tag(s). Please try again."
#~ msgstr "Unable to load DKIM scan(s). Please try again."
#: src/summaries/queries/dkim-summary.js:12
-msgid "Unable to load DKIM summary. Please try again."
-msgstr "Unable to load DKIM summary. Please try again."
+#~ msgid "Unable to load DKIM summary. Please try again."
+#~ msgstr "Unable to load DKIM summary. Please try again."
#: src/dmarc-summaries/loaders/load-dmarc-failure-connections-by-sum-id.js:13
#: src/dmarc-summaries/loaders/load-dmarc-failure-connections-by-sum-id.js:141
@@ -1070,8 +1079,8 @@ msgid "Unable to load DMARC guidance tag(s). Please try again."
msgstr "Unable to load DMARC guidance tag(s). Please try again."
#: src/summaries/queries/dmarc-phase-summary.js:12
-msgid "Unable to load DMARC phase summary. Please try again."
-msgstr "Unable to load DMARC phase summary. Please try again."
+#~ msgid "Unable to load DMARC phase summary. Please try again."
+#~ msgstr "Unable to load DMARC phase summary. Please try again."
#: src/email-scan/loaders/load-dmarc-connections-by-domain-id.js:319
#: src/email-scan/loaders/load-dmarc-connections-by-domain-id.js:331
@@ -1088,13 +1097,11 @@ msgid "Unable to load DMARC summary data. Please try again."
msgstr "Unable to load DMARC summary data. Please try again."
#: src/summaries/queries/dmarc-summary.js:12
-msgid "Unable to load DMARC summary. Please try again."
-msgstr "Unable to load DMARC summary. Please try again."
+#~ msgid "Unable to load DMARC summary. Please try again."
+#~ msgstr "Unable to load DMARC summary. Please try again."
#: src/dns-scan/loaders/load-dns-connections-by-domain-id.js:154
#: src/dns-scan/loaders/load-dns-connections-by-domain-id.js:164
-#: src/dns-scan/loaders/load-mx-record-diff-by-domain-id.js:156
-#: src/dns-scan/loaders/load-mx-record-diff-by-domain-id.js:166
msgid "Unable to load DNS scan(s). Please try again."
msgstr "Unable to load DNS scan(s). Please try again."
@@ -1110,9 +1117,9 @@ msgstr "Unable to load domain selector(s). Please try again."
msgid "Unable to load domain. Please try again."
msgstr "Unable to load domain. Please try again."
-#: src/domain/loaders/load-domain-connections-by-organizations-id.js:523
-#: src/domain/loaders/load-domain-connections-by-organizations-id.js:533
-#: src/domain/loaders/load-domain-connections-by-user-id.js:575
+#: src/domain/loaders/load-domain-connections-by-organizations-id.js:402
+#: src/domain/loaders/load-domain-connections-by-organizations-id.js:412
+#: src/domain/loaders/load-domain-connections-by-user-id.js:469
#: src/user/loaders/load-my-tracker-by-user-id.js:33
msgid "Unable to load domain(s). Please try again."
msgstr "Unable to load domain(s). Please try again."
@@ -1140,8 +1147,8 @@ msgstr "Unable to load HTTPS guidance tag(s). Please try again."
#~ msgstr "Unable to load HTTPS scan(s). Please try again."
#: src/summaries/queries/https-summary.js:13
-msgid "Unable to load HTTPS summary. Please try again."
-msgstr "Unable to load HTTPS summary. Please try again."
+#~ msgid "Unable to load HTTPS summary. Please try again."
+#~ msgstr "Unable to load HTTPS summary. Please try again."
#: src/audit-logs/loaders/load-audit-log-by-key.js:19
#: src/audit-logs/loaders/load-audit-log-by-key.js:31
@@ -1153,20 +1160,32 @@ msgid "Unable to load log(s). Please try again."
msgstr "Unable to load log(s). Please try again."
#: src/summaries/queries/mail-summary.js:12
-msgid "Unable to load mail summary. Please try again."
-msgstr "Unable to load mail summary. Please try again."
+#~ msgid "Unable to load mail summary. Please try again."
+#~ msgstr "Unable to load mail summary. Please try again."
#: src/additional-findings/loaders/load-top-25-reports.js:29
#: src/organization/loaders/load-all-organization-domain-statuses.js:164
-#: src/organization/loaders/load-organization-domain-statuses.js:166
+#: src/organization/loaders/load-organization-domain-statuses.js:172
msgid "Unable to load organization domain statuses. Please try again."
msgstr "Unable to load organization domain statuses. Please try again."
+#: src/organization/loaders/load-organization-names-by-id.js:19
+#: src/organization/loaders/load-organization-names-by-id.js:29
+msgid "Unable to load organization names. Please try again."
+msgstr "Unable to load organization names. Please try again."
+
#: src/organization/loaders/load-organization-summaries-by-period.js:56
#: src/organization/loaders/load-organization-summaries-by-period.js:66
msgid "Unable to load organization summary data. Please try again."
msgstr "Unable to load organization summary data. Please try again."
+#: src/organization/data-source.js:117
+#: src/organization/data-source.js:124
+#: src/organization/data-source.js:144
+#: src/organization/data-source.js:152
+msgid "Unable to load organization. Please try again."
+msgstr "Unable to load organization. Please try again."
+
#: src/organization/loaders/load-organization-by-key.js:31
#: src/organization/loaders/load-organization-by-key.js:41
#: src/organization/loaders/load-organization-by-slug.js:34
@@ -1178,8 +1197,10 @@ msgstr "Unable to load organization summary data. Please try again."
msgid "Unable to load organization(s). Please try again."
msgstr "Unable to load organization(s). Please try again."
-#: src/auth/check-org-owner.js:19
-#: src/auth/check-org-owner.js:27
+#: src/auth/checks/check-org-owner.js:19
+#: src/auth/checks/check-org-owner.js:27
+#: src/auth/loaders/load-org-owner-by-org-id.js:23
+#: src/auth/loaders/load-org-owner-by-org-id.js:33
msgid "Unable to load owner information. Please try again."
msgstr "Unable to load owner information. Please try again."
@@ -1200,8 +1221,8 @@ msgstr "Unable to load SPF guidance tag(s). Please try again."
#~ msgstr "Unable to load SPF scan(s). Please try again."
#: src/summaries/queries/spf-summary.js:12
-msgid "Unable to load SPF summary. Please try again."
-msgstr "Unable to load SPF summary. Please try again."
+#~ msgid "Unable to load SPF summary. Please try again."
+#~ msgstr "Unable to load SPF summary. Please try again."
#: src/guidance-tag/loaders/load-ssl-guidance-tags-connections.js:260
#: src/guidance-tag/loaders/load-ssl-guidance-tags-connections.js:272
@@ -1214,13 +1235,13 @@ msgstr "Unable to load SSL guidance tag(s). Please try again."
#~ msgstr "Unable to load SSL scan(s). Please try again."
#: src/summaries/queries/ssl-summary.js:12
-msgid "Unable to load SSL summary. Please try again."
-msgstr "Unable to load SSL summary. Please try again."
+#~ msgid "Unable to load SSL summary. Please try again."
+#~ msgstr "Unable to load SSL summary. Please try again."
#: src/summaries/loaders/load-chart-summary-by-key.js:17
#: src/summaries/loaders/load-chart-summary-by-key.js:25
-msgid "Unable to load summary. Please try again."
-msgstr "Unable to load summary. Please try again."
+#~ msgid "Unable to load summary. Please try again."
+#~ msgstr "Unable to load summary. Please try again."
#: src/tags/loaders/load-all-tags.js:36
#: src/tags/loaders/load-all-tags.js:44
@@ -1266,8 +1287,8 @@ msgid "Unable to load verified rua domains. Please try again."
msgstr "Unable to load verified rua domains. Please try again."
#: src/summaries/queries/web-connections-summary.js:12
-msgid "Unable to load web connections summary. Please try again."
-msgstr "Unable to load web connections summary. Please try again."
+#~ msgid "Unable to load web connections summary. Please try again."
+#~ msgstr "Unable to load web connections summary. Please try again."
#: src/web-scan/loaders/load-web-connections-by-domain-id.js:169
#: src/web-scan/loaders/load-web-connections-by-domain-id.js:179
@@ -1278,15 +1299,15 @@ msgid "Unable to load web scan(s). Please try again."
msgstr "Unable to load web scan(s). Please try again."
#: src/summaries/queries/web-summary.js:13
-msgid "Unable to load web summary. Please try again."
-msgstr "Unable to load web summary. Please try again."
+#~ msgid "Unable to load web summary. Please try again."
+#~ msgstr "Unable to load web summary. Please try again."
#: src/affiliation/loaders/load-affiliation-connections-by-org-id.js:293
#: src/affiliation/loaders/load-affiliation-connections-by-user-id.js:437
msgid "Unable to query affiliation(s). Please try again."
msgstr "Unable to query affiliation(s). Please try again."
-#: src/domain/loaders/load-domain-connections-by-user-id.js:565
+#: src/domain/loaders/load-domain-connections-by-user-id.js:459
#: src/user/loaders/load-my-tracker-by-user-id.js:23
msgid "Unable to query domain(s). Please try again."
msgstr "Unable to query domain(s). Please try again."
@@ -1309,29 +1330,29 @@ msgstr "Unable to query user(s). Please try again."
msgid "Unable to refresh tokens, please sign in."
msgstr "Unable to refresh tokens, please sign in."
-#: src/affiliation/mutations/remove-user-from-org.js:105
+#: src/affiliation/mutations/remove-user-from-org.js:106
msgid "Unable to remove a user that already does not belong to this organization."
msgstr "Unable to remove a user that already does not belong to this organization."
-#: src/domain/mutations/remove-domain.js:81
+#: src/domain/mutations/remove-domain.js:82
msgid "Unable to remove domain from unknown organization."
msgstr "Unable to remove domain from unknown organization."
-#: src/domain/mutations/remove-domain.js:137
+#: src/domain/mutations/remove-domain.js:138
msgid "Unable to remove domain. Domain is not part of organization."
msgstr "Unable to remove domain. Domain is not part of organization."
-#: src/domain/mutations/remove-domain.js:124
-#: src/domain/mutations/remove-domain.js:153
-#: src/domain/mutations/remove-domain.js:187
-#: src/domain/mutations/remove-domain.js:207
-#: src/domain/mutations/remove-domain.js:236
-#: src/domain/mutations/remove-domain.js:255
-#: src/domain/mutations/remove-domain.js:273
-#: src/domain/mutations/remove-domain.js:290
-#: src/domain/mutations/remove-domain.js:308
-#: src/domain/mutations/remove-domain.js:332
-#: src/domain/mutations/remove-domain.js:344
+#: src/domain/mutations/remove-domain.js:125
+#: src/domain/mutations/remove-domain.js:154
+#: src/domain/mutations/remove-domain.js:188
+#: src/domain/mutations/remove-domain.js:208
+#: src/domain/mutations/remove-domain.js:237
+#: src/domain/mutations/remove-domain.js:256
+#: src/domain/mutations/remove-domain.js:274
+#: src/domain/mutations/remove-domain.js:291
+#: src/domain/mutations/remove-domain.js:309
+#: src/domain/mutations/remove-domain.js:333
+#: src/domain/mutations/remove-domain.js:345
msgid "Unable to remove domain. Please try again."
msgstr "Unable to remove domain. Please try again."
@@ -1339,19 +1360,17 @@ msgstr "Unable to remove domain. Please try again."
msgid "Unable to remove domains from unknown organization."
msgstr "Unable to remove domains from unknown organization."
-#: src/organization/mutations/remove-organization.js:103
-#: src/organization/mutations/remove-organization.js:114
-#: src/organization/mutations/remove-organization.js:145
-#: src/organization/mutations/remove-organization.js:161
-#: src/organization/mutations/remove-organization.js:192
-#: src/organization/mutations/remove-organization.js:203
-#: src/organization/mutations/remove-organization.js:230
-#: src/organization/mutations/remove-organization.js:249
-#: src/organization/mutations/remove-organization.js:267
-#: src/organization/mutations/remove-organization.js:284
-#: src/organization/mutations/remove-organization.js:317
-#: src/organization/mutations/remove-organization.js:382
-#: src/organization/mutations/remove-organization.js:392
+#: src/organization/data-source.js:278
+#: src/organization/data-source.js:307
+#: src/organization/data-source.js:321
+#: src/organization/data-source.js:350
+#: src/organization/data-source.js:374
+#: src/organization/data-source.js:390
+#: src/organization/data-source.js:405
+#: src/organization/data-source.js:419
+#: src/organization/data-source.js:448
+#: src/organization/data-source.js:490
+#: src/organization/data-source.js:498
msgid "Unable to remove organization. Please try again."
msgstr "Unable to remove organization. Please try again."
@@ -1360,15 +1379,15 @@ msgstr "Unable to remove organization. Please try again."
msgid "Unable to remove phone number. Please try again."
msgstr "Unable to remove phone number. Please try again."
-#: src/domain/mutations/remove-domain.js:66
+#: src/domain/mutations/remove-domain.js:67
msgid "Unable to remove unknown domain."
msgstr "Unable to remove unknown domain."
-#: src/organization/mutations/remove-organization.js:55
+#: src/organization/mutations/remove-organization.js:52
msgid "Unable to remove unknown organization."
msgstr "Unable to remove unknown organization."
-#: src/affiliation/mutations/remove-user-from-org.js:78
+#: src/affiliation/mutations/remove-user-from-org.js:79
msgid "Unable to remove unknown user from organization."
msgstr "Unable to remove unknown user from organization."
@@ -1376,26 +1395,26 @@ msgstr "Unable to remove unknown user from organization."
#~ msgid "Unable to remove user from organization."
#~ msgstr "Unable to remove user from organization."
-#: src/affiliation/mutations/remove-user-from-org.js:95
-#: src/affiliation/mutations/remove-user-from-org.js:116
-#: src/affiliation/mutations/remove-user-from-org.js:163
-#: src/affiliation/mutations/remove-user-from-org.js:173
+#: src/affiliation/mutations/remove-user-from-org.js:96
+#: src/affiliation/mutations/remove-user-from-org.js:117
+#: src/affiliation/mutations/remove-user-from-org.js:164
+#: src/affiliation/mutations/remove-user-from-org.js:174
msgid "Unable to remove user from this organization. Please try again."
msgstr "Unable to remove user from this organization. Please try again."
-#: src/affiliation/mutations/remove-user-from-org.js:62
+#: src/affiliation/mutations/remove-user-from-org.js:63
msgid "Unable to remove user from unknown organization."
msgstr "Unable to remove user from unknown organization."
-#: src/domain/mutations/request-scan.js:119
+#: src/domain/mutations/request-scan.js:120
msgid "Unable to request a one time scan on a domain that already has a pending scan."
msgstr "Unable to request a one time scan on a domain that already has a pending scan."
-#: src/domain/mutations/request-scan.js:54
+#: src/domain/mutations/request-scan.js:55
msgid "Unable to request a one time scan on an unknown domain."
msgstr "Unable to request a one time scan on an unknown domain."
-#: src/domain/mutations/request-scan.js:127
+#: src/domain/mutations/request-scan.js:128
msgid "Unable to request a one time scan. Please try again."
msgstr "Unable to request a one time scan. Please try again."
@@ -1423,9 +1442,8 @@ msgstr "Unable to request invite to unknown organization."
#: src/affiliation/mutations/request-org-affiliation.js:124
#: src/affiliation/mutations/request-org-affiliation.js:141
#: src/affiliation/mutations/request-org-affiliation.js:152
-#: src/affiliation/mutations/request-org-affiliation.js:173
-#: src/affiliation/mutations/request-org-affiliation.js:183
-#: src/affiliation/mutations/request-org-affiliation.js:214
+#: src/affiliation/mutations/request-org-affiliation.js:167
+#: src/affiliation/mutations/request-org-affiliation.js:198
msgid "Unable to request invite. Please try again."
msgstr "Unable to request invite. Please try again."
@@ -1439,8 +1457,8 @@ msgstr "Unable to request invite. Please try again."
msgid "Unable to reset password. Please try again."
msgstr "Unable to reset password. Please try again."
-#: src/domain/objects/domain.js:324
-#: src/domain/objects/domain.js:359
+#: src/domain/objects/domain.js:274
+#: src/domain/objects/domain.js:309
msgid "Unable to retrieve DMARC report information for: {domain}"
msgstr "Unable to retrieve DMARC report information for: {domain}"
@@ -1470,6 +1488,10 @@ msgstr "Unable to send org invite request email. Please try again."
msgid "Unable to send password reset email. Please try again."
msgstr "Unable to send password reset email. Please try again."
+#: src/notify/notify-send-role-change-email.js:21
+#~ msgid "Unable to send role update email. Please try again."
+#~ msgstr "Unable to send role update email. Please try again."
+
#: src/notify/notify-send-tfa-text-msg.js:30
#~ msgid "Unable to send two factor authentication message. Please try again."
#~ msgstr "Unable to send two factor authentication message. Please try again."
@@ -1565,40 +1587,36 @@ msgstr "Unable to unfavourite unknown domain."
#~ msgid "Unable to unignore CVE. Please try again."
#~ msgstr "Unable to unignore CVE. Please try again."
-#: src/domain/mutations/update-domain.js:236
+#: src/domain/mutations/update-domain.js:261
msgid "Unable to update domain edge. Please try again."
msgstr "Unable to update domain edge. Please try again."
-#: src/domain/mutations/update-domain.js:123
+#: src/domain/mutations/update-domain.js:137
msgid "Unable to update domain in an unknown org."
msgstr "Unable to update domain in an unknown org."
-#: src/domain/mutations/update-domain.js:164
+#: src/domain/mutations/update-domain.js:178
msgid "Unable to update domain that does not belong to the given organization."
msgstr "Unable to update domain that does not belong to the given organization."
-#: src/domain/mutations/update-domain.js:154
-#: src/domain/mutations/update-domain.js:193
-#: src/domain/mutations/update-domain.js:247
+#: src/domain/mutations/update-domain.js:168
+#: src/domain/mutations/update-domain.js:218
+#: src/domain/mutations/update-domain.js:272
msgid "Unable to update domain. Please try again."
msgstr "Unable to update domain. Please try again."
-#: src/domain/mutations/update-domains-by-domain-ids.js:67
-#: src/domain/mutations/update-domains-by-filters.js:75
+#: src/domain/mutations/update-domains-by-domain-ids.js:68
+#: src/domain/mutations/update-domains-by-filters.js:76
msgid "Unable to update domains in unknown organization."
msgstr "Unable to update domains in unknown organization."
-#: src/domain/mutations/update-domains-by-filters.js:228
-#: src/domain/mutations/update-domains-by-filters.js:236
-#: src/domain/mutations/update-domains-by-filters.js:243
+#: src/domain/mutations/update-domains-by-filters.js:229
+#: src/domain/mutations/update-domains-by-filters.js:237
+#: src/domain/mutations/update-domains-by-filters.js:244
msgid "Unable to update domains. Please try again."
msgstr "Unable to update domains. Please try again."
-#: src/organization/mutations/update-organization.js:174
-#: src/organization/mutations/update-organization.js:200
-#: src/organization/mutations/update-organization.js:208
-#: src/organization/mutations/update-organization.js:262
-#: src/organization/mutations/update-organization.js:270
+#: src/organization/data-source.js:101
msgid "Unable to update organization. Please try again."
msgstr "Unable to update organization. Please try again."
@@ -1624,23 +1642,23 @@ msgstr "Unable to update password. Please try again."
msgid "Unable to update profile. Please try again."
msgstr "Unable to update profile. Please try again."
-#: src/affiliation/mutations/update-user-role.js:95
+#: src/affiliation/mutations/update-user-role.js:97
msgid "Unable to update role: organization unknown."
msgstr "Unable to update role: organization unknown."
-#: src/affiliation/mutations/update-user-role.js:138
+#: src/affiliation/mutations/update-user-role.js:140
msgid "Unable to update role: user does not belong to organization."
msgstr "Unable to update role: user does not belong to organization."
-#: src/affiliation/mutations/update-user-role.js:81
+#: src/affiliation/mutations/update-user-role.js:83
msgid "Unable to update role: user unknown."
msgstr "Unable to update role: user unknown."
-#: src/tags/mutations/update-tag.js:134
+#: src/tags/mutations/update-tag.js:113
msgid "Unable to update tag in unknown organization."
msgstr "Unable to update tag in unknown organization."
-#: src/tags/mutations/update-tag.js:124
+#: src/tags/mutations/update-tag.js:103
msgid "Unable to update tag, orgId is invalid."
msgstr "Unable to update tag, orgId is invalid."
@@ -1648,33 +1666,34 @@ msgstr "Unable to update tag, orgId is invalid."
#~ msgid "Unable to update tag, tagId already in use."
#~ msgstr "Unable to update tag, tagId already in use."
-#: src/tags/mutations/update-tag.js:90
-#: src/tags/mutations/update-tag.js:98
-#: src/tags/mutations/update-tag.js:221
-#: src/tags/mutations/update-tag.js:232
+#: src/tags/data-source.js:30
+#: src/tags/data-source.js:36
+#: src/tags/data-source.js:92
+#: src/tags/data-source.js:101
msgid "Unable to update tag. Please try again."
msgstr "Unable to update tag. Please try again."
-#: src/domain/mutations/update-domain.js:109
+#: src/domain/mutations/update-domain.js:123
msgid "Unable to update unknown domain."
msgstr "Unable to update unknown domain."
-#: src/organization/mutations/update-organization.js:140
+#: src/organization/mutations/update-organization.js:137
msgid "Unable to update unknown organization."
msgstr "Unable to update unknown organization."
-#: src/tags/mutations/update-tag.js:108
+#: src/tags/mutations/update-tag.js:87
msgid "Unable to update unknown tag."
msgstr "Unable to update unknown tag."
-#: src/affiliation/mutations/update-user-role.js:128
-#: src/affiliation/mutations/update-user-role.js:150
-#: src/affiliation/mutations/update-user-role.js:202
-#: src/affiliation/mutations/update-user-role.js:212
+#: src/affiliation/mutations/update-user-role.js:130
+#: src/affiliation/mutations/update-user-role.js:152
+#: src/affiliation/mutations/update-user-role.js:196
+#: src/affiliation/mutations/update-user-role.js:206
+#: src/affiliation/mutations/update-user-role.js:217
msgid "Unable to update user's role. Please try again."
msgstr "Unable to update user's role. Please try again."
-#: src/affiliation/mutations/update-user-role.js:67
+#: src/affiliation/mutations/update-user-role.js:69
msgid "Unable to update your own role."
msgstr "Unable to update your own role."
@@ -1694,17 +1713,17 @@ msgid "Unable to verify if user is a super admin, please try again."
msgstr "Unable to verify if user is a super admin, please try again."
#: src/user/mutations/update-user-profile.js:99
-#: src/user/queries/is-user-admin.js:55
+#: src/user/queries/is-user-admin.js:49
msgid "Unable to verify if user is an admin, please try again."
msgstr "Unable to verify if user is an admin, please try again."
-#: src/organization/mutations/verify-organization.js:106
-#: src/organization/mutations/verify-organization.js:123
-#: src/organization/mutations/verify-organization.js:131
+#: src/organization/data-source.js:237
+#: src/organization/data-source.js:252
+#: src/organization/data-source.js:260
msgid "Unable to verify organization. Please try again."
msgstr "Unable to verify organization. Please try again."
-#: src/organization/mutations/verify-organization.js:53
+#: src/organization/mutations/verify-organization.js:50
msgid "Unable to verify unknown organization."
msgstr "Unable to verify unknown organization."
@@ -1716,7 +1735,7 @@ msgstr "User could not be queried."
msgid "User is trying to register for a non-production environment."
msgstr "User is trying to register for a non-production environment."
-#: src/affiliation/mutations/update-user-role.js:246
+#: src/affiliation/mutations/update-user-role.js:253
msgid "User role was updated successfully."
msgstr "User role was updated successfully."
@@ -1725,11 +1744,11 @@ msgstr "User role was updated successfully."
msgid "Username not available, please try another."
msgstr "Username not available, please try another."
-#: src/auth/tfa-required.js:15
+#: src/auth/guards/tfa-required.js:15
msgid "Verification error. Please activate multi-factor authentication to access content."
msgstr "Verification error. Please activate multi-factor authentication to access content."
-#: src/auth/verified-required.js:15
+#: src/auth/guards/verified-required.js:15
msgid "Verification error. Please verify your account via email to access content."
msgstr "Verification error. Please verify your account via email to access content."
@@ -1766,8 +1785,8 @@ msgstr "You must provide a `first` or `last` value to properly paginate the `Dma
msgid "You must provide a `first` or `last` value to properly paginate the `DmarcSummaries` connection."
msgstr "You must provide a `first` or `last` value to properly paginate the `DmarcSummaries` connection."
-#: src/domain/loaders/load-domain-connections-by-organizations-id.js:140
-#: src/domain/loaders/load-domain-connections-by-user-id.js:165
+#: src/domain/loaders/load-domain-connections-by-organizations-id.js:141
+#: src/domain/loaders/load-domain-connections-by-user-id.js:166
msgid "You must provide a `first` or `last` value to properly paginate the `Domain` connection."
msgstr "You must provide a `first` or `last` value to properly paginate the `Domain` connection."
@@ -1828,8 +1847,8 @@ msgid "You must provide a `limit` value in the range of 1-100 to properly pagina
msgstr "You must provide a `limit` value in the range of 1-100 to properly paginate the `DNS` connection."
#: src/dns-scan/loaders/load-mx-record-diff-by-domain-id.js:16
-msgid "You must provide a `limit` value in the range of 1-100 to properly paginate the `MXRecord` connection."
-msgstr "You must provide a `limit` value in the range of 1-100 to properly paginate the `MXRecord` connection."
+#~ msgid "You must provide a `limit` value in the range of 1-100 to properly paginate the `MXRecord` connection."
+#~ msgstr "You must provide a `limit` value in the range of 1-100 to properly paginate the `MXRecord` connection."
#: src/web-scan/loaders/load-web-connections-by-domain-id.js:16
msgid "You must provide a `limit` value in the range of 1-100 to properly paginate the `web` connection."
@@ -1840,8 +1859,8 @@ msgid "You must provide a `limit` value to properly paginate the `DNS` connectio
msgstr "You must provide a `limit` value to properly paginate the `DNS` connection."
#: src/dns-scan/loaders/load-mx-record-diff-by-domain-id.js:9
-msgid "You must provide a `limit` value to properly paginate the `MXRecord` connection."
-msgstr "You must provide a `limit` value to properly paginate the `MXRecord` connection."
+#~ msgid "You must provide a `limit` value to properly paginate the `MXRecord` connection."
+#~ msgstr "You must provide a `limit` value to properly paginate the `MXRecord` connection."
#: src/web-scan/loaders/load-web-connections-by-domain-id.js:9
msgid "You must provide a `limit` value to properly paginate the `web` connection."
@@ -1876,8 +1895,8 @@ msgid "You must provide at most one pagination method (`before`, `after`, `offse
msgstr "You must provide at most one pagination method (`before`, `after`, `offset`) value to properly paginate the `DNS` connection."
#: src/dns-scan/loaders/load-mx-record-diff-by-domain-id.js:30
-msgid "You must provide at most one pagination method (`before`, `after`, `offset`) value to properly paginate the `MXRecord` connection."
-msgstr "You must provide at most one pagination method (`before`, `after`, `offset`) value to properly paginate the `MXRecord` connection."
+#~ msgid "You must provide at most one pagination method (`before`, `after`, `offset`) value to properly paginate the `MXRecord` connection."
+#~ msgstr "You must provide at most one pagination method (`before`, `after`, `offset`) value to properly paginate the `MXRecord` connection."
#: src/web-scan/loaders/load-web-connections-by-domain-id.js:30
msgid "You must provide at most one pagination method (`before`, `after`, `offset`) value to properly paginate the `web` connection."
diff --git a/api/src/locale/fr/messages.po b/api/src/locale/fr/messages.po
index ae7a279220..d1672a6160 100644
--- a/api/src/locale/fr/messages.po
+++ b/api/src/locale/fr/messages.po
@@ -19,8 +19,8 @@ msgstr ""
#: src/dmarc-summaries/loaders/load-dmarc-sum-connections-by-user-id.js:202
#: src/dmarc-summaries/loaders/load-full-pass-connections-by-sum-id.js:83
#: src/dmarc-summaries/loaders/load-spf-failure-connections-by-sum-id.js:83
-#: src/domain/loaders/load-domain-connections-by-organizations-id.js:177
-#: src/domain/loaders/load-domain-connections-by-user-id.js:204
+#: src/domain/loaders/load-domain-connections-by-organizations-id.js:178
+#: src/domain/loaders/load-domain-connections-by-user-id.js:205
#: src/guidance-tag/loaders/load-aggregate-guidance-tags-connections.js:132
#: src/guidance-tag/loaders/load-dkim-guidance-tags-connections.js:136
#: src/guidance-tag/loaders/load-dmarc-guidance-tags-connections.js:136
@@ -66,8 +66,8 @@ msgstr "`{argSet}` sur la connexion `DmarcFailureTable` ne peut être inférieur
msgid "`{argSet}` on the `DmarcSummaries` connection cannot be less than zero."
msgstr "`{argSet}` sur la connexion `DmarcSummaries` ne peut être inférieur à zéro."
-#: src/domain/loaders/load-domain-connections-by-organizations-id.js:156
-#: src/domain/loaders/load-domain-connections-by-user-id.js:181
+#: src/domain/loaders/load-domain-connections-by-organizations-id.js:157
+#: src/domain/loaders/load-domain-connections-by-user-id.js:182
msgid "`{argSet}` on the `Domain` connection cannot be less than zero."
msgstr "`{argSet}` sur la connexion `Domain` ne peut être inférieur à zéro."
@@ -123,33 +123,35 @@ msgstr "`{argSet}` sur la connexion `VerifiedDomain` ne peut être inférieur à
msgid "`{argSet}` on the `VerifiedOrganization` connection cannot be less than zero."
msgstr "`{argSet}` sur la connexion `VerifiedOrganization` ne peut être inférieur à zéro."
-#: src/organization/objects/organization.js:244
+#: src/organization/objects/organization.js:240
#: src/organization/queries/get-all-organization-domain-statuses.js:69
msgid "Assess"
msgstr "Évaluez"
-#: src/auth/check-permission.js:18
-#: src/auth/check-permission.js:57
-#: src/auth/user-required.js:10
-#: src/auth/user-required.js:21
-#: src/auth/user-required.js:28
+#: src/auth/checks/check-permission.js:18
+#: src/auth/checks/check-permission.js:57
+#: src/auth/guards/user-required.js:10
+#: src/auth/guards/user-required.js:21
+#: src/auth/guards/user-required.js:28
+#: src/auth/loaders/load-permission-by-org-id.js:19
+#: src/auth/loaders/load-permission-by-org-id.js:63
msgid "Authentication error. Please sign in."
msgstr "Erreur d'authentification. Veuillez vous connecter."
-#: src/domain/objects/domain.js:279
+#: src/domain/objects/domain.js:229
msgid "Cannot query additional findings without permission."
msgstr "Il n'est pas possible de demander des résultats supplémentaires sans autorisation."
-#: src/organization/objects/organization.js:378
+#: src/organization/objects/organization.js:359
msgid "Cannot query affiliations on organization without admin permission or higher."
msgstr "Impossible d'interroger les affiliations sur l'organisation sans l'autorisation de l'administrateur ou plus."
#: src/audit-logs/loaders/load-audit-logs-by-org-id.js:224
-#: src/audit-logs/queries/find-audit-logs.js:51
+#: src/audit-logs/queries/find-audit-logs.js:53
msgid "Cannot query audit logs on organization without admin permission or higher."
msgstr "Impossible d'interroger les journaux d'audit sur l'organisation sans l'autorisation d'administrateur ou plus."
-#: src/domain/objects/domain.js:168
+#: src/domain/objects/domain.js:164
msgid "Cannot query dns scan results without permission."
msgstr "Impossible d'interroger les résultats de l'analyse DNS sans autorisation."
@@ -157,8 +159,7 @@ msgstr "Impossible d'interroger les résultats de l'analyse DNS sans autorisatio
msgid "Cannot query domain selectors without permission."
msgstr "Impossible d'interroger les sélecteurs de domaine sans autorisation."
-#: src/domain/objects/domain.js:210
-#: src/domain/objects/domain.js:256
+#: src/domain/objects/domain.js:206
msgid "Cannot query web scan results without permission."
msgstr "Impossible d'interroger les résultats de l'analyse web sans autorisation."
@@ -170,22 +171,22 @@ msgstr "CVE est déjà ignoré pour ce domaine."
msgid "CVE is not ignored for this domain."
msgstr "Le CVE n'est pas ignoré dans ce domaine."
-#: src/organization/objects/organization.js:246
+#: src/organization/objects/organization.js:242
#: src/organization/queries/get-all-organization-domain-statuses.js:71
msgid "Deploy"
-msgstr Déployer
+msgstr "msgstr Déployer"
#: src/user/mutations/sign-up.js:111
msgid "Email already in use."
msgstr "Courriel déjà utilisé."
-#: src/organization/objects/organization.js:248
+#: src/organization/objects/organization.js:244
#: src/organization/queries/get-all-organization-domain-statuses.js:73
msgid "Enforce"
msgstr "Appliquer"
-#: src/domain/mutations/request-scan.js:89
-#: src/domain/mutations/request-scan.js:99
+#: src/domain/mutations/request-scan.js:90
+#: src/domain/mutations/request-scan.js:100
msgid "Error while requesting scan. Please try again."
msgstr "Erreur lors de la demande d'analyse. Veuillez réessayer."
@@ -212,11 +213,11 @@ msgstr "La valeur du jeton est incorrecte. Veuillez demander un nouvel e-mail."
msgid "Incorrect username or password. Please try again."
msgstr "Le nom d'utilisateur ou le mot de passe est incorrect. Veuillez réessayer."
-#: src/auth/verify-jwt.js:15
+#: src/auth/utils/verify-jwt.js:15
msgid "Invalid token, please sign in."
msgstr "Jeton invalide, veuillez vous connecter."
-#: src/organization/objects/organization.js:250
+#: src/organization/objects/organization.js:246
#: src/organization/queries/get-all-organization-domain-statuses.js:75
msgid "Maintain"
msgstr "Maintenir"
@@ -229,7 +230,7 @@ msgstr "Message rejeté avec succès"
msgid "New passwords do not match."
msgstr "Les nouveaux mots de passe ne correspondent pas."
-#: src/organization/queries/find-organization-by-slug.js:41
+#: src/organization/queries/find-organization-by-slug.js:42
#: src/user/queries/find-my-tracker.js:29
msgid "No organization with the provided slug could be found."
msgstr "Aucune organisation avec le slug fourni n'a pu être trouvée."
@@ -242,22 +243,22 @@ msgstr "Aucun domaine vérifié avec le domaine fourni n'a pu être trouvé."
msgid "No verified organization with the provided slug could be found."
msgstr "Aucune organisation vérifiée avec le slug fourni n'a pu être trouvée."
-#: src/organization/mutations/verify-organization.js:81
+#: src/organization/mutations/verify-organization.js:78
msgid "Organization has already been verified."
msgstr "L'organisation a déjà été vérifiée."
-#: src/organization/mutations/update-organization.js:184
+#: src/organization/mutations/update-organization.js:167
msgid "Organization name already in use, please choose another and try again."
msgstr "Le nom de l'organisation est déjà utilisé, veuillez en choisir un autre et réessayer."
-#: src/organization/mutations/create-organization.js:125
+#: src/organization/mutations/create-organization.js:85
msgid "Organization name already in use. Please try again with a different name."
msgstr "Le nom de l'organisation est déjà utilisé. Veuillez réessayer avec un nom différent."
-#: src/auth/check-domain-ownership.js:29
-#: src/auth/check-domain-ownership.js:39
-#: src/auth/check-domain-ownership.js:65
-#: src/auth/check-domain-ownership.js:74
+#: src/auth/checks/check-domain-ownership.js:29
+#: src/auth/checks/check-domain-ownership.js:39
+#: src/auth/checks/check-domain-ownership.js:65
+#: src/auth/checks/check-domain-ownership.js:74
msgid "Ownership check error. Unable to request domain information."
msgstr "Erreur de vérification de la propriété. Impossible de demander des informations sur le domaine."
@@ -291,8 +292,8 @@ msgstr "Passer à la fois `first` et `last` pour paginer la connexion `DmarcFail
msgid "Passing both `first` and `last` to paginate the `DmarcSummaries` connection is not supported."
msgstr "Passer à la fois `first` et `last` pour paginer la connexion `DmarcSummaries` n'est pas supporté."
-#: src/domain/loaders/load-domain-connections-by-organizations-id.js:147
-#: src/domain/loaders/load-domain-connections-by-user-id.js:172
+#: src/domain/loaders/load-domain-connections-by-organizations-id.js:148
+#: src/domain/loaders/load-domain-connections-by-user-id.js:173
msgid "Passing both `first` and `last` to paginate the `Domain` connection is not supported."
msgstr "Passer à la fois `first` et `last` pour paginer la connexion `Domain` n'est pas supporté."
@@ -365,14 +366,17 @@ msgstr "Le mot de passe a été mis à jour avec succès."
msgid "Passwords do not match."
msgstr "Les mots de passe ne correspondent pas."
-#: src/auth/check-domain-permission.js:22
-#: src/auth/check-domain-permission.js:51
-#: src/auth/check-domain-permission.js:61
+#: src/auth/checks/check-domain-permission.js:22
+#: src/auth/checks/check-domain-permission.js:51
+#: src/auth/checks/check-domain-permission.js:61
+#: src/auth/loaders/load-domain-permission-by-domain-id.js:19
+#: src/auth/loaders/load-domain-permission-by-domain-id.js:51
+#: src/auth/loaders/load-domain-permission-by-domain-id.js:61
msgid "Permission check error. Unable to request domain information."
msgstr "Erreur de vérification des permissions. Impossible de demander des informations sur le domaine."
#: src/organization/queries/find-organization-by-slug.js:50
-#: src/organization/queries/find-organization-by-slug.js:55
+#: src/organization/queries/find-organization-by-slug.js:52
msgid "Permission Denied: Could not retrieve specified organization."
msgstr "Permission refusée : Impossible de récupérer l'organisation spécifiée."
@@ -388,11 +392,11 @@ msgstr "Permission refusée : Veuillez contacter le propriétaire de l'org pour
msgid "Permission Denied: Please contact organization admin for help with archiving domains."
msgstr "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide sur l'archivage des domaines."
-#: src/tags/mutations/create-tag.js:136
+#: src/tags/mutations/create-tag.js:131
msgid "Permission Denied: Please contact organization admin for help with creating tag."
msgstr "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide sur la création d'un tag."
-#: src/domain/mutations/remove-domain.js:95
+#: src/domain/mutations/remove-domain.js:96
msgid "Permission Denied: Please contact organization admin for help with removing domain."
msgstr "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide afin de supprimer le domaine."
@@ -400,26 +404,26 @@ msgstr "Permission refusée : Veuillez contacter l'administrateur de l'organisat
msgid "Permission Denied: Please contact organization admin for help with removing domains."
msgstr "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide sur la suppression des domaines."
-#: src/organization/mutations/remove-organization.js:70
+#: src/organization/mutations/remove-organization.js:67
msgid "Permission Denied: Please contact organization admin for help with removing organization."
msgstr "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide afin de supprimer l'organisation."
-#: src/affiliation/mutations/remove-user-from-org.js:127
-#: src/affiliation/mutations/remove-user-from-org.js:139
+#: src/affiliation/mutations/remove-user-from-org.js:128
+#: src/affiliation/mutations/remove-user-from-org.js:140
msgid "Permission Denied: Please contact organization admin for help with removing users."
msgstr "Autorisation refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide sur la suppression des utilisateurs."
-#: src/domain/mutations/update-domains-by-domain-ids.js:80
-#: src/domain/mutations/update-domains-by-filters.js:88
+#: src/domain/mutations/update-domains-by-domain-ids.js:81
+#: src/domain/mutations/update-domains-by-filters.js:89
msgid "Permission Denied: Please contact organization admin for help with updating domains."
msgstr "Autorisation refusée : veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide concernant la mise à jour des domaines."
-#: src/organization/mutations/update-organization.js:155
+#: src/organization/mutations/update-organization.js:152
msgid "Permission Denied: Please contact organization admin for help with updating organization."
msgstr "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide sur la suppression des utilisateurs."
-#: src/tags/mutations/update-tag.js:146
-#: src/tags/mutations/update-tag.js:157
+#: src/tags/mutations/update-tag.js:125
+#: src/tags/mutations/update-tag.js:136
msgid "Permission Denied: Please contact organization admin for help with updating tag."
msgstr "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide sur la mise à jour de la balise."
@@ -429,17 +433,15 @@ msgstr "Permission refusée : Veuillez contacter l'administrateur de l'organisat
#~ msgid "Permission Denied: Please contact organization admin for help with updating user roles."
#~ msgstr "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide sur la mise à jour des rôles des utilisateurs."
-#: src/affiliation/mutations/invite-user-to-org.js:102
+#: src/affiliation/mutations/invite-user-to-org.js:99
msgid "Permission Denied: Please contact organization admin for help with user invitations."
msgstr "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide concernant les invitations d'utilisateurs."
-#: src/affiliation/mutations/update-user-role.js:110
-#: src/affiliation/mutations/update-user-role.js:161
-#: src/affiliation/mutations/update-user-role.js:173
+#: src/affiliation/mutations/update-user-role.js:112
msgid "Permission Denied: Please contact organization admin for help with user role changes."
msgstr "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide sur les changements de rôle des utilisateurs."
-#: src/domain/mutations/create-domain.js:121
+#: src/domain/mutations/create-domain.js:130
msgid "Permission Denied: Please contact organization user for help with creating domain."
msgstr "Permission refusée : Veuillez contacter l'utilisateur de l'organisation pour obtenir de l'aide sur la création du domaine."
@@ -452,29 +454,29 @@ msgstr "Permission refusée : Veuillez contacter l'utilisateur de l'organisation
#~ msgstr "Permission refusée : Veuillez contacter l'utilisateur de l'organisation pour obtenir de l'aide afin de récupérer les étiquettes."
#: src/domain/queries/find-domain-by-domain.js:51
-#: src/organization/objects/organization.js:198
+#: src/organization/objects/organization.js:195
msgid "Permission Denied: Please contact organization user for help with retrieving this domain."
msgstr "Permission refusée : Veuillez contacter l'utilisateur de l'organisation pour obtenir de l'aide pour récupérer ce domaine."
#: src/domain/mutations/request-discovery.js:98
-#: src/domain/mutations/request-scan.js:65
+#: src/domain/mutations/request-scan.js:66
msgid "Permission Denied: Please contact organization user for help with scanning this domain."
msgstr "Permission refusée : Veuillez contacter l'utilisateur de l'organisation pour obtenir de l'aide sur l'analyse de ce domaine."
-#: src/domain/mutations/update-domain.js:137
+#: src/domain/mutations/update-domain.js:151
msgid "Permission Denied: Please contact organization user for help with updating this domain."
msgstr "Autorisation refusée : Veuillez contacter l'utilisateur de l'organisation pour obtenir de l'aide sur la mise à jour de ce domaine."
-#: src/organization/mutations/archive-organization.js:69
+#: src/organization/mutations/archive-organization.js:66
msgid "Permission Denied: Please contact super admin for help with archiving organization."
msgstr "Permission refusée : Veuillez contacter le super administrateur pour obtenir de l'aide sur l'organisation de l'archivage."
-#: src/domain/mutations/remove-domain.js:108
+#: src/domain/mutations/remove-domain.js:109
#: src/domain/mutations/remove-organizations-domains.js:106
msgid "Permission Denied: Please contact super admin for help with removing domain."
msgstr "Permission refusée : Veuillez contacter l'utilisateur de l'organisation pour obtenir de l'aide sur la mise à jour de ce domaine."
-#: src/organization/mutations/remove-organization.js:83
+#: src/organization/mutations/remove-organization.js:80
msgid "Permission Denied: Please contact super admin for help with removing organization."
msgstr "Permission refusée : Veuillez contacter le super administrateur pour qu'il vous aide à supprimer l'organisation."
@@ -482,18 +484,26 @@ msgstr "Permission refusée : Veuillez contacter le super administrateur pour qu
#~ msgid "Permission Denied: Please contact super admin for help with scanning this domain."
#~ msgstr "Permission refusée : Veuillez contacter le super administrateur pour obtenir de l'aide sur l'analyse de ce domaine."
-#: src/tags/mutations/update-tag.js:168
+#: src/tags/mutations/update-tag.js:147
msgid "Permission Denied: Please contact super admin for help with updating tag."
msgstr "Autorisation refusée : veuillez contacter l'administrateur principal pour obtenir de l'aide concernant la mise à jour de la balise."
-#: src/organization/mutations/verify-organization.js:68
+#: src/affiliation/mutations/invite-user-to-org.js:112
+msgid "Permission Denied: Please contact super admin for help with user invitations."
+msgstr "Accès refusé : veuillez contacter l'administrateur principal pour obtenir de l'aide concernant les invitations d'utilisateurs."
+
+#: src/affiliation/mutations/update-user-role.js:167
+msgid "Permission Denied: Please contact super admin for help with user role changes."
+msgstr "Accès refusé : veuillez contacter l'administrateur principal pour obtenir de l'aide concernant la modification des rôles d'utilisateur."
+
+#: src/organization/mutations/verify-organization.js:65
msgid "Permission Denied: Please contact super admin for help with verifying this organization."
msgstr "Permission refusée : Veuillez contacter le super administrateur pour qu'il vous aide à vérifier cette organisation."
-#: src/auth/check-user-is-admin-for-user.js:20
-#: src/auth/check-user-is-admin-for-user.js:30
-#: src/auth/check-user-is-admin-for-user.js:63
-#: src/auth/check-user-is-admin-for-user.js:73
+#: src/auth/checks/check-user-is-admin-for-user.js:20
+#: src/auth/checks/check-user-is-admin-for-user.js:30
+#: src/auth/checks/check-user-is-admin-for-user.js:63
+#: src/auth/checks/check-user-is-admin-for-user.js:73
msgid "Permission error, not an admin for this user."
msgstr "Erreur de permission, pas d'administrateur pour cet utilisateur."
@@ -501,7 +511,7 @@ msgstr "Erreur de permission, pas d'administrateur pour cet utilisateur."
msgid "Permission error: Unable to close other user's account."
msgstr "Erreur de permission: Impossible de fermer le compte d'un autre utilisateur."
-#: src/auth/super-admin-required.js:11
+#: src/auth/guards/super-admin-required.js:11
msgid "Permissions error. You do not have sufficient permissions to access this data."
msgstr "Erreur de permissions. Vous n'avez pas les autorisations suffisantes pour accéder à ces données."
@@ -563,8 +573,8 @@ msgstr "La demande d'enregistrements `{amount}` sur la connexion `DkimFailureTab
msgid "Requesting `{amount}` records on the `DmarcSummaries` connection exceeds the `{argSet}` limit of 100 records."
msgstr "La demande d'enregistrements `{amount}` sur la connexion `DmarcSummaries` dépasse la limite `{argSet}` de 100 enregistrements."
-#: src/domain/loaders/load-domain-connections-by-organizations-id.js:163
-#: src/domain/loaders/load-domain-connections-by-user-id.js:190
+#: src/domain/loaders/load-domain-connections-by-organizations-id.js:164
+#: src/domain/loaders/load-domain-connections-by-user-id.js:191
msgid "Requesting `{amount}` records on the `Domain` connection exceeds the `{argSet}` limit of 100 records."
msgstr "La demande d'enregistrements `{amount}` sur la connexion `Domain` dépasse la limite `{argSet}` de 100 enregistrements."
@@ -618,7 +628,7 @@ msgstr "Ajouté avec succès le(s) domaine(s) {domainCount} à {0}."
#~ msgstr "Ajouté avec succès les domaines {domainCount} à {0}."
#. placeholder {0}: organization.slug
-#: src/organization/mutations/archive-organization.js:195
+#: src/organization/mutations/archive-organization.js:100
msgid "Successfully archived organization: {0}."
msgstr "Organisation archivée avec succès : {0}."
@@ -627,7 +637,7 @@ msgstr "Organisation archivée avec succès : {0}."
msgid "Successfully closed account."
msgstr "Le compte a été fermé avec succès."
-#: src/domain/mutations/request-scan.js:174
+#: src/domain/mutations/request-scan.js:175
msgid "Successfully dispatched one time scan."
msgstr "Un seul balayage a été effectué avec succès."
@@ -643,7 +653,7 @@ msgstr "L'analyse de découverte du sous-domaine a été effectuée avec succès
msgid "Successfully email verified account."
msgstr "Envoi d'un courriel à un compte vérifié."
-#: src/affiliation/mutations/invite-user-to-org.js:288
+#: src/affiliation/mutations/invite-user-to-org.js:282
msgid "Successfully invited user to organization, and sent notification email."
msgstr "L'utilisateur a été invité avec succès à l'organisation et l'email de notification a été envoyé."
@@ -663,7 +673,7 @@ msgstr "Supprimé avec succès le(s) domaine(s) {domainCount} de {0}."
#. placeholder {0}: domain.domain
#. placeholder {1}: org.slug
-#: src/domain/mutations/remove-domain.js:372
+#: src/domain/mutations/remove-domain.js:373
msgid "Successfully removed domain: {0} from {1}."
msgstr "A réussi à supprimer le domaine : {0} de {1}."
@@ -673,19 +683,19 @@ msgid "Successfully removed domain: {0} from favourites."
msgstr "A réussi à supprimer le domaine : {0} des favoris."
#. placeholder {0}: organization.slug
-#: src/organization/mutations/remove-organization.js:418
+#: src/organization/mutations/remove-organization.js:107
msgid "Successfully removed organization: {0}."
msgstr "A réussi à supprimer l'organisation : {0}."
-#: src/affiliation/mutations/remove-user-from-org.js:200
+#: src/affiliation/mutations/remove-user-from-org.js:201
msgid "Successfully removed user from organization."
msgstr "L'utilisateur a été retiré de l'organisation avec succès."
-#: src/affiliation/mutations/request-org-affiliation.js:247
+#: src/affiliation/mutations/request-org-affiliation.js:231
msgid "Successfully requested invite to organization, and sent notification email."
msgstr "La demande d'invitation à l'organisation a été effectuée avec succès et un courriel de notification a été envoyé."
-#: src/affiliation/mutations/invite-user-to-org.js:176
+#: src/affiliation/mutations/invite-user-to-org.js:170
msgid "Successfully sent invitation to service, and organization email."
msgstr "Envoi réussi de l'invitation au service, et de l'email de l'organisation."
@@ -701,13 +711,13 @@ msgstr "A réussi à transférer la propriété de org: {0} à l'utilisateur: {1
#. placeholder {0}: org.slug
#. placeholder {1}: tags.join(', ')
-#: src/domain/mutations/update-domains-by-domain-ids.js:178
-#: src/domain/mutations/update-domains-by-filters.js:309
+#: src/domain/mutations/update-domains-by-domain-ids.js:179
+#: src/domain/mutations/update-domains-by-filters.js:310
msgid "Successfully updated {domainCount} domain(s) in {0} with {1}."
msgstr "Mise à jour réussie de {domainCount} domaine(s) dans {0} avec {1}."
#. placeholder {0}: currentOrg.slug
-#: src/organization/mutations/verify-organization.js:138
+#: src/organization/mutations/verify-organization.js:90
msgid "Successfully verified organization: {0}."
msgstr "Envoi réussi de l'invitation au service, et de l'email de l'organisation."
@@ -719,9 +729,9 @@ msgstr "Le numéro de téléphone a été vérifié avec succès, et la méthode
#~ msgid "Tag label already in use, please choose another and try again."
#~ msgstr "L'étiquette est déjà utilisée, veuillez en choisir une autre et réessayer."
-#: src/tags/mutations/create-tag.js:96
-#: src/tags/mutations/create-tag.js:153
-#: src/tags/mutations/update-tag.js:182
+#: src/tags/mutations/create-tag.js:94
+#: src/tags/mutations/create-tag.js:148
+#: src/tags/mutations/update-tag.js:161
msgid "Tag label already in use. Please try again with a different label."
msgstr "L'étiquette est déjà utilisée. Veuillez réessayer avec une autre étiquette."
@@ -754,15 +764,14 @@ msgstr "Impossible de quitter l'organisation. Veuillez réessayer."
msgid "Unable to add domains in unknown organization."
msgstr "Impossible d'ajouter des domaines dans une organisation inconnue."
-#: src/organization/mutations/archive-organization.js:103
-#: src/organization/mutations/archive-organization.js:114
-#: src/organization/mutations/archive-organization.js:133
-#: src/organization/mutations/archive-organization.js:151
-#: src/organization/mutations/archive-organization.js:161
+#: src/organization/data-source.js:179
+#: src/organization/data-source.js:194
+#: src/organization/data-source.js:209
+#: src/organization/data-source.js:217
msgid "Unable to archive organization. Please try again."
msgstr "Impossible d'archiver l'organisation. Veuillez réessayer."
-#: src/organization/mutations/archive-organization.js:55
+#: src/organization/mutations/archive-organization.js:52
msgid "Unable to archive unknown organization."
msgstr "Impossible d'archiver une organisation inconnue."
@@ -773,10 +782,12 @@ msgstr "Impossible d'archiver une organisation inconnue."
msgid "Unable to authenticate. Please try again."
msgstr "Impossible de s'authentifier. Veuillez réessayer."
-#: src/auth/check-permission.js:26
-#: src/auth/check-permission.js:64
-#: src/auth/check-super-admin.js:20
-#: src/auth/check-super-admin.js:30
+#: src/auth/checks/check-permission.js:26
+#: src/auth/checks/check-permission.js:64
+#: src/auth/checks/check-super-admin.js:20
+#: src/auth/checks/check-super-admin.js:30
+#: src/auth/loaders/load-permission-by-org-id.js:27
+#: src/auth/loaders/load-permission-by-org-id.js:73
msgid "Unable to check permission. Please try again."
msgstr "Impossible de vérifier l'autorisation. Veuillez réessayer."
@@ -798,20 +809,20 @@ msgstr "Impossible de fermer le compte. Veuillez réessayer."
msgid "Unable to confirm completion of the tour. Please try again."
msgstr "Impossible de confirmer l'achèvement de la visite. Veuillez réessayer."
-#: src/domain/mutations/create-domain.js:107
+#: src/domain/mutations/create-domain.js:116
msgid "Unable to create domain in unknown organization."
msgstr "Impossible de créer un domaine dans une organisation inconnue."
-#: src/domain/mutations/create-domain.js:178
+#: src/domain/mutations/create-domain.js:199
msgid "Unable to create domain, organization has already claimed it."
msgstr "Impossible de créer le domaine, l'organisation l'a déjà réclamé."
-#: src/domain/mutations/create-domain.js:160
-#: src/domain/mutations/create-domain.js:168
-#: src/domain/mutations/create-domain.js:200
-#: src/domain/mutations/create-domain.js:209
-#: src/domain/mutations/create-domain.js:229
-#: src/domain/mutations/create-domain.js:237
+#: src/domain/mutations/create-domain.js:181
+#: src/domain/mutations/create-domain.js:189
+#: src/domain/mutations/create-domain.js:221
+#: src/domain/mutations/create-domain.js:230
+#: src/domain/mutations/create-domain.js:250
+#: src/domain/mutations/create-domain.js:258
msgid "Unable to create domain. Please try again."
msgstr "Impossible de créer un domaine. Veuillez réessayer."
@@ -819,22 +830,22 @@ msgstr "Impossible de créer un domaine. Veuillez réessayer."
msgid "Unable to create domains. Please try again."
msgstr "Impossible de créer des domaines. Veuillez réessayer."
-#: src/organization/mutations/create-organization.js:185
-#: src/organization/mutations/create-organization.js:206
-#: src/organization/mutations/create-organization.js:216
+#: src/organization/data-source.js:58
+#: src/organization/data-source.js:76
+#: src/organization/data-source.js:84
msgid "Unable to create organization. Please try again."
msgstr "Impossible de créer une organisation. Veuillez réessayer."
-#: src/tags/mutations/create-tag.js:124
+#: src/tags/mutations/create-tag.js:119
msgid "Unable to create tag in unknown organization."
msgstr "Impossible de créer une étiquette dans une organisation inconnue."
-#: src/tags/mutations/create-tag.js:113
+#: src/tags/mutations/create-tag.js:108
msgid "Unable to create tag, tagId already in use."
msgstr "Impossible de créer une balise, tagId déjà utilisé."
-#: src/tags/mutations/create-tag.js:172
-#: src/tags/mutations/create-tag.js:180
+#: src/tags/data-source.js:58
+#: src/tags/data-source.js:65
msgid "Unable to create tag. Please try again."
msgstr "Impossible de créer une balise. Veuillez réessayer."
@@ -853,8 +864,7 @@ msgstr "Impossible de rejeter le message. Veuillez réessayer."
#~ msgid "Unable to dispatch one time scan. Please try again."
#~ msgstr "Impossible d'envoyer un scan unique. Veuillez réessayer."
-#: src/organization/objects/organization.js:275
-#: src/organization/objects/organization.js:285
+#: src/organization/objects/organization.js:265
msgid "Unable to export organization. Please try again."
msgstr "Impossible d'exporter l'organisation. Veuillez réessayer."
@@ -973,26 +983,25 @@ msgstr "Impossible de trouver une ou plusieurs organisations vérifiées. Veuill
msgid "Unable to ignore CVE. Please try again."
msgstr "Impossible d'ignorer le CVE. Veuillez réessayer."
-#: src/affiliation/mutations/invite-user-to-org.js:120
-#: src/affiliation/mutations/invite-user-to-org.js:130
-#: src/affiliation/mutations/invite-user-to-org.js:196
+#: src/affiliation/mutations/invite-user-to-org.js:124
+#: src/affiliation/mutations/invite-user-to-org.js:190
msgid "Unable to invite user to organization. Please try again."
msgstr "Impossible d'inviter un utilisateur dans une organisation. Veuillez réessayer."
-#: src/affiliation/mutations/invite-user-to-org.js:208
+#: src/affiliation/mutations/invite-user-to-org.js:202
msgid "Unable to invite user to organization. User is already affiliated with organization."
msgstr "Impossible d'inviter un utilisateur dans une organisation. L'utilisateur est déjà affilié à l'organisation."
-#: src/affiliation/mutations/invite-user-to-org.js:83
+#: src/affiliation/mutations/invite-user-to-org.js:84
msgid "Unable to invite user to unknown organization."
msgstr "Impossible d'inviter un utilisateur à une organisation inconnue."
-#: src/affiliation/mutations/invite-user-to-org.js:238
-#: src/affiliation/mutations/invite-user-to-org.js:259
+#: src/affiliation/mutations/invite-user-to-org.js:232
+#: src/affiliation/mutations/invite-user-to-org.js:253
msgid "Unable to invite user. Please try again."
msgstr "Impossible d'inviter un utilisateur. Veuillez réessayer."
-#: src/affiliation/mutations/invite-user-to-org.js:69
+#: src/affiliation/mutations/invite-user-to-org.js:70
msgid "Unable to invite yourself to an org."
msgstr "Impossible de s'inviter à un org."
@@ -1010,7 +1019,7 @@ msgstr "Impossible de quitter une organisation non définie."
msgid "Unable to load additional findings. Please try again."
msgstr "Impossible de charger des résultats supplémentaires. Veuillez réessayer."
-#: src/auth/check-user-belongs-to-org.js:20
+#: src/auth/checks/check-user-belongs-to-org.js:20
msgid "Unable to load affiliation information. Please try again."
msgstr "Impossible de charger les informations d'affiliation. Veuillez réessayer."
@@ -1055,8 +1064,8 @@ msgstr "Impossible de charger le(s) tag(s) d'orientation DKIM. Veuillez réessay
#~ msgstr "Impossible de charger le(s) scan(s) DKIM. Veuillez réessayer."
#: src/summaries/queries/dkim-summary.js:12
-msgid "Unable to load DKIM summary. Please try again."
-msgstr "Impossible de charger le résumé DKIM. Veuillez réessayer."
+#~ msgid "Unable to load DKIM summary. Please try again."
+#~ msgstr "Impossible de charger le résumé DKIM. Veuillez réessayer."
#: src/dmarc-summaries/loaders/load-dmarc-failure-connections-by-sum-id.js:13
#: src/dmarc-summaries/loaders/load-dmarc-failure-connections-by-sum-id.js:141
@@ -1070,8 +1079,8 @@ msgid "Unable to load DMARC guidance tag(s). Please try again."
msgstr "Impossible de charger le(s) tag(s) d'orientation DMARC. Veuillez réessayer."
#: src/summaries/queries/dmarc-phase-summary.js:12
-msgid "Unable to load DMARC phase summary. Please try again."
-msgstr "Impossible de charger le résumé DMARC. Veuillez réessayer."
+#~ msgid "Unable to load DMARC phase summary. Please try again."
+#~ msgstr "Impossible de charger le résumé DMARC. Veuillez réessayer."
#: src/email-scan/loaders/load-dmarc-connections-by-domain-id.js:319
#: src/email-scan/loaders/load-dmarc-connections-by-domain-id.js:331
@@ -1088,13 +1097,11 @@ msgid "Unable to load DMARC summary data. Please try again."
msgstr "Impossible de charger les données de synthèse DMARC. Veuillez réessayer."
#: src/summaries/queries/dmarc-summary.js:12
-msgid "Unable to load DMARC summary. Please try again."
-msgstr "Impossible de charger le résumé DMARC. Veuillez réessayer."
+#~ msgid "Unable to load DMARC summary. Please try again."
+#~ msgstr "Impossible de charger le résumé DMARC. Veuillez réessayer."
#: src/dns-scan/loaders/load-dns-connections-by-domain-id.js:154
#: src/dns-scan/loaders/load-dns-connections-by-domain-id.js:164
-#: src/dns-scan/loaders/load-mx-record-diff-by-domain-id.js:156
-#: src/dns-scan/loaders/load-mx-record-diff-by-domain-id.js:166
msgid "Unable to load DNS scan(s). Please try again."
msgstr "Impossible de charger le(s) scan(s) DNS. Veuillez réessayer."
@@ -1110,9 +1117,9 @@ msgstr "Impossible de charger le(s) sélecteur(s) de domaine. Veuillez réessaye
msgid "Unable to load domain. Please try again."
msgstr "Impossible de charger le domaine. Veuillez réessayer."
-#: src/domain/loaders/load-domain-connections-by-organizations-id.js:523
-#: src/domain/loaders/load-domain-connections-by-organizations-id.js:533
-#: src/domain/loaders/load-domain-connections-by-user-id.js:575
+#: src/domain/loaders/load-domain-connections-by-organizations-id.js:402
+#: src/domain/loaders/load-domain-connections-by-organizations-id.js:412
+#: src/domain/loaders/load-domain-connections-by-user-id.js:469
#: src/user/loaders/load-my-tracker-by-user-id.js:33
msgid "Unable to load domain(s). Please try again."
msgstr "Impossible de charger le(s) domaine(s). Veuillez réessayer."
@@ -1140,8 +1147,8 @@ msgstr "Impossible de charger la ou les balises d'orientation HTTPS. Veuillez r
#~ msgstr "Impossible de charger le(s) scan(s) HTTPS. Veuillez réessayer."
#: src/summaries/queries/https-summary.js:13
-msgid "Unable to load HTTPS summary. Please try again."
-msgstr "Impossible de charger le résumé HTTPS. Veuillez réessayer."
+#~ msgid "Unable to load HTTPS summary. Please try again."
+#~ msgstr "Impossible de charger le résumé HTTPS. Veuillez réessayer."
#: src/audit-logs/loaders/load-audit-log-by-key.js:19
#: src/audit-logs/loaders/load-audit-log-by-key.js:31
@@ -1153,20 +1160,32 @@ msgid "Unable to load log(s). Please try again."
msgstr "Impossible de charger le(s) journal(s). Veuillez réessayer."
#: src/summaries/queries/mail-summary.js:12
-msgid "Unable to load mail summary. Please try again."
-msgstr "Impossible de charger le résumé du courrier. Veuillez réessayer."
+#~ msgid "Unable to load mail summary. Please try again."
+#~ msgstr "Impossible de charger le résumé du courrier. Veuillez réessayer."
#: src/additional-findings/loaders/load-top-25-reports.js:29
#: src/organization/loaders/load-all-organization-domain-statuses.js:164
-#: src/organization/loaders/load-organization-domain-statuses.js:166
+#: src/organization/loaders/load-organization-domain-statuses.js:172
msgid "Unable to load organization domain statuses. Please try again."
msgstr "Impossible de charger les statuts des domaines d'organisation. Veuillez réessayer."
+#: src/organization/loaders/load-organization-names-by-id.js:19
+#: src/organization/loaders/load-organization-names-by-id.js:29
+msgid "Unable to load organization names. Please try again."
+msgstr "Impossible de charger les noms des organisations. Veuillez réessayer."
+
#: src/organization/loaders/load-organization-summaries-by-period.js:56
#: src/organization/loaders/load-organization-summaries-by-period.js:66
msgid "Unable to load organization summary data. Please try again."
msgstr "Impossible de charger les données de synthèse de l'organisation. Veuillez réessayer."
+#: src/organization/data-source.js:117
+#: src/organization/data-source.js:124
+#: src/organization/data-source.js:144
+#: src/organization/data-source.js:152
+msgid "Unable to load organization. Please try again."
+msgstr "Impossible de charger l'organisation. Veuillez réessayer."
+
#: src/organization/loaders/load-organization-by-key.js:31
#: src/organization/loaders/load-organization-by-key.js:41
#: src/organization/loaders/load-organization-by-slug.js:34
@@ -1178,8 +1197,10 @@ msgstr "Impossible de charger les données de synthèse de l'organisation. Veuil
msgid "Unable to load organization(s). Please try again."
msgstr "Impossible de charger l'organisation (s). Veuillez réessayer."
-#: src/auth/check-org-owner.js:19
-#: src/auth/check-org-owner.js:27
+#: src/auth/checks/check-org-owner.js:19
+#: src/auth/checks/check-org-owner.js:27
+#: src/auth/loaders/load-org-owner-by-org-id.js:23
+#: src/auth/loaders/load-org-owner-by-org-id.js:33
msgid "Unable to load owner information. Please try again."
msgstr "Impossible de charger les informations sur le propriétaire. Veuillez réessayer."
@@ -1200,8 +1221,8 @@ msgstr "Impossible de charger le(s) tag(s) d'orientation SPF. Veuillez réessaye
#~ msgstr "Impossible de charger le(s) scan(s) SPF. Veuillez réessayer."
#: src/summaries/queries/spf-summary.js:12
-msgid "Unable to load SPF summary. Please try again."
-msgstr "Impossible de charger le résumé SPF. Veuillez réessayer."
+#~ msgid "Unable to load SPF summary. Please try again."
+#~ msgstr "Impossible de charger le résumé SPF. Veuillez réessayer."
#: src/guidance-tag/loaders/load-ssl-guidance-tags-connections.js:260
#: src/guidance-tag/loaders/load-ssl-guidance-tags-connections.js:272
@@ -1214,13 +1235,13 @@ msgstr "Impossible de charger le(s) tag(s) d'orientation SSL. Veuillez réessaye
#~ msgstr "Impossible de charger le(s) scan(s) SSL. Veuillez réessayer."
#: src/summaries/queries/ssl-summary.js:12
-msgid "Unable to load SSL summary. Please try again."
-msgstr "Impossible de charger le résumé SSL. Veuillez réessayer."
+#~ msgid "Unable to load SSL summary. Please try again."
+#~ msgstr "Impossible de charger le résumé SSL. Veuillez réessayer."
#: src/summaries/loaders/load-chart-summary-by-key.js:17
#: src/summaries/loaders/load-chart-summary-by-key.js:25
-msgid "Unable to load summary. Please try again."
-msgstr "Impossible de charger le résumé. Veuillez réessayer."
+#~ msgid "Unable to load summary. Please try again."
+#~ msgstr "Impossible de charger le résumé. Veuillez réessayer."
#: src/tags/loaders/load-all-tags.js:36
#: src/tags/loaders/load-all-tags.js:44
@@ -1266,8 +1287,8 @@ msgid "Unable to load verified rua domains. Please try again."
msgstr "Impossible de charger les domaines rua vérifiés. Veuillez réessayer."
#: src/summaries/queries/web-connections-summary.js:12
-msgid "Unable to load web connections summary. Please try again."
-msgstr "Impossible de charger le résumé des connexions web. Veuillez réessayer."
+#~ msgid "Unable to load web connections summary. Please try again."
+#~ msgstr "Impossible de charger le résumé des connexions web. Veuillez réessayer."
#: src/web-scan/loaders/load-web-connections-by-domain-id.js:169
#: src/web-scan/loaders/load-web-connections-by-domain-id.js:179
@@ -1278,15 +1299,15 @@ msgid "Unable to load web scan(s). Please try again."
msgstr "Impossible de charger le(s) scan(s) web. Veuillez réessayer."
#: src/summaries/queries/web-summary.js:13
-msgid "Unable to load web summary. Please try again."
-msgstr "Impossible de charger le résumé web. Veuillez réessayer."
+#~ msgid "Unable to load web summary. Please try again."
+#~ msgstr "Impossible de charger le résumé web. Veuillez réessayer."
#: src/affiliation/loaders/load-affiliation-connections-by-org-id.js:293
#: src/affiliation/loaders/load-affiliation-connections-by-user-id.js:437
msgid "Unable to query affiliation(s). Please try again."
msgstr "Impossible de demander l'affiliation (s). Veuillez réessayer."
-#: src/domain/loaders/load-domain-connections-by-user-id.js:565
+#: src/domain/loaders/load-domain-connections-by-user-id.js:459
#: src/user/loaders/load-my-tracker-by-user-id.js:23
msgid "Unable to query domain(s). Please try again."
msgstr "Impossible d'interroger le(s) domaine(s). Veuillez réessayer."
@@ -1309,29 +1330,29 @@ msgstr "Impossible d'interroger le(s) utilisateur(s). Veuillez réessayer."
msgid "Unable to refresh tokens, please sign in."
msgstr "Impossible de rafraîchir les jetons, veuillez vous connecter."
-#: src/affiliation/mutations/remove-user-from-org.js:105
+#: src/affiliation/mutations/remove-user-from-org.js:106
msgid "Unable to remove a user that already does not belong to this organization."
msgstr "Impossible de supprimer un utilisateur qui n'appartient déjà plus à cette organisation."
-#: src/domain/mutations/remove-domain.js:81
+#: src/domain/mutations/remove-domain.js:82
msgid "Unable to remove domain from unknown organization."
msgstr "Impossible de supprimer le domaine d'une organisation inconnue."
-#: src/domain/mutations/remove-domain.js:137
+#: src/domain/mutations/remove-domain.js:138
msgid "Unable to remove domain. Domain is not part of organization."
msgstr "Impossible de supprimer le domaine. Le domaine ne fait pas partie de l'organisation."
-#: src/domain/mutations/remove-domain.js:124
-#: src/domain/mutations/remove-domain.js:153
-#: src/domain/mutations/remove-domain.js:187
-#: src/domain/mutations/remove-domain.js:207
-#: src/domain/mutations/remove-domain.js:236
-#: src/domain/mutations/remove-domain.js:255
-#: src/domain/mutations/remove-domain.js:273
-#: src/domain/mutations/remove-domain.js:290
-#: src/domain/mutations/remove-domain.js:308
-#: src/domain/mutations/remove-domain.js:332
-#: src/domain/mutations/remove-domain.js:344
+#: src/domain/mutations/remove-domain.js:125
+#: src/domain/mutations/remove-domain.js:154
+#: src/domain/mutations/remove-domain.js:188
+#: src/domain/mutations/remove-domain.js:208
+#: src/domain/mutations/remove-domain.js:237
+#: src/domain/mutations/remove-domain.js:256
+#: src/domain/mutations/remove-domain.js:274
+#: src/domain/mutations/remove-domain.js:291
+#: src/domain/mutations/remove-domain.js:309
+#: src/domain/mutations/remove-domain.js:333
+#: src/domain/mutations/remove-domain.js:345
msgid "Unable to remove domain. Please try again."
msgstr "Impossible de supprimer le domaine. Veuillez réessayer."
@@ -1339,19 +1360,17 @@ msgstr "Impossible de supprimer le domaine. Veuillez réessayer."
msgid "Unable to remove domains from unknown organization."
msgstr "Impossible de supprimer les domaines d'une organisation inconnue."
-#: src/organization/mutations/remove-organization.js:103
-#: src/organization/mutations/remove-organization.js:114
-#: src/organization/mutations/remove-organization.js:145
-#: src/organization/mutations/remove-organization.js:161
-#: src/organization/mutations/remove-organization.js:192
-#: src/organization/mutations/remove-organization.js:203
-#: src/organization/mutations/remove-organization.js:230
-#: src/organization/mutations/remove-organization.js:249
-#: src/organization/mutations/remove-organization.js:267
-#: src/organization/mutations/remove-organization.js:284
-#: src/organization/mutations/remove-organization.js:317
-#: src/organization/mutations/remove-organization.js:382
-#: src/organization/mutations/remove-organization.js:392
+#: src/organization/data-source.js:278
+#: src/organization/data-source.js:307
+#: src/organization/data-source.js:321
+#: src/organization/data-source.js:350
+#: src/organization/data-source.js:374
+#: src/organization/data-source.js:390
+#: src/organization/data-source.js:405
+#: src/organization/data-source.js:419
+#: src/organization/data-source.js:448
+#: src/organization/data-source.js:490
+#: src/organization/data-source.js:498
msgid "Unable to remove organization. Please try again."
msgstr "Impossible de supprimer l'organisation. Veuillez réessayer."
@@ -1360,15 +1379,15 @@ msgstr "Impossible de supprimer l'organisation. Veuillez réessayer."
msgid "Unable to remove phone number. Please try again."
msgstr "Impossible de supprimer le numéro de téléphone. Veuillez réessayer."
-#: src/domain/mutations/remove-domain.js:66
+#: src/domain/mutations/remove-domain.js:67
msgid "Unable to remove unknown domain."
msgstr "Impossible de supprimer un domaine inconnu."
-#: src/organization/mutations/remove-organization.js:55
+#: src/organization/mutations/remove-organization.js:52
msgid "Unable to remove unknown organization."
msgstr "Impossible de supprimer une organisation inconnue."
-#: src/affiliation/mutations/remove-user-from-org.js:78
+#: src/affiliation/mutations/remove-user-from-org.js:79
msgid "Unable to remove unknown user from organization."
msgstr "Impossible de supprimer un utilisateur inconnu de l'organisation."
@@ -1376,26 +1395,26 @@ msgstr "Impossible de supprimer un utilisateur inconnu de l'organisation."
#~ msgid "Unable to remove user from organization."
#~ msgstr "Impossible de supprimer un utilisateur de l'organisation."
-#: src/affiliation/mutations/remove-user-from-org.js:95
-#: src/affiliation/mutations/remove-user-from-org.js:116
-#: src/affiliation/mutations/remove-user-from-org.js:163
-#: src/affiliation/mutations/remove-user-from-org.js:173
+#: src/affiliation/mutations/remove-user-from-org.js:96
+#: src/affiliation/mutations/remove-user-from-org.js:117
+#: src/affiliation/mutations/remove-user-from-org.js:164
+#: src/affiliation/mutations/remove-user-from-org.js:174
msgid "Unable to remove user from this organization. Please try again."
msgstr "Impossible de supprimer l'utilisateur de cette organisation. Veuillez réessayer."
-#: src/affiliation/mutations/remove-user-from-org.js:62
+#: src/affiliation/mutations/remove-user-from-org.js:63
msgid "Unable to remove user from unknown organization."
msgstr "Impossible de supprimer un utilisateur d'une organisation inconnue."
-#: src/domain/mutations/request-scan.js:119
+#: src/domain/mutations/request-scan.js:120
msgid "Unable to request a one time scan on a domain that already has a pending scan."
msgstr "Impossible de demander une analyse unique sur un domaine qui a déjà une analyse en cours."
-#: src/domain/mutations/request-scan.js:54
+#: src/domain/mutations/request-scan.js:55
msgid "Unable to request a one time scan on an unknown domain."
msgstr "Impossible de demander un scan unique sur un domaine inconnu."
-#: src/domain/mutations/request-scan.js:127
+#: src/domain/mutations/request-scan.js:128
msgid "Unable to request a one time scan. Please try again."
msgstr "Impossible de demander une analyse unique. Veuillez réessayer."
@@ -1423,9 +1442,8 @@ msgstr "Impossible de demander une invitation à une organisation inconnue."
#: src/affiliation/mutations/request-org-affiliation.js:124
#: src/affiliation/mutations/request-org-affiliation.js:141
#: src/affiliation/mutations/request-org-affiliation.js:152
-#: src/affiliation/mutations/request-org-affiliation.js:173
-#: src/affiliation/mutations/request-org-affiliation.js:183
-#: src/affiliation/mutations/request-org-affiliation.js:214
+#: src/affiliation/mutations/request-org-affiliation.js:167
+#: src/affiliation/mutations/request-org-affiliation.js:198
msgid "Unable to request invite. Please try again."
msgstr "Impossible de demander une invitation. Veuillez réessayer."
@@ -1439,8 +1457,8 @@ msgstr "Impossible de demander une invitation. Veuillez réessayer."
msgid "Unable to reset password. Please try again."
msgstr "Impossible de réinitialiser le mot de passe. Veuillez réessayer."
-#: src/domain/objects/domain.js:324
-#: src/domain/objects/domain.js:359
+#: src/domain/objects/domain.js:274
+#: src/domain/objects/domain.js:309
msgid "Unable to retrieve DMARC report information for: {domain}"
msgstr "Impossible de récupérer les informations du rapport DMARC pour : {domain}"
@@ -1470,6 +1488,10 @@ msgstr "Impossible d'envoyer l'email de demande d'invitation à l'org. Veuillez
msgid "Unable to send password reset email. Please try again."
msgstr "Impossible d'envoyer l'email de réinitialisation du mot de passe. Veuillez réessayer."
+#: src/notify/notify-send-role-change-email.js:21
+#~ msgid "Unable to send role update email. Please try again."
+#~ msgstr "Impossible d'envoyer l'e-mail de mise à jour du rôle. Veuillez réessayer."
+
#: src/notify/notify-send-tfa-text-msg.js:30
#~ msgid "Unable to send two factor authentication message. Please try again."
#~ msgstr "Impossible d'envoyer le message d'authentification à deux facteurs. Veuillez réessayer."
@@ -1559,40 +1581,36 @@ msgstr "Impossible de défavoriser le domaine. Veuillez réessayer."
msgid "Unable to unfavourite unknown domain."
msgstr "Impossible de défavoriser un domaine inconnu."
-#: src/domain/mutations/update-domain.js:236
+#: src/domain/mutations/update-domain.js:261
msgid "Unable to update domain edge. Please try again."
msgstr "Impossible de mettre à jour le bord du domaine. Veuillez réessayer."
-#: src/domain/mutations/update-domain.js:123
+#: src/domain/mutations/update-domain.js:137
msgid "Unable to update domain in an unknown org."
msgstr "Impossible de mettre à jour le domaine dans un org inconnu."
-#: src/domain/mutations/update-domain.js:164
+#: src/domain/mutations/update-domain.js:178
msgid "Unable to update domain that does not belong to the given organization."
msgstr "Impossible de mettre à jour un domaine qui n'appartient pas à l'organisation donnée."
-#: src/domain/mutations/update-domain.js:154
-#: src/domain/mutations/update-domain.js:193
-#: src/domain/mutations/update-domain.js:247
+#: src/domain/mutations/update-domain.js:168
+#: src/domain/mutations/update-domain.js:218
+#: src/domain/mutations/update-domain.js:272
msgid "Unable to update domain. Please try again."
msgstr "Impossible de mettre à jour le domaine. Veuillez réessayer."
-#: src/domain/mutations/update-domains-by-domain-ids.js:67
-#: src/domain/mutations/update-domains-by-filters.js:75
+#: src/domain/mutations/update-domains-by-domain-ids.js:68
+#: src/domain/mutations/update-domains-by-filters.js:76
msgid "Unable to update domains in unknown organization."
msgstr "Impossible de mettre à jour les domaines dans une organisation inconnue."
-#: src/domain/mutations/update-domains-by-filters.js:228
-#: src/domain/mutations/update-domains-by-filters.js:236
-#: src/domain/mutations/update-domains-by-filters.js:243
+#: src/domain/mutations/update-domains-by-filters.js:229
+#: src/domain/mutations/update-domains-by-filters.js:237
+#: src/domain/mutations/update-domains-by-filters.js:244
msgid "Unable to update domains. Please try again."
msgstr "Impossible de mettre à jour les domaines. Veuillez réessayer."
-#: src/organization/mutations/update-organization.js:174
-#: src/organization/mutations/update-organization.js:200
-#: src/organization/mutations/update-organization.js:208
-#: src/organization/mutations/update-organization.js:262
-#: src/organization/mutations/update-organization.js:270
+#: src/organization/data-source.js:101
msgid "Unable to update organization. Please try again."
msgstr "Impossible de mettre à jour l'organisation. Veuillez réessayer."
@@ -1618,23 +1636,23 @@ msgstr "Impossible de mettre à jour le mot de passe. Veuillez réessayer."
msgid "Unable to update profile. Please try again."
msgstr "Impossible de mettre à jour le profil. Veuillez réessayer."
-#: src/affiliation/mutations/update-user-role.js:95
+#: src/affiliation/mutations/update-user-role.js:97
msgid "Unable to update role: organization unknown."
msgstr "Impossible de mettre à jour le rôle : organisation inconnue."
-#: src/affiliation/mutations/update-user-role.js:138
+#: src/affiliation/mutations/update-user-role.js:140
msgid "Unable to update role: user does not belong to organization."
msgstr "Impossible de mettre à jour le rôle : l'utilisateur n'appartient pas à l'organisation."
-#: src/affiliation/mutations/update-user-role.js:81
+#: src/affiliation/mutations/update-user-role.js:83
msgid "Unable to update role: user unknown."
msgstr "Impossible de mettre à jour le rôle : utilisateur inconnu."
-#: src/tags/mutations/update-tag.js:134
+#: src/tags/mutations/update-tag.js:113
msgid "Unable to update tag in unknown organization."
msgstr "Impossible de mettre à jour la balise dans une organisation inconnue."
-#: src/tags/mutations/update-tag.js:124
+#: src/tags/mutations/update-tag.js:103
msgid "Unable to update tag, orgId is invalid."
msgstr "Impossible de mettre à jour la balise, l'orgId est invalide."
@@ -1642,33 +1660,34 @@ msgstr "Impossible de mettre à jour la balise, l'orgId est invalide."
#~ msgid "Unable to update tag, tagId already in use."
#~ msgstr "Impossible de mettre à jour la balise, l'identifiant de balise est déjà utilisé."
-#: src/tags/mutations/update-tag.js:90
-#: src/tags/mutations/update-tag.js:98
-#: src/tags/mutations/update-tag.js:221
-#: src/tags/mutations/update-tag.js:232
+#: src/tags/data-source.js:30
+#: src/tags/data-source.js:36
+#: src/tags/data-source.js:92
+#: src/tags/data-source.js:101
msgid "Unable to update tag. Please try again."
msgstr "Impossible de mettre à jour la balise. Veuillez réessayer."
-#: src/domain/mutations/update-domain.js:109
+#: src/domain/mutations/update-domain.js:123
msgid "Unable to update unknown domain."
msgstr "Impossible de mettre à jour un domaine inconnu."
-#: src/organization/mutations/update-organization.js:140
+#: src/organization/mutations/update-organization.js:137
msgid "Unable to update unknown organization."
msgstr "Impossible de mettre à jour une organisation inconnue."
-#: src/tags/mutations/update-tag.js:108
+#: src/tags/mutations/update-tag.js:87
msgid "Unable to update unknown tag."
msgstr "Impossible de mettre à jour une étiquette inconnue."
-#: src/affiliation/mutations/update-user-role.js:128
-#: src/affiliation/mutations/update-user-role.js:150
-#: src/affiliation/mutations/update-user-role.js:202
-#: src/affiliation/mutations/update-user-role.js:212
+#: src/affiliation/mutations/update-user-role.js:130
+#: src/affiliation/mutations/update-user-role.js:152
+#: src/affiliation/mutations/update-user-role.js:196
+#: src/affiliation/mutations/update-user-role.js:206
+#: src/affiliation/mutations/update-user-role.js:217
msgid "Unable to update user's role. Please try again."
msgstr "Impossible de mettre à jour le rôle de l'utilisateur. Veuillez réessayer."
-#: src/affiliation/mutations/update-user-role.js:67
+#: src/affiliation/mutations/update-user-role.js:69
msgid "Unable to update your own role."
msgstr "Impossible de mettre à jour votre propre rôle."
@@ -1688,17 +1707,17 @@ msgid "Unable to verify if user is a super admin, please try again."
msgstr "Impossible de vérifier si l'utilisateur est un super administrateur, veuillez réessayer."
#: src/user/mutations/update-user-profile.js:99
-#: src/user/queries/is-user-admin.js:55
+#: src/user/queries/is-user-admin.js:49
msgid "Unable to verify if user is an admin, please try again."
msgstr "Impossible de vérifier si l'utilisateur est un administrateur, veuillez réessayer."
-#: src/organization/mutations/verify-organization.js:106
-#: src/organization/mutations/verify-organization.js:123
-#: src/organization/mutations/verify-organization.js:131
+#: src/organization/data-source.js:237
+#: src/organization/data-source.js:252
+#: src/organization/data-source.js:260
msgid "Unable to verify organization. Please try again."
msgstr "Impossible de vérifier l'organisation. Veuillez réessayer."
-#: src/organization/mutations/verify-organization.js:53
+#: src/organization/mutations/verify-organization.js:50
msgid "Unable to verify unknown organization."
msgstr "Impossible de vérifier une organisation inconnue."
@@ -1710,7 +1729,7 @@ msgstr "L'utilisateur n'a pas pu être interrogé."
msgid "User is trying to register for a non-production environment."
msgstr "L'utilisateur essaie de s'enregistrer dans un environnement de non-production."
-#: src/affiliation/mutations/update-user-role.js:246
+#: src/affiliation/mutations/update-user-role.js:253
msgid "User role was updated successfully."
msgstr "Le rôle de l'utilisateur a été mis à jour avec succès."
@@ -1719,11 +1738,11 @@ msgstr "Le rôle de l'utilisateur a été mis à jour avec succès."
msgid "Username not available, please try another."
msgstr "Le nom d'utilisateur n'est pas disponible, veuillez en essayer un autre."
-#: src/auth/tfa-required.js:15
+#: src/auth/guards/tfa-required.js:15
msgid "Verification error. Please activate multi-factor authentication to access content."
msgstr "Erreur de vérification. Veuillez activer l'authentification multifactorielle pour accéder au contenu."
-#: src/auth/verified-required.js:15
+#: src/auth/guards/verified-required.js:15
msgid "Verification error. Please verify your account via email to access content."
msgstr "Erreur de vérification. Veuillez vérifier votre compte par e-mail pour accéder au contenu."
@@ -1760,8 +1779,8 @@ msgstr "Vous devez fournir une valeur `first` ou `last` pour paginer correctemen
msgid "You must provide a `first` or `last` value to properly paginate the `DmarcSummaries` connection."
msgstr "Vous devez fournir une valeur `first` ou `last` pour paginer correctement la connexion `DmarcSummaries`."
-#: src/domain/loaders/load-domain-connections-by-organizations-id.js:140
-#: src/domain/loaders/load-domain-connections-by-user-id.js:165
+#: src/domain/loaders/load-domain-connections-by-organizations-id.js:141
+#: src/domain/loaders/load-domain-connections-by-user-id.js:166
msgid "You must provide a `first` or `last` value to properly paginate the `Domain` connection."
msgstr "Vous devez fournir une valeur `first` ou `last` pour paginer correctement la connexion `Domain`."
@@ -1822,8 +1841,8 @@ msgid "You must provide a `limit` value in the range of 1-100 to properly pagina
msgstr "Vous devez fournir une valeur `limit` comprise entre 1 et 100 pour paginer correctement la connexion `DNS`."
#: src/dns-scan/loaders/load-mx-record-diff-by-domain-id.js:16
-msgid "You must provide a `limit` value in the range of 1-100 to properly paginate the `MXRecord` connection."
-msgstr "Vous devez fournir une valeur `limit` comprise entre 1 et 100 pour paginer correctement la connexion `MXRecord`."
+#~ msgid "You must provide a `limit` value in the range of 1-100 to properly paginate the `MXRecord` connection."
+#~ msgstr "Vous devez fournir une valeur `limit` comprise entre 1 et 100 pour paginer correctement la connexion `MXRecord`."
#: src/web-scan/loaders/load-web-connections-by-domain-id.js:16
msgid "You must provide a `limit` value in the range of 1-100 to properly paginate the `web` connection."
@@ -1834,8 +1853,8 @@ msgid "You must provide a `limit` value to properly paginate the `DNS` connectio
msgstr "Vous devez fournir une valeur `limit` pour paginer correctement la connexion `DNS`."
#: src/dns-scan/loaders/load-mx-record-diff-by-domain-id.js:9
-msgid "You must provide a `limit` value to properly paginate the `MXRecord` connection."
-msgstr "Vous devez fournir une valeur `limit` pour paginer correctement la connexion `MXRecord`."
+#~ msgid "You must provide a `limit` value to properly paginate the `MXRecord` connection."
+#~ msgstr "Vous devez fournir une valeur `limit` pour paginer correctement la connexion `MXRecord`."
#: src/web-scan/loaders/load-web-connections-by-domain-id.js:9
msgid "You must provide a `limit` value to properly paginate the `web` connection."
@@ -1870,8 +1889,8 @@ msgid "You must provide at most one pagination method (`before`, `after`, `offse
msgstr "Vous devez fournir au plus une valeur de méthode de pagination (`before`, `after`, `offset`) pour paginer correctement la connexion `DNS`."
#: src/dns-scan/loaders/load-mx-record-diff-by-domain-id.js:30
-msgid "You must provide at most one pagination method (`before`, `after`, `offset`) value to properly paginate the `MXRecord` connection."
-msgstr "Vous devez fournir au plus une valeur de méthode de pagination (`before`, `after`, `offset`) pour paginer correctement la connexion `MXRecord`."
+#~ msgid "You must provide at most one pagination method (`before`, `after`, `offset`) value to properly paginate the `MXRecord` connection."
+#~ msgstr "Vous devez fournir au plus une valeur de méthode de pagination (`before`, `after`, `offset`) pour paginer correctement la connexion `MXRecord`."
#: src/web-scan/loaders/load-web-connections-by-domain-id.js:30
msgid "You must provide at most one pagination method (`before`, `after`, `offset`) value to properly paginate the `web` connection."
diff --git a/api/src/notify/index.js b/api/src/notify/index.js
index c2bd257bb1..9e306a9a0a 100644
--- a/api/src/notify/index.js
+++ b/api/src/notify/index.js
@@ -7,3 +7,4 @@ export * from './notify-send-org-invite-email'
export * from './notify-send-password-reset-email'
export * from './notify-send-updated-username-email'
export * from './notify-send-verification-email'
+export * from './notify-send-role-change-email'
diff --git a/api/src/notify/notify-send-role-change-email.js b/api/src/notify/notify-send-role-change-email.js
new file mode 100644
index 0000000000..473339b698
--- /dev/null
+++ b/api/src/notify/notify-send-role-change-email.js
@@ -0,0 +1,20 @@
+const { NOTIFICATION_ROLE_CHANGE_EMAIL } = process.env
+
+export const sendRoleChangeEmail =
+ ({ notifyClient }) =>
+ async ({ user, orgNames, oldRole, newRole }) => {
+ try {
+ await notifyClient.sendEmail(NOTIFICATION_ROLE_CHANGE_EMAIL, user.userName, {
+ personalisation: {
+ display_name: user.displayName,
+ org_name_en: orgNames.orgNameEN,
+ org_name_fr: orgNames.orgNameFR,
+ old_role: oldRole,
+ new_role: newRole,
+ },
+ })
+ return true
+ } catch (err) {
+ console.error(`Error occurred when sending role update email for ${user._key}: ${err}`)
+ }
+ }
diff --git a/api/src/organization/data-source.js b/api/src/organization/data-source.js
new file mode 100644
index 0000000000..166622e7fd
--- /dev/null
+++ b/api/src/organization/data-source.js
@@ -0,0 +1,501 @@
+import { t } from '@lingui/macro'
+
+import {
+ loadAllOrganizationDomainStatuses,
+ loadOrgByKey,
+ loadOrgBySlug,
+ loadOrgConnectionsByDomainId,
+ loadOrgConnectionsByUserId,
+ loadOrganizationDomainStatuses,
+ loadOrganizationNamesById,
+ loadOrganizationSummariesByPeriod,
+} from './loaders'
+
+export class OrganizationDataSource {
+ constructor({ query, userKey, i18n, language, cleanseInput, loginRequiredBool, transaction, collections }) {
+ this._query = query
+ this._userKey = userKey
+ this._i18n = i18n
+ this._transaction = transaction
+ this._collections = collections
+ this.byKey = loadOrgByKey({ query, language, userKey, i18n })
+ this.bySlug = loadOrgBySlug({ query, language, userKey, i18n })
+ this.connectionsByDomainId = loadOrgConnectionsByDomainId({ query, language, userKey, cleanseInput, i18n, auth: { loginRequiredBool } })
+ this.connectionsByUserId = loadOrgConnectionsByUserId({ query, userKey, cleanseInput, language, i18n, auth: { loginRequiredBool } })
+ this.summariesByPeriod = loadOrganizationSummariesByPeriod({ query, userKey, cleanseInput, i18n })
+ this.namesById = loadOrganizationNamesById({ query, userKey, i18n })
+ this.domainStatuses = loadOrganizationDomainStatuses({ query, userKey, i18n })
+ this.allDomainStatuses = loadAllOrganizationDomainStatuses({ query, userKey, i18n, language })
+ }
+
+ async create({ organizationDetails, userId, language }) {
+ const trx = await this._transaction(this._collections)
+
+ let cursor
+ try {
+ cursor = await trx.step(
+ () => this._query`
+ WITH organizations
+ INSERT ${organizationDetails} INTO organizations
+ RETURN MERGE(
+ {
+ _id: NEW._id,
+ _key: NEW._key,
+ _rev: NEW._rev,
+ _type: "organization",
+ id: NEW._key,
+ verified: NEW.verified,
+ domainCount: 0,
+ summaries: NEW.summaries
+ },
+ TRANSLATE(${language}, NEW.orgDetails)
+ )
+ `,
+ )
+ } catch (err) {
+ console.error(`Database error occurred when user: ${this._userKey} was creating new organization: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to create organization. Please try again.`))
+ }
+ const organization = await cursor.next()
+
+ try {
+ await trx.step(
+ () => this._query`
+ WITH affiliations, organizations, users
+ INSERT {
+ _from: ${organization._id},
+ _to: ${userId},
+ permission: "owner",
+ } INTO affiliations
+ `,
+ )
+ } catch (err) {
+ console.error(`Database error occurred when inserting affiliation for user: ${this._userKey}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to create organization. Please try again.`))
+ }
+
+ try {
+ await trx.commit()
+ } catch (err) {
+ console.error(`Transaction error occurred when committing new organization for user: ${this._userKey}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to create organization. Please try again.`))
+ }
+
+ return organization
+ }
+
+ async checkNameInUse({ nameEN, nameFR }) {
+ let cursor
+ try {
+ cursor = await this._query`
+ WITH organizations
+ FOR org IN organizations
+ FILTER (org.orgDetails.en.name == ${nameEN}) OR (org.orgDetails.fr.name == ${nameFR})
+ RETURN org
+ `
+ } catch (err) {
+ console.error(`Database error occurred during name check for user: ${this._userKey}: ${err}`)
+ throw new Error(this._i18n._(t`Unable to update organization. Please try again.`))
+ }
+ return cursor
+ }
+
+ async getRawByKey({ orgKey }) {
+ let cursor
+ try {
+ cursor = await this._query`
+ WITH organizations
+ FOR org IN organizations
+ FILTER org._key == ${orgKey}
+ RETURN org
+ `
+ } catch (err) {
+ console.error(`Database error occurred while retrieving org: ${orgKey} for user: ${this._userKey}: ${err}`)
+ throw new Error(this._i18n._(t`Unable to load organization. Please try again.`))
+ }
+
+ try {
+ return await cursor.next()
+ } catch (err) {
+ console.error(`Cursor error occurred while retrieving org: ${orgKey} for user: ${this._userKey}: ${err}`)
+ throw new Error(this._i18n._(t`Unable to load organization. Please try again.`))
+ }
+ }
+
+ async update({ orgKey, updatedOrgDetails }) {
+ const trx = await this._transaction(this._collections)
+
+ try {
+ await trx.step(
+ () => this._query`
+ WITH organizations
+ UPSERT { _key: ${orgKey} }
+ INSERT ${updatedOrgDetails}
+ UPDATE ${updatedOrgDetails}
+ IN organizations
+ `,
+ )
+ } catch (err) {
+ console.error(`Transaction error occurred while upserting org: ${orgKey} for user: ${this._userKey}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to load organization. Please try again.`))
+ }
+
+ try {
+ await trx.commit()
+ } catch (err) {
+ console.error(`Transaction error occurred while committing org: ${orgKey} for user: ${this._userKey}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to load organization. Please try again.`))
+ }
+ }
+
+ async archive({ organization }) {
+ const trx = await this._transaction(this._collections)
+
+ let domainInfo
+ try {
+ const countCursor = await this._query`
+ WITH claims, domains, organizations
+ LET domainIds = (
+ FOR v, e IN 1..1 OUTBOUND ${organization._id} claims
+ RETURN e._to
+ )
+ FOR domain IN domains
+ FILTER domain._id IN domainIds
+ LET count = LENGTH(
+ FOR v, e IN 1..1 INBOUND domain._id claims
+ RETURN 1
+ )
+ RETURN { _id: domain._id, _key: domain._key, count }
+ `
+ domainInfo = await countCursor.all()
+ } catch (err) {
+ console.error(`Database error occurred for user: ${this._userKey} while gathering domain count for archive of org: ${organization._key}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to archive organization. Please try again.`))
+ }
+
+ for (const domain of domainInfo) {
+ if (domain.count === 1) {
+ try {
+ await trx.step(
+ () => this._query`
+ WITH domains
+ UPDATE { _key: ${domain._key}, archived: true } IN domains
+ `,
+ )
+ } catch (err) {
+ console.error(`Transaction error occurred for user: ${this._userKey} while archiving domains for org: ${organization._key}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to archive organization. Please try again.`))
+ }
+ }
+ }
+
+ try {
+ await trx.step(
+ () => this._query`
+ WITH organizations
+ UPDATE { _key: ${organization._key}, verified: false } IN organizations
+ `,
+ )
+ } catch (err) {
+ console.error(`Transaction error occurred for user: ${this._userKey} while unverifying org: ${organization._key}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to archive organization. Please try again.`))
+ }
+
+ try {
+ await trx.commit()
+ } catch (err) {
+ console.error(`Transaction commit error occurred for user: ${this._userKey} while archiving org: ${organization._key}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to archive organization. Please try again.`))
+ }
+ }
+
+ async verify({ currentOrg }) {
+ const trx = await this._transaction(this._collections)
+
+ try {
+ await trx.step(
+ () => this._query`
+ WITH organizations
+ UPSERT { _key: ${currentOrg._key} }
+ INSERT ${currentOrg}
+ UPDATE ${currentOrg}
+ IN organizations
+ `,
+ )
+ } catch (err) {
+ console.error(`Transaction error occurred while upserting verified org: ${currentOrg._key} for user: ${this._userKey}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to verify organization. Please try again.`))
+ }
+
+ try {
+ await trx.step(
+ () => this._query`
+ WITH domains, claims
+ FOR v, e IN 1..1 OUTBOUND ${currentOrg._id} claims
+ FILTER v.archived == true
+ UPDATE v WITH { archived: false } IN domains
+ `,
+ )
+ } catch (err) {
+ console.error(`Transaction error occurred while unarchiving affiliated domains for org: ${currentOrg._key} for user: ${this._userKey}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to verify organization. Please try again.`))
+ }
+
+ try {
+ await trx.commit()
+ } catch (err) {
+ console.error(`Transaction error occurred while committing verified org: ${currentOrg._key} for user: ${this._userKey}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to verify organization. Please try again.`))
+ }
+ }
+
+ async remove({ organization }) {
+ const trx = await this._transaction(this._collections)
+
+ let dmarcSummaryCheckList
+ try {
+ const dmarcSummaryCheckCursor = await this._query`
+ WITH domains, ownership, dmarcSummaries, organizations
+ FOR v, e IN 1..1 OUTBOUND ${organization._id} ownership
+ RETURN e
+ `
+ dmarcSummaryCheckList = await dmarcSummaryCheckCursor.all()
+ } catch (err) {
+ console.error(`Database error occurred for user: ${this._userKey} while getting dmarc summaries for org: ${organization._key}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to remove organization. Please try again.`))
+ }
+
+ for (const ownership of dmarcSummaryCheckList) {
+ try {
+ await trx.step(
+ () => this._query`
+ WITH ownership, organizations, domains, dmarcSummaries, domainsToDmarcSummaries
+ LET dmarcSummaryEdges = (
+ FOR v, e IN 1..1 OUTBOUND ${ownership._to} domainsToDmarcSummaries
+ RETURN { edgeKey: e._key, dmarcSummaryId: e._to }
+ )
+ LET removeDmarcSummaryEdges = (
+ FOR dmarcSummaryEdge IN dmarcSummaryEdges
+ REMOVE dmarcSummaryEdge.edgeKey IN domainsToDmarcSummaries
+ OPTIONS { waitForSync: true }
+ )
+ LET removeDmarcSummary = (
+ FOR dmarcSummaryEdge IN dmarcSummaryEdges
+ LET key = PARSE_IDENTIFIER(dmarcSummaryEdge.dmarcSummaryId).key
+ REMOVE key IN dmarcSummaries
+ OPTIONS { waitForSync: true }
+ )
+ RETURN true
+ `,
+ )
+ } catch (err) {
+ console.error(`Transaction error occurred for user: ${this._userKey} while removing dmarc summaries for org: ${organization._key}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to remove organization. Please try again.`))
+ }
+
+ try {
+ await trx.step(
+ () => this._query`
+ WITH ownership, organizations, domains
+ REMOVE ${ownership._key} IN ownership
+ OPTIONS { waitForSync: true }
+ `,
+ )
+ } catch (err) {
+ console.error(`Transaction error occurred for user: ${this._userKey} while removing ownerships for org: ${organization._key}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to remove organization. Please try again.`))
+ }
+ }
+
+ let domainInfo
+ try {
+ const countCursor = await this._query`
+ WITH claims, domains, organizations
+ LET domainIds = (
+ FOR v, e IN 1..1 OUTBOUND ${organization._id} claims
+ RETURN e._to
+ )
+ FOR domain IN domains
+ FILTER domain._id IN domainIds
+ LET count = LENGTH(
+ FOR v, e IN 1..1 INBOUND domain._id claims
+ RETURN 1
+ )
+ RETURN {
+ "_id": domain._id,
+ "_key": domain._key,
+ "domain": domain.domain,
+ "count": count
+ }
+ `
+ domainInfo = await countCursor.all()
+ } catch (err) {
+ console.error(`Database error occurred for user: ${this._userKey} while gathering domain count for removal of org: ${organization._key}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to remove organization. Please try again.`))
+ }
+
+ for (const domain of domainInfo) {
+ if (domain.count === 1) {
+ try {
+ await trx.step(async () => {
+ await this._query`
+ WITH web, webScan
+ FOR webV, domainsWebEdge IN 1..1 OUTBOUND ${domain._id} domainsWeb
+ LET removeWebScansQuery = (
+ FOR webScanV, webToWebScansV In 1..1 OUTBOUND webV._id webToWebScans
+ REMOVE webScanV IN webScan
+ REMOVE webToWebScansV IN webToWebScans
+ OPTIONS { waitForSync: true }
+ )
+ REMOVE webV IN web
+ REMOVE domainsWebEdge IN domainsWeb
+ OPTIONS { waitForSync: true }
+ `
+ })
+ } catch (err) {
+ console.error(`Transaction error occurred for user: ${this._userKey} while removing web data for ${domain.domain} in org: ${organization.slug}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to remove organization. Please try again.`))
+ }
+
+ try {
+ await trx.step(async () => {
+ await this._query`
+ WITH dns
+ FOR dnsV, domainsDNSEdge IN 1..1 OUTBOUND ${domain._id} domainsDNS
+ REMOVE dnsV IN dns
+ REMOVE domainsDNSEdge IN domainsDNS
+ OPTIONS { waitForSync: true }
+ `
+ })
+ } catch (err) {
+ console.error(`Transaction error occurred for user: ${this._userKey} while removing DNS data for ${domain.domain} in org: ${organization.slug}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to remove organization. Please try again.`))
+ }
+
+ try {
+ await trx.step(async () => {
+ await this._query`
+ WITH favourites, domains
+ FOR fav IN favourites
+ FILTER fav._to == ${domain._id}
+ REMOVE fav IN favourites
+ `
+ })
+ } catch (err) {
+ console.error(`Transaction error occurred for user: ${this._userKey} while removing favourites for ${domain.domain} in org: ${organization.slug}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to remove organization. Please try again.`))
+ }
+
+ try {
+ await trx.step(async () => {
+ await this._query`
+ FOR e IN domainsToSelectors
+ FILTER e._from == ${domain._id}
+ REMOVE e IN domainsToSelectors
+ `
+ })
+ } catch (err) {
+ console.error(`Transaction error occurred for user: ${this._userKey} while removing DKIM selectors for ${domain.domain} in org: ${organization.slug}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to remove organization. Please try again.`))
+ }
+
+ try {
+ await trx.step(
+ () => this._query`
+ WITH claims, domains, organizations
+ LET domainEdges = (
+ FOR v, e IN 1..1 OUTBOUND ${organization._id} claims
+ FILTER e._to == ${domain._id}
+ RETURN { edgeKey: e._key, domainId: e._to }
+ )
+ LET removeDomainEdges = (
+ FOR domainEdge in domainEdges
+ REMOVE domainEdge.edgeKey IN claims
+ OPTIONS { waitForSync: true }
+ )
+ LET removeDomain = (
+ FOR domainEdge in domainEdges
+ LET key = PARSE_IDENTIFIER(domainEdge.domainId).key
+ REMOVE key IN domains
+ OPTIONS { waitForSync: true }
+ )
+ RETURN true
+ `,
+ )
+ } catch (err) {
+ console.error(`Transaction error occurred for user: ${this._userKey} while removing domains for org: ${organization._key}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to remove organization. Please try again.`))
+ }
+ }
+ }
+
+ try {
+ await trx.step(
+ () => this._query`
+ WITH affiliations, organizations, users
+ LET userEdges = (
+ FOR v, e IN 1..1 OUTBOUND ${organization._id} affiliations
+ RETURN { edgeKey: e._key, userKey: e._to }
+ )
+ LET removeUserEdges = (
+ FOR userEdge IN userEdges
+ REMOVE userEdge.edgeKey IN affiliations
+ OPTIONS { waitForSync: true }
+ )
+ RETURN true
+ `,
+ )
+
+ await trx.step(
+ () => this._query`
+ WITH organizations, organizationSummaries
+ FOR summary in organizationSummaries
+ FILTER summary.organization == ${organization._id}
+ REMOVE summary._key IN organizationSummaries
+ OPTIONS { waitForSync: true }
+ `,
+ )
+
+ await trx.step(
+ () => this._query`
+ WITH organizations
+ REMOVE ${organization._key} IN organizations
+ OPTIONS { waitForSync: true }
+ `,
+ )
+ } catch (err) {
+ console.error(`Transaction error occurred for user: ${this._userKey} while removing affiliations and org: ${organization._key}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to remove organization. Please try again.`))
+ }
+
+ try {
+ await trx.commit()
+ } catch (err) {
+ console.error(`Transaction commit error occurred for user: ${this._userKey} while removing org: ${organization._key}: ${err}`)
+ await trx.abort()
+ throw new Error(this._i18n._(t`Unable to remove organization. Please try again.`))
+ }
+ }
+}
diff --git a/api/src/organization/index.js b/api/src/organization/index.js
index e170187ec3..9366445c50 100644
--- a/api/src/organization/index.js
+++ b/api/src/organization/index.js
@@ -1,3 +1,4 @@
+export * from './data-source'
export * from './inputs'
export * from './loaders'
export * from './mutations'
diff --git a/api/src/organization/loaders/index.js b/api/src/organization/loaders/index.js
index 1e5991965b..82b0be23f5 100644
--- a/api/src/organization/loaders/index.js
+++ b/api/src/organization/loaders/index.js
@@ -5,3 +5,4 @@ export * from './load-organization-connections-by-user-id'
export * from './load-all-organization-domain-statuses'
export * from './load-organization-domain-statuses'
export * from './load-organization-summaries-by-period'
+export * from './load-organization-names-by-id'
diff --git a/api/src/organization/loaders/load-organization-domain-statuses.js b/api/src/organization/loaders/load-organization-domain-statuses.js
index 94a8ec947d..f0009becb3 100644
--- a/api/src/organization/loaders/load-organization-domain-statuses.js
+++ b/api/src/organization/loaders/load-organization-domain-statuses.js
@@ -90,6 +90,11 @@ export const loadOrganizationDomainStatuses =
${domainFilters}
FILTER v.cveDetected ${comparison} true
`
+ } else if (filterValue === 'cvd-enrolled') {
+ domainFilters = aql`
+ ${domainFilters}
+ FILTER v.cvdEnrollment.status ${comparison} "enrolled"
+ `
} else if (filterValue === 'scan-pending') {
domainFilters = aql`${domainFilters}`
} else if (filterValue === 'archived') {
@@ -125,7 +130,7 @@ export const loadOrganizationDomainStatuses =
WITH claims, domains, organizations
FOR v, e IN 1..1 OUTBOUND ${orgId} claims
${archivedFilter}
- LET negativeTags = APPEND(v.negativeTags.dns, v.negativeTags.web)
+ LET negativeTags = APPEND(v.negativeTags.dns, v.negativeTags.web)
${domainFilters}
LET ipAddresses = FIRST(
FILTER v.latestDnsScan
@@ -157,7 +162,8 @@ export const loadOrganizationDomainStatuses =
wildcardSibling: v.wildcardSibling,
wildcardEntry: v.wildcardEntry,
hasEntrustCertificate: v.hasEntrustCertificate,
- top25Vulnerabilities: vulnerabilities
+ top25Vulnerabilities: vulnerabilities,
+ cvdEnrollmentStatus: v.cvdEnrollment.status
}
`
).all()
diff --git a/api/src/organization/loaders/load-organization-names-by-id.js b/api/src/organization/loaders/load-organization-names-by-id.js
new file mode 100644
index 0000000000..037ff5a474
--- /dev/null
+++ b/api/src/organization/loaders/load-organization-names-by-id.js
@@ -0,0 +1,33 @@
+import DataLoader from 'dataloader'
+import { t } from '@lingui/macro'
+
+export const loadOrganizationNamesById = ({ query, userKey, i18n }) =>
+ new DataLoader(async (ids) => {
+ let cursor
+ try {
+ cursor = await query`
+ FOR orgId IN ${ids}
+ LET org = DOCUMENT(organizations, orgId)
+ RETURN {
+ orgId,
+ orgNameEN: org.orgDetails.en.name,
+ orgNameFR: org.orgDetails.fr.name,
+ }
+ `
+ } catch (err) {
+ console.error(`Database error occurred when user: ${userKey} running loadOrganizationNamesById: ${err}`)
+ throw new Error(i18n._(t`Unable to load organization names. Please try again.`))
+ }
+
+ const orgMap = {}
+ try {
+ await cursor.forEach((org) => {
+ orgMap[org.orgId] = org
+ })
+ } catch (err) {
+ console.error(`Cursor error occurred when user: ${userKey} during loadOrganizationNamesById: ${err}`)
+ throw new Error(i18n._(t`Unable to load organization names. Please try again.`))
+ }
+
+ return ids.map((id) => orgMap[id])
+ })
diff --git a/api/src/organization/mutations/__tests__/archive-organization.test.js b/api/src/organization/mutations/__tests__/archive-organization.test.js
index 9e1f992a0a..e574daa6ff 100644
--- a/api/src/organization/mutations/__tests__/archive-organization.test.js
+++ b/api/src/organization/mutations/__tests__/archive-organization.test.js
@@ -11,7 +11,7 @@ import frenchMessages from '../../../locale/fr/messages'
import { cleanseInput } from '../../../validators'
import { checkPermission, userRequired, verifiedRequired } from '../../../auth'
import { loadUserByKey } from '../../../user/loaders'
-import { loadOrgByKey } from '../../loaders'
+import { OrganizationDataSource } from '../../data-source'
import dbschema from '../../../../database.json'
import { collectionNames } from '../../../collection-names'
@@ -176,8 +176,18 @@ describe('archiving an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -242,8 +252,18 @@ describe('archiving an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -315,11 +335,9 @@ describe('archiving an organization', () => {
verifiedRequired: jest.fn(),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
+ dataSources: { organization: { byKey: {
load: jest.fn().mockReturnValue(undefined),
- },
- },
+ } } },
},
})
@@ -383,8 +401,7 @@ describe('archiving an organization', () => {
verifiedRequired: jest.fn(),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
+ dataSources: { organization: { byKey: {
load: jest.fn().mockReturnValue({
_key: 123,
verified: true,
@@ -411,8 +428,7 @@ describe('archiving an organization', () => {
},
},
}),
- },
- },
+ } } },
},
})
@@ -437,20 +453,8 @@ describe('archiving an organization', () => {
})
})
})
- describe('given a trx commit error', () => {
+ describe('given a data source error', () => {
it('throws an error', async () => {
- const mockedCursor = {
- all: jest.fn().mockReturnValueOnce([]).mockReturnValue([]),
- }
-
- const mockedQuery = jest.fn().mockReturnValue(mockedCursor)
-
- const mockedTransaction = jest.fn().mockReturnValue({
- step: jest.fn().mockReturnValue({}),
- commit: jest.fn().mockRejectedValue(new Error('Commit Error')),
- abort: jest.fn(),
- })
-
const response = await graphql({
schema,
source: `
@@ -478,9 +482,6 @@ describe('archiving an organization', () => {
rootValue: null,
contextValue: {
i18n,
- query: mockedQuery,
- collections: collectionNames,
- transaction: mockedTransaction,
userKey: 123,
request: { ip: '127.0.0.1' },
auth: {
@@ -489,34 +490,18 @@ describe('archiving an organization', () => {
verifiedRequired: jest.fn(),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- _key: 123,
- verified: false,
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- }),
+ dataSources: {
+ organization: {
+ byKey: {
+ load: jest.fn().mockReturnValue({
+ _id: 'organizations/123',
+ _key: 123,
+ verified: false,
+ slug: 'treasury-board-secretariat',
+ name: 'Treasury Board of Canada Secretariat',
+ }),
+ },
+ archive: jest.fn().mockRejectedValue(new Error('Unable to archive organization. Please try again.')),
},
},
},
@@ -525,9 +510,7 @@ describe('archiving an organization', () => {
const error = [new GraphQLError('Unable to archive organization. Please try again.')]
expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Trx commit error occurred for user: 123 while attempting archive of org: 123, Error: Commit Error`,
- ])
+ expect(consoleOutput).toEqual([])
})
})
})
diff --git a/api/src/organization/mutations/__tests__/create-organization.test.js b/api/src/organization/mutations/__tests__/create-organization.test.js
index 330dfacde7..3ab87077a2 100644
--- a/api/src/organization/mutations/__tests__/create-organization.test.js
+++ b/api/src/organization/mutations/__tests__/create-organization.test.js
@@ -9,16 +9,16 @@ import { createMutationSchema } from '../../../mutation'
import englishMessages from '../../../locale/en/messages'
import frenchMessages from '../../../locale/fr/messages'
import { cleanseInput, slugify } from '../../../validators'
-import { userRequired, verifiedRequired } from '../../../auth'
+import { checkSuperAdmin, superAdminRequired, userRequired, verifiedRequired } from '../../../auth'
import { loadUserByKey } from '../../../user/loaders'
-import { loadOrgBySlug } from '../../loaders'
+import { OrganizationDataSource } from '../../data-source'
import dbschema from '../../../../database.json'
import { collectionNames } from '../../../collection-names'
const { DB_PASS: rootPass, DB_URL: url, SIGN_IN_KEY } = process.env
describe('create an organization', () => {
- let query, drop, truncate, schema, collections, transaction, user
+ let query, drop, truncate, schema, collections, transaction, user, i18n
const consoleOutput = []
const mockedInfo = (output) => consoleOutput.push(output)
@@ -33,6 +33,18 @@ describe('create an organization', () => {
query: createQuerySchema(),
mutation: createMutationSchema(),
})
+ i18n = setupI18n({
+ locale: 'en',
+ localeData: {
+ en: { plurals: {} },
+ fr: { plurals: {} },
+ },
+ locales: ['en', 'fr'],
+ messages: {
+ en: englishMessages.messages,
+ fr: frenchMessages.messages,
+ },
+ })
})
afterEach(() => {
consoleOutput.length = 0
@@ -74,16 +86,8 @@ describe('create an organization', () => {
acronymFR: "SCT"
nameEN: "Treasury Board of Canada Secretariat"
nameFR: "Secrétariat du Conseil Trésor du Canada"
- zoneEN: "FED"
- zoneFR: "FED"
- sectorEN: "TBS"
- sectorFR: "TBS"
- countryEN: "Canada"
- countryFR: "Canada"
- provinceEN: "Ontario"
- provinceFR: "Ontario"
- cityEN: "Ottawa"
- cityFR: "Ottawa"
+ externalId: "EXT123"
+ verified: false
}
) {
result {
@@ -92,12 +96,8 @@ describe('create an organization', () => {
acronym
slug
name
- zone
- sector
- country
- province
- city
verified
+ externalId
}
}
}
@@ -107,6 +107,7 @@ describe('create an organization', () => {
contextValue: {
request: {
language: 'en',
+ ip: '1.2.3.4',
},
query,
collections: collectionNames,
@@ -118,9 +119,22 @@ describe('create an organization', () => {
loadUserByKey: loadUserByKey({ query }),
}),
verifiedRequired: verifiedRequired({}),
+ checkSuperAdmin: checkSuperAdmin({ i18n, query, userKey: user._key }),
+ superAdminRequired: superAdminRequired({ i18n }),
+ },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
},
loaders: {
- loadOrgBySlug: loadOrgBySlug({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
validators: {
@@ -146,17 +160,15 @@ describe('create an organization', () => {
acronym: org.acronym,
slug: org.slug,
name: org.name,
- zone: org.zone,
- sector: org.sector,
- country: org.country,
- province: org.province,
- city: org.city,
verified: org.verified,
+ externalId: org.externalId,
},
},
},
}
+ // externalId is returned as null if not set, not undefined
+ expectedResponse.data.createOrganization.result.externalId = null
expect(response).toEqual(expectedResponse)
expect(consoleOutput).toEqual([`User: ${user._key} successfully created a new organization: ${org.slug}`])
})
@@ -173,16 +185,8 @@ describe('create an organization', () => {
acronymFR: "SCT"
nameEN: "Treasury Board of Canada Secretariat"
nameFR: "Secrétariat du Conseil Trésor du Canada"
- zoneEN: "FED"
- zoneFR: "FED"
- sectorEN: "TBS"
- sectorFR: "TBS"
- countryEN: "Canada"
- countryFR: "Canada"
- provinceEN: "Ontario"
- provinceFR: "Ontario"
- cityEN: "Ottawa"
- cityFR: "Ottawa"
+ externalId: "EXT123"
+ verified: false
}
) {
result {
@@ -191,12 +195,8 @@ describe('create an organization', () => {
acronym
slug
name
- zone
- sector
- country
- province
- city
verified
+ externalId
}
}
}
@@ -206,6 +206,7 @@ describe('create an organization', () => {
contextValue: {
request: {
language: 'fr',
+ ip: '1.2.3.4',
},
query,
collections: collectionNames,
@@ -217,9 +218,22 @@ describe('create an organization', () => {
loadUserByKey: loadUserByKey({ query }),
}),
verifiedRequired: verifiedRequired({}),
+ checkSuperAdmin: checkSuperAdmin({ i18n, query, userKey: user._key }),
+ superAdminRequired: superAdminRequired({ i18n }),
+ },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'fr',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
},
loaders: {
- loadOrgBySlug: loadOrgBySlug({ query, language: 'fr' }),
loadUserByKey: loadUserByKey({ query }),
},
validators: {
@@ -245,17 +259,15 @@ describe('create an organization', () => {
acronym: org.acronym,
slug: org.slug,
name: org.name,
- zone: org.zone,
- sector: org.sector,
- country: org.country,
- province: org.province,
- city: org.city,
verified: org.verified,
+ externalId: org.externalId,
},
},
},
}
+ // externalId is returned as null if not set, not undefined
+ expectedResponse.data.createOrganization.result.externalId = null
expect(response).toEqual(expectedResponse)
expect(consoleOutput).toEqual([
`User: ${user._key} successfully created a new organization: treasury-board-of-canada-secretariat`,
@@ -264,22 +276,7 @@ describe('create an organization', () => {
})
})
describe('given an unsuccessful org creation', () => {
- let i18n
describe('users language is set to english', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
describe('organization already exists', () => {
it('returns an error', async () => {
const response = await graphql({
@@ -292,16 +289,6 @@ describe('create an organization', () => {
acronymFR: "SCT"
nameEN: "Treasury Board of Canada Secretariat"
nameFR: "Secrétariat du Conseil Trésor du Canada"
- zoneEN: "FED"
- zoneFR: "FED"
- sectorEN: "TBS"
- sectorFR: "TBS"
- countryEN: "Canada"
- countryFR: "Canada"
- provinceEN: "Ontario"
- provinceFR: "Ontario"
- cityEN: "Ottawa"
- cityFR: "Ottawa"
}
) {
result {
@@ -310,11 +297,6 @@ describe('create an organization', () => {
acronym
slug
name
- zone
- sector
- country
- province
- city
verified
}
... on OrganizationError {
@@ -340,11 +322,11 @@ describe('create an organization', () => {
_key: 123,
}),
verifiedRequired: jest.fn(),
+ checkSuperAdmin: jest.fn(),
+ superAdminRequired: jest.fn(),
},
+ dataSources: { organization: { bySlug: { loadMany: jest.fn().mockReturnValue([{}, undefined]) } } },
loaders: {
- loadOrgBySlug: {
- loadMany: jest.fn().mockReturnValue([{}, undefined]),
- },
loadUserByKey: jest.fn(),
},
validators: {
@@ -371,265 +353,61 @@ describe('create an organization', () => {
])
})
})
- describe('transaction error occurs', () => {
- describe('when inserting organization', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createOrganization(
- input: {
- acronymEN: "TBS"
- acronymFR: "SCT"
- nameEN: "Treasury Board of Canada Secretariat"
- nameFR: "Secrétariat du Conseil Trésor du Canada"
- zoneEN: "FED"
- zoneFR: "FED"
- sectorEN: "TBS"
- sectorFR: "TBS"
- countryEN: "Canada"
- countryFR: "Canada"
- provinceEN: "Ontario"
- provinceFR: "Ontario"
- cityEN: "Ottawa"
- cityFR: "Ottawa"
- }
- ) {
- result {
- ... on Organization {
- id
- acronym
- slug
- name
- zone
- sector
- country
- province
- city
- verified
- }
- ... on OrganizationError {
- code
- description
- }
- }
+ describe('data source error occurs', () => {
+ it('returns an error', async () => {
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ createOrganization(
+ input: {
+ acronymEN: "TBS"
+ acronymFR: "SCT"
+ nameEN: "Treasury Board of Canada Secretariat"
+ nameFR: "Secrétariat du Conseil Trésor du Canada"
}
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- auth: {
- userRequired: jest.fn().mockReturnValue({
- _key: 123,
- }),
- verifiedRequired: jest.fn(),
- },
- loaders: {
- loadOrgBySlug: {
- loadMany: jest.fn().mockReturnValue([undefined, undefined]),
- },
- loadUserByKey: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- },
- })
-
- const error = [new GraphQLError('Unable to create organization. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction error occurred when user: 123 was creating new organization treasury-board-of-canada-secretariat: Error: trx step error`,
- ])
- })
- })
- describe('when inserting edge', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createOrganization(
- input: {
- acronymEN: "TBS"
- acronymFR: "SCT"
- nameEN: "Treasury Board of Canada Secretariat"
- nameFR: "Secrétariat du Conseil Trésor du Canada"
- zoneEN: "FED"
- zoneFR: "FED"
- sectorEN: "TBS"
- sectorFR: "TBS"
- countryEN: "Canada"
- countryFR: "Canada"
- provinceEN: "Ontario"
- provinceFR: "Ontario"
- cityEN: "Ottawa"
- cityFR: "Ottawa"
+ ) {
+ result {
+ ... on Organization {
+ id
+ acronym
+ slug
+ name
+ verified
}
- ) {
- result {
- ... on Organization {
- id
- acronym
- slug
- name
- zone
- sector
- country
- province
- city
- verified
- }
- ... on OrganizationError {
- code
- description
- }
+ ... on OrganizationError {
+ code
+ description
}
}
}
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest
- .fn()
- .mockReturnValueOnce({ next: jest.fn() })
- .mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- auth: {
- userRequired: jest.fn().mockReturnValue({
- _key: 123,
- }),
- verifiedRequired: jest.fn(),
- },
- loaders: {
- loadOrgBySlug: {
- loadMany: jest.fn().mockReturnValue([undefined, undefined]),
- },
- loadUserByKey: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
+ }
+ `,
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: { language: 'en' },
+ userKey: 123,
+ auth: {
+ userRequired: jest.fn().mockReturnValue({ _key: 123 }),
+ verifiedRequired: jest.fn(),
+ checkSuperAdmin: jest.fn(),
+ superAdminRequired: jest.fn(),
},
- })
-
- const error = [new GraphQLError('Unable to create organization. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction error occurred when inserting edge definition for user: 123 to treasury-board-of-canada-secretariat: Error: trx step error`,
- ])
- })
- })
- describe('when committing information to db', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createOrganization(
- input: {
- acronymEN: "TBS"
- acronymFR: "SCT"
- nameEN: "Treasury Board of Canada Secretariat"
- nameFR: "Secrétariat du Conseil Trésor du Canada"
- zoneEN: "FED"
- zoneFR: "FED"
- sectorEN: "TBS"
- sectorFR: "TBS"
- countryEN: "Canada"
- countryFR: "Canada"
- provinceEN: "Ontario"
- provinceFR: "Ontario"
- cityEN: "Ottawa"
- cityFR: "Ottawa"
- }
- ) {
- result {
- ... on Organization {
- id
- acronym
- slug
- name
- zone
- sector
- country
- province
- city
- verified
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockReturnValue({ next: jest.fn() }),
- commit: jest.fn().mockRejectedValue(new Error('trx commit error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- auth: {
- userRequired: jest.fn().mockReturnValue({
- _key: 123,
- }),
- verifiedRequired: jest.fn(),
- },
- loaders: {
- loadOrgBySlug: {
- loadMany: jest.fn().mockReturnValue([undefined, undefined]),
- },
- loadUserByKey: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
+ dataSources: {
+ organization: {
+ bySlug: { loadMany: jest.fn().mockReturnValue([undefined, undefined]) },
+ create: jest.fn().mockRejectedValue(new Error('Unable to create organization. Please try again.')),
},
},
- })
+ validators: { cleanseInput, slugify },
+ },
+ })
- const error = [new GraphQLError('Unable to create organization. Please try again.')]
+ const error = [new GraphQLError('Unable to create organization. Please try again.')]
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction error occurred when committing new organization: treasury-board-of-canada-secretariat for user: 123 to db: Error: trx commit error`,
- ])
- })
+ expect(response.errors).toEqual(error)
+ expect(consoleOutput).toEqual([])
})
})
})
@@ -660,16 +438,6 @@ describe('create an organization', () => {
acronymFR: "SCT"
nameEN: "Treasury Board of Canada Secretariat"
nameFR: "Secrétariat du Conseil Trésor du Canada"
- zoneEN: "FED"
- zoneFR: "FED"
- sectorEN: "TBS"
- sectorFR: "TBS"
- countryEN: "Canada"
- countryFR: "Canada"
- provinceEN: "Ontario"
- provinceFR: "Ontario"
- cityEN: "Ottawa"
- cityFR: "Ottawa"
}
) {
result {
@@ -678,11 +446,6 @@ describe('create an organization', () => {
acronym
slug
name
- zone
- sector
- country
- province
- city
verified
}
... on OrganizationError {
@@ -708,11 +471,11 @@ describe('create an organization', () => {
_key: 123,
}),
verifiedRequired: jest.fn(),
+ checkSuperAdmin: jest.fn(),
+ superAdminRequired: jest.fn(),
},
+ dataSources: { organization: { bySlug: { loadMany: jest.fn().mockReturnValue([{}, undefined]) } } },
loaders: {
- loadOrgBySlug: {
- loadMany: jest.fn().mockReturnValue([{}, undefined]),
- },
loadUserByKey: jest.fn(),
},
validators: {
@@ -739,265 +502,61 @@ describe('create an organization', () => {
])
})
})
- describe('transaction error occurs', () => {
- describe('when inserting organization', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createOrganization(
- input: {
- acronymEN: "TBS"
- acronymFR: "SCT"
- nameEN: "Treasury Board of Canada Secretariat"
- nameFR: "Secrétariat du Conseil Trésor du Canada"
- zoneEN: "FED"
- zoneFR: "FED"
- sectorEN: "TBS"
- sectorFR: "TBS"
- countryEN: "Canada"
- countryFR: "Canada"
- provinceEN: "Ontario"
- provinceFR: "Ontario"
- cityEN: "Ottawa"
- cityFR: "Ottawa"
- }
- ) {
- result {
- ... on Organization {
- id
- acronym
- slug
- name
- zone
- sector
- country
- province
- city
- verified
- }
- ... on OrganizationError {
- code
- description
- }
- }
+ describe('data source error occurs', () => {
+ it('returns an error', async () => {
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ createOrganization(
+ input: {
+ acronymEN: "TBS"
+ acronymFR: "SCT"
+ nameEN: "Treasury Board of Canada Secretariat"
+ nameFR: "Secrétariat du Conseil Trésor du Canada"
}
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- auth: {
- userRequired: jest.fn().mockReturnValue({
- _key: 123,
- }),
- verifiedRequired: jest.fn(),
- },
- loaders: {
- loadOrgBySlug: {
- loadMany: jest.fn().mockReturnValue([undefined, undefined]),
- },
- loadUserByKey: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- },
- })
-
- const error = [new GraphQLError('Impossible de créer une organisation. Veuillez réessayer.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction error occurred when user: 123 was creating new organization treasury-board-of-canada-secretariat: Error: trx step error`,
- ])
- })
- })
- describe('when inserting edge', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createOrganization(
- input: {
- acronymEN: "TBS"
- acronymFR: "SCT"
- nameEN: "Treasury Board of Canada Secretariat"
- nameFR: "Secrétariat du Conseil Trésor du Canada"
- zoneEN: "FED"
- zoneFR: "FED"
- sectorEN: "TBS"
- sectorFR: "TBS"
- countryEN: "Canada"
- countryFR: "Canada"
- provinceEN: "Ontario"
- provinceFR: "Ontario"
- cityEN: "Ottawa"
- cityFR: "Ottawa"
+ ) {
+ result {
+ ... on Organization {
+ id
+ acronym
+ slug
+ name
+ verified
}
- ) {
- result {
- ... on Organization {
- id
- acronym
- slug
- name
- zone
- sector
- country
- province
- city
- verified
- }
- ... on OrganizationError {
- code
- description
- }
+ ... on OrganizationError {
+ code
+ description
}
}
}
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest
- .fn()
- .mockReturnValueOnce({ next: jest.fn() })
- .mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- auth: {
- userRequired: jest.fn().mockReturnValue({
- _key: 123,
- }),
- verifiedRequired: jest.fn(),
- },
- loaders: {
- loadOrgBySlug: {
- loadMany: jest.fn().mockReturnValue([undefined, undefined]),
- },
- loadUserByKey: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
+ }
+ `,
+ rootValue: null,
+ contextValue: {
+ i18n,
+ request: { language: 'en' },
+ userKey: 123,
+ auth: {
+ userRequired: jest.fn().mockReturnValue({ _key: 123 }),
+ verifiedRequired: jest.fn(),
+ checkSuperAdmin: jest.fn(),
+ superAdminRequired: jest.fn(),
},
- })
-
- const error = [new GraphQLError('Impossible de créer une organisation. Veuillez réessayer.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction error occurred when inserting edge definition for user: 123 to treasury-board-of-canada-secretariat: Error: trx step error`,
- ])
- })
- })
- describe('when committing information to db', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- createOrganization(
- input: {
- acronymEN: "TBS"
- acronymFR: "SCT"
- nameEN: "Treasury Board of Canada Secretariat"
- nameFR: "Secrétariat du Conseil Trésor du Canada"
- zoneEN: "FED"
- zoneFR: "FED"
- sectorEN: "TBS"
- sectorFR: "TBS"
- countryEN: "Canada"
- countryFR: "Canada"
- provinceEN: "Ontario"
- provinceFR: "Ontario"
- cityEN: "Ottawa"
- cityFR: "Ottawa"
- }
- ) {
- result {
- ... on Organization {
- id
- acronym
- slug
- name
- zone
- sector
- country
- province
- city
- verified
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- request: {
- language: 'en',
- },
- query,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockReturnValue({ next: jest.fn() }),
- commit: jest.fn().mockRejectedValue(new Error('trx commit error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- auth: {
- userRequired: jest.fn().mockReturnValue({
- _key: 123,
- }),
- verifiedRequired: jest.fn(),
- },
- loaders: {
- loadOrgBySlug: {
- loadMany: jest.fn().mockReturnValue([undefined, undefined]),
- },
- loadUserByKey: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
+ dataSources: {
+ organization: {
+ bySlug: { loadMany: jest.fn().mockReturnValue([undefined, undefined]) },
+ create: jest.fn().mockRejectedValue(new Error('Impossible de créer une organisation. Veuillez réessayer.')),
},
},
- })
+ validators: { cleanseInput, slugify },
+ },
+ })
- const error = [new GraphQLError('Impossible de créer une organisation. Veuillez réessayer.')]
+ const error = [new GraphQLError('Impossible de créer une organisation. Veuillez réessayer.')]
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction error occurred when committing new organization: treasury-board-of-canada-secretariat for user: 123 to db: Error: trx commit error`,
- ])
- })
+ expect(response.errors).toEqual(error)
+ expect(consoleOutput).toEqual([])
})
})
})
diff --git a/api/src/organization/mutations/__tests__/remove-organization.test.js b/api/src/organization/mutations/__tests__/remove-organization.test.js
index b0b3641d81..7b179c6d81 100644
--- a/api/src/organization/mutations/__tests__/remove-organization.test.js
+++ b/api/src/organization/mutations/__tests__/remove-organization.test.js
@@ -11,7 +11,7 @@ import frenchMessages from '../../../locale/fr/messages'
import { cleanseInput } from '../../../validators'
import { checkPermission, userRequired, verifiedRequired } from '../../../auth'
import { loadUserByKey } from '../../../user/loaders'
-import { loadOrgByKey } from '../../loaders'
+import { OrganizationDataSource } from '../../data-source'
import dbschema from '../../../../database.json'
import { collectionNames } from '../../../collection-names'
@@ -209,8 +209,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -274,8 +285,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -333,8 +355,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -400,8 +433,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -458,8 +502,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -522,8 +577,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -580,8 +646,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -653,8 +730,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -709,8 +797,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -768,8 +867,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -826,8 +936,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -950,8 +1071,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -1015,8 +1147,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -1074,8 +1217,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -1141,8 +1295,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -1197,8 +1362,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -1257,8 +1433,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -1315,8 +1502,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -1388,8 +1586,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -1444,8 +1653,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -1503,8 +1723,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -1561,8 +1792,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -1674,8 +1916,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -1739,8 +1992,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -1798,8 +2062,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -1865,8 +2140,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -1922,8 +2208,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -1982,8 +2279,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -2040,8 +2348,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -2113,8 +2432,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -2169,8 +2499,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -2228,8 +2569,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -2286,8 +2638,19 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: new OrganizationDataSource({
+ query,
+ userKey: user._key,
+ i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
+ }),
+ },
loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
},
},
@@ -2366,11 +2729,9 @@ describe('removing an organization', () => {
verifiedRequired: jest.fn(),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
+ dataSources: { organization: { byKey: {
load: jest.fn().mockReturnValue(undefined),
- },
- },
+ } } },
},
})
@@ -2434,8 +2795,7 @@ describe('removing an organization', () => {
verifiedRequired: jest.fn(),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
+ dataSources: { organization: { byKey: {
load: jest.fn().mockReturnValue({
_key: 123,
verified: true,
@@ -2462,8 +2822,7 @@ describe('removing an organization', () => {
},
},
}),
- },
- },
+ } } },
},
})
@@ -2527,8 +2886,7 @@ describe('removing an organization', () => {
verifiedRequired: jest.fn(),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
+ dataSources: { organization: { byKey: {
load: jest.fn().mockReturnValue({
_key: 123,
verified: false,
@@ -2555,8 +2913,7 @@ describe('removing an organization', () => {
},
},
}),
- },
- },
+ } } },
},
})
@@ -2581,961 +2938,8 @@ describe('removing an organization', () => {
})
})
})
- describe('given a database error', () => {
- describe('when getting the ownership information', () => {
- it('throws an error', async () => {
- const mockedQuery = jest.fn().mockRejectedValue(new Error('Database Error'))
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- removeOrganization(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- }
- ) {
- result {
- ... on OrganizationResult {
- status
- organization {
- name
- }
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: mockedQuery,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- abort: jest.fn(),
- }),
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('owner'),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- },
- validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- _key: 123,
- verified: false,
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- }),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Unable to remove organization. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Database error occurred for user: 123 while attempting to get dmarcSummaryInfo while removing org: 123, Error: Database Error`,
- ])
- })
- })
- describe('when getting the domain claim count', () => {
- it('throws an error', async () => {
- const mockedCursor = {
- all: jest.fn().mockReturnValue([]),
- }
-
- const mockedQuery = jest
- .fn()
- .mockReturnValueOnce(mockedCursor)
- .mockRejectedValue(new Error('Database Error'))
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- removeOrganization(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- }
- ) {
- result {
- ... on OrganizationResult {
- status
- organization {
- name
- }
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: mockedQuery,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- abort: jest.fn(),
- }),
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('owner'),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- },
- validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- _key: 123,
- verified: false,
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- }),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Unable to remove organization. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Database error occurred for user: 123 while attempting to gather domain count while removing org: 123, Error: Database Error`,
- ])
- })
- })
- })
- describe('given a cursor error', () => {
- describe('when getting getting ownership information', () => {
- it('throws an error', async () => {
- const mockedCursor = {
- all: jest.fn().mockRejectedValue(new Error('Cursor Error')),
- }
-
- const mockedQuery = jest
- .fn()
- .mockReturnValueOnce(mockedCursor)
- .mockRejectedValue(new Error('Database Error'))
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- removeOrganization(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- }
- ) {
- result {
- ... on OrganizationResult {
- status
- organization {
- name
- }
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: mockedQuery,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- abort: jest.fn(),
- }),
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('owner'),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- },
- validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- _key: 123,
- verified: false,
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- }),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Unable to remove organization. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Cursor error occurred for user: 123 while attempting to get dmarcSummaryInfo while removing org: 123, Error: Cursor Error`,
- ])
- })
- })
- describe('when getting getting domain claim count', () => {
- it('throws an error', async () => {
- const mockedCursor = {
- all: jest.fn().mockReturnValueOnce([]).mockRejectedValue(new Error('Cursor Error')),
- }
-
- const mockedQuery = jest.fn().mockReturnValue(mockedCursor)
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- removeOrganization(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- }
- ) {
- result {
- ... on OrganizationResult {
- status
- organization {
- name
- }
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: mockedQuery,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- abort: jest.fn(),
- }),
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('owner'),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- },
- validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- _key: 123,
- verified: false,
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- }),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Unable to remove organization. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Cursor error occurred for user: 123 while attempting to gather domain count while removing org: 123, Error: Cursor Error`,
- ])
- })
- })
- })
- describe('given a trx step error', () => {
- describe('when removing dmarc summary data', () => {
- it('throws an error', async () => {
- const mockedCursor = {
- all: jest.fn().mockReturnValue([{}]),
- }
-
- const mockedQuery = jest.fn().mockReturnValueOnce(mockedCursor)
-
- const mockedTransaction = jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue(new Error('Trx Step')),
- abort: jest.fn(),
- })
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- removeOrganization(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- }
- ) {
- result {
- ... on OrganizationResult {
- status
- organization {
- name
- }
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: mockedQuery,
- collections: collectionNames,
- transaction: mockedTransaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('owner'),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- },
- validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- _key: 123,
- verified: false,
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- }),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Unable to remove organization. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Trx step error occurred for user: 123 while attempting to remove dmarc summaries while removing org: 123, Error: Trx Step`,
- ])
- })
- })
- describe('when removing ownership data', () => {
- it('throws an error', async () => {
- const mockedCursor = {
- all: jest.fn().mockReturnValue([{}]),
- }
-
- const mockedQuery = jest.fn().mockReturnValueOnce(mockedCursor)
-
- const mockedTransaction = jest.fn().mockReturnValue({
- step: jest.fn().mockReturnValueOnce({}).mockRejectedValue(new Error('Trx Step')),
- abort: jest.fn(),
- })
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- removeOrganization(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- }
- ) {
- result {
- ... on OrganizationResult {
- status
- organization {
- name
- }
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: mockedQuery,
- collections: collectionNames,
- transaction: mockedTransaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('owner'),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- },
- validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- _key: 123,
- verified: false,
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- }),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Unable to remove organization. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Trx step error occurred for user: 123 while attempting to remove ownerships while removing org: 123, Error: Trx Step`,
- ])
- })
- })
- describe('when removing web scan results data', () => {
- it('throws an error', async () => {
- const mockedCursor = {
- all: jest
- .fn()
- .mockReturnValueOnce([])
- .mockReturnValue([{ count: 1, domain: 'test.gc.ca' }]),
- }
-
- const mockedQuery = jest.fn().mockReturnValue(mockedCursor)
-
- const mockedTransaction = jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue(new Error('Trx Step')),
- abort: jest.fn(),
- })
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- removeOrganization(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- }
- ) {
- result {
- ... on OrganizationResult {
- status
- organization {
- name
- }
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: mockedQuery,
- collections: collectionNames,
- transaction: mockedTransaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('owner'),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- },
- validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- _key: 123,
- verified: false,
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- }),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Unable to remove organization. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Trx step error occurred while user: 123 attempted to remove web data for test.gc.ca in org: undefined, Error: Trx Step`,
- ])
- })
- })
- describe('when removing scan data', () => {
- it('throws an error', async () => {
- const mockedCursor = {
- all: jest
- .fn()
- .mockReturnValueOnce([])
- .mockReturnValue([{ count: 1, domain: 'test.gc.ca' }]),
- }
-
- const mockedQuery = jest.fn().mockReturnValue(mockedCursor)
-
- const mockedTransaction = jest.fn().mockReturnValue({
- step: jest.fn().mockReturnValueOnce({}).mockRejectedValue(new Error('Trx Step')),
- abort: jest.fn(),
- })
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- removeOrganization(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- }
- ) {
- result {
- ... on OrganizationResult {
- status
- organization {
- name
- }
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: mockedQuery,
- collections: collectionNames,
- transaction: mockedTransaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('owner'),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- },
- validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- _key: 123,
- verified: false,
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- }),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Unable to remove organization. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Trx step error occurred while user: 123 attempted to remove DNS data for test.gc.ca in org: undefined, error: Error: Trx Step`,
- ])
- })
- })
- describe('when removing domain', () => {
- it('throws an error', async () => {
- const mockedCursor = {
- all: jest
- .fn()
- .mockReturnValueOnce([])
- .mockReturnValue([{ count: 1 }]),
- }
-
- const mockedQuery = jest.fn().mockReturnValue(mockedCursor)
-
- const mockedTransaction = jest.fn().mockReturnValue({
- step: jest
- .fn()
- .mockReturnValueOnce({})
- .mockReturnValueOnce({})
- .mockReturnValueOnce({})
- .mockReturnValueOnce({})
- .mockRejectedValue(new Error('Trx Step')),
- abort: jest.fn(),
- })
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- removeOrganization(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- }
- ) {
- result {
- ... on OrganizationResult {
- status
- organization {
- name
- }
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: mockedQuery,
- collections: collectionNames,
- transaction: mockedTransaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('owner'),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- },
- validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- _key: 123,
- verified: false,
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- }),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Unable to remove organization. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Trx step error occurred for user: 123 while attempting to remove domains while removing org: 123, Error: Trx Step`,
- ])
- })
- })
- describe('when removing affiliations and org', () => {
- it('throws an error', async () => {
- const mockedCursor = {
- all: jest
- .fn()
- .mockReturnValueOnce([])
- .mockReturnValue([{ count: 1 }]),
- }
-
- const mockedQuery = jest.fn().mockReturnValue(mockedCursor)
-
- const mockedTransaction = jest.fn().mockReturnValue({
- step: jest
- .fn()
- .mockReturnValueOnce({})
- .mockReturnValueOnce({})
- .mockReturnValueOnce({})
- .mockReturnValueOnce({})
- .mockReturnValueOnce({})
- .mockRejectedValue(new Error('Trx Step')),
- abort: jest.fn(),
- })
-
- const response = await graphql({
- schema,
- source: `
- mutation {
- removeOrganization(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- }
- ) {
- result {
- ... on OrganizationResult {
- status
- organization {
- name
- }
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: mockedQuery,
- collections: collectionNames,
- transaction: mockedTransaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('owner'),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- },
- validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- _key: 123,
- verified: false,
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- }),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Unable to remove organization. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Trx step error occurred for user: 123 while attempting to remove affiliations, and the org while removing org: 123, Error: Trx Step`,
- ])
- })
- })
- })
- describe('given a trx commit error', () => {
+ describe('given a data source error', () => {
it('throws an error', async () => {
- const mockedCursor = {
- all: jest.fn().mockReturnValueOnce([]).mockReturnValue([]),
- }
-
- const mockedQuery = jest.fn().mockReturnValue(mockedCursor)
-
- const mockedTransaction = jest.fn().mockReturnValue({
- step: jest.fn().mockReturnValue({}),
- commit: jest.fn().mockRejectedValue(new Error('Commit Error')),
- abort: jest.fn(),
- })
-
const response = await graphql({
schema,
source: `
@@ -3563,9 +2967,6 @@ describe('removing an organization', () => {
rootValue: null,
contextValue: {
i18n,
- query: mockedQuery,
- collections: collectionNames,
- transaction: mockedTransaction,
userKey: 123,
request: { ip: '127.0.0.1' },
auth: {
@@ -3574,34 +2975,25 @@ describe('removing an organization', () => {
verifiedRequired: jest.fn(),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- _key: 123,
- verified: false,
+ dataSources: {
+ auditLogs: { logActivity: jest.fn() },
+ organization: {
+ byKey: {
+ load: jest.fn().mockReturnValue({
+ _id: 'organizations/123',
+ _key: '123',
+ verified: false,
+ slug: 'treasury-board-secretariat',
+ name: 'Treasury Board of Canada Secretariat',
+ }),
+ },
+ getRawByKey: jest.fn().mockResolvedValue({
orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
+ en: { name: 'Treasury Board of Canada Secretariat' },
+ fr: { name: 'Secrétariat du Conseil Trésor du Canada' },
},
}),
+ remove: jest.fn().mockRejectedValue(new Error('Unable to remove organization. Please try again.')),
},
},
},
@@ -3610,9 +3002,7 @@ describe('removing an organization', () => {
const error = [new GraphQLError('Unable to remove organization. Please try again.')]
expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Trx commit error occurred for user: 123 while attempting remove of org: 123, Error: Commit Error`,
- ])
+ expect(consoleOutput).toEqual([])
})
})
})
diff --git a/api/src/organization/mutations/__tests__/update-organization.test.js b/api/src/organization/mutations/__tests__/update-organization.test.js
index 48d617201c..1a169220ba 100644
--- a/api/src/organization/mutations/__tests__/update-organization.test.js
+++ b/api/src/organization/mutations/__tests__/update-organization.test.js
@@ -1,7 +1,5 @@
import { setupI18n } from '@lingui/core'
-import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../../testUtilities'
-import { graphql, GraphQLSchema, GraphQLError } from 'graphql'
+import { graphql, GraphQLSchema } from 'graphql'
import { toGlobalId } from 'graphql-relay'
import { createQuerySchema } from '../../../query'
@@ -9,4165 +7,866 @@ import { createMutationSchema } from '../../../mutation'
import englishMessages from '../../../locale/en/messages'
import frenchMessages from '../../../locale/fr/messages'
import { cleanseInput, slugify } from '../../../validators'
-import { checkPermission, userRequired, verifiedRequired } from '../../../auth'
-import { loadUserByKey } from '../../../user/loaders'
-import { loadOrgByKey } from '../../loaders'
-import dbschema from '../../../../database.json'
-import { collectionNames } from '../../../collection-names'
-
-const { DB_PASS: rootPass, DB_URL: url } = process.env
-
-describe('updating an organization', () => {
- let query, drop, truncate, schema, collections, transaction, user
+const ORG_KEY = 'org123'
+const ORG_GID = toGlobalId('organization', ORG_KEY)
+
+const BASE_RAW_ORG = {
+ _id: `organizations/${ORG_KEY}`,
+ _key: ORG_KEY,
+ externalId: 'ext-001',
+ externallyManaged: false,
+ orgDetails: {
+ en: {
+ slug: 'treasury-board-secretariat',
+ acronym: 'TBS',
+ name: 'Treasury Board of Canada Secretariat',
+ zone: 'FED',
+ sector: 'TBS',
+ country: 'Canada',
+ province: 'Ontario',
+ city: 'Ottawa',
+ },
+ fr: {
+ slug: 'secretariat-conseil-tresor',
+ acronym: 'SCT',
+ name: 'Secrétariat du Conseil Trésor du Canada',
+ zone: 'FED',
+ sector: 'TBS',
+ country: 'Canada',
+ province: 'Ontario',
+ city: 'Ottawa',
+ },
+ },
+}
+
+// Flat object returned by byKey.load after the update (language-resolved, as the Organization type expects).
+// _type: 'organization' is required by updateOrganizationUnion resolveType.
+const RESOLVED_ORG = {
+ _type: 'organization',
+ id: ORG_KEY,
+ _key: ORG_KEY,
+ _id: `organizations/${ORG_KEY}`,
+ acronym: 'TBS',
+ name: 'Treasury Board of Canada Secretariat',
+ slug: 'treasury-board-secretariat',
+ zone: 'FED',
+ sector: 'TBS',
+ country: 'Canada',
+ province: 'Ontario',
+ city: 'Ottawa',
+ verified: false,
+}
+
+const BASE_USER = { _key: 'user123', userName: 'test@example.com' }
+
+describe('updateOrganization', () => {
+ let schema, enI18n, frI18n
const consoleOutput = []
- const mockedInfo = (output) => consoleOutput.push(output)
- const mockedWarn = (output) => consoleOutput.push(output)
- const mockedError = (output) => consoleOutput.push(output)
+
beforeAll(() => {
- console.info = mockedInfo
- console.warn = mockedWarn
- console.error = mockedError
- // Create GQL Schema
+ console.info = (o) => consoleOutput.push(o)
+ console.warn = (o) => consoleOutput.push(o)
+ console.error = (o) => consoleOutput.push(o)
+
schema = new GraphQLSchema({
query: createQuerySchema(),
mutation: createMutationSchema(),
})
+
+ enI18n = setupI18n({
+ locale: 'en',
+ localeData: { en: { plurals: {} }, fr: { plurals: {} } },
+ locales: ['en', 'fr'],
+ messages: { en: englishMessages.messages, fr: frenchMessages.messages },
+ })
+
+ frI18n = setupI18n({
+ locale: 'fr',
+ localeData: { en: { plurals: {} }, fr: { plurals: {} } },
+ locales: ['en', 'fr'],
+ messages: { en: englishMessages.messages, fr: frenchMessages.messages },
+ })
})
- beforeEach(() => {
+
+ afterEach(() => {
consoleOutput.length = 0
})
- describe('given a successful organization update', () => {
- let org
- beforeEach(async () => {
- // Generate DB Items
- ;({ query, drop, truncate, collections, transaction } = await ensure({
- variables: {
- dbname: dbNameFromFile(__filename),
- username: 'root',
- rootPassword: rootPass,
- password: rootPass,
- url,
- },
-
- schema: dbschema,
- }))
- user = await collections.users.save({
- userName: 'test.account@istio.actually.exists',
- emailValidated: true,
- })
- org = await collections.organizations.save({
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
+ // Builds the organization data source mock. firstLoad is what byKey.load returns on the
+ // initial existence check; secondLoad is what it returns after the update + cache clear.
+ // Note: uses hasOwnProperty so callers can explicitly pass undefined (org not found).
+ function makeOrgDS(opts = {}) {
+ const firstLoad = Object.prototype.hasOwnProperty.call(opts, 'firstLoad') ? opts.firstLoad : BASE_RAW_ORG
+ const secondLoad = opts.secondLoad ?? RESOLVED_ORG
+ const nameInUseCount = opts.nameInUseCount ?? 0
+ const rawOrg = opts.rawOrg ?? BASE_RAW_ORG
+ const update = opts.update ?? jest.fn()
+ const checkNameInUse = opts.checkNameInUse ?? null
+ const getRawByKey = opts.getRawByKey ?? null
+
+ return {
+ byKey: {
+ load: jest.fn().mockResolvedValueOnce(firstLoad).mockResolvedValueOnce(secondLoad),
+ clear: jest.fn(),
+ },
+ checkNameInUse: checkNameInUse ?? jest.fn().mockResolvedValue({ count: nameInUseCount }),
+ getRawByKey: getRawByKey ?? jest.fn().mockResolvedValue(rawOrg),
+ update,
+ }
+ }
+
+ function makeContext({
+ i18n = enI18n,
+ permission = 'admin',
+ orgDS = null,
+ logActivity = jest.fn(),
+ userKey = 'user123',
+ ip = '1.2.3.4',
+ } = {}) {
+ return {
+ i18n,
+ userKey,
+ request: { ip },
+ auth: {
+ userRequired: jest.fn().mockReturnValue(BASE_USER),
+ verifiedRequired: jest.fn(),
+ checkPermission: jest.fn().mockReturnValue(permission),
+ },
+ dataSources: {
+ auditLogs: { logActivity },
+ organization: orgDS ?? makeOrgDS(),
+ },
+ validators: { cleanseInput, slugify },
+ }
+ }
+
+ describe('given a successful update', () => {
+ it('returns the updated organization on success', async () => {
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: {
+ id: "${ORG_GID}"
+ nameEN: "New English Name"
+ nameFR: "Nouveau Nom Français"
+ acronymEN: "NEN"
+ acronymFR: "NNF"
+ }) {
+ result {
+ ... on Organization { id name acronym slug }
+ ... on OrganizationError { code description }
+ }
+ }
+ }
+ `,
+ contextValue: makeContext(),
})
- })
-
- afterEach(async () => {
- await truncate()
- await drop()
- })
- describe('users permission level is super_admin', () => {
- beforeEach(async () => {
- await collections.affiliations.save({
- _from: org._id,
- _to: user._id,
- permission: 'super_admin',
- })
+ expect(response.errors).toBeUndefined()
+ expect(response.data.updateOrganization.result).toMatchObject({
+ name: RESOLVED_ORG.name,
+ acronym: RESOLVED_ORG.acronym,
+ slug: RESOLVED_ORG.slug,
})
- describe('users language is english', () => {
- describe('updating the acronym', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- acronymEN: "TEST"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
+ expect(consoleOutput).toContain(`User: user123, successfully updated org ${ORG_KEY}.`)
+ })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'TEST',
- city: 'Ottawa',
- country: 'Canada',
- name: 'Treasury Board of Canada Secretariat',
- province: 'Ontario',
- sector: 'TBS',
- zone: 'FED',
- },
- },
- },
- }
+ it('calls update with correctly merged org details', async () => {
+ const update = jest.fn()
+ const orgDS = makeOrgDS({ update })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the name', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- nameEN: "Test"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameEN: "Updated Name" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
}
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'TBS',
- city: 'Ottawa',
- country: 'Canada',
- name: 'Test',
- province: 'Ontario',
- sector: 'TBS',
- zone: 'FED',
- },
- },
- },
}
+ }
+ `,
+ contextValue: makeContext({ orgDS }),
+ })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the zone', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- zoneEN: "New Zone"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
+ expect(update).toHaveBeenCalledWith(
+ expect.objectContaining({
+ orgKey: ORG_KEY,
+ updatedOrgDetails: expect.objectContaining({
+ orgDetails: expect.objectContaining({
+ en: expect.objectContaining({ name: 'Updated Name' }),
+ }),
+ }),
+ }),
+ )
+ })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'TBS',
- city: 'Ottawa',
- country: 'Canada',
- name: 'Treasury Board of Canada Secretariat',
- province: 'Ontario',
- sector: 'TBS',
- zone: 'New Zone',
- },
- },
- },
- }
+ it('preserves existing fields when only partial inputs are provided', async () => {
+ const update = jest.fn()
+ const orgDS = makeOrgDS({ update })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the sector', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- sectorEN: "New Sector"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameEN: "Only EN Updated" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
}
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'TBS',
- city: 'Ottawa',
- country: 'Canada',
- name: 'Treasury Board of Canada Secretariat',
- province: 'Ontario',
- sector: 'New Sector',
- zone: 'FED',
- },
- },
- },
}
+ }
+ `,
+ contextValue: makeContext({ orgDS }),
+ })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the country', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- countryEN: "A New Country"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
+ const { updatedOrgDetails } = update.mock.calls[0][0]
+ expect(updatedOrgDetails.orgDetails.fr.name).toBe(BASE_RAW_ORG.orgDetails.fr.name)
+ expect(updatedOrgDetails.orgDetails.en.acronym).toBe(BASE_RAW_ORG.orgDetails.en.acronym)
+ })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'TBS',
- city: 'Ottawa',
- country: 'A New Country',
- name: 'Treasury Board of Canada Secretariat',
- province: 'Ontario',
- sector: 'TBS',
- zone: 'FED',
- },
- },
- },
- }
+ it('clears byKey cache before reloading the organization', async () => {
+ const clear = jest.fn()
+ const orgDS = makeOrgDS()
+ orgDS.byKey.clear = clear
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the province', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- provinceEN: "A New Province"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameEN: "Test" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
}
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'TBS',
- city: 'Ottawa',
- country: 'Canada',
- name: 'Treasury Board of Canada Secretariat',
- province: 'A New Province',
- sector: 'TBS',
- zone: 'FED',
- },
- },
- },
}
+ }
+ `,
+ contextValue: makeContext({ orgDS }),
+ })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the city', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- cityEN: "A New City"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
+ expect(clear).toHaveBeenCalledWith(ORG_KEY)
+ })
+ })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'TBS',
- city: 'A New City',
- country: 'Canada',
- name: 'Treasury Board of Canada Secretariat',
- province: 'Ontario',
- sector: 'TBS',
- zone: 'FED',
- },
- },
- },
- }
+ describe('audit logging', () => {
+ it('logs audit activity when nameEN is changed', async () => {
+ const logActivity = jest.fn()
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating all organizational fields', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- acronymEN: "NEW_ACRONYM"
- nameEN: "New Name"
- zoneEN: "New Zone"
- sectorEN: "New Sector"
- countryEN: "New Country"
- provinceEN: "New Province"
- cityEN: "New City"
- acronymFR: "NOUVEL_ACRONYME"
- nameFR: "Nouveau nom"
- zoneFR: "Nouvelle zone"
- sectorFR: "Nouveau secteur"
- countryFR: "Nouveau pays"
- provinceFR: "Nouvelle province"
- cityFR: "Nouvelle ville"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameEN: "Brand New Name" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
}
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'NEW_ACRONYM',
- name: 'New Name',
- zone: 'New Zone',
- sector: 'New Sector',
- country: 'New Country',
- province: 'New Province',
- city: 'New City',
- },
- },
- },
}
-
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
+ }
+ `,
+ contextValue: makeContext({ logActivity }),
})
- describe('users language is french', () => {
- describe('updating the acronym', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- acronymFR: "TEST"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'TEST',
- city: 'Ottawa',
- country: 'Canada',
- name: 'Secrétariat du Conseil Trésor du Canada',
- province: 'Ontario',
- sector: 'TBS',
- zone: 'FED',
- },
- },
- },
- }
+ expect(logActivity).toHaveBeenCalledWith(
+ expect.objectContaining({
+ action: 'update',
+ target: expect.objectContaining({
+ resourceType: 'organization',
+ updatedProperties: expect.arrayContaining([
+ expect.objectContaining({
+ name: 'nameEN',
+ oldValue: BASE_RAW_ORG.orgDetails.en.name,
+ newValue: 'Brand New Name',
+ }),
+ ]),
+ }),
+ }),
+ )
+ })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the name', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- nameFR: "Test"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
+ it('logs audit activity when nameFR is changed', async () => {
+ const logActivity = jest.fn()
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'SCT',
- city: 'Ottawa',
- country: 'Canada',
- name: 'Test',
- province: 'Ontario',
- sector: 'TBS',
- zone: 'FED',
- },
- },
- },
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameFR: "Nouveau Nom" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
+ }
}
+ }
+ `,
+ contextValue: makeContext({ logActivity }),
+ })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the zone', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- zoneFR: "Secret Zone"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
+ expect(logActivity).toHaveBeenCalledWith(
+ expect.objectContaining({
+ target: expect.objectContaining({
+ updatedProperties: expect.arrayContaining([
+ expect.objectContaining({ name: 'nameFR', newValue: 'Nouveau Nom' }),
+ ]),
+ }),
+ }),
+ )
+ })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'Secret Zone',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- },
- }
+ it('logs audit activity when acronymEN is changed', async () => {
+ const logActivity = jest.fn()
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the sector', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- sectorFR: "New Sector"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" acronymEN: "NEW" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
}
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'New Sector',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- },
}
+ }
+ `,
+ contextValue: makeContext({ logActivity }),
+ })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the country', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- countryFR: "A New Country"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
+ expect(logActivity).toHaveBeenCalledWith(
+ expect.objectContaining({
+ target: expect.objectContaining({
+ updatedProperties: expect.arrayContaining([
+ expect.objectContaining({ name: 'acronymEN', newValue: 'NEW' }),
+ ]),
+ }),
+ }),
+ )
+ })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'A New Country',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- },
- }
+ it('logs audit activity when acronymFR is changed', async () => {
+ const logActivity = jest.fn()
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the province', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- provinceFR: "A New Province"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" acronymFR: "NVL" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
}
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'A New Province',
- city: 'Ottawa',
- },
- },
- },
}
+ }
+ `,
+ contextValue: makeContext({ logActivity }),
+ })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the city', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- cityFR: "A New City"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
+ expect(logActivity).toHaveBeenCalledWith(
+ expect.objectContaining({
+ target: expect.objectContaining({
+ updatedProperties: expect.arrayContaining([
+ expect.objectContaining({ name: 'acronymFR', newValue: 'NVL' }),
+ ]),
+ }),
+ }),
+ )
+ })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'SCT',
- city: 'A New City',
- country: 'Canada',
- name: 'Secrétariat du Conseil Trésor du Canada',
- province: 'Ontario',
- sector: 'TBS',
- zone: 'FED',
- },
- },
- },
- }
+ it('does not log when only zone/sector/location fields are updated', async () => {
+ const logActivity = jest.fn()
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating all organizational fields', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- acronymEN: "NEW_ACRONYM"
- nameEN: "New Name"
- zoneEN: "New Zone"
- sectorEN: "New Sector"
- countryEN: "New Country"
- provinceEN: "New Province"
- cityEN: "New City"
- acronymFR: "NOUVEL_ACRONYME"
- nameFR: "Nouveau nom"
- zoneFR: "Nouvelle zone"
- sectorFR: "Nouveau secteur"
- countryFR: "Nouveau pays"
- provinceFR: "Nouvelle province"
- cityFR: "Nouvelle ville"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" zoneEN: "NEWZONE" sectorEN: "NEWSECTOR" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
}
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'NOUVEL_ACRONYME',
- city: 'Nouvelle ville',
- country: 'Nouveau pays',
- name: 'Nouveau nom',
- province: 'Nouvelle province',
- sector: 'Nouveau secteur',
- zone: 'Nouvelle zone',
- },
- },
- },
}
-
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
+ }
+ `,
+ contextValue: makeContext({ logActivity }),
})
+
+ expect(logActivity).not.toHaveBeenCalled()
})
- describe('users permission level is admin', () => {
- beforeEach(async () => {
- await collections.affiliations.save({
- _from: org._id,
- _to: user._id,
- permission: 'admin',
- })
- })
- describe('users language is english', () => {
- describe('updating the acronym', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- acronymEN: "TEST"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'TEST',
- city: 'Ottawa',
- country: 'Canada',
- name: 'Treasury Board of Canada Secretariat',
- province: 'Ontario',
- sector: 'TBS',
- zone: 'FED',
- },
- },
- },
- }
+ it('populates initiatedBy with user key, userName, role, and IP address', async () => {
+ const logActivity = jest.fn()
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the name', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- nameEN: "Test"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameEN: "Some Name" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
}
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'TBS',
- city: 'Ottawa',
- country: 'Canada',
- name: 'Test',
- province: 'Ontario',
- sector: 'TBS',
- zone: 'FED',
- },
- },
- },
}
+ }
+ `,
+ contextValue: makeContext({ logActivity, ip: '10.0.0.1', permission: 'admin' }),
+ })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the zone', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- zoneEN: "New Zone"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
+ expect(logActivity).toHaveBeenCalledWith(
+ expect.objectContaining({
+ initiatedBy: {
+ id: BASE_USER._key,
+ userName: BASE_USER.userName,
+ role: 'admin',
+ ipAddress: '10.0.0.1',
+ },
+ }),
+ )
+ })
+ })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'TBS',
- city: 'Ottawa',
- country: 'Canada',
- name: 'Treasury Board of Canada Secretariat',
- province: 'Ontario',
- sector: 'TBS',
- zone: 'New Zone',
- },
- },
- },
- }
+ describe('super_admin exclusive fields', () => {
+ it('super_admin can set externallyManaged to true', async () => {
+ const update = jest.fn()
+ const orgDS = makeOrgDS({ update })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the sector', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- sectorEN: "New Sector"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" externallyManaged: true }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
}
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'TBS',
- city: 'Ottawa',
- country: 'Canada',
- name: 'Treasury Board of Canada Secretariat',
- province: 'Ontario',
- sector: 'New Sector',
- zone: 'FED',
- },
- },
- },
}
+ }
+ `,
+ contextValue: makeContext({ permission: 'super_admin', orgDS }),
+ })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the country', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- countryEN: "A New Country"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
+ expect(update).toHaveBeenCalledWith(
+ expect.objectContaining({
+ updatedOrgDetails: expect.objectContaining({ externallyManaged: true }),
+ }),
+ )
+ })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'TBS',
- city: 'Ottawa',
- country: 'A New Country',
- name: 'Treasury Board of Canada Secretariat',
- province: 'Ontario',
- sector: 'TBS',
- zone: 'FED',
- },
- },
- },
- }
+ it('super_admin can set externallyManaged to false', async () => {
+ const update = jest.fn()
+ const orgDS = makeOrgDS({ update })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the province', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- provinceEN: "A New Province"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" externallyManaged: false }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
}
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'TBS',
- city: 'Ottawa',
- country: 'Canada',
- name: 'Treasury Board of Canada Secretariat',
- province: 'A New Province',
- sector: 'TBS',
- zone: 'FED',
- },
- },
- },
}
+ }
+ `,
+ contextValue: makeContext({ permission: 'super_admin', orgDS }),
+ })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the city', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- cityEN: "A New City"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
+ expect(update).toHaveBeenCalledWith(
+ expect.objectContaining({
+ updatedOrgDetails: expect.objectContaining({ externallyManaged: false }),
+ }),
+ )
+ })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'TBS',
- city: 'A New City',
- country: 'Canada',
- name: 'Treasury Board of Canada Secretariat',
- province: 'Ontario',
- sector: 'TBS',
- zone: 'FED',
- },
- },
- },
- }
+ it('admin cannot set externallyManaged — field is omitted from update payload', async () => {
+ const update = jest.fn()
+ const orgDS = makeOrgDS({ update })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating all organizational fields', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- acronymEN: "NEW_ACRONYM"
- nameEN: "New Name"
- zoneEN: "New Zone"
- sectorEN: "New Sector"
- countryEN: "New Country"
- provinceEN: "New Province"
- cityEN: "New City"
- acronymFR: "NOUVEL_ACRONYME"
- nameFR: "Nouveau nom"
- zoneFR: "Nouvelle zone"
- sectorFR: "Nouveau secteur"
- countryFR: "Nouveau pays"
- provinceFR: "Nouvelle province"
- cityFR: "Nouvelle ville"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" externallyManaged: true }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
}
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'en' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'NEW_ACRONYM',
- name: 'New Name',
- zone: 'New Zone',
- sector: 'New Sector',
- country: 'New Country',
- province: 'New Province',
- city: 'New City',
- },
- },
- },
}
-
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
+ }
+ `,
+ contextValue: makeContext({ permission: 'admin', orgDS }),
})
- describe('users language is french', () => {
- describe('updating the acronym', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- acronymFR: "TEST"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'TEST',
- city: 'Ottawa',
- country: 'Canada',
- name: 'Secrétariat du Conseil Trésor du Canada',
- province: 'Ontario',
- sector: 'TBS',
- zone: 'FED',
- },
- },
- },
- }
+ const { updatedOrgDetails } = update.mock.calls[0][0]
+ expect(updatedOrgDetails).not.toHaveProperty('externallyManaged')
+ })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the name', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- nameFR: "Test"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
+ it('externallyManaged omitted from input is never set even for super_admin', async () => {
+ const update = jest.fn()
+ const orgDS = makeOrgDS({ update })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'SCT',
- city: 'Ottawa',
- country: 'Canada',
- name: 'Test',
- province: 'Ontario',
- sector: 'TBS',
- zone: 'FED',
- },
- },
- },
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameEN: "No Managed Field" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
+ }
}
+ }
+ `,
+ contextValue: makeContext({ permission: 'super_admin', orgDS }),
+ })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the zone', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- zoneFR: "Secret Zone"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
+ const { updatedOrgDetails } = update.mock.calls[0][0]
+ expect(updatedOrgDetails).not.toHaveProperty('externallyManaged')
+ })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'Secret Zone',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- },
- }
+ it('super_admin can update externalId', async () => {
+ const update = jest.fn()
+ const orgDS = makeOrgDS({ update })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the sector', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- sectorFR: "New Sector"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" externalId: "new-ext-id" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
}
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'New Sector',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- },
}
+ }
+ `,
+ contextValue: makeContext({ permission: 'super_admin', orgDS }),
+ })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the country', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- countryFR: "A New Country"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
+ expect(update).toHaveBeenCalledWith(
+ expect.objectContaining({
+ updatedOrgDetails: expect.objectContaining({ externalId: 'new-ext-id' }),
+ }),
+ )
+ })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'A New Country',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- },
- }
+ it('admin cannot update externalId — field is omitted from update payload', async () => {
+ const update = jest.fn()
+ const orgDS = makeOrgDS({ update })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the province', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- provinceFR: "A New Province"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" externalId: "should-be-ignored" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
}
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'A New Province',
- city: 'Ottawa',
- },
- },
- },
}
+ }
+ `,
+ contextValue: makeContext({ permission: 'admin', orgDS }),
+ })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating the city', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- cityFR: "A New City"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
+ const { updatedOrgDetails } = update.mock.calls[0][0]
+ expect(updatedOrgDetails).not.toHaveProperty('externalId')
+ })
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'SCT',
- city: 'A New City',
- country: 'Canada',
- name: 'Secrétariat du Conseil Trésor du Canada',
- province: 'Ontario',
- sector: 'TBS',
- zone: 'FED',
- },
- },
- },
- }
+ it('super_admin falls back to existing externalId when none is provided', async () => {
+ const update = jest.fn()
+ const orgDS = makeOrgDS({ update })
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
- describe('updating all organizational fields', () => {
- it('returns the updated organization', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', org._key)}"
- acronymEN: "NEW_ACRONYM"
- nameEN: "New Name"
- zoneEN: "New Zone"
- sectorEN: "New Sector"
- countryEN: "New Country"
- provinceEN: "New Province"
- cityEN: "New City"
- acronymFR: "NOUVEL_ACRONYME"
- nameFR: "Nouveau nom"
- zoneFR: "Nouvelle zone"
- sectorFR: "Nouveau secteur"
- countryFR: "Nouveau pays"
- provinceFR: "Nouvelle province"
- cityFR: "Nouvelle ville"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameEN: "Some Name" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
}
- `,
- rootValue: null,
- contextValue: {
- query,
- collections: collectionNames,
- transaction,
- userKey: user._key,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: checkPermission({
- userKey: user._key,
- query,
- }),
- userRequired: userRequired({
- userKey: user._key,
- loadUserByKey: loadUserByKey({ query }),
- }),
- verifiedRequired: verifiedRequired({}),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: loadOrgByKey({ query, language: 'fr' }),
- loadUserByKey: loadUserByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- updateOrganization: {
- result: {
- acronym: 'NOUVEL_ACRONYME',
- city: 'Nouvelle ville',
- country: 'Nouveau pays',
- name: 'Nouveau nom',
- province: 'Nouvelle province',
- sector: 'Nouveau secteur',
- zone: 'Nouvelle zone',
- },
- },
- },
}
-
- expect(response).toEqual(expectedResponse)
- expect(consoleOutput).toEqual([`User: ${user._key}, successfully updated org ${org._key}.`])
- })
- })
+ }
+ `,
+ contextValue: makeContext({ permission: 'super_admin', orgDS }),
})
+
+ const { updatedOrgDetails } = update.mock.calls[0][0]
+ expect(updatedOrgDetails.externalId).toBe(BASE_RAW_ORG.externalId)
})
})
- describe('given an unsuccessful organization update', () => {
- let i18n
- describe('users language is set to english', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('organization cannot be found', () => {
- describe('organization does not exist in database', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization(
- input: { id: "${toGlobalId('organization', 1)}", cityEN: "A New City" }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
- const error = {
- data: {
- updateOrganization: {
- result: {
- code: 400,
- description: 'Unable to update unknown organization.',
- },
- },
- },
+ describe('error: unknown organization', () => {
+ it('returns code 400 with correct message (EN) and logs a warning', async () => {
+ const orgDS = makeOrgDS({ firstLoad: undefined })
+
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameEN: "Whatever" }) {
+ result {
+ ... on OrganizationError { code description }
+ ... on Organization { id }
+ }
}
+ }
+ `,
+ contextValue: makeContext({ orgDS }),
+ })
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to update organization: 1, however no organizations is associated with that id.`,
- ])
- })
- })
+ expect(response.errors).toBeUndefined()
+ expect(response.data.updateOrganization.result).toEqual({
+ code: 400,
+ description: 'Unable to update unknown organization.',
})
- describe('user is located in the database', () => {
- describe('user does not have the proper permissions', () => {
- describe('user has user level permission', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', 123)}"
- cityEN: "A New City"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('user'),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({ _id: 'organizations/123' }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
+ expect(consoleOutput).toContain(
+ `User: user123 attempted to update organization: ${ORG_KEY}, however no organizations is associated with that id.`,
+ )
+ })
+
+ it('returns a translated 400 error (FR)', async () => {
+ const orgDS = makeOrgDS({ firstLoad: undefined })
- const error = {
- data: {
- updateOrganization: {
- result: {
- code: 403,
- description:
- 'Permission Denied: Please contact organization admin for help with updating organization.',
- },
- },
- },
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameEN: "Whatever" }) {
+ result {
+ ... on OrganizationError { code description }
+ ... on Organization { id }
}
+ }
+ }
+ `,
+ contextValue: makeContext({ i18n: frI18n, orgDS }),
+ })
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to update organization 123, however they do not have the correct permission level. Permission: user`,
- ])
- })
- })
- describe('user does not belong to that organization', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', 123)}"
- cityEN: "A New City"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue(undefined),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({ _id: 'organizations/123' }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
+ expect(response.data.updateOrganization.result.code).toBe(400)
+ expect(response.data.updateOrganization.result.description).not.toBe('Unable to update unknown organization.')
+ })
+ })
- const error = {
- data: {
- updateOrganization: {
- result: {
- code: 403,
- description:
- 'Permission Denied: Please contact organization admin for help with updating organization.',
- },
- },
- },
+ describe('error: insufficient permission', () => {
+ it('returns code 403 with correct message for user role (EN) and logs an error', async () => {
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameEN: "Whatever" }) {
+ result {
+ ... on OrganizationError { code description }
+ ... on Organization { id }
}
+ }
+ }
+ `,
+ contextValue: makeContext({ permission: 'user' }),
+ })
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to update organization 123, however they do not have the correct permission level. Permission: undefined`,
- ])
- })
- })
- })
+ expect(response.errors).toBeUndefined()
+ expect(response.data.updateOrganization.result).toEqual({
+ code: 403,
+ description: 'Permission Denied: Please contact organization admin for help with updating organization.',
})
- describe('organization name is already in use', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization(
- input: {
- id: "${toGlobalId('organization', 123)}",
- nameEN: "Treasury Board of Canada Secretariat"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockReturnValue({ count: 1 }),
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- name: 'Treasury Board of Canada Secretariat',
- _key: 123,
- }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
+ expect(consoleOutput).toContain(
+ `User: user123 attempted to update organization ${ORG_KEY}, however they do not have the correct permission level. Permission: user`,
+ )
+ })
- const error = {
- data: {
- updateOrganization: {
- result: {
- code: 400,
- description: 'Organization name already in use, please choose another and try again.',
- },
- },
- },
+ it('returns a translated 403 error for user role (FR)', async () => {
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameEN: "Whatever" }) {
+ result {
+ ... on OrganizationError { code description }
+ ... on Organization { id }
+ }
+ }
}
-
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to change the name of org: 123 however it is already in use.`,
- ])
- })
+ `,
+ contextValue: makeContext({ i18n: frI18n, permission: 'user' }),
})
- describe('cursor error occurs', () => {
- describe('when gathering comparison org details', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization(
- input: {
- id: "${toGlobalId('organization', 123)}",
- cityEN: "A New City"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockReturnValue({
- next() {
- throw new Error('Database error occurred.')
- },
- }),
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- name: 'Treasury Board of Canada Secretariat',
- _key: 123,
- }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
- const error = [new GraphQLError('Unable to update organization. Please try again.')]
+ expect(response.data.updateOrganization.result.code).toBe(403)
+ expect(response.data.updateOrganization.result.description).not.toBe(
+ 'Permission Denied: Please contact organization admin for help with updating organization.',
+ )
+ })
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Cursor error occurred while retrieving org: 123 for update, err: Error: Database error occurred.`,
- ])
- })
- })
+ it('returns code 403 for undefined permission (no org affiliation)', async () => {
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameEN: "Whatever" }) {
+ result {
+ ... on OrganizationError { code description }
+ ... on Organization { id }
+ }
+ }
+ }
+ `,
+ contextValue: makeContext({ permission: null }),
})
- describe('database error occurs', () => {
- describe('when gathering comparison org details', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization(
- input: {
- id: "${toGlobalId('organization', 123)}",
- cityEN: "A New City"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockRejectedValue(new Error('Database error occurred.')),
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- name: 'Treasury Board of Canada Secretariat',
- _key: 123,
- }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Unable to update organization. Please try again.')]
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Database error occurred while retrieving org: 123 for update, err: Error: Database error occurred.`,
- ])
- })
- })
- describe('when checking to see if orgName is already in use', () => {
- it('throws an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization(
- input: {
- id: "${toGlobalId('organization', 123)}",
- nameEN: "Treasury Board of Canada Secretariat"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockRejectedValue(new Error('Database error occurred.')),
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- name: 'Treasury Board of Canada Secretariat',
- _key: 123,
- }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
+ expect(response.data.updateOrganization.result.code).toBe(403)
+ })
+ })
- const error = [new GraphQLError('Unable to update organization. Please try again.')]
+ describe('error: organization name already in use', () => {
+ it('returns code 400 with correct message (EN) and logs an error', async () => {
+ const orgDS = makeOrgDS({ nameInUseCount: 1 })
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Database error occurred during name check when user: 123 attempted to update org: 123, Error: Database error occurred.`,
- ])
- })
- })
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameEN: "Taken Name" }) {
+ result {
+ ... on OrganizationError { code description }
+ ... on Organization { id }
+ }
+ }
+ }
+ `,
+ contextValue: makeContext({ orgDS }),
})
- describe('transaction error occurs', () => {
- describe('when updating/inserting new org details', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization(
- input: {
- id: "${toGlobalId('organization', 123)}",
- cityEN: "A New City"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValue({
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- }),
- }),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- name: 'Treasury Board of Canada Secretariat',
- _key: 123,
- }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Unable to update organization. Please try again.')]
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction error occurred while upserting org: 123, err: Error: trx step error`,
- ])
- })
- })
- describe('when committing transaction', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization(
- input: {
- id: "${toGlobalId('organization', 123)}",
- cityEN: "A New City"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValue({
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- }),
- }),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn(),
- commit: jest.fn().mockRejectedValue(new Error('trx commit error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- name: 'Treasury Board of Canada Secretariat',
- _key: 123,
- }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Unable to update organization. Please try again.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction error occurred while committing org: 123, err: Error: trx commit error`,
- ])
- })
- })
+ expect(response.errors).toBeUndefined()
+ expect(response.data.updateOrganization.result).toEqual({
+ code: 400,
+ description: 'Organization name already in use, please choose another and try again.',
})
+ expect(consoleOutput).toContain(
+ `User: user123 attempted to change the name of org: ${ORG_KEY} however it is already in use.`,
+ )
})
- describe('users language is set to french', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'fr',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('organization cannot be found', () => {
- describe('organization does not exist in database', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization(
- input: { id: "${toGlobalId('organization', 1)}", cityEN: "A New City" }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
- const error = {
- data: {
- updateOrganization: {
- result: {
- code: 400,
- description: 'Impossible de mettre à jour une organisation inconnue.',
- },
- },
- },
- }
+ it('returns a translated 400 error when name conflicts (FR)', async () => {
+ const orgDS = makeOrgDS({ nameInUseCount: 1 })
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to update organization: 1, however no organizations is associated with that id.`,
- ])
- })
- })
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameEN: "Taken Name" }) {
+ result {
+ ... on OrganizationError { code description }
+ ... on Organization { id }
+ }
+ }
+ }
+ `,
+ contextValue: makeContext({ i18n: frI18n, orgDS }),
})
- describe('user is located in the database', () => {
- describe('user does not have the proper permissions', () => {
- describe('user has user level permission', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', 123)}"
- cityEN: "A New City"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('user'),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({ _id: 'organizations/123' }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
- const error = {
- data: {
- updateOrganization: {
- result: {
- code: 403,
- description:
- "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide sur la suppression des utilisateurs.",
- },
- },
- },
- }
+ expect(response.data.updateOrganization.result.code).toBe(400)
+ expect(response.data.updateOrganization.result.description).not.toBe(
+ 'Organization name already in use, please choose another and try again.',
+ )
+ })
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to update organization 123, however they do not have the correct permission level. Permission: user`,
- ])
- })
- })
- describe('user does not belong to that organization', () => {
- it('returns an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization (
- input: {
- id: "${toGlobalId('organization', 123)}"
- cityEN: "A New City"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue(undefined),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({ _id: 'organizations/123' }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
+ it('skips the name check when neither nameEN nor nameFR is provided', async () => {
+ const checkNameInUse = jest.fn()
+ const orgDS = makeOrgDS({ checkNameInUse })
- const error = {
- data: {
- updateOrganization: {
- result: {
- code: 403,
- description:
- "Permission refusée : Veuillez contacter l'administrateur de l'organisation pour obtenir de l'aide sur la suppression des utilisateurs.",
- },
- },
- },
+ await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" zoneEN: "NewZone" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
}
-
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to update organization 123, however they do not have the correct permission level. Permission: undefined`,
- ])
- })
- })
- })
- })
- describe('organization name is already in use', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization(
- input: {
- id: "${toGlobalId('organization', 123)}",
- nameEN: "Treasury Board of Canada Secretariat"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockReturnValue({ count: 1 }),
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- name: 'Treasury Board of Canada Secretariat',
- _key: 123,
- }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
-
- const error = {
- data: {
- updateOrganization: {
- result: {
- code: 400,
- description: "Le nom de l'organisation est déjà utilisé, veuillez en choisir un autre et réessayer.",
- },
- },
- },
+ }
}
-
- expect(response).toEqual(error)
- expect(consoleOutput).toEqual([
- `User: 123 attempted to change the name of org: 123 however it is already in use.`,
- ])
- })
+ `,
+ contextValue: makeContext({ orgDS }),
})
- describe('cursor error occurs', () => {
- describe('when gathering comparison org details', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization(
- input: {
- id: "${toGlobalId('organization', 123)}",
- cityEN: "A New City"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockReturnValue({
- next() {
- throw new Error('Database error occurred.')
- },
- }),
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- name: 'Treasury Board of Canada Secretariat',
- _key: 123,
- }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
- const error = [new GraphQLError("Impossible de mettre à jour l'organisation. Veuillez réessayer.")]
+ expect(checkNameInUse).not.toHaveBeenCalled()
+ })
+ })
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Cursor error occurred while retrieving org: 123 for update, err: Error: Database error occurred.`,
- ])
- })
- })
+ describe('error: data source failures', () => {
+ it('propagates error thrown by organizationDS.update', async () => {
+ const orgDS = makeOrgDS({
+ update: jest.fn().mockRejectedValue(new Error('Unable to load organization. Please try again.')),
})
- describe('database error occurs', () => {
- describe('when gathering comparison org details', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization(
- input: {
- id: "${toGlobalId('organization', 123)}",
- cityEN: "A New City"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockRejectedValue(new Error('Database error occurred.')),
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- name: 'Treasury Board of Canada Secretariat',
- _key: 123,
- }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
-
- const error = [new GraphQLError("Impossible de mettre à jour l'organisation. Veuillez réessayer.")]
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Database error occurred while retrieving org: 123 for update, err: Error: Database error occurred.`,
- ])
- })
- })
- describe('when checking to see if orgName is already in use', () => {
- it('throws an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization(
- input: {
- id: "${toGlobalId('organization', 123)}",
- nameEN: "Treasury Board of Canada Secretariat"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockRejectedValue(new Error('Database error occurred.')),
- collections: collectionNames,
- transaction,
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- name: 'Treasury Board of Canada Secretariat',
- _key: 123,
- }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameEN: "Fail Update" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
+ }
+ }
+ }
+ `,
+ contextValue: makeContext({ orgDS }),
+ })
- const error = [new GraphQLError("Impossible de mettre à jour l'organisation. Veuillez réessayer.")]
+ expect(response.errors).toBeDefined()
+ expect(response.errors[0].message).toBe('Unable to load organization. Please try again.')
+ })
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Database error occurred during name check when user: 123 attempted to update org: 123, Error: Database error occurred.`,
- ])
- })
- })
+ it('propagates error thrown by organizationDS.checkNameInUse', async () => {
+ const orgDS = makeOrgDS({
+ checkNameInUse: jest.fn().mockRejectedValue(new Error('Unable to update organization. Please try again.')),
})
- describe('transaction error occurs', () => {
- describe('when updating/inserting new org details', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization(
- input: {
- id: "${toGlobalId('organization', 123)}",
- cityEN: "A New City"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValue({
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- }),
- }),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- name: 'Treasury Board of Canada Secretariat',
- _key: 123,
- }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
- const error = [new GraphQLError("Impossible de mettre à jour l'organisation. Veuillez réessayer.")]
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" nameEN: "Fail Check" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
+ }
+ }
+ }
+ `,
+ contextValue: makeContext({ orgDS }),
+ })
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction error occurred while upserting org: 123, err: Error: trx step error`,
- ])
- })
- })
- describe('when committing transaction', () => {
- it('returns an error', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- updateOrganization(
- input: {
- id: "${toGlobalId('organization', 123)}",
- cityEN: "A New City"
- }
- ) {
- result {
- ... on Organization {
- acronym
- name
- zone
- sector
- country
- province
- city
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query: jest.fn().mockReturnValue({
- next: jest.fn().mockReturnValue({
- orgDetails: {
- en: {
- slug: 'treasury-board-secretariat',
- acronym: 'TBS',
- name: 'Treasury Board of Canada Secretariat',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- fr: {
- slug: 'secretariat-conseil-tresor',
- acronym: 'SCT',
- name: 'Secrétariat du Conseil Trésor du Canada',
- zone: 'FED',
- sector: 'TBS',
- country: 'Canada',
- province: 'Ontario',
- city: 'Ottawa',
- },
- },
- }),
- }),
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn(),
- commit: jest.fn().mockRejectedValue(new Error('trx commit error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- request: { ip: '127.0.0.1' },
- auth: {
- checkPermission: jest.fn().mockReturnValue('admin'),
- userRequired: jest.fn().mockReturnValue({ _key: 123 }),
- verifiedRequired: jest.fn(),
- },
- validators: {
- cleanseInput,
- slugify,
- },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- name: 'Treasury Board of Canada Secretariat',
- _key: 123,
- }),
- },
- loadUserByKey: {
- load: jest.fn(),
- },
- },
- },
- })
+ expect(response.errors).toBeDefined()
+ expect(response.errors[0].message).toBe('Unable to update organization. Please try again.')
+ })
- const error = [new GraphQLError("Impossible de mettre à jour l'organisation. Veuillez réessayer.")]
+ it('propagates error thrown by organizationDS.getRawByKey', async () => {
+ const orgDS = makeOrgDS({
+ getRawByKey: jest.fn().mockRejectedValue(new Error('Unable to load organization. Please try again.')),
+ })
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([
- `Transaction error occurred while committing org: 123, err: Error: trx commit error`,
- ])
- })
- })
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ updateOrganization(input: { id: "${ORG_GID}" zoneEN: "FED" }) {
+ result {
+ ... on Organization { id }
+ ... on OrganizationError { code description }
+ }
+ }
+ }
+ `,
+ contextValue: makeContext({ orgDS }),
})
+
+ expect(response.errors).toBeDefined()
+ expect(response.errors[0].message).toBe('Unable to load organization. Please try again.')
})
})
})
diff --git a/api/src/organization/mutations/__tests__/verify-organization.test.js b/api/src/organization/mutations/__tests__/verify-organization.test.js
index b70f6f3cc0..86a37edfa5 100644
--- a/api/src/organization/mutations/__tests__/verify-organization.test.js
+++ b/api/src/organization/mutations/__tests__/verify-organization.test.js
@@ -11,8 +11,8 @@ import frenchMessages from '../../../locale/fr/messages'
import { cleanseInput } from '../../../validators'
import { checkPermission, userRequired, verifiedRequired } from '../../../auth'
import { loadUserByKey } from '../../../user/loaders'
-import { loadOrgByKey } from '../../loaders'
import { loadDomainByKey } from '../../../domain/loaders'
+import { OrganizationDataSource } from '../../data-source'
import dbschema from '../../../../database.json'
import { collectionNames } from '../../../collection-names'
@@ -172,13 +172,18 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: loadOrgByKey({
+ dataSources: {
+ organization: new OrganizationDataSource({
query,
- language: 'en',
userKey: user._key,
i18n,
+ language: 'en',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
}),
+ },
+ loaders: {
loadUserByKey: loadUserByKey({
query,
userKey: user._key,
@@ -204,13 +209,8 @@ describe('removing an organization', () => {
expect(response).toEqual(expectedResponse)
expect(consoleOutput).toEqual([`User: ${user._key}, successfully verified org: ${org._key}.`])
- const orgLoader = loadOrgByKey({
- query,
- language: 'en',
- userKey: user._key,
- i18n,
- })
- const verifiedOrg = await orgLoader.load(org._key)
+ const orgDS = new OrganizationDataSource({ query, userKey: user._key, i18n, language: 'en', cleanseInput, transaction, collections: collectionNames })
+ const verifiedOrg = await orgDS.byKey.load(org._key)
expect(verifiedOrg.verified).toEqual(true)
const domainLoader = loadDomainByKey({ query, userKey: user._key, i18n })
@@ -286,13 +286,18 @@ describe('removing an organization', () => {
verifiedRequired: verifiedRequired({}),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: loadOrgByKey({
+ dataSources: {
+ organization: new OrganizationDataSource({
query,
- language: 'fr',
userKey: user._key,
i18n,
+ language: 'fr',
+ cleanseInput,
+ transaction,
+ collections: collectionNames,
}),
+ },
+ loaders: {
loadUserByKey: loadUserByKey({
query,
userKey: user._key,
@@ -318,13 +323,8 @@ describe('removing an organization', () => {
expect(response).toEqual(expectedResponse)
expect(consoleOutput).toEqual([`User: ${user._key}, successfully verified org: ${org._key}.`])
- const orgLoader = loadOrgByKey({
- query,
- language: 'fr',
- userKey: user._key,
- i18n,
- })
- const verifiedOrg = await orgLoader.load(org._key)
+ const orgDS = new OrganizationDataSource({ query, userKey: user._key, i18n, language: 'fr', cleanseInput, transaction, collections: collectionNames })
+ const verifiedOrg = await orgDS.byKey.load(org._key)
expect(verifiedOrg.verified).toEqual(true)
})
})
@@ -385,11 +385,9 @@ describe('removing an organization', () => {
verifiedRequired: jest.fn(),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
+ dataSources: { organization: { byKey: {
load: jest.fn().mockReturnValue(undefined),
- },
- },
+ } } },
},
})
@@ -450,13 +448,11 @@ describe('removing an organization', () => {
verifiedRequired: jest.fn(),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
+ dataSources: { organization: { byKey: {
load: jest.fn().mockReturnValue({
_id: 'organizations/123',
}),
- },
- },
+ } } },
},
})
@@ -517,13 +513,11 @@ describe('removing an organization', () => {
verifiedRequired: jest.fn(),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
+ dataSources: { organization: { byKey: {
load: jest.fn().mockReturnValue({
_id: 'organizations/123',
}),
- },
- },
+ } } },
},
})
@@ -585,13 +579,11 @@ describe('removing an organization', () => {
verifiedRequired: jest.fn(),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
+ dataSources: { organization: { byKey: {
load: jest.fn().mockReturnValue({
verified: true,
}),
- },
- },
+ } } },
},
})
@@ -612,192 +604,55 @@ describe('removing an organization', () => {
])
})
})
- describe('transaction error occurs', () => {
- describe('when stepping transaction', () => {
- describe('when upserting org information', () => {
- it('throws an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- verifyOrganization(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- }
- ) {
- result {
- ... on OrganizationResult {
- status
- organization {
- name
- }
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
+ describe('data source error occurs', () => {
+ it('throws an error message', async () => {
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ verifyOrganization(
+ input: {
+ orgId: "${toGlobalId('organization', 123)}"
}
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue('super_admin'),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- },
- validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- verified: false,
- }),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Unable to verify organization. Please try again.')]
-
- expect(response.errors).toEqual(error)
-
- expect(consoleOutput).toEqual([
- `Transaction error occurred while upserting verified org: 123, err: Error: trx step error`,
- ])
- })
- })
- describe('when clearing owners', () => {
- it('throws an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- verifyOrganization(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- }
- ) {
- result {
- ... on OrganizationResult {
- status
- organization {
- name
- }
- }
- ... on OrganizationError {
- code
- description
- }
+ ) {
+ result {
+ ... on OrganizationResult {
+ status
+ organization {
+ name
}
}
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue('super_admin'),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- },
- validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- verified: false,
- }),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Unable to verify organization. Please try again.')]
-
- expect(response.errors).toEqual(error)
-
- expect(consoleOutput).toEqual([
- `Transaction error occurred while upserting verified org: 123, err: Error: trx step error`,
- ])
- })
- })
- })
- describe('when committing transaction', () => {
- it('throws an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- verifyOrganization(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- }
- ) {
- result {
- ... on OrganizationResult {
- status
- organization {
- name
- }
- }
- ... on OrganizationError {
- code
- description
- }
+ ... on OrganizationError {
+ code
+ description
}
}
}
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockReturnValue(),
- commit: jest.fn().mockRejectedValue(new Error('trx commit error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue('super_admin'),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- },
- validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- verified: false,
- }),
- },
+ }
+ `,
+ rootValue: null,
+ contextValue: {
+ i18n,
+ userKey: 123,
+ auth: {
+ checkPermission: jest.fn().mockReturnValue('super_admin'),
+ userRequired: jest.fn(),
+ verifiedRequired: jest.fn(),
+ },
+ validators: { cleanseInput },
+ dataSources: {
+ organization: {
+ byKey: { load: jest.fn().mockReturnValue({ verified: false, _key: 123 }) },
+ verify: jest.fn().mockRejectedValue(new Error('Unable to verify organization. Please try again.')),
},
},
- })
-
- const error = [new GraphQLError('Unable to verify organization. Please try again.')]
+ },
+ })
- expect(response.errors).toEqual(error)
+ const error = [new GraphQLError('Unable to verify organization. Please try again.')]
- expect(consoleOutput).toEqual([
- `Transaction error occurred while committing newly verified org: 123, err: Error: trx commit error`,
- ])
- })
+ expect(response.errors).toEqual(error)
+ expect(consoleOutput).toEqual([])
})
})
})
@@ -855,11 +710,9 @@ describe('removing an organization', () => {
verifiedRequired: jest.fn(),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
+ dataSources: { organization: { byKey: {
load: jest.fn().mockReturnValue(undefined),
- },
- },
+ } } },
},
})
@@ -920,13 +773,11 @@ describe('removing an organization', () => {
verifiedRequired: jest.fn(),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
+ dataSources: { organization: { byKey: {
load: jest.fn().mockReturnValue({
_id: 'organizations/123',
}),
- },
- },
+ } } },
},
})
@@ -987,13 +838,11 @@ describe('removing an organization', () => {
verifiedRequired: jest.fn(),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
+ dataSources: { organization: { byKey: {
load: jest.fn().mockReturnValue({
_id: 'organizations/123',
}),
- },
- },
+ } } },
},
})
@@ -1055,13 +904,11 @@ describe('removing an organization', () => {
verifiedRequired: jest.fn(),
},
validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
+ dataSources: { organization: { byKey: {
load: jest.fn().mockReturnValue({
verified: true,
}),
- },
- },
+ } } },
},
})
@@ -1082,192 +929,55 @@ describe('removing an organization', () => {
])
})
})
- describe('transaction error occurs', () => {
- describe('when stepping transaction', () => {
- describe('when upserting org information', () => {
- it('throws an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- verifyOrganization(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- }
- ) {
- result {
- ... on OrganizationResult {
- status
- organization {
- name
- }
- }
- ... on OrganizationError {
- code
- description
- }
- }
- }
+ describe('data source error occurs', () => {
+ it('throws an error message', async () => {
+ const response = await graphql({
+ schema,
+ source: `
+ mutation {
+ verifyOrganization(
+ input: {
+ orgId: "${toGlobalId('organization', 123)}"
}
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue('super_admin'),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- },
- validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- verified: false,
- }),
- },
- },
- },
- })
-
- const error = [new GraphQLError("Impossible de vérifier l'organisation. Veuillez réessayer.")]
-
- expect(response.errors).toEqual(error)
-
- expect(consoleOutput).toEqual([
- `Transaction error occurred while upserting verified org: 123, err: Error: trx step error`,
- ])
- })
- })
- describe('when clearing owners', () => {
- it('throws an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- verifyOrganization(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- }
- ) {
- result {
- ... on OrganizationResult {
- status
- organization {
- name
- }
- }
- ... on OrganizationError {
- code
- description
- }
+ ) {
+ result {
+ ... on OrganizationResult {
+ status
+ organization {
+ name
}
}
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockRejectedValue(new Error('trx step error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue('super_admin'),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- },
- validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- verified: false,
- }),
- },
- },
- },
- })
-
- const error = [new GraphQLError("Impossible de vérifier l'organisation. Veuillez réessayer.")]
-
- expect(response.errors).toEqual(error)
-
- expect(consoleOutput).toEqual([
- `Transaction error occurred while upserting verified org: 123, err: Error: trx step error`,
- ])
- })
- })
- })
- describe('when committing transaction', () => {
- it('throws an error message', async () => {
- const response = await graphql({
- schema,
- source: `
- mutation {
- verifyOrganization(
- input: {
- orgId: "${toGlobalId('organization', 123)}"
- }
- ) {
- result {
- ... on OrganizationResult {
- status
- organization {
- name
- }
- }
- ... on OrganizationError {
- code
- description
- }
+ ... on OrganizationError {
+ code
+ description
}
}
}
- `,
- rootValue: null,
- contextValue: {
- i18n,
- query,
- collections: collectionNames,
- transaction: jest.fn().mockReturnValue({
- step: jest.fn().mockReturnValue(),
- commit: jest.fn().mockRejectedValue(new Error('trx commit error')),
- abort: jest.fn(),
- }),
- userKey: 123,
- auth: {
- checkPermission: jest.fn().mockReturnValue('super_admin'),
- userRequired: jest.fn(),
- verifiedRequired: jest.fn(),
- },
- validators: { cleanseInput },
- loaders: {
- loadOrgByKey: {
- load: jest.fn().mockReturnValue({
- verified: false,
- }),
- },
+ }
+ `,
+ rootValue: null,
+ contextValue: {
+ i18n,
+ userKey: 123,
+ auth: {
+ checkPermission: jest.fn().mockReturnValue('super_admin'),
+ userRequired: jest.fn(),
+ verifiedRequired: jest.fn(),
+ },
+ validators: { cleanseInput },
+ dataSources: {
+ organization: {
+ byKey: { load: jest.fn().mockReturnValue({ verified: false, _key: 123 }) },
+ verify: jest.fn().mockRejectedValue(new Error("Impossible de vérifier l'organisation. Veuillez réessayer.")),
},
},
- })
-
- const error = [new GraphQLError("Impossible de vérifier l'organisation. Veuillez réessayer.")]
+ },
+ })
- expect(response.errors).toEqual(error)
+ const error = [new GraphQLError("Impossible de vérifier l'organisation. Veuillez réessayer.")]
- expect(consoleOutput).toEqual([
- `Transaction error occurred while committing newly verified org: 123, err: Error: trx commit error`,
- ])
- })
+ expect(response.errors).toEqual(error)
+ expect(consoleOutput).toEqual([])
})
})
})
diff --git a/api/src/organization/mutations/archive-organization.js b/api/src/organization/mutations/archive-organization.js
index edb7e51fd6..583fa0de54 100644
--- a/api/src/organization/mutations/archive-organization.js
+++ b/api/src/organization/mutations/archive-organization.js
@@ -3,7 +3,7 @@ import { mutationWithClientMutationId, fromGlobalId } from 'graphql-relay'
import { t } from '@lingui/macro'
import { removeOrganizationUnion } from '../unions'
-import { logActivity } from '../../audit-logs/mutations/log-activity'
+import ac from '../../access-control'
export const archiveOrganization = new mutationWithClientMutationId({
name: 'ArchiveOrganization',
@@ -25,14 +25,11 @@ export const archiveOrganization = new mutationWithClientMutationId({
args,
{
i18n,
- query,
- collections,
- transaction,
userKey,
request: { ip },
auth: { checkPermission, userRequired, verifiedRequired },
validators: { cleanseInput },
- loaders: { loadOrgByKey },
+ dataSources: { auditLogs, organization: organizationDS },
},
) => {
// Get user
@@ -44,7 +41,7 @@ export const archiveOrganization = new mutationWithClientMutationId({
const { type: _orgType, id: orgId } = fromGlobalId(cleanseInput(args.orgId))
// Get org from db
- const organization = await loadOrgByKey.load(orgId)
+ const organization = await organizationDS.byKey.load(orgId)
// Check to see if org exists
if (!organization) {
@@ -59,7 +56,7 @@ export const archiveOrganization = new mutationWithClientMutationId({
// Get users permission
const permission = await checkPermission({ orgId: organization._id })
- if (permission !== 'super_admin') {
+ if (!ac.can(permission).deleteAny('organization').granted) {
console.warn(
`User: ${userKey} attempted to archive org: ${organization._key}, however they do not have the correct permission level. Permission: ${permission}`,
)
@@ -70,103 +67,11 @@ export const archiveOrganization = new mutationWithClientMutationId({
}
}
- // Setup Trans action
- const trx = await transaction(collections)
-
- // check to see if any other orgs are using this domain
- let countCursor
- try {
- countCursor = await query`
- WITH claims, domains, organizations
- LET domainIds = (
- FOR v, e IN 1..1 OUTBOUND ${organization._id} claims
- RETURN e._to
- )
- FOR domain IN domains
- FILTER domain._id IN domainIds
- LET count = LENGTH(
- FOR v, e IN 1..1 INBOUND domain._id claims
- RETURN 1
- )
- RETURN {
- _id: domain._id,
- _key: domain._key,
- domain: domain.domain,
- count
- }
- `
- } catch (err) {
- console.error(
- `Database error occurred for user: ${userKey} while attempting to gather domain count while archiving org: ${organization._key}, ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to archive organization. Please try again.`))
- }
-
- let domainInfo
- try {
- domainInfo = await countCursor.all()
- } catch (err) {
- console.error(
- `Cursor error occurred for user: ${userKey} while attempting to gather domain count while archiving org: ${organization._key}, ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to archive organization. Please try again.`))
- }
-
- for (const domain of domainInfo) {
- if (domain.count === 1) {
- try {
- // Archive domain
- await trx.step(
- async () =>
- await query`
- WITH domains
- UPDATE { _key: ${domain._key}, archived: true } IN domains
- `,
- )
- } catch (err) {
- console.error(
- `Trx step error occurred for user: ${userKey} while attempting to archive domains while archiving org: ${organization._key}, ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to archive organization. Please try again.`))
- }
- }
- }
-
- try {
- await trx.step(
- () =>
- query`
- WITH organizations
- UPDATE { _key: ${organization._key}, verified: false } IN organizations
- `,
- )
- } catch (err) {
- console.error(
- `Trx step error occurred for user: ${userKey} while attempting to unverify while archiving org: ${organization._key}, ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to archive organization. Please try again.`))
- }
-
- try {
- await trx.commit()
- } catch (err) {
- console.error(
- `Trx commit error occurred for user: ${userKey} while attempting archive of org: ${organization._key}, ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to archive organization. Please try again.`))
- }
+ await organizationDS.archive({ organization })
console.info(`User: ${userKey} successfully archived org: ${organization._key}.`)
- await logActivity({
- transaction,
- collections,
- query,
+ await auditLogs.logActivity({
initiatedBy: {
id: user._key,
userName: user.userName,
@@ -185,8 +90,8 @@ export const archiveOrganization = new mutationWithClientMutationId({
resource: {
en: organization.name,
fr: organization.name,
- }, // name of resource being acted upon
- resourceType: 'organization', // user, org, domain
+ },
+ resourceType: 'organization',
},
})
diff --git a/api/src/organization/mutations/create-organization.js b/api/src/organization/mutations/create-organization.js
index 3af01f42cf..10c2d638e4 100644
--- a/api/src/organization/mutations/create-organization.js
+++ b/api/src/organization/mutations/create-organization.js
@@ -1,10 +1,9 @@
-import { GraphQLNonNull, GraphQLString } from 'graphql'
+import { GraphQLNonNull, GraphQLString, GraphQLBoolean } from 'graphql'
import { mutationWithClientMutationId } from 'graphql-relay'
import { t } from '@lingui/macro'
import { Acronym } from '../../scalars'
import { createOrganizationUnion } from '../unions'
-import { logActivity } from '../../audit-logs/mutations/log-activity'
export const createOrganization = new mutationWithClientMutationId({
name: 'CreateOrganization',
@@ -26,45 +25,13 @@ export const createOrganization = new mutationWithClientMutationId({
type: new GraphQLNonNull(GraphQLString),
description: 'The French name of the organization.',
},
- zoneEN: {
- type: new GraphQLNonNull(GraphQLString),
- description: 'The English translation of the zone the organization belongs to.',
- },
- zoneFR: {
- type: new GraphQLNonNull(GraphQLString),
- description: 'The English translation of the zone the organization belongs to.',
- },
- sectorEN: {
- type: new GraphQLNonNull(GraphQLString),
- description: 'The English translation of the sector the organization belongs to.',
- },
- sectorFR: {
- type: new GraphQLNonNull(GraphQLString),
- description: 'The French translation of the sector the organization belongs to.',
- },
- countryEN: {
- type: new GraphQLNonNull(GraphQLString),
- description: 'The English translation of the country the organization resides in.',
- },
- countryFR: {
- type: new GraphQLNonNull(GraphQLString),
- description: 'The French translation of the country the organization resides in.',
- },
- provinceEN: {
- type: new GraphQLNonNull(GraphQLString),
- description: 'The English translation of the province the organization resides in.',
- },
- provinceFR: {
- type: new GraphQLNonNull(GraphQLString),
- description: 'The French translation of the province the organization resides in.',
- },
- cityEN: {
- type: new GraphQLNonNull(GraphQLString),
- description: 'The English translation of the city the organization resides in.',
+ externalId: {
+ type: GraphQLString,
+ description: 'String ID used to identify the organization in an external system.',
},
- cityFR: {
- type: new GraphQLNonNull(GraphQLString),
- description: 'The French translation of the city the organization resides in.',
+ verified: {
+ type: GraphQLBoolean,
+ description: 'If the organization is verified.',
},
}),
outputFields: () => ({
@@ -79,13 +46,10 @@ export const createOrganization = new mutationWithClientMutationId({
{
i18n,
request,
- collections,
- transaction,
- query,
userKey,
request: { ip },
- auth: { userRequired, verifiedRequired },
- loaders: { loadOrgBySlug },
+ auth: { userRequired, verifiedRequired, checkSuperAdmin, superAdminRequired },
+ dataSources: { auditLogs, organization: organizationDS },
validators: { cleanseInput, slugify },
},
) => {
@@ -93,29 +57,25 @@ export const createOrganization = new mutationWithClientMutationId({
const user = await userRequired()
verifiedRequired({ user })
+ const isSuperAdmin = await checkSuperAdmin()
+
+ if (args.verified === true) {
+ superAdminRequired({ user, isSuperAdmin })
+ }
// Cleanse Input
const acronymEN = cleanseInput(args.acronymEN)
const acronymFR = cleanseInput(args.acronymFR)
const nameEN = cleanseInput(args.nameEN)
const nameFR = cleanseInput(args.nameFR)
- const zoneEN = cleanseInput(args.zoneEN)
- const zoneFR = cleanseInput(args.zoneFR)
- const sectorEN = cleanseInput(args.sectorEN)
- const sectorFR = cleanseInput(args.sectorFR)
- const countryEN = cleanseInput(args.countryEN)
- const countryFR = cleanseInput(args.countryFR)
- const provinceEN = cleanseInput(args.provinceEN)
- const provinceFR = cleanseInput(args.provinceFR)
- const cityEN = cleanseInput(args.cityEN)
- const cityFR = cleanseInput(args.cityFR)
+ const externalId = cleanseInput(args.externalId)
// Create EN and FR slugs
const slugEN = slugify(nameEN)
const slugFR = slugify(nameFR)
// Check to see if org already exists
- const [orgEN, orgFR] = await loadOrgBySlug.loadMany([slugEN, slugFR])
+ const [orgEN, orgFR] = await organizationDS.bySlug.loadMany([slugEN, slugFR])
if (typeof orgEN !== 'undefined' || typeof orgFR !== 'undefined') {
console.warn(`User: ${userKey} attempted to create an organization that already exists: ${slugEN}`)
@@ -126,101 +86,32 @@ export const createOrganization = new mutationWithClientMutationId({
}
}
- // Create new organization
const organizationDetails = {
- verified: false,
+ verified: args.verified || false,
externallyManaged: false,
+ externalId,
orgDetails: {
en: {
slug: slugEN,
acronym: acronymEN,
name: nameEN,
- zone: zoneEN,
- sector: sectorEN,
- country: countryEN,
- province: provinceEN,
- city: cityEN,
},
fr: {
slug: slugFR,
acronym: acronymFR,
name: nameFR,
- zone: zoneFR,
- sector: sectorFR,
- country: countryFR,
- province: provinceFR,
- city: cityFR,
},
},
}
- // Setup Trans action
- const trx = await transaction(collections)
-
- let cursor
- try {
- cursor = await trx.step(
- () =>
- query`
- WITH organizations
- INSERT ${organizationDetails} INTO organizations
- RETURN MERGE(
- {
- _id: NEW._id,
- _key: NEW._key,
- _rev: NEW._rev,
- _type: "organization",
- id: NEW._key,
- verified: NEW.verified,
- domainCount: 0,
- summaries: NEW.summaries
- },
- TRANSLATE(${request.language}, NEW.orgDetails)
- )
- `,
- )
- } catch (err) {
- console.error(`Transaction error occurred when user: ${userKey} was creating new organization ${slugEN}: ${err}`)
- await trx.abort()
- throw new Error(i18n._(t`Unable to create organization. Please try again.`))
- }
- const organization = await cursor.next()
-
- try {
- await trx.step(
- () =>
- query`
- WITH affiliations, organizations, users
- INSERT {
- _from: ${organization._id},
- _to: ${user._id},
- permission: "owner",
- } INTO affiliations
- `,
- )
- } catch (err) {
- console.error(
- `Transaction error occurred when inserting edge definition for user: ${userKey} to ${slugEN}: ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to create organization. Please try again.`))
- }
-
- try {
- await trx.commit()
- } catch (err) {
- console.error(
- `Transaction error occurred when committing new organization: ${slugEN} for user: ${userKey} to db: ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to create organization. Please try again.`))
- }
+ const organization = await organizationDS.create({
+ organizationDetails,
+ userId: user._id,
+ language: request.language,
+ })
console.info(`User: ${userKey} successfully created a new organization: ${slugEN}`)
- await logActivity({
- transaction,
- collections,
- query,
+ await auditLogs.logActivity({
initiatedBy: {
id: user._key,
userName: user.userName,
@@ -231,8 +122,8 @@ export const createOrganization = new mutationWithClientMutationId({
resource: {
en: organizationDetails.orgDetails.en.name,
fr: organizationDetails.orgDetails.fr.name,
- }, // name of resource being acted upon
- resourceType: 'organization', // user, org, domain
+ },
+ resourceType: 'organization',
},
})
diff --git a/api/src/organization/mutations/remove-organization.js b/api/src/organization/mutations/remove-organization.js
index 0721de84d1..114566b58b 100644
--- a/api/src/organization/mutations/remove-organization.js
+++ b/api/src/organization/mutations/remove-organization.js
@@ -3,7 +3,7 @@ import { mutationWithClientMutationId, fromGlobalId } from 'graphql-relay'
import { t } from '@lingui/macro'
import { removeOrganizationUnion } from '../unions'
-import { logActivity } from '../../audit-logs/mutations/log-activity'
+import ac from '../../access-control'
export const removeOrganization = new mutationWithClientMutationId({
name: 'RemoveOrganization',
@@ -25,14 +25,11 @@ export const removeOrganization = new mutationWithClientMutationId({
args,
{
i18n,
- query,
- collections,
- transaction,
userKey,
request: { ip },
auth: { checkPermission, userRequired, verifiedRequired },
validators: { cleanseInput },
- loaders: { loadOrgByKey },
+ dataSources: { auditLogs, organization: organizationDS },
},
) => {
// Get user
@@ -44,7 +41,7 @@ export const removeOrganization = new mutationWithClientMutationId({
const { type: _orgType, id: orgId } = fromGlobalId(cleanseInput(args.orgId))
// Get org from db
- const organization = await loadOrgByKey.load(orgId)
+ const organization = await organizationDS.byKey.load(orgId)
// Check to see if org exists
if (!organization) {
@@ -59,7 +56,7 @@ export const removeOrganization = new mutationWithClientMutationId({
// Get users permission
const permission = await checkPermission({ orgId: organization._id })
- if (['owner', 'super_admin'].includes(permission) === false) {
+ if (!ac.can(permission).deleteOwn('organization').granted) {
console.warn(
`User: ${userKey} attempted to remove org: ${organization._key}, however the user does not have permission to this organization.`,
)
@@ -73,7 +70,7 @@ export const removeOrganization = new mutationWithClientMutationId({
}
// Check to see if org is verified check, and the user is super admin
- if (organization.verified && permission !== 'super_admin') {
+ if (organization.verified && !ac.can(permission).deleteAny('organization').granted) {
console.warn(
`User: ${userKey} attempted to remove org: ${organization._key}, however the user is not a super admin.`,
)
@@ -84,319 +81,11 @@ export const removeOrganization = new mutationWithClientMutationId({
}
}
- // Setup Trans action
- const trx = await transaction(collections)
-
- // check to see if org has any dmarc summaries
- let dmarcSummaryCheckCursor
- try {
- dmarcSummaryCheckCursor = await query`
- WITH domains, ownership, dmarcSummaries, organizations
- FOR v, e IN 1..1 OUTBOUND ${organization._id} ownership
- RETURN e
- `
- } catch (err) {
- console.error(
- `Database error occurred for user: ${userKey} while attempting to get dmarcSummaryInfo while removing org: ${organization._key}, ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to remove organization. Please try again.`))
- }
-
- let dmarcSummaryCheckList
- try {
- dmarcSummaryCheckList = await dmarcSummaryCheckCursor.all()
- } catch (err) {
- console.error(
- `Cursor error occurred for user: ${userKey} while attempting to get dmarcSummaryInfo while removing org: ${organization._key}, ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to remove organization. Please try again.`))
- }
-
- for (const ownership of dmarcSummaryCheckList) {
- try {
- await trx.step(
- () => query`
- WITH ownership, organizations, domains, dmarcSummaries, domainsToDmarcSummaries
- LET dmarcSummaryEdges = (
- FOR v, e IN 1..1 OUTBOUND ${ownership._to} domainsToDmarcSummaries
- RETURN { edgeKey: e._key, dmarcSummaryId: e._to }
- )
- LET removeDmarcSummaryEdges = (
- FOR dmarcSummaryEdge IN dmarcSummaryEdges
- REMOVE dmarcSummaryEdge.edgeKey IN domainsToDmarcSummaries
- OPTIONS { waitForSync: true }
- )
- LET removeDmarcSummary = (
- FOR dmarcSummaryEdge IN dmarcSummaryEdges
- LET key = PARSE_IDENTIFIER(dmarcSummaryEdge.dmarcSummaryId).key
- REMOVE key IN dmarcSummaries
- OPTIONS { waitForSync: true }
- )
- RETURN true
- `,
- )
- } catch (err) {
- console.error(
- `Trx step error occurred for user: ${userKey} while attempting to remove dmarc summaries while removing org: ${organization._key}, ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to remove organization. Please try again.`))
- }
-
- try {
- await trx.step(
- () => query`
- WITH ownership, organizations, domains
- REMOVE ${ownership._key} IN ownership
- OPTIONS { waitForSync: true }
- `,
- )
- } catch (err) {
- console.error(
- `Trx step error occurred for user: ${userKey} while attempting to remove ownerships while removing org: ${organization._key}, ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to remove organization. Please try again.`))
- }
- }
-
- // check to see if any other orgs are using this domain
- let countCursor
- try {
- countCursor = await query`
- WITH claims, domains, organizations
- LET domainIds = (
- FOR v, e IN 1..1 OUTBOUND ${organization._id} claims
- RETURN e._to
- )
- FOR domain IN domains
- FILTER domain._id IN domainIds
- LET count = LENGTH(
- FOR v, e IN 1..1 INBOUND domain._id claims
- RETURN 1
- )
- RETURN {
- "_id": domain._id,
- "_key": domain._key,
- "domain": domain.domain,
- "count": count
- }
- `
- } catch (err) {
- console.error(
- `Database error occurred for user: ${userKey} while attempting to gather domain count while removing org: ${organization._key}, ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to remove organization. Please try again.`))
- }
-
- let domainInfo
- try {
- domainInfo = await countCursor.all()
- } catch (err) {
- console.error(
- `Cursor error occurred for user: ${userKey} while attempting to gather domain count while removing org: ${organization._key}, ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to remove organization. Please try again.`))
- }
-
- for (const domain of domainInfo) {
- if (domain.count === 1) {
- try {
- // Remove web data
- await trx.step(async () => {
- await query`
- WITH web, webScan
- FOR webV, domainsWebEdge IN 1..1 OUTBOUND ${domain._id} domainsWeb
- LET removeWebScansQuery = (
- FOR webScanV, webToWebScansV In 1..1 OUTBOUND webV._id webToWebScans
- REMOVE webScanV IN webScan
- REMOVE webToWebScansV IN webToWebScans
- OPTIONS { waitForSync: true }
- )
- REMOVE webV IN web
- REMOVE domainsWebEdge IN domainsWeb
- OPTIONS { waitForSync: true }
- `
- })
- } catch (err) {
- console.error(
- `Trx step error occurred while user: ${userKey} attempted to remove web data for ${domain.domain} in org: ${organization.slug}, ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to remove organization. Please try again.`))
- }
-
- try {
- // Remove DNS data
- await trx.step(async () => {
- await query`
- WITH dns
- FOR dnsV, domainsDNSEdge IN 1..1 OUTBOUND ${domain._id} domainsDNS
- REMOVE dnsV IN dns
- REMOVE domainsDNSEdge IN domainsDNS
- OPTIONS { waitForSync: true }
- `
- })
- } catch (err) {
- console.error(
- `Trx step error occurred while user: ${userKey} attempted to remove DNS data for ${domain.domain} in org: ${organization.slug}, error: ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to remove organization. Please try again.`))
- }
-
- // remove favourites
- try {
- await trx.step(async () => {
- await query`
- WITH favourites, domains
- FOR fav IN favourites
- FILTER fav._to == ${domain._id}
- REMOVE fav IN favourites
- `
- })
- } catch (err) {
- console.error(
- `Trx step error occurred while user: ${userKey} attempted to remove favourites for ${domain.domain} in org: ${organization.slug}, error: ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to remove organization. Please try again.`))
- }
-
- // remove DKIM selectors
- try {
- await trx.step(async () => {
- await query`
- FOR e IN domainsToSelectors
- FILTER e._from == ${domain._id}
- REMOVE e IN domainsToSelectors
- `
- })
- } catch (err) {
- console.error(
- `Trx step error occurred while user: ${userKey} attempted to remove DKIM selectors for ${domain.domain} in org: ${organization.slug}, error: ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to remove organization. Please try again.`))
- }
-
- try {
- // Remove domain
- await trx.step(
- () =>
- query`
- WITH claims, domains, organizations
- LET domainEdges = (
- FOR v, e IN 1..1 OUTBOUND ${organization._id} claims
- FILTER e._to == ${domain._id}
- RETURN { edgeKey: e._key, domainId: e._to }
- )
- LET removeDomainEdges = (
- FOR domainEdge in domainEdges
- REMOVE domainEdge.edgeKey IN claims
- OPTIONS { waitForSync: true }
- )
- LET removeDomain = (
- FOR domainEdge in domainEdges
- LET key = PARSE_IDENTIFIER(domainEdge.domainId).key
- REMOVE key IN domains
- OPTIONS { waitForSync: true }
- )
- RETURN true
- `,
- )
- } catch (err) {
- console.error(
- `Trx step error occurred for user: ${userKey} while attempting to remove domains while removing org: ${organization._key}, ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to remove organization. Please try again.`))
- }
- }
- }
-
- let orgCursor
- let compareOrg
- if (typeof organization !== 'undefined') {
- // Get all org details for comparison
- try {
- orgCursor = await query`
- WITH organizations
- FOR org IN organizations
- FILTER org._key == ${organization._key}
- RETURN org
- `
- } catch (err) {}
-
- try {
- compareOrg = await orgCursor.next()
- } catch (err) {}
- }
-
- try {
- await trx.step(
- () =>
- query`
- WITH affiliations, organizations, users
- LET userEdges = (
- FOR v, e IN 1..1 OUTBOUND ${organization._id} affiliations
- RETURN { edgeKey: e._key, userKey: e._to }
- )
- LET removeUserEdges = (
- FOR userEdge IN userEdges
- REMOVE userEdge.edgeKey IN affiliations
- OPTIONS { waitForSync: true }
- )
- RETURN true
- `,
- )
-
- await trx.step(
- () =>
- query`
- WITH organizations, organizationSummaries
- FOR summary in organizationSummaries
- FILTER summary.organization == ${organization._id}
- REMOVE summary._key IN organizationSummaries
- OPTIONS { waitForSync: true }
- `,
- )
-
- await trx.step(
- () =>
- query`
- WITH organizations
- REMOVE ${organization._key} IN organizations
- OPTIONS { waitForSync: true }
- `,
- )
- } catch (err) {
- console.error(
- `Trx step error occurred for user: ${userKey} while attempting to remove affiliations, and the org while removing org: ${organization._key}, ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to remove organization. Please try again.`))
- }
-
- try {
- await trx.commit()
- } catch (err) {
- console.error(
- `Trx commit error occurred for user: ${userKey} while attempting remove of org: ${organization._key}, ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to remove organization. Please try again.`))
- }
+ const compareOrg = await organizationDS.getRawByKey({ orgKey: organization._key })
+ await organizationDS.remove({ organization })
console.info(`User: ${userKey} successfully removed org: ${organization._key}.`)
- await logActivity({
- transaction,
- collections,
- query,
+ await auditLogs.logActivity({
initiatedBy: {
id: user._key,
userName: user.userName,
@@ -406,10 +95,10 @@ export const removeOrganization = new mutationWithClientMutationId({
action: 'delete',
target: {
resource: {
- en: compareOrg.orgDetails.en.name || organization.name,
- fr: compareOrg.orgDetails.fr.name || organization.name,
- }, // name of resource being acted upon
- resourceType: 'organization', // user, org, domain
+ en: compareOrg?.orgDetails.en.name || organization.name,
+ fr: compareOrg?.orgDetails.fr.name || organization.name,
+ },
+ resourceType: 'organization',
},
})
diff --git a/api/src/organization/mutations/update-organization.js b/api/src/organization/mutations/update-organization.js
index 6221567bcd..8e6938a2e7 100644
--- a/api/src/organization/mutations/update-organization.js
+++ b/api/src/organization/mutations/update-organization.js
@@ -4,7 +4,7 @@ import { t } from '@lingui/macro'
import { Acronym } from '../../scalars'
import { updateOrganizationUnion } from '../unions'
-import { logActivity } from '../../audit-logs/mutations/log-activity'
+import ac from '../../access-control'
export const updateOrganization = new mutationWithClientMutationId({
name: 'UpdateOrganization',
@@ -90,13 +90,10 @@ export const updateOrganization = new mutationWithClientMutationId({
args,
{
i18n,
- query,
- collections,
- transaction,
userKey,
request: { ip },
auth: { checkPermission, userRequired, verifiedRequired },
- loaders: { loadOrgByKey },
+ dataSources: { auditLogs, organization: organizationDS },
validators: { cleanseInput, slugify },
},
) => {
@@ -128,7 +125,7 @@ export const updateOrganization = new mutationWithClientMutationId({
const slugFR = slugify(nameFR)
// Check to see if org exists
- const currentOrg = await loadOrgByKey.load(orgKey)
+ const currentOrg = await organizationDS.byKey.load(orgKey)
if (typeof currentOrg === 'undefined') {
console.warn(
@@ -144,7 +141,7 @@ export const updateOrganization = new mutationWithClientMutationId({
// Check to see if user has permission
const permission = await checkPermission({ orgId: currentOrg._id })
- if (!['admin', 'owner', 'super_admin'].includes(permission)) {
+ if (!ac.can(permission).updateOwn('organization').granted) {
console.error(
`User: ${userKey} attempted to update organization ${orgKey}, however they do not have the correct permission level. Permission: ${permission}`,
)
@@ -159,21 +156,7 @@ export const updateOrganization = new mutationWithClientMutationId({
// Check to see if any orgs already have the name in use
if (nameEN !== '' || nameFR !== '') {
- let orgNameCheckCursor
- try {
- orgNameCheckCursor = await query`
- WITH organizations
- FOR org IN organizations
- FILTER (org.orgDetails.en.name == ${nameEN}) OR (org.orgDetails.fr.name == ${nameFR})
- RETURN org
- `
- } catch (err) {
- console.error(
- `Database error occurred during name check when user: ${userKey} attempted to update org: ${currentOrg._key}, ${err}`,
- )
- throw new Error(i18n._(t`Unable to update organization. Please try again.`))
- }
-
+ const orgNameCheckCursor = await organizationDS.checkNameInUse({ nameEN, nameFR })
if (orgNameCheckCursor.count > 0) {
console.error(
`User: ${userKey} attempted to change the name of org: ${currentOrg._key} however it is already in use.`,
@@ -186,27 +169,7 @@ export const updateOrganization = new mutationWithClientMutationId({
}
}
- // Get all org details for comparison
- let orgCursor
- try {
- orgCursor = await query`
- WITH organizations
- FOR org IN organizations
- FILTER org._key == ${orgKey}
- RETURN org
- `
- } catch (err) {
- console.error(`Database error occurred while retrieving org: ${orgKey} for update, err: ${err}`)
- throw new Error(i18n._(t`Unable to update organization. Please try again.`))
- }
-
- let compareOrg
- try {
- compareOrg = await orgCursor.next()
- } catch (err) {
- console.error(`Cursor error occurred while retrieving org: ${orgKey} for update, err: ${err}`)
- throw new Error(i18n._(t`Unable to update organization. Please try again.`))
- }
+ const compareOrg = await organizationDS.getRawByKey({ orgKey })
const updatedOrgDetails = {
orgDetails: {
@@ -233,45 +196,18 @@ export const updateOrganization = new mutationWithClientMutationId({
},
}
- if (permission === 'super_admin' && typeof args.externallyManaged !== 'undefined') {
+ if (ac.can(permission).updateAny('organization').granted && typeof args.externallyManaged !== 'undefined') {
updatedOrgDetails.externallyManaged = args.externallyManaged
}
- if (permission === 'super_admin') {
+ if (ac.can(permission).updateAny('organization').granted) {
updatedOrgDetails.externalId = externalId || compareOrg?.externalId
}
- // Setup Trans action
- const trx = await transaction(collections)
-
- // Upsert new org details
- try {
- await trx.step(
- async () =>
- await query`
- WITH organizations
- UPSERT { _key: ${orgKey} }
- INSERT ${updatedOrgDetails}
- UPDATE ${updatedOrgDetails}
- IN organizations
- `,
- )
- } catch (err) {
- console.error(`Transaction error occurred while upserting org: ${orgKey}, err: ${err}`)
- await trx.abort()
- throw new Error(i18n._(t`Unable to update organization. Please try again.`))
- }
-
- try {
- await trx.commit()
- } catch (err) {
- console.error(`Transaction error occurred while committing org: ${orgKey}, err: ${err}`)
- await trx.abort()
- throw new Error(i18n._(t`Unable to update organization. Please try again.`))
- }
+ await organizationDS.update({ orgKey, updatedOrgDetails })
- await loadOrgByKey.clear(orgKey)
- const organization = await loadOrgByKey.load(orgKey)
+ await organizationDS.byKey.clear(orgKey)
+ const organization = await organizationDS.byKey.load(orgKey)
console.info(`User: ${userKey}, successfully updated org ${orgKey}.`)
@@ -305,10 +241,7 @@ export const updateOrganization = new mutationWithClientMutationId({
})
}
if (updatedProperties.length > 0) {
- await logActivity({
- transaction,
- collections,
- query,
+ await auditLogs.logActivity({
initiatedBy: {
id: user._key,
userName: user.userName,
@@ -321,7 +254,7 @@ export const updateOrganization = new mutationWithClientMutationId({
en: compareOrg.orgDetails.en.name,
fr: compareOrg.orgDetails.fr.name,
},
- resourceType: 'organization', // user, org, domain
+ resourceType: 'organization',
updatedProperties,
},
})
diff --git a/api/src/organization/mutations/verify-organization.js b/api/src/organization/mutations/verify-organization.js
index a09f64d886..dbb2bb2530 100644
--- a/api/src/organization/mutations/verify-organization.js
+++ b/api/src/organization/mutations/verify-organization.js
@@ -24,12 +24,9 @@ export const verifyOrganization = new mutationWithClientMutationId({
args,
{
i18n,
- query,
- collections,
- transaction,
userKey,
auth: { checkPermission, userRequired, verifiedRequired },
- loaders: { loadOrgByKey },
+ dataSources: { organization: organizationDS },
validators: { cleanseInput },
},
) => {
@@ -41,7 +38,7 @@ export const verifyOrganization = new mutationWithClientMutationId({
const { id: orgKey } = fromGlobalId(cleanseInput(args.orgId))
// Check to see if org exists
- const currentOrg = await loadOrgByKey.load(orgKey)
+ const currentOrg = await organizationDS.byKey.load(orgKey)
if (typeof currentOrg === 'undefined') {
console.warn(
@@ -82,54 +79,9 @@ export const verifyOrganization = new mutationWithClientMutationId({
}
}
- // Set org to verified
currentOrg.verified = true
- // Setup Trans action
- const trx = await transaction(collections)
-
- // Upsert new org details
- try {
- await trx.step(
- () =>
- query`
- WITH organizations
- UPSERT { _key: ${orgKey} }
- INSERT ${currentOrg}
- UPDATE ${currentOrg}
- IN organizations
- `,
- )
- } catch (err) {
- console.error(`Transaction error occurred while upserting verified org: ${orgKey}, err: ${err}`)
- await trx.abort()
- throw new Error(i18n._(t`Unable to verify organization. Please try again.`))
- }
-
- // unarchive all archived affiliated domains
- try {
- await trx.step(
- () =>
- query`
- WITH domains, claims
- FOR v, e IN 1..1 OUTBOUND ${currentOrg._id} claims
- FILTER v.archived == true
- UPDATE v WITH { archived: false } IN domains
- `,
- )
- } catch (err) {
- console.error(`Transaction error occurred while unarchiving affiliated domains for org: ${orgKey}, err: ${err}`)
- await trx.abort()
- throw new Error(i18n._(t`Unable to verify organization. Please try again.`))
- }
-
- try {
- await trx.commit()
- } catch (err) {
- console.error(`Transaction error occurred while committing newly verified org: ${orgKey}, err: ${err}`)
- await trx.abort()
- throw new Error(i18n._(t`Unable to verify organization. Please try again.`))
- }
+ await organizationDS.verify({ currentOrg })
console.info(`User: ${userKey}, successfully verified org: ${orgKey}.`)
diff --git a/api/src/organization/objects/__tests__/organization.test.js b/api/src/organization/objects/__tests__/organization.test.js
index 871611b23b..b88914a82f 100644
--- a/api/src/organization/objects/__tests__/organization.test.js
+++ b/api/src/organization/objects/__tests__/organization.test.js
@@ -213,7 +213,6 @@ describe('given the organization object', () => {
describe('testing the domains resolver', () => {
it('returns the resolved value', async () => {
const demoType = organizationType.getFields()
- const checkPermission = jest.fn().mockReturnValue('user')
const expectedResult = {
edges: [
@@ -243,7 +242,9 @@ describe('given the organization object', () => {
{ _id: 'organizations/1' },
{ first: 1 },
{
- auth: { checkPermission },
+ dataSources: {
+ auth: { permissionByOrgId: { load: jest.fn().mockResolvedValue('user') } },
+ },
loaders: {
loadDomainConnectionsByOrgId: jest.fn().mockReturnValue(expectedResult),
},
@@ -257,8 +258,6 @@ describe('given the organization object', () => {
it('returns the resolved value', async () => {
const demoType = organizationType.getFields()
- const checkPermission = jest.fn().mockReturnValue('admin')
-
const expectedResults = {
edges: [
{
@@ -291,7 +290,11 @@ describe('given the organization object', () => {
{ _id: 'organizations/1' },
{ first: 5 },
{
- auth: { checkPermission },
+ i18n,
+ auth: { loginRequiredBool: true },
+ dataSources: {
+ auth: { permissionByOrgId: { load: jest.fn().mockResolvedValue('admin') } },
+ },
loaders: {
loadAffiliationConnectionsByOrgId: jest.fn().mockReturnValue(expectedResults),
},
@@ -319,15 +322,16 @@ describe('given the organization object', () => {
it('returns the resolved value', async () => {
const demoType = organizationType.getFields()
- const checkPermission = jest.fn().mockReturnValue('user')
-
try {
await demoType.affiliations.resolve(
{ _id: '1' },
{ first: 5 },
{
i18n,
- auth: { checkPermission },
+ auth: { loginRequiredBool: true },
+ dataSources: {
+ auth: { permissionByOrgId: { load: jest.fn().mockResolvedValue('user') } },
+ },
loaders: { loadAffiliationConnectionsByOrgId: jest.fn() },
},
)
@@ -356,15 +360,16 @@ describe('given the organization object', () => {
it('returns the resolved value', async () => {
const demoType = organizationType.getFields()
- const checkPermission = jest.fn().mockReturnValue('user')
-
try {
await demoType.affiliations.resolve(
{ _id: '1' },
{ first: 5 },
{
i18n,
- auth: { checkPermission },
+ auth: { loginRequiredBool: true },
+ dataSources: {
+ auth: { permissionByOrgId: { load: jest.fn().mockResolvedValue('user') } },
+ },
loaders: { loadAffiliationConnectionsByOrgId: jest.fn() },
},
)
diff --git a/api/src/organization/objects/organization-summary.js b/api/src/organization/objects/organization-summary.js
index 793acc5ea0..dbeaa82489 100644
--- a/api/src/organization/objects/organization-summary.js
+++ b/api/src/organization/objects/organization-summary.js
@@ -89,17 +89,17 @@ export const organizationSummaryType = new GraphQLObjectType({
dmarcPhase: {
type: categorizedSummaryType,
description: 'Summary based on DMARC phases for a given organization.',
- resolve: ({ dmarc_phase }, _) => {
+ resolve: ({ dmarc_phase: dmarcPhase }, _) => {
const categories = [
- createCategory('assess', dmarc_phase.assess, dmarc_phase.total),
- createCategory('deploy', dmarc_phase.deploy, dmarc_phase.total),
- createCategory('enforce', dmarc_phase.enforce, dmarc_phase.total),
- createCategory('maintain', dmarc_phase.maintain, dmarc_phase.total),
+ createCategory('assess', dmarcPhase.assess, dmarcPhase.total),
+ createCategory('deploy', dmarcPhase.deploy, dmarcPhase.total),
+ createCategory('enforce', dmarcPhase.enforce, dmarcPhase.total),
+ createCategory('maintain', dmarcPhase.maintain, dmarcPhase.total),
]
return {
categories,
- total: dmarc_phase.total,
+ total: dmarcPhase.total,
}
},
},
@@ -118,15 +118,15 @@ export const organizationSummaryType = new GraphQLObjectType({
webConnections: {
type: categorizedSummaryType,
description: 'Summary based on HTTPS and HSTS scan results for a given organization.',
- resolve: ({ web_connections }, _) => {
+ resolve: ({ web_connections: webConnections }, _) => {
const categories = [
- createCategory('pass', web_connections.pass, web_connections.total),
- createCategory('fail', web_connections.fail, web_connections.total),
+ createCategory('pass', webConnections.pass, webConnections.total),
+ createCategory('fail', webConnections.fail, webConnections.total),
]
return {
categories,
- total: web_connections.total,
+ total: webConnections.total,
}
},
},
@@ -167,20 +167,17 @@ export const organizationSummaryType = new GraphQLObjectType({
},
},
resolve: async (
- { negative_tags },
+ { negative_tags: negativeTags },
args,
- {
- auth: { loginRequiredBool, userRequired, verifiedRequired },
- loaders: { loadGuidanceTagSummaryConnectionsByTagId },
- },
+ { auth: { loginRequiredBool, userRequired, verifiedRequired }, dataSources: { guidanceTag } },
) => {
if (loginRequiredBool) {
const user = await userRequired()
verifiedRequired({ user })
}
- const guidanceTags = await loadGuidanceTagSummaryConnectionsByTagId({
- guidanceTags: negative_tags,
+ const guidanceTags = await guidanceTag.summaryConnectionsByTagId({
+ guidanceTags: negativeTags,
...args,
})
return guidanceTags
diff --git a/api/src/organization/objects/organization.js b/api/src/organization/objects/organization.js
index b127dbc7ec..9dc814967b 100644
--- a/api/src/organization/objects/organization.js
+++ b/api/src/organization/objects/organization.js
@@ -9,9 +9,9 @@ import { affiliationUserOrder } from '../../affiliation/inputs'
import { affiliationConnection } from '../../affiliation/objects'
import { domainOrder, domainFilter } from '../../domain/inputs'
import { domainConnection } from '../../domain/objects'
-import { logActivity } from '../../audit-logs'
import { OrderDirection } from '../../enums'
import { tagType } from '../../tags/objects'
+import ac from '../../access-control'
export const organizationType = new GraphQLObjectType({
name: 'Organization',
@@ -141,7 +141,7 @@ export const organizationType = new GraphQLObjectType({
{
userKey,
auth: { userRequired, loginRequiredBool, verifiedRequired },
- loaders: { loadOrganizationSummariesByPeriod },
+ dataSources: { organization: organizationDS },
},
) => {
if (loginRequiredBool) {
@@ -149,7 +149,7 @@ export const organizationType = new GraphQLObjectType({
verifiedRequired({ user })
}
- const historicalSummaries = await loadOrganizationSummariesByPeriod({
+ const historicalSummaries = await organizationDS.summariesByPeriod({
orgId: _id,
...args,
})
@@ -179,26 +179,23 @@ export const organizationType = new GraphQLObjectType({
{
i18n,
userKey,
- query,
- transaction,
- collections,
request: { ip },
- auth: { checkPermission, userRequired, verifiedRequired },
- loaders: { loadOrganizationDomainStatuses },
+ auth: { userRequired, verifiedRequired },
+ dataSources: { auth: authDS, auditLogs, organization: organizationDS },
},
) => {
const user = await userRequired()
verifiedRequired({ user })
- const permission = await checkPermission({ orgId: _id })
- if (!['user', 'admin', 'owner', 'super_admin'].includes(permission)) {
+ const permission = await authDS.permissionByOrgId.load(_id)
+ if (!ac.can(permission).createOwn('csv').granted) {
console.error(
`User "${userKey}" attempted to retrieve CSV output for organization "${_id}". Permission: ${permission}`,
)
throw new Error(t`Permission Denied: Please contact organization user for help with retrieving this domain.`)
}
- const domains = await loadOrganizationDomainStatuses({
+ const domains = await organizationDS.domainStatuses({
orgId: _id,
...args,
})
@@ -223,6 +220,7 @@ export const organizationType = new GraphQLObjectType({
'wildcardEntry',
'hasEntrustCertificate',
'top25Vulnerabilities',
+ 'cvdEnrollmentStatus',
]
let csvOutput = headers.join(',')
domains.forEach((domainDoc) => {
@@ -230,15 +228,13 @@ export const organizationType = new GraphQLObjectType({
.map((header) => {
if (['ipAddresses', 'tags', 'top25Vulnerabilities'].includes(header)) {
return `"${domainDoc[header]?.join('|') || []}"`
- }
- if (
+ } else if (
['https', 'hsts', 'certificates', 'protocols', 'ciphers', 'curves', 'spf', 'dkim', 'dmarc'].includes(
header,
)
) {
return `"${domainDoc?.status[header]}"`
- }
- if (header === 'phase') {
+ } else if (header === 'phase') {
switch (domainDoc[header]) {
case 'assess':
return i18n._(t`Assess`)
@@ -259,36 +255,17 @@ export const organizationType = new GraphQLObjectType({
})
// Get org names to use in activity log
- let orgNamesCursor
- try {
- orgNamesCursor = await query`
- LET org = DOCUMENT(organizations, ${_id})
- RETURN {
- "orgNameEN": org.orgDetails.en.name,
- "orgNameFR": org.orgDetails.fr.name,
- }
- `
- } catch (err) {
- console.error(
- `Database error occurred when user: ${userKey} attempted to export org: ${_id}. Error while creating cursor for retrieving organization names. error: ${err}`,
- )
- throw new Error(i18n._(t`Unable to export organization. Please try again.`))
- }
-
let orgNames
try {
- orgNames = await orgNamesCursor.next()
+ orgNames = await organizationDS.namesById.load(_id)
} catch (err) {
console.error(
- `Cursor error occurred when user: ${userKey} attempted to export org: ${_id}. Error while retrieving organization names. error: ${err}`,
+ `Error occurred when user: ${userKey} attempted to export org: ${_id}. Error while retrieving organization names. error: ${err}`,
)
throw new Error(i18n._(t`Unable to export organization. Please try again.`))
}
- await logActivity({
- transaction,
- collections,
- query,
+ await auditLogs.logActivity({
initiatedBy: {
id: user._key,
userName: user.userName,
@@ -304,7 +281,7 @@ export const organizationType = new GraphQLObjectType({
organization: {
id: _id,
name: orgNames.orgNameEN,
- }, // name of resource being acted upon
+ },
resourceType: 'organization',
},
})
@@ -338,10 +315,9 @@ export const organizationType = new GraphQLObjectType({
{ _id },
args,
- { auth: { checkPermission }, loaders: { loadDomainConnectionsByOrgId } },
+ { dataSources: { auth: authDS }, loaders: { loadDomainConnectionsByOrgId } },
) => {
- // Check to see requesting users permission to the org is
- const permission = await checkPermission({ orgId: _id })
+ const permission = await authDS.permissionByOrgId.load(_id)
const connections = await loadDomainConnectionsByOrgId({
orgId: _id,
permission,
@@ -371,10 +347,15 @@ export const organizationType = new GraphQLObjectType({
resolve: async (
{ _id },
args,
- { i18n, auth: { checkPermission, loginRequiredBool }, loaders: { loadAffiliationConnectionsByOrgId } },
+ {
+ i18n,
+ auth: { loginRequiredBool },
+ dataSources: { auth: authDS },
+ loaders: { loadAffiliationConnectionsByOrgId },
+ },
) => {
- const permission = await checkPermission({ orgId: _id })
- if (['user', 'admin', 'owner', 'super_admin'].includes(permission) === false && loginRequiredBool) {
+ const permission = await authDS.permissionByOrgId.load(_id)
+ if (!ac.can(permission).readOwn('affiliation').granted && loginRequiredBool) {
throw new Error(i18n._(t`Cannot query affiliations on organization without admin permission or higher.`))
}
@@ -389,8 +370,8 @@ export const organizationType = new GraphQLObjectType({
type: GraphQLBoolean,
description:
'Value that determines if a user is affiliated with an organization, whether through organization affiliation, verified affiliation, or through super admin status.',
- resolve: async ({ _id }, _args, { auth: { checkPermission } }) => {
- const permission = await checkPermission({ orgId: _id })
+ resolve: async ({ _id }, _args, { dataSources: { auth: authDS } }) => {
+ const permission = await authDS.permissionByOrgId.load(_id)
return ['user', 'admin', 'super_admin', 'owner'].includes(permission)
},
},
diff --git a/api/src/organization/queries/__tests__/find-my-organizations.test.js b/api/src/organization/queries/__tests__/find-my-organizations.test.js
index 1440fb5e41..11ab3ea768 100644
--- a/api/src/organization/queries/__tests__/find-my-organizations.test.js
+++ b/api/src/organization/queries/__tests__/find-my-organizations.test.js
@@ -194,15 +194,13 @@ describe('given findMyOrganizationsQuery', () => {
}),
verifiedRequired: verifiedRequired({}),
},
- loaders: {
- loadOrgConnectionsByUserId: loadOrgConnectionsByUserId({
+ dataSources: { organization: { connectionsByUserId: loadOrgConnectionsByUserId({
query,
userKey: user._key,
cleanseInput,
auth: { loginRequired: true },
language: 'en',
- }),
- },
+ }) } },
},
})
@@ -337,15 +335,13 @@ describe('given findMyOrganizationsQuery', () => {
}),
verifiedRequired: verifiedRequired({}),
},
- loaders: {
- loadOrgConnectionsByUserId: loadOrgConnectionsByUserId({
+ dataSources: { organization: { connectionsByUserId: loadOrgConnectionsByUserId({
query,
userKey: user._key,
cleanseInput,
auth: { loginRequired: true },
language: 'fr',
- }),
- },
+ }) } },
},
})
@@ -457,16 +453,14 @@ describe('given findMyOrganizationsQuery', () => {
userRequired: jest.fn().mockReturnValue({}),
verifiedRequired: jest.fn(),
},
- loaders: {
- loadOrgConnectionsByUserId: loadOrgConnectionsByUserId({
+ dataSources: { organization: { connectionsByUserId: loadOrgConnectionsByUserId({
query: mockedQuery,
userKey: user._key,
cleanseInput,
auth: { loginRequired: true },
language: 'en',
i18n,
- }),
- },
+ }) } },
},
})
@@ -535,16 +529,14 @@ describe('given findMyOrganizationsQuery', () => {
userRequired: jest.fn().mockReturnValue({}),
verifiedRequired: jest.fn(),
},
- loaders: {
- loadOrgConnectionsByUserId: loadOrgConnectionsByUserId({
+ dataSources: { organization: { connectionsByUserId: loadOrgConnectionsByUserId({
query: mockedQuery,
userKey: user._key,
cleanseInput,
auth: { loginRequired: true },
language: 'en',
i18n,
- }),
- },
+ }) } },
},
})
diff --git a/api/src/organization/queries/__tests__/find-organization-by-slug.test.js b/api/src/organization/queries/__tests__/find-organization-by-slug.test.js
index 8a99ceb76c..cfb39fda7a 100644
--- a/api/src/organization/queries/__tests__/find-organization-by-slug.test.js
+++ b/api/src/organization/queries/__tests__/find-organization-by-slug.test.js
@@ -159,9 +159,13 @@ describe('given findOrganizationBySlugQuery', () => {
cleanseInput,
auth: { loginRequiredBool: true },
},
+ dataSources: {
+ organization: {
+ byKey: loadOrgByKey(query, 'en'),
+ bySlug: loadOrgBySlug({ query, language: 'en' }),
+ },
+ },
loaders: {
- loadOrgByKey: loadOrgByKey(query, 'en'),
- loadOrgBySlug: loadOrgBySlug({ query, language: 'en' }),
loadUserByKey: loadUserByKey({ query }),
loadDomainConnectionsByOrgId: loadDomainConnectionsByOrgId({
query,
@@ -265,9 +269,13 @@ describe('given findOrganizationBySlugQuery', () => {
cleanseInput,
auth: { loginRequiredBool: true },
},
+ dataSources: {
+ organization: {
+ byKey: loadOrgByKey(query, 'fr'),
+ bySlug: loadOrgBySlug({ query, language: 'fr' }),
+ },
+ },
loaders: {
- loadOrgByKey: loadOrgByKey(query, 'fr'),
- loadOrgBySlug: loadOrgBySlug({ query, language: 'fr' }),
loadUserByKey: loadUserByKey({ query }),
loadDomainConnectionsByOrgId: loadDomainConnectionsByOrgId({
query,
@@ -361,11 +369,9 @@ describe('given findOrganizationBySlugQuery', () => {
cleanseInput,
auth: { loginRequiredBool: true },
},
- loaders: {
- loadOrgBySlug: {
+ dataSources: { organization: { bySlug: {
load: jest.fn().mockReturnValue(),
- },
- },
+ } } },
},
})
@@ -410,11 +416,9 @@ describe('given findOrganizationBySlugQuery', () => {
validators: {
cleanseInput,
},
- loaders: {
- loadOrgBySlug: {
+ dataSources: { organization: { bySlug: {
load: jest.fn().mockReturnValue({}),
- },
- },
+ } } },
},
})
@@ -477,11 +481,9 @@ describe('given findOrganizationBySlugQuery', () => {
cleanseInput,
auth: { loginRequiredBool: true },
},
- loaders: {
- loadOrgBySlug: {
+ dataSources: { organization: { bySlug: {
load: jest.fn().mockReturnValue(),
- },
- },
+ } } },
},
})
@@ -526,11 +528,9 @@ describe('given findOrganizationBySlugQuery', () => {
validators: {
cleanseInput,
},
- loaders: {
- loadOrgBySlug: {
+ dataSources: { organization: { bySlug: {
load: jest.fn().mockReturnValue({}),
- },
- },
+ } } },
},
})
diff --git a/api/src/organization/queries/__tests__/get-all-organization-domain-statuses.test.js b/api/src/organization/queries/__tests__/get-all-organization-domain-statuses.test.js
index 059e224b09..b8a25f8328 100644
--- a/api/src/organization/queries/__tests__/get-all-organization-domain-statuses.test.js
+++ b/api/src/organization/queries/__tests__/get-all-organization-domain-statuses.test.js
@@ -200,13 +200,11 @@ describe('given getAllOrganizationDomainStatuses', () => {
superAdminRequired: superAdminRequired({ i18n }),
loginRequiredBool: loginRequiredBool,
},
- loaders: {
- loadAllOrganizationDomainStatuses: loadAllOrganizationDomainStatuses({
+ dataSources: { organization: { allDomainStatuses: loadAllOrganizationDomainStatuses({
query,
userKey: user._key,
i18n,
- }),
- },
+ }) } },
},
})
const error = [
@@ -258,14 +256,12 @@ describe('given getAllOrganizationDomainStatuses', () => {
superAdminRequired: superAdminRequired({ i18n }),
loginRequiredBool: loginRequiredBool,
},
- loaders: {
- loadAllOrganizationDomainStatuses: loadAllOrganizationDomainStatuses({
+ dataSources: { organization: { allDomainStatuses: loadAllOrganizationDomainStatuses({
query,
userKey: user._key,
i18n,
language: 'en',
- }),
- },
+ }) } },
},
})
@@ -318,13 +314,11 @@ describe('given getAllOrganizationDomainStatuses', () => {
superAdminRequired: superAdminRequired({ i18n }),
loginRequiredBool: loginRequiredBool,
},
- loaders: {
- loadAllOrganizationDomainStatuses: loadAllOrganizationDomainStatuses({
+ dataSources: { organization: { allDomainStatuses: loadAllOrganizationDomainStatuses({
query,
userKey: user._key,
i18n,
- }),
- },
+ }) } },
},
})
const error = [
@@ -377,14 +371,12 @@ describe('given getAllOrganizationDomainStatuses', () => {
superAdminRequired: superAdminRequired({ i18n }),
loginRequiredBool: loginRequiredBool,
},
- loaders: {
- loadAllOrganizationDomainStatuses: loadAllOrganizationDomainStatuses({
+ dataSources: { organization: { allDomainStatuses: loadAllOrganizationDomainStatuses({
query,
userKey: user._key,
i18n,
language: 'en',
- }),
- },
+ }) } },
},
})
const expectedResponse = {
diff --git a/api/src/organization/queries/find-my-organizations.js b/api/src/organization/queries/find-my-organizations.js
index cc622c35ff..507de5032f 100644
--- a/api/src/organization/queries/find-my-organizations.js
+++ b/api/src/organization/queries/find-my-organizations.js
@@ -40,7 +40,7 @@ export const findMyOrganizations = {
{
userKey,
auth: { checkSuperAdmin, userRequired, verifiedRequired, loginRequiredBool },
- loaders: { loadOrgConnectionsByUserId },
+ dataSources: { organization: organizationDS },
},
) => {
if (loginRequiredBool) {
@@ -50,7 +50,7 @@ export const findMyOrganizations = {
const isSuperAdmin = await checkSuperAdmin()
- const orgConnections = await loadOrgConnectionsByUserId({
+ const orgConnections = await organizationDS.connectionsByUserId({
isSuperAdmin,
...args,
})
diff --git a/api/src/organization/queries/find-organization-by-slug.js b/api/src/organization/queries/find-organization-by-slug.js
index 9f7c4ed6d2..90919afe5a 100644
--- a/api/src/organization/queries/find-organization-by-slug.js
+++ b/api/src/organization/queries/find-organization-by-slug.js
@@ -1,6 +1,7 @@
import { GraphQLNonNull } from 'graphql'
import { t } from '@lingui/macro'
import { Slug } from '../../scalars'
+import ac from '../../access-control'
const { organizationType } = require('../objects')
@@ -20,7 +21,7 @@ export const findOrganizationBySlug = {
i18n,
userKey,
auth: { checkPermission, userRequired, verifiedRequired, loginRequiredBool },
- loaders: { loadOrgBySlug },
+ dataSources: { organization: organizationDS },
validators: { cleanseInput },
},
) => {
@@ -34,7 +35,7 @@ export const findOrganizationBySlug = {
const orgSlug = cleanseInput(args.orgSlug)
// Retrieve organization by slug
- const org = await loadOrgBySlug.load(orgSlug)
+ const org = await organizationDS.bySlug.load(orgSlug)
if (typeof org === 'undefined') {
console.warn(`User ${userKey} could not retrieve organization.`)
@@ -44,16 +45,11 @@ export const findOrganizationBySlug = {
// Check user permission for organization access
const permission = await checkPermission({ orgId: org._id })
- if (loginRequiredBool) {
- if (!['user', 'admin', 'owner', 'super_admin'].includes(permission)) {
- console.warn(`User ${userKey} could not retrieve organization.`)
- throw new Error(i18n._(t`Permission Denied: Could not retrieve specified organization.`))
- }
- } else {
- if (org.verified !== true && !['user', 'admin', 'owner', 'super_admin'].includes(permission)) {
- console.warn(`User ${userKey} could not retrieve organization.`)
- throw new Error(i18n._(t`Permission Denied: Could not retrieve specified organization.`))
- }
+ if (loginRequiredBool && !ac.can(permission).readOwn('organization').granted) {
+ console.warn(`User ${userKey} could not retrieve organization.`)
+ throw new Error(i18n._(t`Permission Denied: Could not retrieve specified organization.`))
+ } else if (!loginRequiredBool && org.verified !== true && !ac.can(permission).readOwn('organization').granted) {
+ throw new Error(i18n._(t`Permission Denied: Could not retrieve specified organization.`))
}
console.info(`User ${userKey} successfully retrieved organization ${org._key}.`)
diff --git a/api/src/organization/queries/get-all-organization-domain-statuses.js b/api/src/organization/queries/get-all-organization-domain-statuses.js
index faadfb512b..f982c98a2c 100644
--- a/api/src/organization/queries/get-all-organization-domain-statuses.js
+++ b/api/src/organization/queries/get-all-organization-domain-statuses.js
@@ -18,7 +18,7 @@ export const getAllOrganizationDomainStatuses = {
{
userKey,
auth: { checkSuperAdmin, userRequired, verifiedRequired, superAdminRequired },
- loaders: { loadAllOrganizationDomainStatuses },
+ dataSources: { organization: organizationDS },
},
) => {
const user = await userRequired()
@@ -27,7 +27,7 @@ export const getAllOrganizationDomainStatuses = {
const isSuperAdmin = await checkSuperAdmin()
superAdminRequired({ user, isSuperAdmin })
- const domainStatuses = await loadAllOrganizationDomainStatuses({ ...args })
+ const domainStatuses = await organizationDS.allDomainStatuses({ ...args })
console.info(`User ${userKey} successfully retrieved all domain statuses.`)
diff --git a/api/src/scalars/__tests__/scalar-domain.test.js b/api/src/scalars/__tests__/scalar-domain.test.js
index 5902145c1b..515a91114b 100644
--- a/api/src/scalars/__tests__/scalar-domain.test.js
+++ b/api/src/scalars/__tests__/scalar-domain.test.js
@@ -1,6 +1,6 @@
-import {Kind} from 'graphql'
-import {stringify} from 'jest-matcher-utils'
-import {Domain} from '../index'
+import { GraphQLError, Kind } from 'graphql'
+import { stringify } from 'jest-matcher-utils'
+import { Domain } from '../index'
describe('given a domain scalar', () => {
describe('serializing inputs', () => {
@@ -28,9 +28,7 @@ describe('given a domain scalar', () => {
})
describe('given invalid inputs', () => {
;[123, {}, [], null, undefined, true].forEach((invalidInput) => {
- it(`throws an error when serializing ${stringify(
- invalidInput,
- )}`, () => {
+ it(`throws an error when serializing ${stringify(invalidInput)}`, () => {
expect(() => Domain.serialize(invalidInput)).toThrow(
new TypeError(`Value is not a string: ${typeof invalidInput}`),
)
@@ -52,16 +50,12 @@ describe('given a domain scalar', () => {
})
describe('given an invalid domain', () => {
const testDomain = 'not an domain'
- expect(() => Domain.parseValue(testDomain)).toThrow(
- new TypeError(`Value is not a valid domain: ${testDomain}`),
- )
+ expect(() => Domain.parseValue(testDomain)).toThrow(new TypeError(`Value is not a valid domain: ${testDomain}`))
})
})
describe('given invalid inputs', () => {
;[123, {}, [], null, undefined, true].forEach((invalidInput) => {
- it(`throws an error when serializing ${stringify(
- invalidInput,
- )}`, () => {
+ it(`throws an error when serializing ${stringify(invalidInput)}`, () => {
expect(() => Domain.parseValue(invalidInput)).toThrow(
new TypeError(`Value is not a string: ${typeof invalidInput}`),
)
@@ -110,13 +104,9 @@ describe('given a domain scalar', () => {
kind: Kind.DOCUMENT,
},
].forEach((literal) => {
- it(`throws an error when parsing invalid literal ${stringify(
- literal,
- )}`, () => {
+ it(`throws an error when parsing invalid literal ${stringify(literal)}`, () => {
expect(() => Domain.parseLiteral(literal, {})).toThrow(
- new TypeError(
- `Can only validate strings as domains but got a: ${literal.kind}`,
- ),
+ new GraphQLError(`Can only validate strings as domains but got a: ${literal.kind}`),
)
})
})
diff --git a/api/src/scalars/__tests__/scalar-organization-acronym.test.js b/api/src/scalars/__tests__/scalar-organization-acronym.test.js
index 0d2a0f2188..e9ff9c719e 100644
--- a/api/src/scalars/__tests__/scalar-organization-acronym.test.js
+++ b/api/src/scalars/__tests__/scalar-organization-acronym.test.js
@@ -1,6 +1,6 @@
-import {Kind} from 'graphql'
-import {stringify} from 'jest-matcher-utils'
-import {Acronym} from '../index'
+import { GraphQLError, Kind } from 'graphql'
+import { stringify } from 'jest-matcher-utils'
+import { Acronym } from '../index'
describe('given a acronym scalar', () => {
describe('serializing inputs', () => {
@@ -22,9 +22,7 @@ describe('given a acronym scalar', () => {
})
describe('given invalid inputs', () => {
;[123, {}, [], null, undefined, true].forEach((invalidInput) => {
- it(`throws an error when serializing ${stringify(
- invalidInput,
- )}`, () => {
+ it(`throws an error when serializing ${stringify(invalidInput)}`, () => {
expect(() => Acronym.serialize(invalidInput)).toThrow(
new TypeError(`Value is not string: ${typeof invalidInput}`),
)
@@ -47,9 +45,7 @@ describe('given a acronym scalar', () => {
})
describe('given invalid inputs', () => {
;[123, {}, [], null, undefined, true].forEach((invalidInput) => {
- it(`throws an error when serializing ${stringify(
- invalidInput,
- )}`, () => {
+ it(`throws an error when serializing ${stringify(invalidInput)}`, () => {
expect(() => Acronym.parseValue(invalidInput)).toThrow(
new TypeError(`Value is not string: ${typeof invalidInput}`),
)
@@ -88,13 +84,9 @@ describe('given a acronym scalar', () => {
kind: Kind.DOCUMENT,
},
].forEach((literal) => {
- it(`throws an error when parsing invalid literal ${stringify(
- literal,
- )}`, () => {
+ it(`throws an error when parsing invalid literal ${stringify(literal)}`, () => {
expect(() => Acronym.parseLiteral(literal, {})).toThrow(
- new TypeError(
- `Can only validate strings as acronyms but got a: ${literal.kind}`,
- ),
+ new GraphQLError(`Can only validate strings as acronyms but got a: ${literal.kind}`),
)
})
})
diff --git a/api/src/scalars/__tests__/scalar-selector.test.js b/api/src/scalars/__tests__/scalar-selector.test.js
index aaefa3c59d..d55c224733 100644
--- a/api/src/scalars/__tests__/scalar-selector.test.js
+++ b/api/src/scalars/__tests__/scalar-selector.test.js
@@ -1,4 +1,4 @@
-import { Kind } from 'graphql'
+import { GraphQLError, Kind } from 'graphql'
import { stringify } from 'jest-matcher-utils'
import { Selectors, SelectorsInput } from '../index'
@@ -48,7 +48,7 @@ describe("checking a 'selector' type", () => {
].forEach((literal) => {
it(`throws an error when parsing invalid literal ${stringify(literal)}`, () => {
expect(() => Selectors.parseLiteral(literal, {})).toThrow(
- new TypeError(`Can only validate strings as selectors but got a: ${literal.kind}`),
+ new GraphQLError(`Can only validate strings as selectors but got a: ${literal.kind}`),
)
})
})
diff --git a/api/src/scalars/__tests__/scalar-slug.test.js b/api/src/scalars/__tests__/scalar-slug.test.js
index 361ef066a8..5a024d33a4 100644
--- a/api/src/scalars/__tests__/scalar-slug.test.js
+++ b/api/src/scalars/__tests__/scalar-slug.test.js
@@ -1,6 +1,6 @@
-import {Kind} from 'graphql'
-import {stringify} from 'jest-matcher-utils'
-import {Slug} from '../index'
+import { GraphQLError, Kind } from 'graphql'
+import { stringify } from 'jest-matcher-utils'
+import { Slug } from '../index'
describe('given a slug scalar', () => {
describe('serializing inputs', () => {
@@ -15,18 +15,14 @@ describe('given a slug scalar', () => {
describe('given an invalid slug', () => {
it('throws an error', () => {
const testSlug = 'This is an invalid slug'
- expect(() => Slug.serialize(testSlug)).toThrow(
- new TypeError(`Value is not a valid slug: ${testSlug}`),
- )
+ expect(() => Slug.serialize(testSlug)).toThrow(new TypeError(`Value is not a valid slug: ${testSlug}`))
})
})
})
describe('given invalid inputs', () => {
;[123, {}, [], null, undefined, true].forEach((invalidInput) => {
- it(`throws an error when serializing ${stringify(
- invalidInput,
- )}`, () => {
+ it(`throws an error when serializing ${stringify(invalidInput)}`, () => {
expect(() => Slug.serialize(invalidInput)).toThrow(
new TypeError(`Value is not string: ${typeof invalidInput}`),
)
@@ -46,17 +42,13 @@ describe('given a slug scalar', () => {
describe('given an invalid slug', () => {
it('throws a type error', () => {
const testSlug = 'invalid slug'
- expect(() => Slug.parseValue(testSlug)).toThrow(
- new TypeError(`Value is not a valid slug: ${testSlug}`),
- )
+ expect(() => Slug.parseValue(testSlug)).toThrow(new TypeError(`Value is not a valid slug: ${testSlug}`))
})
})
})
describe('given invalid inputs', () => {
;[123, {}, [], null, undefined, true].forEach((invalidInput) => {
- it(`throws an error when value parsing ${stringify(
- invalidInput,
- )}`, () => {
+ it(`throws an error when value parsing ${stringify(invalidInput)}`, () => {
expect(() => Slug.parseValue(invalidInput)).toThrow(
new TypeError(`Value is not string: ${typeof invalidInput}`),
)
@@ -96,13 +88,9 @@ describe('given a slug scalar', () => {
kind: Kind.DOCUMENT,
},
].forEach((literal) => {
- it(`throws an error when parsing invalid literal ${stringify(
- literal,
- )}`, () => {
+ it(`throws an error when parsing invalid literal ${stringify(literal)}`, () => {
expect(() => Slug.parseLiteral(literal, {})).toThrow(
- new TypeError(
- `Can only validate strings as slug but got a: ${literal.kind}`,
- ),
+ new GraphQLError(`Can only validate strings as slug but got a: ${literal.kind}`),
)
})
})
diff --git a/api/src/scalars/__tests__/scalar-year.test.js b/api/src/scalars/__tests__/scalar-year.test.js
index 76437352ee..7ac751ed3a 100644
--- a/api/src/scalars/__tests__/scalar-year.test.js
+++ b/api/src/scalars/__tests__/scalar-year.test.js
@@ -1,6 +1,6 @@
-import {Kind} from 'graphql'
-import {stringify} from 'jest-matcher-utils'
-import {Year} from '../index'
+import { GraphQLError, Kind } from 'graphql'
+import { stringify } from 'jest-matcher-utils'
+import { Year } from '../index'
describe('given a year scalar', () => {
describe('serializing inputs', () => {
@@ -14,17 +14,13 @@ describe('given a year scalar', () => {
describe('given an invalid year', () => {
it('throws a typeError', () => {
const testYear = 'Text'
- expect(() => Year.serialize(testYear)).toThrow(
- new TypeError(`Value is not a valid year: ${testYear}`),
- )
+ expect(() => Year.serialize(testYear)).toThrow(new TypeError(`Value is not a valid year: ${testYear}`))
})
})
})
describe('given invalid inputs', () => {
;[123, {}, [], null, undefined, true].forEach((invalidInput) => {
- it(`throws an error when serializing ${stringify(
- invalidInput,
- )}`, () => {
+ it(`throws an error when serializing ${stringify(invalidInput)}`, () => {
expect(() => Year.serialize(invalidInput)).toThrow(
new TypeError(`Value is not string: ${typeof invalidInput}`),
)
@@ -43,16 +39,12 @@ describe('given a year scalar', () => {
})
describe('given an invalid year', () => {
const testYear = 'Text'
- expect(() => Year.parseValue(testYear)).toThrow(
- new TypeError(`Value is not a valid year: ${testYear}`),
- )
+ expect(() => Year.parseValue(testYear)).toThrow(new TypeError(`Value is not a valid year: ${testYear}`))
})
})
describe('given invalid inputs', () => {
;[123, {}, [], null, undefined, true].forEach((invalidInput) => {
- it(`throws an error when serializing ${stringify(
- invalidInput,
- )}`, () => {
+ it(`throws an error when serializing ${stringify(invalidInput)}`, () => {
expect(() => Year.parseValue(invalidInput)).toThrow(
new TypeError(`Value is not string: ${typeof invalidInput}`),
)
@@ -92,13 +84,9 @@ describe('given a year scalar', () => {
kind: Kind.DOCUMENT,
},
].forEach((literal) => {
- it(`throws an error when parsing invalid literal ${stringify(
- literal,
- )}`, () => {
+ it(`throws an error when parsing invalid literal ${stringify(literal)}`, () => {
expect(() => Year.parseLiteral(literal, {})).toThrow(
- new TypeError(
- `Can only validate strings as year but got a: ${literal.kind}`,
- ),
+ new GraphQLError(`Can only validate strings as year but got a: ${literal.kind}`),
)
})
})
diff --git a/api/src/summaries/data-source.js b/api/src/summaries/data-source.js
new file mode 100644
index 0000000000..4b534206b5
--- /dev/null
+++ b/api/src/summaries/data-source.js
@@ -0,0 +1,7 @@
+import { loadChartSummariesByPeriod } from './loaders'
+
+export class SummariesDataSource {
+ constructor({ query, userKey, cleanseInput, i18n }) {
+ this.getConnectionsByPeriod = loadChartSummariesByPeriod({ query, userKey, cleanseInput, i18n })
+ }
+}
diff --git a/api/src/summaries/index.js b/api/src/summaries/index.js
index 7dab4e57a0..fd864e4e36 100644
--- a/api/src/summaries/index.js
+++ b/api/src/summaries/index.js
@@ -1,3 +1,4 @@
export * from './loaders'
export * from './objects'
export * from './queries'
+export * from './data-source'
diff --git a/api/src/summaries/loaders/__tests__/load-chart-summary-by-key.test.js b/api/src/summaries/loaders/__tests__/load-chart-summary-by-key.test.js
deleted file mode 100644
index ac697bd07b..0000000000
--- a/api/src/summaries/loaders/__tests__/load-chart-summary-by-key.test.js
+++ /dev/null
@@ -1,217 +0,0 @@
-import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../../testUtilities'
-import { setupI18n } from '@lingui/core'
-
-import englishMessages from '../../../locale/en/messages'
-import frenchMessages from '../../../locale/fr/messages'
-import { loadChartSummaryByKey } from '../../index'
-import dbschema from '../../../../database.json'
-
-const { DB_PASS: rootPass, DB_URL: url } = process.env
-
-describe('given the loadChartSummaryByKey function', () => {
- let query, drop, truncate, collections, i18n
-
- const consoleErrorOutput = []
- const mockedError = (output) => consoleErrorOutput.push(output)
-
- beforeAll(() => {
- console.error = mockedError
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- afterEach(() => {
- consoleErrorOutput.length = 0
- })
-
- describe('given a successful load', () => {
- beforeAll(async () => {
- ;({ query, drop, truncate, collections } = await ensure({
- variables: {
- dbname: dbNameFromFile(__filename),
- username: 'root',
- rootPassword: rootPass,
- password: rootPass,
- url,
- },
-
- schema: dbschema,
- }))
- })
- beforeEach(async () => {
- await collections.chartSummaries.save({
- date: '2021-01-01',
- web: {
- total: 1000,
- fail: 500,
- pass: 500,
- },
- mail: {
- total: 1000,
- fail: 500,
- pass: 500,
- },
- })
- })
- afterEach(async () => {
- await truncate()
- })
- afterAll(async () => {
- await drop()
- })
- describe('given a single id', () => {
- it('returns a single summary', async () => {
- const expectedCursor = await query`
- FOR summary IN chartSummaries
- SORT summary.date DESC LIMIT 1
- RETURN summary.web
- `
- const expectedSummary = await expectedCursor.next()
-
- const loader = loadChartSummaryByKey({ query, i18n })
- const webSummary = await loader.load('web')
-
- expect(webSummary).toEqual(expectedSummary)
- })
- })
- describe('given multiple ids', () => {
- it('returns multiple dkim scans', async () => {
- const summaryKeys = []
- const expectedSummaries = []
- const expectedCursor = await query`
- FOR summary IN chartSummaries
- SORT summary.date DESC LIMIT 1
- RETURN summary
- `
-
- while (expectedCursor.hasMore) {
- const tempSummary = await expectedCursor.next()
- summaryKeys.push(tempSummary._key)
- expectedSummaries.push(tempSummary)
- }
-
- const loader = loadChartSummaryByKey({ query, i18n })
- const chartSummaries = await loader.loadMany(summaryKeys)
- expect(chartSummaries).toEqual(expectedSummaries)
- })
- })
- })
- describe('given an unsuccessful load', () => {
- describe('users language is set to english', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('given a database error', () => {
- it('raises an error', async () => {
- query = jest.fn().mockRejectedValue(new Error('Database error occurred.'))
- const loader = loadChartSummaryByKey({ query, userKey: '1234', i18n })
-
- try {
- await loader.load('1')
- } catch (err) {
- expect(err).toEqual(new Error('Unable to load summary. Please try again.'))
- }
-
- expect(consoleErrorOutput).toEqual([
- `Database error occurred when user: 1234 running loadChartSummaryByKey: Error: Database error occurred.`,
- ])
- })
- })
- describe('given a cursor error', () => {
- it('raises an error', async () => {
- const cursor = {
- next() {
- throw new Error('Cursor error occurred.')
- },
- }
- query = jest.fn().mockReturnValue(cursor)
- const loader = loadChartSummaryByKey({ query, userKey: '1234', i18n })
-
- try {
- await loader.load('1')
- } catch (err) {
- expect(err).toEqual(new Error('Unable to load summary. Please try again.'))
- }
-
- expect(consoleErrorOutput).toEqual([
- `Cursor error occurred when user: 1234 running loadChartSummaryByKey: Error: Cursor error occurred.`,
- ])
- })
- })
- })
- describe('users language is set to french', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'fr',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('given a database error', () => {
- it('raises an error', async () => {
- query = jest.fn().mockRejectedValue(new Error('Database error occurred.'))
- const loader = loadChartSummaryByKey({ query, userKey: '1234', i18n })
-
- try {
- await loader.load('1')
- } catch (err) {
- expect(err).toEqual(new Error('Impossible de charger le résumé. Veuillez réessayer.'))
- }
-
- expect(consoleErrorOutput).toEqual([
- `Database error occurred when user: 1234 running loadChartSummaryByKey: Error: Database error occurred.`,
- ])
- })
- })
- describe('given a cursor error', () => {
- it('raises an error', async () => {
- const cursor = {
- next() {
- throw new Error('Cursor error occurred.')
- },
- }
- query = jest.fn().mockReturnValue(cursor)
- const loader = loadChartSummaryByKey({ query, userKey: '1234', i18n })
-
- try {
- await loader.load('1')
- } catch (err) {
- expect(err).toEqual(new Error('Impossible de charger le résumé. Veuillez réessayer.'))
- }
-
- expect(consoleErrorOutput).toEqual([
- `Cursor error occurred when user: 1234 running loadChartSummaryByKey: Error: Cursor error occurred.`,
- ])
- })
- })
- })
- })
-})
diff --git a/api/src/summaries/loaders/index.js b/api/src/summaries/loaders/index.js
index 69e452cece..427499a436 100644
--- a/api/src/summaries/loaders/index.js
+++ b/api/src/summaries/loaders/index.js
@@ -1,2 +1 @@
-export * from './load-chart-summary-by-key'
export * from './load-chart-summaries-by-period'
diff --git a/api/src/summaries/loaders/load-chart-summary-by-key.js b/api/src/summaries/loaders/load-chart-summary-by-key.js
deleted file mode 100644
index 719c0162f6..0000000000
--- a/api/src/summaries/loaders/load-chart-summary-by-key.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import DataLoader from 'dataloader'
-import { t } from '@lingui/macro'
-
-export const loadChartSummaryByKey = ({ query, userKey, i18n }) =>
- new DataLoader(async (keys) => {
- let cursor
-
- try {
- cursor = await query`
- WITH chartSummaries
- FOR summary IN chartSummaries
- SORT summary.date DESC LIMIT 1
- RETURN summary
- `
- } catch (err) {
- console.error(`Database error occurred when user: ${userKey} running loadChartSummaryByKey: ${err}`)
- throw new Error(i18n._(t`Unable to load summary. Please try again.`))
- }
-
- let summariesMap
- try {
- summariesMap = await cursor.next()
- } catch (err) {
- console.error(`Cursor error occurred when user: ${userKey} running loadChartSummaryByKey: ${err}`)
- throw new Error(i18n._(t`Unable to load summary. Please try again.`))
- }
-
- return keys.map((key) => summariesMap[key])
- })
diff --git a/api/src/summaries/objects/chart-summary.js b/api/src/summaries/objects/chart-summary.js
index bc4c3a4ebb..9dda9c6004 100644
--- a/api/src/summaries/objects/chart-summary.js
+++ b/api/src/summaries/objects/chart-summary.js
@@ -3,8 +3,25 @@ import { categorizedSummaryType } from './categorized-summary'
import { globalIdField } from 'graphql-relay'
import { GraphQLDate } from 'graphql-scalars'
+const makeCategory = (key) => ({
+ type: categorizedSummaryType,
+ resolve: (parent) => {
+ const data = parent[key]
+ const total = data.total
+ const safe = total > 0
+ return {
+ total,
+ categories: [
+ { name: 'pass', count: data.pass, percentage: safe ? Number(((data.pass / total) * 100).toFixed(1)) : 0 },
+ { name: 'fail', count: data.fail, percentage: safe ? Number(((data.fail / total) * 100).toFixed(1)) : 0 },
+ ],
+ }
+ },
+})
+
export const chartSummaryType = new GraphQLObjectType({
name: 'ChartSummary',
+ description: `This object contains the information for each type of summary that has been pre-computed`,
fields: () => ({
id: globalIdField('chartSummary'),
date: {
@@ -12,308 +29,33 @@ export const chartSummaryType = new GraphQLObjectType({
description: 'Date that the summary was computed.',
resolve: ({ date }) => date,
},
- https: {
- type: categorizedSummaryType,
- description: 'https summary data',
- resolve: ({ https }) => {
- let percentPass, percentageFail
- if (https.total <= 0) {
- percentPass = 0
- percentageFail = 0
- } else {
- percentPass = Number(((https.pass / https.total) * 100).toFixed(1))
- percentageFail = Number(((https.fail / https.total) * 100).toFixed(1))
- }
-
- const categories = [
- {
- name: 'pass',
- count: https.pass,
- percentage: percentPass,
- },
- {
- name: 'fail',
- count: https.fail,
- percentage: percentageFail,
- },
- ]
-
- return {
- categories,
- total: https.total,
- }
- },
- },
- dmarc: {
- type: categorizedSummaryType,
- description: 'dmarc summary data',
- resolve: ({ dmarc }) => {
- let percentPass, percentageFail
- if (dmarc.total <= 0) {
- percentPass = 0
- percentageFail = 0
- } else {
- percentPass = Number(((dmarc.pass / dmarc.total) * 100).toFixed(1))
- percentageFail = Number(((dmarc.fail / dmarc.total) * 100).toFixed(1))
- }
-
- const categories = [
- {
- name: 'pass',
- count: dmarc.pass,
- percentage: percentPass,
- },
- {
- name: 'fail',
- count: dmarc.fail,
- percentage: percentageFail,
- },
- ]
-
- return {
- categories,
- total: dmarc.total,
- }
- },
- },
- mail: {
- type: categorizedSummaryType,
- description: 'Summary based on mail scan results for all domains.',
- resolve: ({ mail }, _) => {
- let percentPass, percentageFail
- if (mail.total <= 0) {
- percentPass = 0
- percentageFail = 0
- } else {
- percentPass = Number(((mail.pass / mail.total) * 100).toFixed(1))
- percentageFail = Number(((mail.fail / mail.total) * 100).toFixed(1))
- }
-
- const categories = [
- {
- name: 'pass',
- count: mail.pass,
- percentage: percentPass,
- },
- {
- name: 'fail',
- count: mail.fail,
- percentage: percentageFail,
- },
- ]
-
- return {
- categories,
- total: mail.total,
- }
- },
- },
- web: {
- type: categorizedSummaryType,
- description: 'Summary based on web scan results for all domains.',
- resolve: ({ web }, _) => {
- let percentPass, percentageFail
- if (web.total <= 0) {
- percentPass = 0
- percentageFail = 0
- } else {
- percentPass = Number(((web.pass / web.total) * 100).toFixed(1))
- percentageFail = Number(((web.fail / web.total) * 100).toFixed(1))
- }
-
- const categories = [
- {
- name: 'pass',
- count: web.pass,
- percentage: percentPass,
- },
- {
- name: 'fail',
- count: web.fail,
- percentage: percentageFail,
- },
- ]
-
- return {
- categories,
- total: web.total,
- }
- },
- },
- dmarcPhase: {
- type: categorizedSummaryType,
- description: 'Summary based on DMARC phases for all domains.',
- resolve: ({ dmarc_phase }, _) => {
- let percentAssess, percentDeploy, percentEnforce, percentMaintain
- if (dmarc_phase.total <= 0) {
- percentAssess = 0
- percentDeploy = 0
- percentEnforce = 0
- percentMaintain = 0
- } else {
- percentAssess = Number(((dmarc_phase.assess / dmarc_phase.total) * 100).toFixed(1))
- percentDeploy = Number(((dmarc_phase.deploy / dmarc_phase.total) * 100).toFixed(1))
- percentEnforce = Number(((dmarc_phase.enforce / dmarc_phase.total) * 100).toFixed(1))
- percentMaintain = Number(((dmarc_phase.maintain / dmarc_phase.total) * 100).toFixed(1))
- }
-
- const categories = [
- {
- name: 'assess',
- count: dmarc_phase.assess,
- percentage: percentAssess,
- },
- {
- name: 'deploy',
- count: dmarc_phase.deploy,
- percentage: percentDeploy,
- },
- {
- name: 'enforce',
- count: dmarc_phase.enforce,
- percentage: percentEnforce,
- },
- {
- name: 'maintain',
- count: dmarc_phase.maintain,
- percentage: percentMaintain,
- },
- ]
-
- return {
- categories,
- total: dmarc_phase.total,
- }
- },
- },
- ssl: {
- type: categorizedSummaryType,
- description: 'Summary based on SSL scan results for all domains.',
- resolve: ({ ssl }, _) => {
- let percentPass, percentageFail
- if (ssl.total <= 0) {
- percentPass = 0
- percentageFail = 0
- } else {
- percentPass = Number(((ssl.pass / ssl.total) * 100).toFixed(1))
- percentageFail = Number(((ssl.fail / ssl.total) * 100).toFixed(1))
- }
-
- const categories = [
- {
- name: 'pass',
- count: ssl.pass,
- percentage: percentPass,
- },
- {
- name: 'fail',
- count: ssl.fail,
- percentage: percentageFail,
- },
- ]
-
- return {
- categories,
- total: ssl.total,
- }
- },
- },
+ https: { ...makeCategory('https'), description: 'https summary data' },
+ dmarc: { ...makeCategory('dmarc'), description: 'dmarc summary data' },
+ mail: { ...makeCategory('mail'), description: 'Summary based on mail scan results for all domains.' },
+ web: { ...makeCategory('web'), description: 'Summary based on web scan results for all domains.' },
+ ssl: { ...makeCategory('ssl'), description: 'Summary based on SSL scan results for all domains.' },
webConnections: {
- type: categorizedSummaryType,
+ ...makeCategory('web_connections'),
description: 'Summary based on HTTPS and HSTS scan results for all domains.',
- resolve: ({ web_connections }, _) => {
- let percentPass, percentageFail
- if (web_connections.total <= 0) {
- percentPass = 0
- percentageFail = 0
- } else {
- percentPass = Number(((web_connections.pass / web_connections.total) * 100).toFixed(1))
- percentageFail = Number(((web_connections.fail / web_connections.total) * 100).toFixed(1))
- }
-
- const categories = [
- {
- name: 'pass',
- count: web_connections.pass,
- percentage: percentPass,
- },
- {
- name: 'fail',
- count: web_connections.fail,
- percentage: percentageFail,
- },
- ]
-
- return {
- categories,
- total: web_connections.total,
- }
- },
- },
- spf: {
- type: categorizedSummaryType,
- description: 'Summary based on SPF scan results for all domains.',
- resolve: ({ spf }, _) => {
- let percentPass, percentageFail
- if (spf.total <= 0) {
- percentPass = 0
- percentageFail = 0
- } else {
- percentPass = Number(((spf.pass / spf.total) * 100).toFixed(1))
- percentageFail = Number(((spf.fail / spf.total) * 100).toFixed(1))
- }
-
- const categories = [
- {
- name: 'pass',
- count: spf.pass,
- percentage: percentPass,
- },
- {
- name: 'fail',
- count: spf.fail,
- percentage: percentageFail,
- },
- ]
-
- return {
- categories,
- total: spf.total,
- }
- },
},
- dkim: {
+ spf: { ...makeCategory('spf'), description: 'Summary based on SPF scan results for all domains.' },
+ dkim: { ...makeCategory('dkim'), description: 'Summary based on DKIM scan results for all domains.' },
+ dmarcPhase: {
type: categorizedSummaryType,
- description: 'Summary based on DKIM scan results for all domains.',
- resolve: ({ dkim }, _) => {
- let percentPass, percentageFail
- if (dkim.total <= 0) {
- percentPass = 0
- percentageFail = 0
- } else {
- percentPass = Number(((dkim.pass / dkim.total) * 100).toFixed(1))
- percentageFail = Number(((dkim.fail / dkim.total) * 100).toFixed(1))
- }
-
- const categories = [
- {
- name: 'pass',
- count: dkim.pass,
- percentage: percentPass,
- },
- {
- name: 'fail',
- count: dkim.fail,
- percentage: percentageFail,
- },
- ]
-
+ description: 'Summary based on DMARC phases for all domains.',
+ resolve: ({ dmarc_phase: dmarcPhase }) => {
+ const total = dmarcPhase.total
+ const safe = total > 0
+ const phaseNames = ['assess', 'deploy', 'enforce', 'maintain']
return {
- categories,
- total: dkim.total,
+ total,
+ categories: phaseNames.map((name) => ({
+ name,
+ count: dmarcPhase[name],
+ percentage: safe ? Number(((dmarcPhase[name] / total) * 100).toFixed(1)) : 0,
+ })),
}
},
},
}),
- description: `This object contains the information for each type of summary that has been pre-computed`,
})
diff --git a/api/src/summaries/queries/__tests__/dkim-summary.test.js b/api/src/summaries/queries/__tests__/dkim-summary.test.js
deleted file mode 100644
index 75481e8f91..0000000000
--- a/api/src/summaries/queries/__tests__/dkim-summary.test.js
+++ /dev/null
@@ -1,173 +0,0 @@
-import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../../testUtilities'
-import { graphql, GraphQLSchema, GraphQLError } from 'graphql'
-import { setupI18n } from '@lingui/core'
-
-import englishMessages from '../../../locale/en/messages'
-import frenchMessages from '../../../locale/fr/messages'
-import { createQuerySchema } from '../../../query'
-import { createMutationSchema } from '../../../mutation'
-import { loadChartSummaryByKey } from '../../loaders'
-import dbschema from '../../../../database.json'
-
-const { DB_PASS: rootPass, DB_URL: url } = process.env
-
-describe('given dkimSummary query', () => {
- let query, drop, truncate, schema, collections, i18n
-
- const consoleOutput = []
- const mockedInfo = (output) => consoleOutput.push(output)
- const mockedWarn = (output) => consoleOutput.push(output)
- const mockedError = (output) => consoleOutput.push(output)
- beforeAll(() => {
- console.info = mockedInfo
- console.warn = mockedWarn
- console.error = mockedError
- // Create GQL Schema
- schema = new GraphQLSchema({
- query: createQuerySchema(),
- mutation: createMutationSchema(),
- })
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- afterEach(() => {
- consoleOutput.length = 0
- })
-
- describe('given successful dkim summary retrieval', () => {
- beforeAll(async () => {
- // Generate DB Items
- ;({ query, drop, truncate, collections } = await ensure({
- variables: {
- dbname: dbNameFromFile(__filename),
- username: 'root',
- rootPassword: rootPass,
- password: rootPass,
- url,
- },
-
- schema: dbschema,
- }))
- })
- beforeEach(async () => {
- await collections.chartSummaries.save({
- date: '2021-01-01',
- dkim: { total: 1000, fail: 500, pass: 500 },
- })
- })
- afterEach(async () => {
- await truncate()
- })
- afterAll(async () => {
- await drop()
- })
- it('returns dkim summary', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- dkimSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: loadChartSummaryByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- dkimSummary: {
- total: 1000,
- categories: [
- {
- name: 'pass',
- count: 500,
- percentage: 50,
- },
- {
- name: 'fail',
- count: 500,
- percentage: 50,
- },
- ],
- },
- },
- }
- expect(response).toEqual(expectedResponse)
- })
- })
-
- describe('users language is set to english', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('given unsuccessful dkim summary retrieval', () => {
- describe('summary cannot be found', () => {
- it('returns an appropriate error message', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- dkimSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- },
- },
- })
-
- const error = [new GraphQLError(`Unable to load DKIM summary. Please try again.`)]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([`User could not retrieve DKIM summary.`])
- })
- })
- })
- })
-})
diff --git a/api/src/summaries/queries/__tests__/dmarc-phase-summary.test.js b/api/src/summaries/queries/__tests__/dmarc-phase-summary.test.js
deleted file mode 100644
index 2545791525..0000000000
--- a/api/src/summaries/queries/__tests__/dmarc-phase-summary.test.js
+++ /dev/null
@@ -1,241 +0,0 @@
-import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../../testUtilities'
-import { graphql, GraphQLSchema, GraphQLError } from 'graphql'
-import { setupI18n } from '@lingui/core'
-
-import englishMessages from '../../../locale/en/messages'
-import frenchMessages from '../../../locale/fr/messages'
-import { createQuerySchema } from '../../../query'
-import { createMutationSchema } from '../../../mutation'
-import { loadChartSummaryByKey } from '../../loaders'
-import dbschema from '../../../../database.json'
-
-const { DB_PASS: rootPass, DB_URL: url } = process.env
-
-describe('given dmarcPhaseSummary query', () => {
- let query, drop, truncate, schema, collections, i18n
-
- const consoleOutput = []
- const mockedInfo = (output) => consoleOutput.push(output)
- const mockedWarn = (output) => consoleOutput.push(output)
- const mockedError = (output) => consoleOutput.push(output)
- beforeAll(async () => {
- console.info = mockedInfo
- console.warn = mockedWarn
- console.error = mockedError
- // Create GQL Schema
- schema = new GraphQLSchema({
- query: createQuerySchema(),
- mutation: createMutationSchema(),
- })
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
-
- beforeEach(() => {
- consoleOutput.length = 0
- })
-
- describe('given successful dmarc phase summary retrieval', () => {
- beforeAll(async () => {
- // Generate DB Items
- ;({ query, drop, truncate, collections } = await ensure({
- variables: {
- dbname: dbNameFromFile(__filename),
- username: 'root',
- rootPassword: rootPass,
- password: rootPass,
- url,
- },
-
- schema: dbschema,
- }))
- })
- beforeEach(async () => {
- await collections.chartSummaries.save({
- date: '2021-01-01',
- dmarc_phase: {
- assess: 200,
- deploy: 200,
- enforce: 200,
- maintain: 200,
- total: 800,
- },
- })
- })
- afterEach(async () => {
- await truncate()
- })
- afterAll(async () => {
- await drop()
- })
- it('returns dmarc phase summary', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- dmarcPhaseSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: loadChartSummaryByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- dmarcPhaseSummary: {
- total: 800,
- categories: [
- {
- name: 'assess',
- count: 200,
- percentage: 25,
- },
- {
- name: 'deploy',
- count: 200,
- percentage: 25,
- },
- {
- name: 'enforce',
- count: 200,
- percentage: 25,
- },
- {
- name: 'maintain',
- count: 200,
- percentage: 25,
- },
- ],
- },
- },
- }
- expect(response).toEqual(expectedResponse)
- })
- })
-
- describe('users language is set to english', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('given unsuccessful dmarc phase summary retrieval', () => {
- describe('summary cannot be found', () => {
- it('returns an appropriate error message', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- dmarcPhaseSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- },
- },
- })
-
- const error = [new GraphQLError(`Unable to load DMARC phase summary. Please try again.`)]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([`User could not retrieve DMARC phase summary.`])
- })
- })
- })
- })
- describe('users language is set to french', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'fr',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('given unsuccessful dmarc phase summary retrieval', () => {
- describe('summary cannot be found', () => {
- it('returns an appropriate error message', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- dmarcPhaseSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Impossible de charger le résumé DMARC. Veuillez réessayer.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([`User could not retrieve DMARC phase summary.`])
- })
- })
- })
- })
-})
diff --git a/api/src/summaries/queries/__tests__/dmarc-summary.test.js b/api/src/summaries/queries/__tests__/dmarc-summary.test.js
deleted file mode 100644
index 1a100dad14..0000000000
--- a/api/src/summaries/queries/__tests__/dmarc-summary.test.js
+++ /dev/null
@@ -1,177 +0,0 @@
-import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../../testUtilities'
-import { graphql, GraphQLSchema, GraphQLError } from 'graphql'
-import { setupI18n } from '@lingui/core'
-
-import englishMessages from '../../../locale/en/messages'
-import frenchMessages from '../../../locale/fr/messages'
-import { createQuerySchema } from '../../../query'
-import { createMutationSchema } from '../../../mutation'
-import { loadChartSummaryByKey } from '../../loaders'
-import dbschema from '../../../../database.json'
-
-const { DB_PASS: rootPass, DB_URL: url } = process.env
-
-describe('given dmarcSummary query', () => {
- let query, drop, truncate, schema, collections, i18n
-
- const consoleOutput = []
- const mockedInfo = (output) => consoleOutput.push(output)
- const mockedWarn = (output) => consoleOutput.push(output)
- const mockedError = (output) => consoleOutput.push(output)
- beforeAll(() => {
- console.info = mockedInfo
- console.warn = mockedWarn
- console.error = mockedError
- // Create GQL Schema
- schema = new GraphQLSchema({
- query: createQuerySchema(),
- mutation: createMutationSchema(),
- })
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- afterEach(() => {
- consoleOutput.length = 0
- })
-
- describe('given successful dmarc summary retrieval', () => {
- beforeAll(async () => {
- // Generate DB Items
- ;({ query, drop, truncate, collections } = await ensure({
- variables: {
- dbname: dbNameFromFile(__filename),
- username: 'root',
- rootPassword: rootPass,
- password: rootPass,
- url,
- },
-
- schema: dbschema,
- }))
- })
- beforeEach(async () => {
- await collections.chartSummaries.save({
- date: '2021-01-01',
- dmarc: {
- total: 1000,
- fail: 500,
- pass: 500,
- },
- })
- })
- afterEach(async () => {
- await truncate()
- })
- afterAll(async () => {
- await drop()
- })
- it('returns dmarc summary', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- dmarcSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: loadChartSummaryByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- dmarcSummary: {
- total: 1000,
- categories: [
- {
- name: 'pass',
- count: 500,
- percentage: 50,
- },
- {
- name: 'fail',
- count: 500,
- percentage: 50,
- },
- ],
- },
- },
- }
- expect(response).toEqual(expectedResponse)
- })
- })
-
- describe('users language is set to english', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('given unsuccessful dmarc summary retrieval', () => {
- describe('summary cannot be found', () => {
- it('returns an appropriate error message', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- dmarcSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- },
- },
- })
-
- const error = [new GraphQLError(`Unable to load DMARC summary. Please try again.`)]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([`User could not retrieve DMARC summary.`])
- })
- })
- })
- })
-})
diff --git a/api/src/summaries/queries/__tests__/find-chart-summaries.test.js b/api/src/summaries/queries/__tests__/find-chart-summaries.test.js
index d137c2a2c7..81455dd068 100644
--- a/api/src/summaries/queries/__tests__/find-chart-summaries.test.js
+++ b/api/src/summaries/queries/__tests__/find-chart-summaries.test.js
@@ -155,14 +155,14 @@ describe('given findMyOrganizationsQuery', () => {
}),
verifiedRequired: verifiedRequired({}),
},
- loaders: {
- loadChartSummariesByPeriod: loadChartSummariesByPeriod({
+ dataSources: {
+ summaries: { getConnectionsByPeriod: loadChartSummariesByPeriod({
query,
userKey: user._key,
cleanseInput,
auth: { loginRequired: true },
language: 'en',
- }),
+ }) },
},
},
})
@@ -305,15 +305,15 @@ describe('given findMyOrganizationsQuery', () => {
userRequired: jest.fn().mockReturnValue({}),
verifiedRequired: jest.fn(),
},
- loaders: {
- loadChartSummariesByPeriod: loadChartSummariesByPeriod({
+ dataSources: {
+ summaries: { getConnectionsByPeriod: loadChartSummariesByPeriod({
query: mockedQuery,
userKey: user._key,
cleanseInput,
auth: { loginRequired: true },
language: 'en',
i18n,
- }),
+ }) },
},
},
})
diff --git a/api/src/summaries/queries/__tests__/https-summary.test.js b/api/src/summaries/queries/__tests__/https-summary.test.js
deleted file mode 100644
index 47d3d3919d..0000000000
--- a/api/src/summaries/queries/__tests__/https-summary.test.js
+++ /dev/null
@@ -1,229 +0,0 @@
-import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../../testUtilities'
-import { graphql, GraphQLSchema, GraphQLError } from 'graphql'
-import { setupI18n } from '@lingui/core'
-
-import englishMessages from '../../../locale/en/messages'
-import frenchMessages from '../../../locale/fr/messages'
-import { createQuerySchema } from '../../../query'
-import { createMutationSchema } from '../../../mutation'
-import { loadChartSummaryByKey } from '../../loaders'
-import dbschema from '../../../../database.json'
-
-const { DB_PASS: rootPass, DB_URL: url } = process.env
-
-describe('given httpsSummary query', () => {
- let query, drop, truncate, schema, collections, i18n
-
- const consoleOutput = []
- const mockedInfo = (output) => consoleOutput.push(output)
- const mockedWarn = (output) => consoleOutput.push(output)
- const mockedError = (output) => consoleOutput.push(output)
- beforeAll(async () => {
- console.info = mockedInfo
- console.warn = mockedWarn
- console.error = mockedError
- // Create GQL Schema
- schema = new GraphQLSchema({
- query: createQuerySchema(),
- mutation: createMutationSchema(),
- })
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
-
- beforeEach(() => {
- consoleOutput.length = 0
- })
-
- describe('given successful https summary retrieval', () => {
- beforeAll(async () => {
- // Generate DB Items
- ;({ query, drop, truncate, collections } = await ensure({
- variables: {
- dbname: dbNameFromFile(__filename),
- username: 'root',
- rootPassword: rootPass,
- password: rootPass,
- url,
- },
-
- schema: dbschema,
- }))
- })
- beforeEach(async () => {
- await collections.chartSummaries.save({
- date: '2021-01-01',
- https: {
- total: 1000,
- fail: 500,
- pass: 500,
- },
- })
- })
- afterEach(async () => {
- await truncate()
- })
- afterAll(async () => {
- await drop()
- })
- it('returns https summary', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- httpsSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: loadChartSummaryByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- httpsSummary: {
- total: 1000,
- categories: [
- {
- name: 'pass',
- count: 500,
- percentage: 50,
- },
- {
- name: 'fail',
- count: 500,
- percentage: 50,
- },
- ],
- },
- },
- }
- expect(response).toEqual(expectedResponse)
- })
- })
-
- describe('users language is set to english', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('given unsuccessful https summary retrieval', () => {
- describe('summary cannot be found', () => {
- it('returns an appropriate error message', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- httpsSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- },
- },
- })
-
- const error = [new GraphQLError(`Unable to load HTTPS summary. Please try again.`)]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([`User could not retrieve HTTPS summary.`])
- })
- })
- })
- })
- describe('users language is set to french', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'fr',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('given unsuccessful https summary retrieval', () => {
- describe('summary cannot be found', () => {
- it('returns an appropriate error message', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- httpsSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Impossible de charger le résumé HTTPS. Veuillez réessayer.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([`User could not retrieve HTTPS summary.`])
- })
- })
- })
- })
-})
diff --git a/api/src/summaries/queries/__tests__/mail-summary.test.js b/api/src/summaries/queries/__tests__/mail-summary.test.js
deleted file mode 100644
index 1711ca2de5..0000000000
--- a/api/src/summaries/queries/__tests__/mail-summary.test.js
+++ /dev/null
@@ -1,229 +0,0 @@
-import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../../testUtilities'
-import { graphql, GraphQLSchema, GraphQLError } from 'graphql'
-import { setupI18n } from '@lingui/core'
-
-import englishMessages from '../../../locale/en/messages'
-import frenchMessages from '../../../locale/fr/messages'
-import { createQuerySchema } from '../../../query'
-import { createMutationSchema } from '../../../mutation'
-import { loadChartSummaryByKey } from '../../loaders'
-import dbschema from '../../../../database.json'
-
-const { DB_PASS: rootPass, DB_URL: url } = process.env
-
-describe('given mailSummary query', () => {
- let query, drop, truncate, schema, collections, i18n
-
- const consoleOutput = []
- const mockedInfo = (output) => consoleOutput.push(output)
- const mockedWarn = (output) => consoleOutput.push(output)
- const mockedError = (output) => consoleOutput.push(output)
- beforeAll(async () => {
- console.info = mockedInfo
- console.warn = mockedWarn
- console.error = mockedError
- // Create GQL Schema
- schema = new GraphQLSchema({
- query: createQuerySchema(),
- mutation: createMutationSchema(),
- })
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
-
- beforeEach(() => {
- consoleOutput.length = 0
- })
-
- describe('given successful mail summary retrieval', () => {
- beforeAll(async () => {
- // Generate DB Items
- ;({ query, drop, truncate, collections } = await ensure({
- variables: {
- dbname: dbNameFromFile(__filename),
- username: 'root',
- rootPassword: rootPass,
- password: rootPass,
- url,
- },
-
- schema: dbschema,
- }))
- })
- beforeEach(async () => {
- await collections.chartSummaries.save({
- date: '2021-01-01',
- mail: {
- total: 1000,
- fail: 500,
- pass: 500,
- },
- })
- })
- afterEach(async () => {
- await truncate()
- })
- afterAll(async () => {
- await drop()
- })
- it('returns mail summary', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- mailSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: loadChartSummaryByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- mailSummary: {
- total: 1000,
- categories: [
- {
- name: 'pass',
- count: 500,
- percentage: 50,
- },
- {
- name: 'fail',
- count: 500,
- percentage: 50,
- },
- ],
- },
- },
- }
- expect(response).toEqual(expectedResponse)
- })
- })
-
- describe('users language is set to english', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('given unsuccessful mail summary retrieval', () => {
- describe('summary cannot be found', () => {
- it('returns an appropriate error message', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- mailSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- },
- },
- })
-
- const error = [new GraphQLError(`Unable to load mail summary. Please try again.`)]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([`User could not retrieve mail summary.`])
- })
- })
- })
- })
- describe('users language is set to french', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'fr',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('given unsuccessful mail summary retrieval', () => {
- describe('summary cannot be found', () => {
- it('returns an appropriate error message', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- mailSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Impossible de charger le résumé du courrier. Veuillez réessayer.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([`User could not retrieve mail summary.`])
- })
- })
- })
- })
-})
diff --git a/api/src/summaries/queries/__tests__/spf-summary.test.js b/api/src/summaries/queries/__tests__/spf-summary.test.js
deleted file mode 100644
index 095b282fb8..0000000000
--- a/api/src/summaries/queries/__tests__/spf-summary.test.js
+++ /dev/null
@@ -1,177 +0,0 @@
-import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../../testUtilities'
-import { graphql, GraphQLSchema, GraphQLError } from 'graphql'
-import { setupI18n } from '@lingui/core'
-
-import englishMessages from '../../../locale/en/messages'
-import frenchMessages from '../../../locale/fr/messages'
-import { createQuerySchema } from '../../../query'
-import { createMutationSchema } from '../../../mutation'
-import { loadChartSummaryByKey } from '../../loaders'
-import dbschema from '../../../../database.json'
-
-const { DB_PASS: rootPass, DB_URL: url } = process.env
-
-describe('given spfSummary query', () => {
- let query, drop, truncate, schema, collections, i18n
-
- const consoleOutput = []
- const mockedInfo = (output) => consoleOutput.push(output)
- const mockedWarn = (output) => consoleOutput.push(output)
- const mockedError = (output) => consoleOutput.push(output)
- beforeAll(() => {
- console.info = mockedInfo
- console.warn = mockedWarn
- console.error = mockedError
- // Create GQL Schema
- schema = new GraphQLSchema({
- query: createQuerySchema(),
- mutation: createMutationSchema(),
- })
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- afterEach(() => {
- consoleOutput.length = 0
- })
-
- describe('given successful spf summary retrieval', () => {
- beforeAll(async () => {
- // Generate DB Items
- ;({ query, drop, truncate, collections } = await ensure({
- variables: {
- dbname: dbNameFromFile(__filename),
- username: 'root',
- rootPassword: rootPass,
- password: rootPass,
- url,
- },
-
- schema: dbschema,
- }))
- })
- beforeEach(async () => {
- await collections.chartSummaries.save({
- date: '2021-01-01',
- spf: {
- total: 1000,
- fail: 500,
- pass: 500,
- },
- })
- })
- afterEach(async () => {
- await truncate()
- })
- afterAll(async () => {
- await drop()
- })
- it('returns spf summary', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- spfSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: loadChartSummaryByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- spfSummary: {
- total: 1000,
- categories: [
- {
- name: 'pass',
- count: 500,
- percentage: 50,
- },
- {
- name: 'fail',
- count: 500,
- percentage: 50,
- },
- ],
- },
- },
- }
- expect(response).toEqual(expectedResponse)
- })
- })
-
- describe('users language is set to english', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('given unsuccessful spf summary retrieval', () => {
- describe('summary cannot be found', () => {
- it('returns an appropriate error message', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- spfSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- },
- },
- })
-
- const error = [new GraphQLError(`Unable to load SPF summary. Please try again.`)]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([`User could not retrieve SPF summary.`])
- })
- })
- })
- })
-})
diff --git a/api/src/summaries/queries/__tests__/ssl-summary.test.js b/api/src/summaries/queries/__tests__/ssl-summary.test.js
deleted file mode 100644
index c3a813a039..0000000000
--- a/api/src/summaries/queries/__tests__/ssl-summary.test.js
+++ /dev/null
@@ -1,177 +0,0 @@
-import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../../testUtilities'
-import { graphql, GraphQLSchema, GraphQLError } from 'graphql'
-import { setupI18n } from '@lingui/core'
-
-import englishMessages from '../../../locale/en/messages'
-import frenchMessages from '../../../locale/fr/messages'
-import { createQuerySchema } from '../../../query'
-import { createMutationSchema } from '../../../mutation'
-import { loadChartSummaryByKey } from '../../loaders'
-import dbschema from '../../../../database.json'
-
-const { DB_PASS: rootPass, DB_URL: url } = process.env
-
-describe('given sslSummary query', () => {
- let query, drop, truncate, schema, collections, i18n
-
- const consoleOutput = []
- const mockedInfo = (output) => consoleOutput.push(output)
- const mockedWarn = (output) => consoleOutput.push(output)
- const mockedError = (output) => consoleOutput.push(output)
- beforeAll(() => {
- console.info = mockedInfo
- console.warn = mockedWarn
- console.error = mockedError
- // Create GQL Schema
- schema = new GraphQLSchema({
- query: createQuerySchema(),
- mutation: createMutationSchema(),
- })
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- afterEach(() => {
- consoleOutput.length = 0
- })
-
- describe('given successful ssl summary retrieval', () => {
- beforeAll(async () => {
- // Generate DB Items
- ;({ query, drop, truncate, collections } = await ensure({
- variables: {
- dbname: dbNameFromFile(__filename),
- username: 'root',
- rootPassword: rootPass,
- password: rootPass,
- url,
- },
-
- schema: dbschema,
- }))
- })
- beforeEach(async () => {
- await collections.chartSummaries.save({
- date: '2021-01-01',
- ssl: {
- total: 1000,
- fail: 500,
- pass: 500,
- },
- })
- })
- afterEach(async () => {
- await truncate()
- })
- afterAll(async () => {
- await drop()
- })
- it('returns ssl summary', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- sslSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: loadChartSummaryByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- sslSummary: {
- total: 1000,
- categories: [
- {
- name: 'pass',
- count: 500,
- percentage: 50,
- },
- {
- name: 'fail',
- count: 500,
- percentage: 50,
- },
- ],
- },
- },
- }
- expect(response).toEqual(expectedResponse)
- })
- })
-
- describe('users language is set to english', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('given unsuccessful ssl summary retrieval', () => {
- describe('summary cannot be found', () => {
- it('returns an appropriate error message', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- sslSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- },
- },
- })
-
- const error = [new GraphQLError(`Unable to load SSL summary. Please try again.`)]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([`User could not retrieve SSL summary.`])
- })
- })
- })
- })
-})
diff --git a/api/src/summaries/queries/__tests__/web-connections-summary.test.js b/api/src/summaries/queries/__tests__/web-connections-summary.test.js
deleted file mode 100644
index afd2dd17c7..0000000000
--- a/api/src/summaries/queries/__tests__/web-connections-summary.test.js
+++ /dev/null
@@ -1,177 +0,0 @@
-import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../../testUtilities'
-import { graphql, GraphQLSchema, GraphQLError } from 'graphql'
-import { setupI18n } from '@lingui/core'
-
-import englishMessages from '../../../locale/en/messages'
-import frenchMessages from '../../../locale/fr/messages'
-import { createQuerySchema } from '../../../query'
-import { createMutationSchema } from '../../../mutation'
-import { loadChartSummaryByKey } from '../../loaders'
-import dbschema from '../../../../database.json'
-
-const { DB_PASS: rootPass, DB_URL: url } = process.env
-
-describe('given webConnectionsSummary query', () => {
- let query, drop, truncate, schema, collections, i18n
-
- const consoleOutput = []
- const mockedInfo = (output) => consoleOutput.push(output)
- const mockedWarn = (output) => consoleOutput.push(output)
- const mockedError = (output) => consoleOutput.push(output)
- beforeAll(() => {
- console.info = mockedInfo
- console.warn = mockedWarn
- console.error = mockedError
- // Create GQL Schema
- schema = new GraphQLSchema({
- query: createQuerySchema(),
- mutation: createMutationSchema(),
- })
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- afterEach(() => {
- consoleOutput.length = 0
- })
-
- describe('given successful webConnections summary retrieval', () => {
- beforeAll(async () => {
- // Generate DB Items
- ;({ query, drop, truncate, collections } = await ensure({
- variables: {
- dbname: dbNameFromFile(__filename),
- username: 'root',
- rootPassword: rootPass,
- password: rootPass,
- url,
- },
-
- schema: dbschema,
- }))
- })
- beforeEach(async () => {
- await collections.chartSummaries.save({
- date: '2021-01-01',
- web_connections: {
- total: 1000,
- fail: 500,
- pass: 500,
- },
- })
- })
- afterEach(async () => {
- await truncate()
- })
- afterAll(async () => {
- await drop()
- })
- it('returns webConnections summary', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- webConnectionsSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: loadChartSummaryByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- webConnectionsSummary: {
- total: 1000,
- categories: [
- {
- name: 'pass',
- count: 500,
- percentage: 50,
- },
- {
- name: 'fail',
- count: 500,
- percentage: 50,
- },
- ],
- },
- },
- }
- expect(response).toEqual(expectedResponse)
- })
- })
-
- describe('users language is set to english', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('given unsuccessful webConnections summary retrieval', () => {
- describe('summary cannot be found', () => {
- it('returns an appropriate error message', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- webConnectionsSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- },
- },
- })
-
- const error = [new GraphQLError(`Unable to load web connections summary. Please try again.`)]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([`User could not retrieve web connections summary.`])
- })
- })
- })
- })
-})
diff --git a/api/src/summaries/queries/__tests__/web-summary.test.js b/api/src/summaries/queries/__tests__/web-summary.test.js
deleted file mode 100644
index 4b1a8dc3bb..0000000000
--- a/api/src/summaries/queries/__tests__/web-summary.test.js
+++ /dev/null
@@ -1,228 +0,0 @@
-import { dbNameFromFile } from 'arango-tools'
-import { ensureDatabase as ensure } from '../../../testUtilities'
-import { graphql, GraphQLSchema, GraphQLError } from 'graphql'
-import { setupI18n } from '@lingui/core'
-
-import englishMessages from '../../../locale/en/messages'
-import frenchMessages from '../../../locale/fr/messages'
-import { createQuerySchema } from '../../../query'
-import { createMutationSchema } from '../../../mutation'
-import { loadChartSummaryByKey } from '../../loaders'
-import dbschema from '../../../../database.json'
-
-const { DB_PASS: rootPass, DB_URL: url } = process.env
-
-describe('given webSummary query', () => {
- let query, drop, truncate, schema, collections, i18n
-
- const consoleOutput = []
- const mockedInfo = (output) => consoleOutput.push(output)
- const mockedWarn = (output) => consoleOutput.push(output)
- const mockedError = (output) => consoleOutput.push(output)
- beforeAll(() => {
- console.info = mockedInfo
- console.warn = mockedWarn
- console.error = mockedError
- // Create GQL Schema
- schema = new GraphQLSchema({
- query: createQuerySchema(),
- mutation: createMutationSchema(),
- })
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- afterEach(() => {
- consoleOutput.length = 0
- })
-
- describe('given successful web summary retrieval', () => {
- beforeAll(async () => {
- // Generate DB Items
- ;({ query, drop, truncate, collections } = await ensure({
- variables: {
- dbname: dbNameFromFile(__filename),
- username: 'root',
- rootPassword: rootPass,
- password: rootPass,
- url,
- },
-
- schema: dbschema,
- }))
- })
- beforeEach(async () => {
- await collections.chartSummaries.save({
- date: '2020-10-02',
- web: {
- total: 1000,
- fail: 500,
- pass: 500,
- },
- })
- })
- afterEach(async () => {
- await truncate()
- })
- afterAll(async () => {
- await drop()
- })
- it('returns web summary', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- webSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: loadChartSummaryByKey({ query }),
- },
- },
- })
-
- const expectedResponse = {
- data: {
- webSummary: {
- total: 1000,
- categories: [
- {
- name: 'pass',
- count: 500,
- percentage: 50,
- },
- {
- name: 'fail',
- count: 500,
- percentage: 50,
- },
- ],
- },
- },
- }
- expect(response).toEqual(expectedResponse)
- })
- })
-
- describe('users language is set to english', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'en',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('given unsuccessful web summary retrieval', () => {
- describe('summary cannot be found', () => {
- it('returns an appropriate error message', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- webSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- },
- },
- })
-
- const error = [new GraphQLError(`Unable to load web summary. Please try again.`)]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([`User could not retrieve web summary.`])
- })
- })
- })
- })
- describe('users language is set to french', () => {
- beforeAll(() => {
- i18n = setupI18n({
- locale: 'fr',
- localeData: {
- en: { plurals: {} },
- fr: { plurals: {} },
- },
- locales: ['en', 'fr'],
- messages: {
- en: englishMessages.messages,
- fr: frenchMessages.messages,
- },
- })
- })
- describe('given unsuccessful web summary retrieval', () => {
- describe('summary cannot be found', () => {
- it('returns an appropriate error message', async () => {
- const response = await graphql({
- schema,
- source: `
- query {
- webSummary {
- total
- categories {
- name
- count
- percentage
- }
- }
- }
- `,
- rootValue: null,
- contextValue: {
- i18n,
- loaders: {
- loadChartSummaryByKey: {
- load: jest.fn().mockReturnValue(undefined),
- },
- },
- },
- })
-
- const error = [new GraphQLError('Impossible de charger le résumé web. Veuillez réessayer.')]
-
- expect(response.errors).toEqual(error)
- expect(consoleOutput).toEqual([`User could not retrieve web summary.`])
- })
- })
- })
- })
-})
diff --git a/api/src/summaries/queries/dkim-summary.js b/api/src/summaries/queries/dkim-summary.js
deleted file mode 100644
index 9a91978ce4..0000000000
--- a/api/src/summaries/queries/dkim-summary.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import { categorizedSummaryType } from '../objects'
-import { t } from '@lingui/macro'
-
-export const dkimSummary = {
- type: categorizedSummaryType,
- description: 'DKIM summary computed values, used to build summary cards.',
- resolve: async (_, __, { i18n, loaders: { loadChartSummaryByKey } }) => {
- const summary = await loadChartSummaryByKey.load('dkim')
-
- if (typeof summary === 'undefined') {
- console.warn(`User could not retrieve DKIM summary.`)
- throw new Error(i18n._(t`Unable to load DKIM summary. Please try again.`))
- }
-
- const categories = [
- {
- name: 'pass',
- count: summary.pass,
- percentage: Number(((summary.pass / summary.total) * 100).toFixed(1)),
- },
- {
- name: 'fail',
- count: summary.fail,
- percentage: Number(((summary.fail / summary.total) * 100).toFixed(1)),
- },
- ]
-
- return {
- categories,
- total: summary.total,
- }
- },
-}
diff --git a/api/src/summaries/queries/dmarc-phase-summary.js b/api/src/summaries/queries/dmarc-phase-summary.js
deleted file mode 100644
index a48bcd1787..0000000000
--- a/api/src/summaries/queries/dmarc-phase-summary.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import { categorizedSummaryType } from '../objects'
-import { t } from '@lingui/macro'
-
-export const dmarcPhaseSummary = {
- type: categorizedSummaryType,
- description: 'DMARC phase summary computed values, used to build summary cards.',
- resolve: async (_, __, { i18n, loaders: { loadChartSummaryByKey } }) => {
- const summary = await loadChartSummaryByKey.load('dmarc_phase')
-
- if (typeof summary === 'undefined') {
- console.warn(`User could not retrieve DMARC phase summary.`)
- throw new Error(i18n._(t`Unable to load DMARC phase summary. Please try again.`))
- }
- const phaseNames = ['assess', 'deploy', 'enforce', 'maintain']
- const { total } = summary
- const categories = phaseNames.map((name) => ({
- name,
- count: summary[name],
- percentage: Number(((summary[name] / total) * 100).toFixed(1)),
- }))
-
- return {
- categories,
- total,
- }
- },
-}
diff --git a/api/src/summaries/queries/dmarc-summary.js b/api/src/summaries/queries/dmarc-summary.js
deleted file mode 100644
index e7ca64b3c8..0000000000
--- a/api/src/summaries/queries/dmarc-summary.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import { categorizedSummaryType } from '../objects'
-import { t } from '@lingui/macro'
-
-export const dmarcSummary = {
- type: categorizedSummaryType,
- description: 'DMARC summary computed values, used to build summary cards.',
- resolve: async (_, __, { i18n, loaders: { loadChartSummaryByKey } }) => {
- const summary = await loadChartSummaryByKey.load('dmarc')
-
- if (typeof summary === 'undefined') {
- console.warn(`User could not retrieve DMARC summary.`)
- throw new Error(i18n._(t`Unable to load DMARC summary. Please try again.`))
- }
-
- const categories = [
- {
- name: 'pass',
- count: summary.pass,
- percentage: Number(((summary.pass / summary.total) * 100).toFixed(1)),
- },
- {
- name: 'fail',
- count: summary.fail,
- percentage: Number(((summary.fail / summary.total) * 100).toFixed(1)),
- },
- ]
-
- return {
- categories,
- total: summary.total,
- }
- },
-}
diff --git a/api/src/summaries/queries/find-chart-summaries.js b/api/src/summaries/queries/find-chart-summaries.js
index 73c7957e70..0da7b349fa 100644
--- a/api/src/summaries/queries/find-chart-summaries.js
+++ b/api/src/summaries/queries/find-chart-summaries.js
@@ -27,14 +27,14 @@ export const findChartSummaries = {
resolve: async (
_,
args,
- { userKey, auth: { userRequired, loginRequiredBool, verifiedRequired }, loaders: { loadChartSummariesByPeriod } },
+ { userKey, auth: { userRequired, loginRequiredBool, verifiedRequired }, dataSources: { summaries } },
) => {
if (loginRequiredBool) {
const user = await userRequired()
verifiedRequired({ user })
}
- const summaryConnections = await loadChartSummariesByPeriod({ ...args })
+ const summaryConnections = await summaries.getConnectionsByPeriod({ ...args })
console.info(`User: ${userKey} successfully retrieved their chart summaries.`)
return summaryConnections
diff --git a/api/src/summaries/queries/https-summary.js b/api/src/summaries/queries/https-summary.js
deleted file mode 100644
index 781a23ab83..0000000000
--- a/api/src/summaries/queries/https-summary.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import {categorizedSummaryType} from '../objects'
-import {t} from '@lingui/macro'
-
-export const httpsSummary = {
- type: categorizedSummaryType,
- description: 'HTTPS summary computed values, used to build summary cards.',
- resolve: async (_, __, {i18n, loaders: {loadChartSummaryByKey}}) => {
- const summary = await loadChartSummaryByKey.load('https')
-
- if (typeof summary === 'undefined') {
- console.warn(`User could not retrieve HTTPS summary.`)
- throw new Error(
- i18n._(t`Unable to load HTTPS summary. Please try again.`),
- )
- }
-
- const categories = [
- {
- name: 'pass',
- count: summary.pass,
- percentage: Number(((summary.pass / summary.total) * 100).toFixed(1)),
- },
- {
- name: 'fail',
- count: summary.fail,
- percentage: Number(((summary.fail / summary.total) * 100).toFixed(1)),
- },
- ]
-
- return {
- categories,
- total: summary.total,
- }
- },
-}
diff --git a/api/src/summaries/queries/index.js b/api/src/summaries/queries/index.js
index 50087ebeed..8002030019 100644
--- a/api/src/summaries/queries/index.js
+++ b/api/src/summaries/queries/index.js
@@ -1,10 +1 @@
-export * from './dkim-summary'
-export * from './dmarc-phase-summary'
-export * from './dmarc-summary'
-export * from './https-summary'
-export * from './mail-summary'
-export * from './spf-summary'
-export * from './ssl-summary'
-export * from './web-connections-summary'
-export * from './web-summary'
export * from './find-chart-summaries'
diff --git a/api/src/summaries/queries/mail-summary.js b/api/src/summaries/queries/mail-summary.js
deleted file mode 100644
index 71f46a8bff..0000000000
--- a/api/src/summaries/queries/mail-summary.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import {categorizedSummaryType} from '../objects'
-import {t} from '@lingui/macro'
-
-export const mailSummary = {
- type: categorizedSummaryType,
- description: 'Email summary computed values, used to build summary cards.',
- resolve: async (_, __, {i18n, loaders: {loadChartSummaryByKey}}) => {
- const summary = await loadChartSummaryByKey.load('mail')
-
- if (typeof summary === 'undefined') {
- console.warn(`User could not retrieve mail summary.`)
- throw new Error(i18n._(t`Unable to load mail summary. Please try again.`))
- }
-
- const categories = [
- {
- name: 'pass',
- count: summary.pass,
- percentage: Number(((summary.pass / summary.total) * 100).toFixed(1)),
- },
- {
- name: 'fail',
- count: summary.fail,
- percentage: Number(((summary.fail / summary.total) * 100).toFixed(1)),
- },
- ]
-
- return {
- categories,
- total: summary.total,
- }
- },
-}
diff --git a/api/src/summaries/queries/spf-summary.js b/api/src/summaries/queries/spf-summary.js
deleted file mode 100644
index c320ff40ff..0000000000
--- a/api/src/summaries/queries/spf-summary.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import { categorizedSummaryType } from '../objects'
-import { t } from '@lingui/macro'
-
-export const spfSummary = {
- type: categorizedSummaryType,
- description: 'SPF summary computed values, used to build summary cards.',
- resolve: async (_, __, { i18n, loaders: { loadChartSummaryByKey } }) => {
- const summary = await loadChartSummaryByKey.load('spf')
-
- if (typeof summary === 'undefined') {
- console.warn(`User could not retrieve SPF summary.`)
- throw new Error(i18n._(t`Unable to load SPF summary. Please try again.`))
- }
-
- const categories = [
- {
- name: 'pass',
- count: summary.pass,
- percentage: Number(((summary.pass / summary.total) * 100).toFixed(1)),
- },
- {
- name: 'fail',
- count: summary.fail,
- percentage: Number(((summary.fail / summary.total) * 100).toFixed(1)),
- },
- ]
-
- return {
- categories,
- total: summary.total,
- }
- },
-}
diff --git a/api/src/summaries/queries/ssl-summary.js b/api/src/summaries/queries/ssl-summary.js
deleted file mode 100644
index ceafecefde..0000000000
--- a/api/src/summaries/queries/ssl-summary.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import { categorizedSummaryType } from '../objects'
-import { t } from '@lingui/macro'
-
-export const sslSummary = {
- type: categorizedSummaryType,
- description: 'SSL summary computed values, used to build summary cards.',
- resolve: async (_, __, { i18n, loaders: { loadChartSummaryByKey } }) => {
- const summary = await loadChartSummaryByKey.load('ssl')
-
- if (typeof summary === 'undefined') {
- console.warn(`User could not retrieve SSL summary.`)
- throw new Error(i18n._(t`Unable to load SSL summary. Please try again.`))
- }
-
- const categories = [
- {
- name: 'pass',
- count: summary.pass,
- percentage: Number(((summary.pass / summary.total) * 100).toFixed(1)),
- },
- {
- name: 'fail',
- count: summary.fail,
- percentage: Number(((summary.fail / summary.total) * 100).toFixed(1)),
- },
- ]
-
- return {
- categories,
- total: summary.total,
- }
- },
-}
diff --git a/api/src/summaries/queries/web-connections-summary.js b/api/src/summaries/queries/web-connections-summary.js
deleted file mode 100644
index a25acc7d38..0000000000
--- a/api/src/summaries/queries/web-connections-summary.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import { categorizedSummaryType } from '../objects'
-import { t } from '@lingui/macro'
-
-export const webConnectionsSummary = {
- type: categorizedSummaryType,
- description: 'Web connections (HTTPS + HSTS) summary computed values, used to build summary cards.',
- resolve: async (_, __, { i18n, loaders: { loadChartSummaryByKey } }) => {
- const summary = await loadChartSummaryByKey.load('web_connections')
-
- if (typeof summary === 'undefined') {
- console.warn(`User could not retrieve web connections summary.`)
- throw new Error(i18n._(t`Unable to load web connections summary. Please try again.`))
- }
-
- const categories = [
- {
- name: 'pass',
- count: summary.pass,
- percentage: Number(((summary.pass / summary.total) * 100).toFixed(1)),
- },
- {
- name: 'fail',
- count: summary.fail,
- percentage: Number(((summary.fail / summary.total) * 100).toFixed(1)),
- },
- ]
-
- return {
- categories,
- total: summary.total,
- }
- },
-}
diff --git a/api/src/summaries/queries/web-summary.js b/api/src/summaries/queries/web-summary.js
deleted file mode 100644
index 63347617b4..0000000000
--- a/api/src/summaries/queries/web-summary.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import {t} from '@lingui/macro'
-
-import {categorizedSummaryType} from '../objects'
-
-export const webSummary = {
- type: categorizedSummaryType,
- description: 'Web summary computed values, used to build summary cards.',
- resolve: async (_, __, {i18n, loaders: {loadChartSummaryByKey}}) => {
- const summary = await loadChartSummaryByKey.load('web')
-
- if (typeof summary === 'undefined') {
- console.warn(`User could not retrieve web summary.`)
- throw new Error(i18n._(t`Unable to load web summary. Please try again.`))
- }
-
- const categories = [
- {
- name: 'pass',
- count: summary.pass,
- percentage: Number(((summary.pass / summary.total) * 100).toFixed(1)),
- },
- {
- name: 'fail',
- count: summary.fail,
- percentage: Number(((summary.fail / summary.total) * 100).toFixed(1)),
- },
- ]
-
- return {
- categories,
- total: summary.total,
- }
- },
-}
diff --git a/api/src/tags/data-source.js b/api/src/tags/data-source.js
new file mode 100644
index 0000000000..5199e29c96
--- /dev/null
+++ b/api/src/tags/data-source.js
@@ -0,0 +1,106 @@
+import { t } from '@lingui/macro'
+import { loadAllTags, loadTagByTagId, loadTagsByOrg } from './loaders'
+
+export class TagsDataSource {
+ constructor({ query, userKey, i18n, language, transaction, collections }) {
+ this._query = query
+ this._userKey = userKey
+ this._i18n = i18n
+ this._transaction = transaction
+ this._collections = collections
+ this.all = loadAllTags({ query, userKey, i18n, language })
+ this.byTagId = loadTagByTagId({ query, userKey, i18n, language })
+ this.byOrg = loadTagsByOrg({ query, userKey, i18n, language })
+ }
+
+ // Fetch the raw DB document (label/description as {en, fr} objects, not translated strings).
+ // Used by mutations that need to read current field values before updating.
+ async getRaw(tagId) {
+ const { _query, _userKey, _i18n } = this
+ let cursor
+ try {
+ cursor = await _query`
+ WITH tags
+ FOR tag IN tags
+ FILTER tag.tagId == ${tagId}
+ RETURN tag
+ `
+ } catch (err) {
+ console.error(`Database error occurred while retrieving tag: ${tagId} for user: ${_userKey}, err: ${err}`)
+ throw new Error(_i18n._(t`Unable to update tag. Please try again.`))
+ }
+ try {
+ return await cursor.next()
+ } catch (err) {
+ console.error(`Cursor error occurred while retrieving tag: ${tagId} for user: ${_userKey}, err: ${err}`)
+ throw new Error(_i18n._(t`Unable to update tag. Please try again.`))
+ }
+ }
+
+ // Insert or update a tag, then return the freshly loaded record.
+ async create(tag) {
+ const { _query, _userKey, _i18n, _transaction, _collections } = this
+ const trx = await _transaction(_collections)
+ try {
+ await trx.step(
+ () =>
+ _query`
+ UPSERT { tagId: ${tag.tagId} }
+ INSERT ${tag}
+ UPDATE ${tag}
+ IN tags
+ RETURN NEW
+ `,
+ )
+ } catch (err) {
+ console.error(`Transaction step error occurred for user: ${_userKey} when inserting new tag: ${err}`)
+ await trx.abort()
+ throw new Error(_i18n._(t`Unable to create tag. Please try again.`))
+ }
+ try {
+ await trx.commit()
+ } catch (err) {
+ console.error(`Transaction commit error occurred while user: ${_userKey} was creating tag: ${err}`)
+ await trx.abort()
+ throw new Error(_i18n._(t`Unable to create tag. Please try again.`))
+ }
+ this.byTagId.clear(tag.tagId)
+ return this.byTagId.load(tag.tagId)
+ }
+
+ // Update an existing tag matched by matchTagId (which may differ from tag.tagId after a label rename),
+ // then return the freshly loaded record.
+ async save(matchTagId, tag) {
+ const { _query, _userKey, _i18n, _transaction, _collections } = this
+ const trx = await _transaction(_collections)
+ try {
+ await trx.step(
+ async () =>
+ await _query`
+ WITH tags
+ UPSERT { tagId: ${matchTagId} }
+ INSERT ${tag}
+ UPDATE ${tag}
+ IN tags
+ `,
+ )
+ } catch (err) {
+ console.error(
+ `Transaction step error occurred when user: ${_userKey} attempted to update tag: ${matchTagId}, error: ${err}`,
+ )
+ await trx.abort()
+ throw new Error(_i18n._(t`Unable to update tag. Please try again.`))
+ }
+ try {
+ await trx.commit()
+ } catch (err) {
+ console.error(
+ `Transaction commit error occurred when user: ${_userKey} attempted to update tag: ${matchTagId}, error: ${err}`,
+ )
+ await trx.abort()
+ throw new Error(_i18n._(t`Unable to update tag. Please try again.`))
+ }
+ this.byTagId.clear(tag.tagId)
+ return this.byTagId.load(tag.tagId)
+ }
+}
diff --git a/api/src/tags/index.js b/api/src/tags/index.js
index 1b5bd9dcd0..64ebb55b97 100644
--- a/api/src/tags/index.js
+++ b/api/src/tags/index.js
@@ -1,3 +1,4 @@
+export * from './data-source'
export * from './loaders'
export * from './mutations'
export * from './objects'
diff --git a/api/src/tags/mutations/create-tag.js b/api/src/tags/mutations/create-tag.js
index 603af4b8af..293dbc2165 100644
--- a/api/src/tags/mutations/create-tag.js
+++ b/api/src/tags/mutations/create-tag.js
@@ -3,7 +3,7 @@ import { fromGlobalId, mutationWithClientMutationId } from 'graphql-relay'
import { t } from '@lingui/macro'
import { createTagUnion } from '../unions'
import { TagOwnershipEnums } from '../../enums'
-import { logActivity } from '../../audit-logs'
+import ac from '../../access-control'
export const createTag = new mutationWithClientMutationId({
name: 'CreateTag',
@@ -50,12 +50,10 @@ export const createTag = new mutationWithClientMutationId({
{
i18n,
request,
- query,
- collections,
- transaction,
userKey,
auth: { userRequired, verifiedRequired, checkPermission, checkSuperAdmin, superAdminRequired },
- loaders: { loadTagByTagId, loadOrgByKey },
+ loaders: { loadOrgByKey },
+ dataSources: { tags, auditLogs },
validators: { cleanseInput, slugify },
},
) => {
@@ -83,7 +81,7 @@ export const createTag = new mutationWithClientMutationId({
organizations: [],
}
- const tag = await loadTagByTagId.load(insertTag.tagId)
+ const tag = await tags.byTagId.load(insertTag.tagId)
const isSuperAdmin = await checkSuperAdmin()
if (ownership === 'global') {
@@ -98,9 +96,6 @@ export const createTag = new mutationWithClientMutationId({
}
}
- // Setup Transaction
- const trx = await transaction(collections)
-
let permission, org
if (ownership === 'org') {
if (typeof orgId === 'undefined') {
@@ -126,7 +121,7 @@ export const createTag = new mutationWithClientMutationId({
}
permission = await checkPermission({ orgId: org._id })
- if (!['super_admin', 'admin', 'owner'].includes(permission)) {
+ if (!ac.can(permission).createOwn('tag').granted) {
console.warn(
`User: ${userKey} attempted to create a tag in: ${org.slug}, however they do not have permission to do so.`,
)
@@ -155,41 +150,11 @@ export const createTag = new mutationWithClientMutationId({
}
}
- try {
- await trx.step(
- () =>
- query`
- UPSERT { tagId: ${insertTag.tagId} }
- INSERT ${insertTag}
- UPDATE ${insertTag}
- IN tags
- RETURN NEW
- `,
- )
- } catch (err) {
- console.error(`Transaction step error occurred for user: ${userKey} when inserting new tag: ${err}`)
- await trx.abort()
- throw new Error(i18n._(t`Unable to create tag. Please try again.`))
- }
-
- try {
- await trx.commit()
- } catch (err) {
- console.error(`Transaction commit error occurred while user: ${userKey} was creating tag: ${err}`)
- await trx.abort()
- throw new Error(i18n._(t`Unable to create tag. Please try again.`))
- }
-
- // Clear dataloader incase anything was updated or inserted into tag
- await loadTagByTagId.clear(insertTag.tagId)
- const returnTag = await loadTagByTagId.load(insertTag.tagId)
+ const returnTag = await tags.create(insertTag)
console.info(`User: ${userKey} successfully created tag ${returnTag.tagId}`)
- await logActivity({
- transaction,
- collections,
- query,
+ await auditLogs.logActivity({
initiatedBy: {
id: user._key,
userName: user.userName,
diff --git a/api/src/tags/mutations/update-tag.js b/api/src/tags/mutations/update-tag.js
index 5e7630c68f..bf50c1b3bb 100644
--- a/api/src/tags/mutations/update-tag.js
+++ b/api/src/tags/mutations/update-tag.js
@@ -3,7 +3,7 @@ import { fromGlobalId, mutationWithClientMutationId } from 'graphql-relay'
import { t } from '@lingui/macro'
import { updateTagUnion } from '../unions'
import { TagOwnershipEnums } from '../../enums'
-import { logActivity } from '../../audit-logs'
+import ac from '../../access-control'
export const updateTag = new mutationWithClientMutationId({
name: 'UpdateTag',
@@ -54,13 +54,11 @@ export const updateTag = new mutationWithClientMutationId({
{
i18n,
request,
- query,
- collections,
- transaction,
userKey,
auth: { userRequired, verifiedRequired, checkSuperAdmin, superAdminRequired, checkPermission },
validators: { cleanseInput, slugify },
- loaders: { loadTagByTagId, loadOrgByKey },
+ loaders: { loadOrgByKey },
+ dataSources: { tags, auditLogs },
},
) => {
// Get User
@@ -77,26 +75,7 @@ export const updateTag = new mutationWithClientMutationId({
const isVisible = args.isVisible
const { type: _orgType, id: orgId } = fromGlobalId(cleanseInput(args.orgId))
- let tagCursor
- try {
- tagCursor = await query`
- WITH tags
- FOR tag IN tags
- FILTER tag.tagId == ${tagId}
- RETURN tag
- `
- } catch (err) {
- console.error(`Database error occurred while retrieving tag: ${tagId} for update, err: ${err}`)
- throw new Error(i18n._(t`Unable to update tag. Please try again.`))
- }
-
- let compareTag
- try {
- compareTag = await tagCursor.next()
- } catch (err) {
- console.error(`Cursor error occurred while retrieving tag: ${tagId} for update, err: ${err}`)
- throw new Error(i18n._(t`Unable to update tag. Please try again.`))
- }
+ const compareTag = await tags.getRaw(tagId)
if (typeof compareTag === 'undefined') {
console.warn(
@@ -136,7 +115,7 @@ export const updateTag = new mutationWithClientMutationId({
}
permission = await checkPermission({ orgId: org._id })
- if (!['super_admin', 'admin', 'owner'].includes(permission)) {
+ if (!ac.can(permission).updateOwn('tag').granted) {
console.warn(
`User: ${userKey} attempted to update a tag in: ${org.slug}, however they do not have permission to do so.`,
)
@@ -173,7 +152,7 @@ export const updateTag = new mutationWithClientMutationId({
const updatedTagId = slugify(`${labelEn || compareTag.label.en}-${labelFr || compareTag.label.fr}`)
if (tagId !== updatedTagId) {
- const existingTag = await loadTagByTagId.load(updatedTagId)
+ const existingTag = await tags.byTagId.load(updatedTagId)
if (typeof existingTag !== 'undefined' && !['org', 'pending'].includes(compareTag.ownership)) {
console.warn(`User: ${userKey} attempted to update a tag that already exists: ${updatedTagId}`)
return {
@@ -199,42 +178,7 @@ export const updateTag = new mutationWithClientMutationId({
ownership: ownership || compareTag.ownership,
}
- // Setup Transaction
- const trx = await transaction(collections)
-
- try {
- await trx.step(
- async () =>
- await query`
- WITH tags
- UPSERT { tagId: ${tagId} }
- INSERT ${updatedTag}
- UPDATE ${updatedTag}
- IN tags
- `,
- )
- } catch (err) {
- console.error(
- `Transaction step error occurred when user: ${userKey} attempted to update tag: ${tagId}, error: ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to update tag. Please try again.`))
- }
-
- // Commit transaction
- try {
- await trx.commit()
- } catch (err) {
- console.error(
- `Transaction commit error occurred when user: ${userKey} attempted to update tag: ${tagId}, error: ${err}`,
- )
- await trx.abort()
- throw new Error(i18n._(t`Unable to update tag. Please try again.`))
- }
-
- // Clear dataloader and load updated tag
- await loadTagByTagId.clear(updatedTag.tagId)
- const returnTag = await loadTagByTagId.load(updatedTag.tagId)
+ const returnTag = await tags.save(tagId, updatedTag)
console.info(`User: ${userKey} successfully updated tag: ${tagId}.`)
@@ -282,10 +226,7 @@ export const updateTag = new mutationWithClientMutationId({
})
}
- await logActivity({
- transaction,
- collections,
- query,
+ await auditLogs.logActivity({
initiatedBy: {
id: user._key,
userName: user.userName,
diff --git a/api/src/tags/queries/__tests__/find-all-tags.test.js b/api/src/tags/queries/__tests__/find-all-tags.test.js
index 5165a7dfab..1673b6cbad 100644
--- a/api/src/tags/queries/__tests__/find-all-tags.test.js
+++ b/api/src/tags/queries/__tests__/find-all-tags.test.js
@@ -1,10 +1,10 @@
import { findAllTags } from '../find-all-tags'
describe('findAllTags', () => {
- let loadAllTags, userRequired, verifiedRequired, checkSuperAdmin, superAdminRequired, userKey, context, cleanseInput
+ let tagsAll, userRequired, verifiedRequired, checkSuperAdmin, superAdminRequired, userKey, context, cleanseInput
beforeEach(() => {
- loadAllTags = jest.fn()
+ tagsAll = jest.fn()
userRequired = jest.fn()
verifiedRequired = jest.fn()
checkSuperAdmin = jest.fn()
@@ -14,7 +14,8 @@ describe('findAllTags', () => {
userKey = 'test-user'
context = {
userKey,
- loaders: { loadAllTags },
+ dataSources: { tags: { all: tagsAll } },
+ loaders: { loadOrgByKey: jest.fn() },
auth: { userRequired, verifiedRequired, checkSuperAdmin, superAdminRequired },
validators: { cleanseInput },
}
@@ -32,27 +33,27 @@ describe('findAllTags', () => {
organizations: [],
},
]
- loadAllTags.mockResolvedValue(tags)
+ tagsAll.mockResolvedValue(tags)
const result = await findAllTags.resolve(null, { isVisible: false }, context)
- expect(loadAllTags).toHaveBeenCalledWith({ isVisible: false, orgId: null })
+ expect(tagsAll).toHaveBeenCalledWith({ isVisible: false, orgId: null })
expect(result).toEqual(tags)
})
it('should apply visible filter when isVisible is true', async () => {
const tags = [{ tagId: '1', label: 'Tag1', description: 'Description1', visible: true, ownership: 'global' }]
- loadAllTags.mockResolvedValue(tags)
+ tagsAll.mockResolvedValue(tags)
const result = await findAllTags.resolve(null, { isVisible: true }, context)
- expect(loadAllTags).toHaveBeenCalledWith({ isVisible: true, orgId: null })
+ expect(tagsAll).toHaveBeenCalledWith({ isVisible: true, orgId: null })
expect(result).toEqual(tags)
})
it('should log a message when tags are successfully retrieved', async () => {
const tags = [{ tagId: '1', label: 'Tag1', description: 'Description1', visible: true, ownership: 'global' }]
- loadAllTags.mockResolvedValue(tags)
+ tagsAll.mockResolvedValue(tags)
console.info = jest.fn()
await findAllTags.resolve(null, { isVisible: false }, context)
@@ -61,7 +62,7 @@ describe('findAllTags', () => {
})
it('should throw an error when loadAllTags fails', async () => {
- loadAllTags.mockRejectedValue(new Error('Load error'))
+ tagsAll.mockRejectedValue(new Error('Load error'))
await expect(findAllTags.resolve(null, { isVisible: false }, context)).rejects.toThrow('Load error')
})
diff --git a/api/src/tags/queries/find-all-tags.js b/api/src/tags/queries/find-all-tags.js
index e7a5bdb2bb..31b58c411f 100644
--- a/api/src/tags/queries/find-all-tags.js
+++ b/api/src/tags/queries/find-all-tags.js
@@ -21,7 +21,8 @@ export const findAllTags = {
{
userKey,
auth: { userRequired, verifiedRequired, checkSuperAdmin, superAdminRequired },
- loaders: { loadAllTags, loadOrgByKey },
+ loaders: { loadOrgByKey },
+ dataSources: { tags: tagsSource },
validators: { cleanseInput },
},
) => {
@@ -39,7 +40,7 @@ export const findAllTags = {
superAdminRequired({ user, isSuperAdmin })
}
- const tags = await loadAllTags({ ...args, orgId: orgKey })
+ const tags = await tagsSource.all({ ...args, orgId: orgKey })
console.info(`User: ${userKey} successfully retrieved tags.`)
return tags
},
diff --git a/api/src/user/mutations/__tests__/sign-in.test.js b/api/src/user/mutations/__tests__/sign-in.test.js
index 57dd730dc2..933c264e7c 100644
--- a/api/src/user/mutations/__tests__/sign-in.test.js
+++ b/api/src/user/mutations/__tests__/sign-in.test.js
@@ -146,7 +146,7 @@ describe('authenticate user account', () => {
await query`
FOR user IN users
UPDATE ${user._key} WITH { tfaSendMethod: 'not_none', lastLogin: ${new Date(
- new Date().setDate(new Date().getDate() - 30),
+ new Date().setDate(new Date().getDate() - 31),
).toISOString()} } IN users
`
diff --git a/api/src/user/mutations/__tests__/update-user-profile.test.js b/api/src/user/mutations/__tests__/update-user-profile.test.js
index cb36221f39..ad8bfb23bf 100644
--- a/api/src/user/mutations/__tests__/update-user-profile.test.js
+++ b/api/src/user/mutations/__tests__/update-user-profile.test.js
@@ -239,7 +239,7 @@ describe('authenticate user account', () => {
}
expect(response).toEqual(expectedResponse)
- expect(sendVerificationEmail).toBeCalledWith({
+ expect(sendVerificationEmail).toHaveBeenCalledWith({
verifyUrl: verifyUrl,
userKey: user._key,
displayName: user.displayName,
@@ -939,7 +939,7 @@ describe('authenticate user account', () => {
}
expect(response).toEqual(expectedResponse)
- expect(sendVerificationEmail).toBeCalledWith({
+ expect(sendVerificationEmail).toHaveBeenCalledWith({
verifyUrl: verifyUrl,
userKey: user._key,
displayName: user.displayName,
diff --git a/api/src/user/queries/is-user-admin.js b/api/src/user/queries/is-user-admin.js
index 2f454bce5f..108947b7a2 100644
--- a/api/src/user/queries/is-user-admin.js
+++ b/api/src/user/queries/is-user-admin.js
@@ -24,20 +24,14 @@ export const isUserAdmin = {
},
) => {
const { id: orgKey } = fromGlobalId(cleanseInput(args.orgId))
-
const user = await userRequired()
// check if for a specific org
- if (orgKey !== '') {
+ if (orgKey) {
const org = await loadOrgByKey.load(orgKey)
-
const permission = await checkPermission({ orgId: org._id })
- if (permission === 'admin' || permission === 'super_admin') {
- return true
- }
-
- return false
+ return ['admin', 'owner', 'super_admin'].includes(permission)
}
// check to see if user is an admin or higher for at least one org
@@ -55,10 +49,6 @@ export const isUserAdmin = {
throw new Error(i18n._(t`Unable to verify if user is an admin, please try again.`))
}
- if (userAdmin.count > 0) {
- return true
- }
-
- return false
+ return userAdmin.count > 0
},
}
diff --git a/api/src/web-scan/data-source.js b/api/src/web-scan/data-source.js
new file mode 100644
index 0000000000..a7abd16a94
--- /dev/null
+++ b/api/src/web-scan/data-source.js
@@ -0,0 +1,8 @@
+import { loadWebConnectionsByDomainId, loadWebScansByWebId } from './loaders'
+
+export class WebScanDataSource {
+ constructor({ query, userKey, cleanseInput, i18n }) {
+ this.getConnectionsByDomainId = loadWebConnectionsByDomainId({ query, userKey, cleanseInput, i18n })
+ this.getScansByWebId = loadWebScansByWebId({ query, userKey, cleanseInput, i18n })
+ }
+}
diff --git a/api/src/web-scan/index.js b/api/src/web-scan/index.js
index 84c283025a..d1175cffd4 100644
--- a/api/src/web-scan/index.js
+++ b/api/src/web-scan/index.js
@@ -1,2 +1,3 @@
export * from './loaders'
export * from './objects'
+export * from './data-source'
diff --git a/api/src/web-scan/objects/tls-result.js b/api/src/web-scan/objects/tls-result.js
index 3ae6e5b1e0..78e1d541bc 100644
--- a/api/src/web-scan/objects/tls-result.js
+++ b/api/src/web-scan/objects/tls-result.js
@@ -53,22 +53,22 @@ export const tlsResultType = new GraphQLObjectType({
positiveTags: {
type: new GraphQLList(guidanceTagType),
description: `List of positive tags for the scanned server from this scan.`,
- resolve: async ({ positiveTags }, _, { loaders: { loadGuidanceTagByTagId } }) => {
- return await loadGuidanceTagByTagId({ tags: positiveTags })
+ resolve: async ({ positiveTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.byTagId({ tags: positiveTags })
},
},
neutralTags: {
type: new GraphQLList(guidanceTagType),
description: `List of neutral tags for the scanned server from this scan.`,
- resolve: async ({ neutralTags }, _, { loaders: { loadGuidanceTagByTagId } }) => {
- return await loadGuidanceTagByTagId({ tags: neutralTags })
+ resolve: async ({ neutralTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.byTagId({ tags: neutralTags })
},
},
negativeTags: {
type: new GraphQLList(guidanceTagType),
description: `List of negative tags for the scanned server from this scan.`,
- resolve: async ({ negativeTags }, _, { loaders: { loadGuidanceTagByTagId } }) => {
- return await loadGuidanceTagByTagId({ tags: negativeTags })
+ resolve: async ({ negativeTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.byTagId({ tags: negativeTags })
},
},
certificateStatus: {
diff --git a/api/src/web-scan/objects/web-connection-result.js b/api/src/web-scan/objects/web-connection-result.js
index 926e1452df..d043e081dd 100644
--- a/api/src/web-scan/objects/web-connection-result.js
+++ b/api/src/web-scan/objects/web-connection-result.js
@@ -68,22 +68,22 @@ export const webConnectionResultType = new GraphQLObjectType({
positiveTags: {
type: new GraphQLList(guidanceTagType),
description: `List of positive tags for the scanned server from this scan.`,
- resolve: async ({ positiveTags }, _, { loaders: { loadGuidanceTagByTagId } }) => {
- return await loadGuidanceTagByTagId({ tags: positiveTags })
+ resolve: async ({ positiveTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.byTagId({ tags: positiveTags })
},
},
neutralTags: {
type: new GraphQLList(guidanceTagType),
description: `List of neutral tags for the scanned server from this scan.`,
- resolve: async ({ neutralTags }, _, { loaders: { loadGuidanceTagByTagId } }) => {
- return await loadGuidanceTagByTagId({ tags: neutralTags })
+ resolve: async ({ neutralTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.byTagId({ tags: neutralTags })
},
},
negativeTags: {
type: new GraphQLList(guidanceTagType),
description: `List of negative tags for the scanned server from this scan.`,
- resolve: async ({ negativeTags }, _, { loaders: { loadGuidanceTagByTagId } }) => {
- return await loadGuidanceTagByTagId({ tags: negativeTags })
+ resolve: async ({ negativeTags }, _, { dataSources: { guidanceTag } }) => {
+ return await guidanceTag.byTagId({ tags: negativeTags })
},
},
}),
@@ -183,5 +183,57 @@ export const connectionChainResultType = new GraphQLObjectType({
type: new GraphQLList(connectionType),
description: `The connection chain created when following redirects.`,
},
+ securityTxt: {
+ type: new GraphQLList(securityTxtResultType),
+ description: 'Result of fetching and parsing the security.txt file for this domain.',
+ },
+ }),
+})
+
+export const securityTxtResultType = new GraphQLObjectType({
+ name: 'SecurityTxtResult',
+ description: 'Represents the result of a security.txt file fetch and parse operation.',
+ fields: () => ({
+ path: {
+ type: GraphQLString,
+ description:
+ 'The path where the security.txt file was requested (e.g., /.well-known/security.txt or /security.txt).',
+ },
+ url: {
+ type: GraphQLString,
+ description: 'The full URL used to fetch the security.txt file.',
+ },
+ statusCode: {
+ type: GraphQLInt,
+ description: 'The HTTP status code returned when requesting the security.txt file.',
+ },
+ fields: {
+ type: GraphQLJSONObject,
+ description: 'Parsed fields from the security.txt file as key-value pairs.',
+ },
+ isValid: {
+ type: GraphQLBoolean,
+ description: 'Whether the security.txt file was found and successfully parsed.',
+ },
+ error: {
+ type: GraphQLString,
+ description: 'Any errors encountered during fetching or parsing the security.txt file.',
+ },
+ raw: {
+ type: GraphQLString,
+ description: 'The raw contents of the security.txt file, if available.',
+ },
+ redirected: {
+ type: GraphQLBoolean,
+ description: 'Whether the request for security.txt was redirected.',
+ },
+ redirectLocation: {
+ type: GraphQLString,
+ description: 'The location to which the request was redirected, if any.',
+ },
+ redirectStatusCode: {
+ type: GraphQLInt,
+ description: 'The HTTP status code returned by any redirect encountered.',
+ },
}),
})
diff --git a/api/src/web-scan/objects/web.js b/api/src/web-scan/objects/web.js
index 77ec486e72..10e1ba540d 100644
--- a/api/src/web-scan/objects/web.js
+++ b/api/src/web-scan/objects/web.js
@@ -21,8 +21,8 @@ export const webType = new GraphQLObjectType({
results: {
type: new GraphQLList(webScanType),
description: `Results of the web scan at each IP address.`,
- resolve: async ({ _id }, args, { loaders: { loadWebScansByWebId } }) => {
- return await loadWebScansByWebId({
+ resolve: async ({ _id }, args, { dataSources: { webScan } }) => {
+ return await webScan.getScansByWebId({
webId: _id,
...args,
})
diff --git a/azure-defender-easm/add-domain-to-easm/Dockerfile b/azure-defender-easm/add-domain-to-easm/Dockerfile
index 28f5d3abf3..314f443b13 100644
--- a/azure-defender-easm/add-domain-to-easm/Dockerfile
+++ b/azure-defender-easm/add-domain-to-easm/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.11.11-slim-bookworm AS python-builder
+FROM python:3.14.3-alpine AS python-builder
# Copy local code to the container image.
ENV PYTHONUNBUFFERED 1
@@ -6,13 +6,12 @@ ENV PYTHONWARNINGS ignore
WORKDIR /working/install
-RUN apt-get update && apt-get install -y --no-install-recommends \
- apt-utils \
+RUN apk add --no-cache \
python3 \
- python3-pip \
- python3-setuptools \
- python3-wheel \
- build-essential \
+ py3-pip \
+ py3-setuptools \
+ py3-wheel \
+ build-base \
python3-dev
COPY requirements.txt /requirements.txt
@@ -22,7 +21,7 @@ RUN pip3 install --prefix=/working/install -r /requirements.txt
#===============================================================================================
#===============================================================================================
-FROM python:3.11.11-slim-bookworm
+FROM python:3.14.3-alpine
# Copy local code to the container image.
ENV PYTHONUNBUFFERED 1
@@ -36,7 +35,7 @@ COPY --from=python-builder /working/install/lib /usr/local/lib
COPY service.py ./
COPY clients ./clients
-RUN useradd -ms /bin/bash defender
+RUN adduser -D defender
USER defender
CMD ["python3", "service.py"]
diff --git a/azure-defender-easm/add-domain-to-easm/requirements.txt b/azure-defender-easm/add-domain-to-easm/requirements.txt
index b5d325a76d..bc781deaa5 100644
--- a/azure-defender-easm/add-domain-to-easm/requirements.txt
+++ b/azure-defender-easm/add-domain-to-easm/requirements.txt
@@ -1,7 +1,7 @@
azure-identity==1.16.1
azure-defender-easm==1.0.0b1
azure-kusto-data==4.3.1
-python-dotenv==1.1.0
+python-dotenv==1.2.2
nats-py==2.6.0
-numpy==1.26.4
-pandas==2.2.2
\ No newline at end of file
+numpy==2.4.4
+pandas==3.0.2
\ No newline at end of file
diff --git a/azure-defender-easm/add-easm-assets-to-tracker/Dockerfile b/azure-defender-easm/add-easm-assets-to-tracker/Dockerfile
index 6799316e91..007d38947f 100644
--- a/azure-defender-easm/add-easm-assets-to-tracker/Dockerfile
+++ b/azure-defender-easm/add-easm-assets-to-tracker/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.12.5-slim-bookworm AS python-builder
+FROM python:3.14.3-alpine AS python-builder
# Copy local code to the container image.
ENV PYTHONUNBUFFERED 1
@@ -6,13 +6,12 @@ ENV PYTHONWARNINGS ignore
WORKDIR /working/install
-RUN apt-get update && apt-get install -y --no-install-recommends \
- apt-utils \
+RUN apk add --no-cache \
python3 \
- python3-pip \
- python3-setuptools \
- python3-wheel \
- build-essential \
+ py3-pip \
+ py3-setuptools \
+ py3-wheel \
+ build-base \
python3-dev
COPY requirements.txt /requirements.txt
@@ -22,7 +21,7 @@ RUN pip3 install --prefix=/working/install -r /requirements.txt
#===============================================================================================
#===============================================================================================
-FROM python:3.12.5-slim-bookworm
+FROM python:3.14.3-alpine
# Copy local code to the container image.
ENV PYTHONUNBUFFERED 1
@@ -36,7 +35,7 @@ COPY --from=python-builder /working/install/lib /usr/local/lib
COPY service.py ./
COPY clients ./clients
-RUN useradd -ms /bin/bash defender
+RUN adduser -D defender
USER defender
CMD ["python3", "service.py"]
diff --git a/azure-defender-easm/add-easm-assets-to-tracker/requirements.txt b/azure-defender-easm/add-easm-assets-to-tracker/requirements.txt
index c82e8a9fa6..1508ec1773 100644
--- a/azure-defender-easm/add-easm-assets-to-tracker/requirements.txt
+++ b/azure-defender-easm/add-easm-assets-to-tracker/requirements.txt
@@ -1,7 +1,7 @@
azure-kusto-data==4.3.1
-python-dotenv==1.0.0
-python-arango==7.3.4
+python-dotenv==1.2.2
+python-arango==8.3.1
nats-py==2.6.0
-numpy==1.26.4
-pandas==2.2.2
+numpy==2.4.4
+pandas==3.0.2
dnspython==2.6.1
\ No newline at end of file
diff --git a/azure-defender-easm/import-easm-additional-findings/Dockerfile b/azure-defender-easm/import-easm-additional-findings/Dockerfile
index 3d948e0d9f..1eaf2c1556 100644
--- a/azure-defender-easm/import-easm-additional-findings/Dockerfile
+++ b/azure-defender-easm/import-easm-additional-findings/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.12.5-slim-bookworm AS python-builder
+FROM python:3.14.3-alpine AS python-builder
# Copy local code to the container image.
ENV PYTHONUNBUFFERED 1
@@ -6,13 +6,12 @@ ENV PYTHONWARNINGS ignore
WORKDIR /working/install
-RUN apt-get update && apt-get install -y --no-install-recommends \
- apt-utils \
+RUN apk add --no-cache \
python3 \
- python3-pip \
- python3-setuptools \
- python3-wheel \
- build-essential \
+ py3-pip \
+ py3-setuptools \
+ py3-wheel \
+ build-base \
python3-dev
COPY requirements.txt /requirements.txt
@@ -22,7 +21,7 @@ RUN pip3 install --prefix=/working/install -r /requirements.txt
#===============================================================================================
#===============================================================================================
-FROM python:3.12.5-slim-bookworm
+FROM python:3.14.3-alpine
# Copy local code to the container image.
ENV PYTHONUNBUFFERED 1
@@ -36,7 +35,7 @@ COPY --from=python-builder /working/install/lib /usr/local/lib
COPY service.py ./
COPY clients ./clients
-RUN useradd -ms /bin/bash defender
+RUN adduser -D defender
USER defender
CMD ["python3", "service.py"]
diff --git a/azure-defender-easm/import-easm-additional-findings/clients/kusto_client.py b/azure-defender-easm/import-easm-additional-findings/clients/kusto_client.py
index 24b940fa45..d7188964dc 100644
--- a/azure-defender-easm/import-easm-additional-findings/clients/kusto_client.py
+++ b/azure-defender-easm/import-easm-additional-findings/clients/kusto_client.py
@@ -78,12 +78,12 @@ def get_web_components_by_asset(asset, fetched_cves):
cve for cve in wc["WebComponentCves"] if cve["Cve"] in top25
]
- componentVersions = wc["WebComponentVersion"].split(".", 2)
+ component_versions = wc["WebComponentVersion"].split(".", 2)
# Assign confidence levels to each CVE
for cve in wc["WebComponentCves"]:
cve["ConfidenceLevel"] = "unknown"
# if detected version includes patch, high confidence
- if len(componentVersions) == 3:
+ if len(component_versions) == 3:
cve["ConfidenceLevel"] = "high"
else:
# fetch affected versions of CVE
@@ -94,9 +94,9 @@ def get_web_components_by_asset(asset, fetched_cves):
try:
start, end = get_version_range(cpe).values()
# compare minor and major version nums
- if len(componentVersions) == 2:
- major = int(componentVersions[0])
- minor = int(componentVersions[1])
+ if len(component_versions) == 2:
+ major = int(component_versions[0])
+ minor = int(component_versions[1])
if start is not None:
if major < int(start.split(".")[0]):
continue
@@ -107,8 +107,8 @@ def get_web_components_by_asset(asset, fetched_cves):
cve["ConfidenceLevel"] = "high"
elif minor == int(end.split(".")[1]):
cve["ConfidenceLevel"] = "medium"
- elif len(componentVersions) == 1:
- major = int(componentVersions[0])
+ elif len(component_versions) == 1:
+ major = int(component_versions[0])
if start is not None:
if major < int(start.split(".")[0]):
continue
@@ -129,7 +129,7 @@ def fetch_cve_affected_versions(cve, comp_name, fetched_cves):
try:
return fetched_cves[cve]
except KeyError:
- logger.error(f"Data on {cve} has not been fetched yet")
+ logger.info(f"Data on {cve} has not been fetched yet. Attempting to fetch it.")
res = {"status_code": 0}
attempts = 1
@@ -154,9 +154,14 @@ def fetch_cve_affected_versions(cve, comp_name, fetched_cves):
time.sleep(60)
attempts += 1
except Exception as e:
- print("Error:", e)
+ logger.error(f"Encountered problem while fetching cves for {cve}: {e}")
return None
+ # Unable to fetch CVE data
+ logger.error(f"Unable to fetch data for CVE: {cve}")
+ fetched_cves[cve] = None
+ return None
+
def get_version_range(affected_versions):
versions = {"start": None, "end": None}
diff --git a/azure-defender-easm/import-easm-additional-findings/requirements.txt b/azure-defender-easm/import-easm-additional-findings/requirements.txt
index e9b79fcc63..bf3821bcd8 100644
--- a/azure-defender-easm/import-easm-additional-findings/requirements.txt
+++ b/azure-defender-easm/import-easm-additional-findings/requirements.txt
@@ -1,5 +1,5 @@
azure-kusto-data==4.3.1
-python-dotenv==1.1.0
-python-arango==7.3.4
-numpy==1.26.4
-pandas==2.2.2
\ No newline at end of file
+python-dotenv==1.2.2
+python-arango==8.3.1
+numpy==2.4.4
+pandas==3.0.2
\ No newline at end of file
diff --git a/azure-defender-easm/label-known-easm-assets/Dockerfile b/azure-defender-easm/label-known-easm-assets/Dockerfile
index 0b541d93ab..a3fa7adf2b 100644
--- a/azure-defender-easm/label-known-easm-assets/Dockerfile
+++ b/azure-defender-easm/label-known-easm-assets/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.11.11-slim-bookworm AS python-builder
+FROM python:3.14.3-alpine AS python-builder
# Copy local code to the container image.
ENV PYTHONUNBUFFERED 1
@@ -6,13 +6,12 @@ ENV PYTHONWARNINGS ignore
WORKDIR /working/install
-RUN apt-get update && apt-get install -y --no-install-recommends \
- apt-utils \
+RUN apk add --no-cache \
python3 \
- python3-pip \
- python3-setuptools \
- python3-wheel \
- build-essential \
+ py3-pip \
+ py3-setuptools \
+ py3-wheel \
+ build-base \
python3-dev
COPY requirements.txt /requirements.txt
@@ -22,7 +21,7 @@ RUN pip3 install --prefix=/working/install -r /requirements.txt
#===============================================================================================
#===============================================================================================
-FROM python:3.11.11-slim-bookworm
+FROM python:3.14.3-alpine
# Copy local code to the container image.
ENV PYTHONUNBUFFERED 1
@@ -36,7 +35,7 @@ COPY --from=python-builder /working/install/lib /usr/local/lib
COPY service.py ./
COPY clients ./clients
-RUN useradd -ms /bin/bash defender
+RUN adduser -D defender
USER defender
CMD ["python3", "service.py"]
diff --git a/azure-defender-easm/label-known-easm-assets/requirements.txt b/azure-defender-easm/label-known-easm-assets/requirements.txt
index 7966c4c990..d9cf725d4c 100644
--- a/azure-defender-easm/label-known-easm-assets/requirements.txt
+++ b/azure-defender-easm/label-known-easm-assets/requirements.txt
@@ -1,7 +1,7 @@
azure-identity==1.16.1
azure-defender-easm==1.0.0b1
azure-kusto-data==4.3.1
-python-dotenv==1.1.0
-python-arango==7.3.4
-numpy==1.26.4
-pandas==2.2.2
\ No newline at end of file
+python-dotenv==1.2.2
+python-arango==8.3.1
+numpy==2.4.4
+pandas==3.0.2
\ No newline at end of file
diff --git a/database-migration/Dockerfile b/database-migration/Dockerfile
index f8a42a19d9..a7dd9c919b 100644
--- a/database-migration/Dockerfile
+++ b/database-migration/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:alpine
+FROM node:25.3.0-alpine
ENV NODE_ENV production
diff --git a/database-migration/package-lock.json b/database-migration/package-lock.json
index c85225687e..5a3668bf91 100644
--- a/database-migration/package-lock.json
+++ b/database-migration/package-lock.json
@@ -10,7 +10,7 @@
"license": "MIT",
"dependencies": {
"arango-tools": "^0.6.0",
- "arangojs": "^8.8.1",
+ "arangojs": "^9.2.0",
"dotenv-safe": "^8.2.0",
"json-placeholder-replacer": "^1.0.35"
},
@@ -116,11 +116,6 @@
"node": ">= 8"
}
},
- "node_modules/@tokenizer/token": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
- "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
- },
"node_modules/@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@@ -128,9 +123,12 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "18.11.17",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz",
- "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng=="
+ "version": "20.19.30",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.30.tgz",
+ "integrity": "sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
},
"node_modules/acorn": {
"version": "8.8.1",
@@ -251,18 +249,14 @@
}
},
"node_modules/arangojs": {
- "version": "8.8.1",
- "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-8.8.1.tgz",
- "integrity": "sha512-gVc5BF91nT27lB97mt+XxcGbw7yOhPIkZ0f5Nmq/ZPt1/iP62rDpH961XUyWdzj5m4H8lx2OF/O2AVefZoolXg==",
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-9.2.0.tgz",
+ "integrity": "sha512-WIoFPCrBeuX1kBzGwue4t+jjYFW/ipto4ZO5s6e1v6dMsZE4I+d5Bid2glL+D5UeUJ6qGgqfe3KOAAW1t0Pc2A==",
"dependencies": {
- "@types/node": ">=14",
- "multi-part": "^4.0.0",
- "path-browserify": "^1.0.1",
- "x3-linkedlist": "1.2.0",
- "xhr": "^2.4.1"
+ "@types/node": "^20.11.26"
},
"engines": {
- "node": ">=14"
+ "node": ">=18"
}
},
"node_modules/argparse": {
@@ -1103,22 +1097,6 @@
"node": "^10.12.0 || >=12.0.0"
}
},
- "node_modules/file-type": {
- "version": "16.5.4",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz",
- "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==",
- "dependencies": {
- "readable-web-to-node-stream": "^3.0.0",
- "strtok3": "^6.2.4",
- "token-types": "^4.1.1"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/file-type?sponsor=1"
- }
- },
"node_modules/find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -1149,9 +1127,9 @@
}
},
"node_modules/flatted": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
- "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
"node_modules/fs.realpath": {
@@ -1366,25 +1344,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/ignore": {
"version": "5.2.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
@@ -1432,7 +1391,8 @@
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
},
"node_modules/internal-slot": {
"version": "1.0.4",
@@ -1763,18 +1723,6 @@
"node": ">= 0.6"
}
},
- "node_modules/mime-kind": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mime-kind/-/mime-kind-4.0.0.tgz",
- "integrity": "sha512-qQvglvSpS5mABi30beNFd+uHKtKkxD3dxAmhi2e589XKx+WfVqhg5i5P5LBcVgwwv3BiDpNMBWrHqU+JexW4aA==",
- "dependencies": {
- "file-type": "^16.5.4",
- "mime-types": "^2.1.24"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
@@ -1795,9 +1743,9 @@
}
},
"node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -1821,18 +1769,6 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "node_modules/multi-part": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multi-part/-/multi-part-4.0.0.tgz",
- "integrity": "sha512-YT/CS0PAe62kT8EoQXcQj8yIcSu18HhYv0s6ShdAFsoFly3oV5QaxODnkj0u7zH0/RFyH47cdcMVpcGXliEFVA==",
- "dependencies": {
- "mime-kind": "^4.0.0",
- "multi-part-lite": "^1.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/multi-part-lite": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/multi-part-lite/-/multi-part-lite-1.0.0.tgz",
@@ -1973,11 +1909,6 @@
"resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz",
"integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA=="
},
- "node_modules/path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
- },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -2011,18 +1942,6 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
- "node_modules/peek-readable": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
- "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -2084,34 +2003,6 @@
}
]
},
- "node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/readable-web-to-node-stream": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
- "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
- "dependencies": {
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
"node_modules/regexp.prototype.flags": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
@@ -2215,25 +2106,6 @@
"queue-microtask": "^1.2.2"
}
},
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/safe-regex-test": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
@@ -2299,14 +2171,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
"node_modules/string.prototype.trimend": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
@@ -2368,22 +2232,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/strtok3": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz",
- "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==",
- "dependencies": {
- "@tokenizer/token": "^0.3.0",
- "peek-readable": "^4.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -2414,22 +2262,6 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
- "node_modules/token-types": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz",
- "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==",
- "dependencies": {
- "@tokenizer/token": "^0.3.0",
- "ieee754": "^1.2.1"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
"node_modules/tsconfig-paths": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
@@ -2481,6 +2313,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
+ },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -2490,11 +2327,6 @@
"punycode": "^2.1.0"
}
},
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
- },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -2655,11 +2487,6 @@
"fastq": "^1.6.0"
}
},
- "@tokenizer/token": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
- "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
- },
"@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@@ -2667,9 +2494,12 @@
"dev": true
},
"@types/node": {
- "version": "18.11.17",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.17.tgz",
- "integrity": "sha512-HJSUJmni4BeDHhfzn6nF0sVmd1SMezP7/4F0Lq+aXzmp2xm9O7WXrUtHW/CHlYVtZUbByEvWidHqRtcJXGF2Ng=="
+ "version": "20.19.30",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.30.tgz",
+ "integrity": "sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==",
+ "requires": {
+ "undici-types": "~6.21.0"
+ }
},
"acorn": {
"version": "8.8.1",
@@ -2759,15 +2589,11 @@
}
},
"arangojs": {
- "version": "8.8.1",
- "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-8.8.1.tgz",
- "integrity": "sha512-gVc5BF91nT27lB97mt+XxcGbw7yOhPIkZ0f5Nmq/ZPt1/iP62rDpH961XUyWdzj5m4H8lx2OF/O2AVefZoolXg==",
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-9.2.0.tgz",
+ "integrity": "sha512-WIoFPCrBeuX1kBzGwue4t+jjYFW/ipto4ZO5s6e1v6dMsZE4I+d5Bid2glL+D5UeUJ6qGgqfe3KOAAW1t0Pc2A==",
"requires": {
- "@types/node": ">=14",
- "multi-part": "^4.0.0",
- "path-browserify": "^1.0.1",
- "x3-linkedlist": "1.2.0",
- "xhr": "^2.4.1"
+ "@types/node": "^20.11.26"
}
},
"argparse": {
@@ -3381,16 +3207,6 @@
"flat-cache": "^3.0.4"
}
},
- "file-type": {
- "version": "16.5.4",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz",
- "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==",
- "requires": {
- "readable-web-to-node-stream": "^3.0.0",
- "strtok3": "^6.2.4",
- "token-types": "^4.1.1"
- }
- },
"find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -3412,9 +3228,9 @@
}
},
"flatted": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
- "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
"fs.realpath": {
@@ -3569,11 +3385,6 @@
"has-symbols": "^1.0.2"
}
},
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
- },
"ignore": {
"version": "5.2.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
@@ -3609,7 +3420,8 @@
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
},
"internal-slot": {
"version": "1.0.4",
@@ -3839,15 +3651,6 @@
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
},
- "mime-kind": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mime-kind/-/mime-kind-4.0.0.tgz",
- "integrity": "sha512-qQvglvSpS5mABi30beNFd+uHKtKkxD3dxAmhi2e589XKx+WfVqhg5i5P5LBcVgwwv3BiDpNMBWrHqU+JexW4aA==",
- "requires": {
- "file-type": "^16.5.4",
- "mime-types": "^2.1.24"
- }
- },
"mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
@@ -3865,9 +3668,9 @@
}
},
"minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
@@ -3885,15 +3688,6 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "multi-part": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multi-part/-/multi-part-4.0.0.tgz",
- "integrity": "sha512-YT/CS0PAe62kT8EoQXcQj8yIcSu18HhYv0s6ShdAFsoFly3oV5QaxODnkj0u7zH0/RFyH47cdcMVpcGXliEFVA==",
- "requires": {
- "mime-kind": "^4.0.0",
- "multi-part-lite": "^1.0.0"
- }
- },
"multi-part-lite": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/multi-part-lite/-/multi-part-lite-1.0.0.tgz",
@@ -3995,11 +3789,6 @@
"resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz",
"integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA=="
},
- "path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
- },
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -4024,11 +3813,6 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
- "peek-readable": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
- "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg=="
- },
"prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -4058,24 +3842,6 @@
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true
},
- "readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "readable-web-to-node-stream": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
- "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
- "requires": {
- "readable-stream": "^3.6.0"
- }
- },
"regexp.prototype.flags": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
@@ -4134,11 +3900,6 @@
"queue-microtask": "^1.2.2"
}
},
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- },
"safe-regex-test": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
@@ -4186,14 +3947,6 @@
"object-inspect": "^1.9.0"
}
},
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
"string.prototype.trimend": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
@@ -4237,15 +3990,6 @@
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true
},
- "strtok3": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz",
- "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==",
- "requires": {
- "@tokenizer/token": "^0.3.0",
- "peek-readable": "^4.1.0"
- }
- },
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -4267,15 +4011,6 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
- "token-types": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz",
- "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==",
- "requires": {
- "@tokenizer/token": "^0.3.0",
- "ieee754": "^1.2.1"
- }
- },
"tsconfig-paths": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
@@ -4315,6 +4050,11 @@
"which-boxed-primitive": "^1.0.2"
}
},
+ "undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
+ },
"uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -4324,11 +4064,6 @@
"punycode": "^2.1.0"
}
},
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
- },
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
diff --git a/database-migration/package.json b/database-migration/package.json
index c2659b04ea..47fbdedad3 100644
--- a/database-migration/package.json
+++ b/database-migration/package.json
@@ -12,7 +12,7 @@
"license": "MIT",
"dependencies": {
"arango-tools": "^0.6.0",
- "arangojs": "^8.8.1",
+ "arangojs": "^9.2.0",
"dotenv-safe": "^8.2.0",
"json-placeholder-replacer": "^1.0.35"
},
diff --git a/frontend/Dockerfile b/frontend/Dockerfile
index 03d83f92a6..96809bf101 100644
--- a/frontend/Dockerfile
+++ b/frontend/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:20.16-alpine3.19 as build-env
+FROM node:20.18.1-alpine3.19 as build-env
WORKDIR /app
@@ -7,7 +7,7 @@ COPY . .
RUN npm ci && npm run build && npm prune --production
-FROM gcr.io/distroless/nodejs20-debian12
+FROM node:20.18.1-alpine3.19
ENV HOST 0.0.0.0
ENV PORT 3000
diff --git a/frontend/cloudbuild.yaml b/frontend/cloudbuild.yaml
index aa878b3e56..0c68fb760f 100644
--- a/frontend/cloudbuild.yaml
+++ b/frontend/cloudbuild.yaml
@@ -44,16 +44,16 @@ steps:
args: ['run', 'compile']
- name: node:20.10.0-alpine
- id: test
+ id: build-production-bundle
dir: frontend
entrypoint: npm
- args: ['test']
+ args: [ 'run', 'build' ]
- name: node:20.10.0-alpine
- id: build-production-bundle
+ id: test
dir: frontend
entrypoint: npm
- args: ['run', 'build']
+ args: ['test']
- name: 'gcr.io/cloud-builders/docker'
id: generate-image-name
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 99b4443c4d..11774ffd9c 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -16,7 +16,7 @@
"@chakra-ui/system": "^2.6.2",
"@emotion/react": "^11.9.3",
"@emotion/styled": "^11.9.3",
- "@lingui/react": "^4.11.3",
+ "@lingui/react": "^5.9.3",
"@visx/axis": "^2.17.0",
"@visx/curve": "^3.3.0",
"@visx/event": "^2.17.0",
@@ -42,11 +42,10 @@
"intro.js-react": "^1.0.0",
"isomorphic-unfetch": "^3.1.0",
"json-2-csv": "^3.17.1",
- "lodash-es": "^4.17.21",
+ "lodash-es": "^4.18.1",
"make-plural": "^7.1.0",
"prop-types": "^15.8.1",
"react": "^18.2.0",
- "react-diff-viewer-continued": "^3.2.6",
"react-dom": "^18.2.0",
"react-error-boundary": "^3.1.4",
"react-joyride": "^2.8.2",
@@ -64,10 +63,10 @@
"@babel/preset-react": "^7.18.6",
"@graphql-tools/mock": "^8.7.0",
"@graphql-tools/schema": "^10.0.0",
- "@lingui/cli": "^5.4.0",
- "@lingui/core": "^4.11.3",
- "@lingui/loader": "^5.4.0",
- "@lingui/macro": "^4.11.3",
+ "@lingui/cli": "^5.9.3",
+ "@lingui/core": "^5.9.3",
+ "@lingui/loader": "^5.9.3",
+ "@lingui/macro": "^5.9.3",
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "^13.4.0",
"@testing-library/react-hooks": "^7.0.2",
@@ -77,6 +76,7 @@
"babel-loader": "^8.2.5",
"babel-plugin-macros": "^3.1.0",
"clean-webpack-plugin": "^3.0.0",
+ "copy-webpack-plugin": "^14.0.0",
"eslint": "^7.32.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-import": "^2.26.0",
@@ -98,7 +98,7 @@
"react-test-renderer": "^18.2.0",
"source-map-loader": "^4.0.0",
"supertest": "^6.2.3",
- "webpack": "^5.94.0",
+ "webpack": "^5.105.0",
"webpack-cli": "^4.10.0",
"webpack-config-utils": "^2.3.1",
"webpack-dev-server": "^4.9.2"
@@ -3640,18 +3640,6 @@
"resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz",
"integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA=="
},
- "node_modules/@emotion/css": {
- "version": "11.11.2",
- "resolved": "https://registry.npmjs.org/@emotion/css/-/css-11.11.2.tgz",
- "integrity": "sha512-VJxe1ucoMYMS7DkiMdC2T7PWNbrEI0a39YRiyDvK2qq4lXwjRbVP/z4lpG+odCsRzadlR+1ywwrTzhdm5HNdew==",
- "dependencies": {
- "@emotion/babel-plugin": "^11.11.0",
- "@emotion/cache": "^11.11.0",
- "@emotion/serialize": "^1.1.2",
- "@emotion/sheet": "^1.2.2",
- "@emotion/utils": "^1.2.1"
- }
- },
"node_modules/@emotion/hash": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz",
@@ -4511,27 +4499,6 @@
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
"dev": true
},
- "node_modules/@isaacs/balanced-match": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz",
- "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==",
- "dev": true,
- "engines": {
- "node": "20 || >=22"
- }
- },
- "node_modules/@isaacs/brace-expansion": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz",
- "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==",
- "dev": true,
- "dependencies": {
- "@isaacs/balanced-match": "^4.0.1"
- },
- "engines": {
- "node": "20 || >=22"
- }
- },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -5088,7 +5055,8 @@
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
"integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
- "dev": true,
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
"@sinclair/typebox": "^0.27.8"
},
@@ -5414,26 +5382,28 @@
"dev": true
},
"node_modules/@lingui/babel-plugin-extract-messages": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-5.4.0.tgz",
- "integrity": "sha512-hcxnDgtby6rfhRvLM0Q9IsJhIjNR9dnHrKLKgSHsc5dTA/RYajSYbsdUXECvOQN+whwgBoQtZb/hvALmBpmjQA==",
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-5.9.3.tgz",
+ "integrity": "sha512-zm6QHDILmhj8olgLL2zHQn18yFA5mf4hX7QzCr1OOI/e815I0IkecCYue1Ych+y+B+V0eLriiW8AcfpDRCQFFw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=20.0.0"
}
},
"node_modules/@lingui/babel-plugin-lingui-macro": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-lingui-macro/-/babel-plugin-lingui-macro-5.4.0.tgz",
- "integrity": "sha512-VKRc/uQ4fyFJfRcBwaWDqDXNTj99IJzgAFX/P0keeTmLltW1nm/d367Ksku19JI1SDUo42p65YEuk3VxuXyQ3g==",
- "dev": true,
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-lingui-macro/-/babel-plugin-lingui-macro-5.9.3.tgz",
+ "integrity": "sha512-fLMhBarRsuqBGOq2YuEoqOjEAV2VNezz/+f/Dn0vLFHF/kAjnFwTHb8pL8DRSIMsWG16mPrGnLpdROZBmJlFtA==",
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
"@babel/core": "^7.20.12",
"@babel/runtime": "^7.20.13",
"@babel/types": "^7.20.7",
- "@lingui/conf": "5.4.0",
- "@lingui/core": "5.4.0",
- "@lingui/message-utils": "5.4.0"
+ "@lingui/conf": "5.9.3",
+ "@lingui/core": "5.9.3",
+ "@lingui/message-utils": "5.9.3"
},
"engines": {
"node": ">=20.0.0"
@@ -5447,305 +5417,153 @@
}
}
},
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/@jest/types": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
- "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/@lingui/conf": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-5.4.0.tgz",
- "integrity": "sha512-S4YIWyyPpncTfilNzmvSrPUJ8lFKvOs/2+j4Lpzwj5Ue5DIpxB+2WnpNkfw3GsQl3ilPiFbo87R21XKLNzMF+Q==",
+ "node_modules/@lingui/cli": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-5.9.3.tgz",
+ "integrity": "sha512-KEE0J4eGlfpiLZ+l019qjraWfqfh5mUmQSJeTFw5PulO4v50zvxw5tDX8stpBzJ3QtgUQZlrMUh0OTGdURaAMg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.20.13",
- "cosmiconfig": "^8.0.0",
- "jest-validate": "^29.4.3",
- "jiti": "^1.17.1",
- "picocolors": "^1.1.1"
+ "@babel/core": "^7.21.0",
+ "@babel/generator": "^7.21.1",
+ "@babel/parser": "^7.22.0",
+ "@babel/runtime": "^7.21.0",
+ "@babel/types": "^7.21.2",
+ "@lingui/babel-plugin-extract-messages": "5.9.3",
+ "@lingui/babel-plugin-lingui-macro": "5.9.3",
+ "@lingui/conf": "5.9.3",
+ "@lingui/core": "5.9.3",
+ "@lingui/format-po": "5.9.3",
+ "@lingui/message-utils": "5.9.3",
+ "chokidar": "3.5.1",
+ "cli-table": "^0.3.11",
+ "commander": "^10.0.0",
+ "convert-source-map": "^2.0.0",
+ "date-fns": "^3.6.0",
+ "esbuild": "^0.25.1",
+ "glob": "^11.0.0",
+ "micromatch": "^4.0.7",
+ "ms": "^2.1.3",
+ "normalize-path": "^3.0.0",
+ "ora": "^5.1.0",
+ "picocolors": "^1.1.1",
+ "pofile": "^1.1.4",
+ "pseudolocale": "^2.0.0",
+ "source-map": "^0.7.6",
+ "threads": "^1.7.0"
},
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/@lingui/core": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/core/-/core-5.4.0.tgz",
- "integrity": "sha512-WtdAMkSU8Hbw0nOt+sZsNLJ2B8AO5EfZTpPIrzpKRiZ8RHZl/JOPzQlBLGbxKEoiPIiNcLnm3SZDNRJ16F/AYw==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.20.13",
- "@lingui/message-utils": "5.4.0"
+ "bin": {
+ "lingui": "dist/lingui.js"
},
"engines": {
"node": ">=20.0.0"
- },
- "peerDependencies": {
- "@lingui/babel-plugin-lingui-macro": "5.4.0",
- "babel-plugin-macros": "2 || 3"
- },
- "peerDependenciesMeta": {
- "@lingui/babel-plugin-lingui-macro": {
- "optional": true
- },
- "babel-plugin-macros": {
- "optional": true
- }
}
},
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/@lingui/message-utils": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-5.4.0.tgz",
- "integrity": "sha512-Ok++R55W3kvI8dN7itti0DmQatDLodOUJVuEDDhCydzpYJCurwc60hZCn/o/M2SI2+BCVlkTOCXGkdcrpJVS2Q==",
- "bundleDependencies": [
- "@messageformat/date-skeleton"
- ],
+ "node_modules/@lingui/cli/node_modules/balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
"dev": true,
- "dependencies": {
- "@messageformat/parser": "^5.0.0",
- "js-sha256": "^0.10.1"
- },
"engines": {
- "node": ">=20.0.0"
+ "node": "18 || 20 || >=22"
}
},
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/@types/yargs": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
- "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/@lingui/cli/node_modules/brace-expansion": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
+ "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
"dev": true,
"dependencies": {
- "color-convert": "^2.0.1"
+ "balanced-match": "^4.0.2"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "node": "18 || 20 || >=22"
}
},
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "node_modules/@lingui/cli/node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true
},
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/@lingui/cli/node_modules/glob": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz",
+ "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==",
"dev": true,
"dependencies": {
- "color-name": "~1.1.4"
+ "foreground-child": "^3.3.1",
+ "jackspeak": "^4.1.1",
+ "minimatch": "^10.1.1",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^2.0.0"
},
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/cosmiconfig": {
- "version": "8.3.6",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
- "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
- "dev": true,
- "dependencies": {
- "import-fresh": "^3.3.0",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.2.0",
- "path-type": "^4.0.0"
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
},
"engines": {
- "node": ">=14"
+ "node": "20 || >=22"
},
"funding": {
- "url": "https://github.com/sponsors/d-fischer"
- },
- "peerDependencies": {
- "typescript": ">=4.9.5"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/jest-get-type": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
- "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
- "dev": true,
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/jest-validate": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
- "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
+ "node_modules/@lingui/cli/node_modules/minimatch": {
+ "version": "10.2.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
+ "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.6.3",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "leven": "^3.1.0",
- "pretty-format": "^29.7.0"
+ "brace-expansion": "^5.0.5"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/pretty-format/node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true,
- "engines": {
- "node": ">=10"
+ "node": "18 || 20 || >=22"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "dev": true
+ "node_modules/@lingui/cli/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/@lingui/babel-plugin-lingui-macro/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/@lingui/cli/node_modules/source-map": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
"dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
+ "license": "BSD-3-Clause",
"engines": {
- "node": ">=8"
+ "node": ">= 12"
}
},
- "node_modules/@lingui/cli": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-5.4.0.tgz",
- "integrity": "sha512-S/mWIsTc1ggx0GajoIftIVEiv5pQWuBK+ip/YMrJrvr/gVHEzja/cT4db5f8dwadWyZ/YfJuEnz22RSKqBrrKA==",
- "dev": true,
+ "node_modules/@lingui/conf": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-5.9.3.tgz",
+ "integrity": "sha512-hVEoYHmO2A3XmFX4A5RuBgcoVBoM7Xgoqejeq25XELvesJj2s2T15F47TA5n3/S7iTqngd6n/8KxBli9TYwgqQ==",
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
- "@babel/core": "^7.21.0",
- "@babel/generator": "^7.21.1",
- "@babel/parser": "^7.22.0",
- "@babel/runtime": "^7.21.0",
- "@babel/types": "^7.21.2",
- "@lingui/babel-plugin-extract-messages": "5.4.0",
- "@lingui/babel-plugin-lingui-macro": "5.4.0",
- "@lingui/conf": "5.4.0",
- "@lingui/core": "5.4.0",
- "@lingui/format-po": "5.4.0",
- "@lingui/message-utils": "5.4.0",
- "chokidar": "3.5.1",
- "cli-table": "^0.3.11",
- "commander": "^10.0.0",
- "convert-source-map": "^2.0.0",
- "date-fns": "^3.6.0",
- "esbuild": "^0.25.1",
- "glob": "^11.0.0",
- "micromatch": "^4.0.7",
- "normalize-path": "^3.0.0",
- "ora": "^5.1.0",
- "picocolors": "^1.1.1",
- "pofile": "^1.1.4",
- "pseudolocale": "^2.0.0",
- "source-map": "^0.8.0-beta.0"
- },
- "bin": {
- "lingui": "dist/lingui.js"
+ "@babel/runtime": "^7.20.13",
+ "cosmiconfig": "^8.0.0",
+ "jest-validate": "^29.4.3",
+ "jiti": "^2.5.1",
+ "picocolors": "^1.1.1"
},
"engines": {
"node": ">=20.0.0"
}
},
- "node_modules/@lingui/cli/node_modules/@jest/types": {
+ "node_modules/@lingui/conf/node_modules/@jest/types": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
"integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
- "dev": true,
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
@@ -5758,77 +5576,22 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@lingui/cli/node_modules/@lingui/conf": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-5.4.0.tgz",
- "integrity": "sha512-S4YIWyyPpncTfilNzmvSrPUJ8lFKvOs/2+j4Lpzwj5Ue5DIpxB+2WnpNkfw3GsQl3ilPiFbo87R21XKLNzMF+Q==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.20.13",
- "cosmiconfig": "^8.0.0",
- "jest-validate": "^29.4.3",
- "jiti": "^1.17.1",
- "picocolors": "^1.1.1"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@lingui/cli/node_modules/@lingui/core": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/core/-/core-5.4.0.tgz",
- "integrity": "sha512-WtdAMkSU8Hbw0nOt+sZsNLJ2B8AO5EfZTpPIrzpKRiZ8RHZl/JOPzQlBLGbxKEoiPIiNcLnm3SZDNRJ16F/AYw==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.20.13",
- "@lingui/message-utils": "5.4.0"
- },
- "engines": {
- "node": ">=20.0.0"
- },
- "peerDependencies": {
- "@lingui/babel-plugin-lingui-macro": "5.4.0",
- "babel-plugin-macros": "2 || 3"
- },
- "peerDependenciesMeta": {
- "@lingui/babel-plugin-lingui-macro": {
- "optional": true
- },
- "babel-plugin-macros": {
- "optional": true
- }
- }
- },
- "node_modules/@lingui/cli/node_modules/@lingui/message-utils": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-5.4.0.tgz",
- "integrity": "sha512-Ok++R55W3kvI8dN7itti0DmQatDLodOUJVuEDDhCydzpYJCurwc60hZCn/o/M2SI2+BCVlkTOCXGkdcrpJVS2Q==",
- "bundleDependencies": [
- "@messageformat/date-skeleton"
- ],
- "dev": true,
- "dependencies": {
- "@messageformat/parser": "^5.0.0",
- "js-sha256": "^0.10.1"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@lingui/cli/node_modules/@types/yargs": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
- "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
- "dev": true,
+ "node_modules/@lingui/conf/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
}
},
- "node_modules/@lingui/cli/node_modules/ansi-styles": {
+ "node_modules/@lingui/conf/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -5839,17 +5602,19 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@lingui/cli/node_modules/argparse": {
+ "node_modules/@lingui/conf/node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
+ "devOptional": true,
+ "license": "Python-2.0"
},
- "node_modules/@lingui/cli/node_modules/chalk": {
+ "node_modules/@lingui/conf/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -5861,11 +5626,12 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@lingui/cli/node_modules/color-convert": {
+ "node_modules/@lingui/conf/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
@@ -5873,23 +5639,19 @@
"node": ">=7.0.0"
}
},
- "node_modules/@lingui/cli/node_modules/color-name": {
+ "node_modules/@lingui/conf/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@lingui/cli/node_modules/convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
+ "devOptional": true,
+ "license": "MIT"
},
- "node_modules/@lingui/cli/node_modules/cosmiconfig": {
+ "node_modules/@lingui/conf/node_modules/cosmiconfig": {
"version": "8.3.6",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
"integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
- "dev": true,
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
"import-fresh": "^3.3.0",
"js-yaml": "^4.1.0",
@@ -5911,52 +5673,32 @@
}
}
},
- "node_modules/@lingui/cli/node_modules/glob": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz",
- "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==",
- "dev": true,
- "dependencies": {
- "foreground-child": "^3.3.1",
- "jackspeak": "^4.1.1",
- "minimatch": "^10.1.1",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^2.0.0"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "engines": {
- "node": "20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@lingui/cli/node_modules/has-flag": {
+ "node_modules/@lingui/conf/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
+ "devOptional": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/@lingui/cli/node_modules/jest-get-type": {
+ "node_modules/@lingui/conf/node_modules/jest-get-type": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
"integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
- "dev": true,
+ "devOptional": true,
+ "license": "MIT",
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@lingui/cli/node_modules/jest-validate": {
+ "node_modules/@lingui/conf/node_modules/jest-validate": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
"integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
- "dev": true,
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
"@jest/types": "^29.6.3",
"camelcase": "^6.2.0",
@@ -5969,11 +5711,12 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@lingui/cli/node_modules/js-yaml": {
+ "node_modules/@lingui/conf/node_modules/js-yaml": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
"integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
- "dev": true,
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
@@ -5981,26 +5724,12 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/@lingui/cli/node_modules/minimatch": {
- "version": "10.1.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz",
- "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==",
- "dev": true,
- "dependencies": {
- "@isaacs/brace-expansion": "^5.0.0"
- },
- "engines": {
- "node": "20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@lingui/cli/node_modules/pretty-format": {
+ "node_modules/@lingui/conf/node_modules/pretty-format": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
"integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
- "dev": true,
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
@@ -6010,11 +5739,12 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@lingui/cli/node_modules/pretty-format/node_modules/ansi-styles": {
+ "node_modules/@lingui/conf/node_modules/pretty-format/node_modules/ansi-styles": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true,
+ "devOptional": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -6022,29 +5752,19 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@lingui/cli/node_modules/react-is": {
+ "node_modules/@lingui/conf/node_modules/react-is": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
"integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "dev": true
- },
- "node_modules/@lingui/cli/node_modules/source-map": {
- "version": "0.8.0-beta.0",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
- "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==",
- "dev": true,
- "dependencies": {
- "whatwg-url": "^7.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
+ "devOptional": true,
+ "license": "MIT"
},
- "node_modules/@lingui/cli/node_modules/supports-color": {
+ "node_modules/@lingui/conf/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
+ "devOptional": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -6052,334 +5772,327 @@
"node": ">=8"
}
},
- "node_modules/@lingui/cli/node_modules/tr46": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
- "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/@lingui/cli/node_modules/webidl-conversions": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
- "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
- "dev": true
- },
- "node_modules/@lingui/cli/node_modules/whatwg-url": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
- "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
- "dev": true,
- "dependencies": {
- "lodash.sortby": "^4.7.0",
- "tr46": "^1.0.1",
- "webidl-conversions": "^4.0.2"
- }
- },
- "node_modules/@lingui/conf": {
- "version": "4.11.3",
- "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-4.11.3.tgz",
- "integrity": "sha512-KwUJDrbzlZEXmlmqttpB/Sd9hiIo0sqccsZaYTHzW/uULZT9T11aw/f6RcPLCVJeSKazg/7dJhR1cKlxKzvjKA==",
- "dev": true,
+ "node_modules/@lingui/core": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/core/-/core-5.9.3.tgz",
+ "integrity": "sha512-3b8LnDjx8POdQ6q6UKBe2DHynyQFCO66vm8/UPQnvlQowUk4Xdu5bK6oet11D9/vrSznrDDS+Qb5JVcNBUImgg==",
+ "license": "MIT",
"dependencies": {
"@babel/runtime": "^7.20.13",
- "chalk": "^4.1.0",
- "cosmiconfig": "^8.0.0",
- "jest-validate": "^29.4.3",
- "jiti": "^1.17.1",
- "lodash.get": "^4.4.2"
+ "@lingui/message-utils": "5.9.3"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "@lingui/babel-plugin-lingui-macro": "5.9.3",
+ "babel-plugin-macros": "2 || 3"
+ },
+ "peerDependenciesMeta": {
+ "@lingui/babel-plugin-lingui-macro": {
+ "optional": true
+ },
+ "babel-plugin-macros": {
+ "optional": true
+ }
}
},
- "node_modules/@lingui/conf/node_modules/@jest/types": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
- "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+ "node_modules/@lingui/format-po": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/format-po/-/format-po-5.9.3.tgz",
+ "integrity": "sha512-+LMnhWl7EmXrdOv10gopE1g8w8vtPY5Fxk72OORrGQFVMGBIioz4BEnKrNdV1ek2M+GxoMZtnUs17KrJN5Jv9A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/schemas": "^29.6.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
+ "@lingui/conf": "5.9.3",
+ "@lingui/message-utils": "5.9.3",
+ "date-fns": "^3.6.0",
+ "pofile": "^1.1.4"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@lingui/conf/node_modules/@types/yargs": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
- "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
+ "node": ">=20.0.0"
}
},
- "node_modules/@lingui/conf/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/@lingui/loader": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/loader/-/loader-5.9.3.tgz",
+ "integrity": "sha512-V+m8vfZ1doPSc26fPZa1zVso75nl70mgdz51OHGAvFfafyDqYasFHmBf5xihS58vy6LXuep3K19Ymf6TG6i5TQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "color-convert": "^2.0.1"
+ "@babel/runtime": "^7.20.13",
+ "@lingui/cli": "5.9.3",
+ "@lingui/conf": "5.9.3"
},
"engines": {
- "node": ">=8"
+ "node": ">=20.0.0"
},
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "peerDependencies": {
+ "webpack": "^5.0.0"
}
},
- "node_modules/@lingui/conf/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/@lingui/conf/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/@lingui/macro": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/macro/-/macro-5.9.3.tgz",
+ "integrity": "sha512-xWqJ+hpp5T+xmE++VYlcfMxrF48LpY5Ak9N/luibY9d0AqvyYZiiv7Xaq7E2eK69v9CJWx+6eXA6uPhC8gHY+Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "@lingui/core": "5.9.3",
+ "@lingui/react": "5.9.3"
},
"engines": {
- "node": ">=10"
+ "node": ">=20.0.0"
},
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "peerDependencies": {
+ "@lingui/babel-plugin-lingui-macro": "5.9.3",
+ "babel-plugin-macros": "2 || 3"
+ },
+ "peerDependenciesMeta": {
+ "@lingui/babel-plugin-lingui-macro": {
+ "optional": true
+ },
+ "babel-plugin-macros": {
+ "optional": true
+ }
}
},
- "node_modules/@lingui/conf/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
+ "node_modules/@lingui/message-utils": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-5.9.3.tgz",
+ "integrity": "sha512-oAK7HA7lcQrzaEaM6G1T5RwwxJxaSKfG/IFIxpZIl49TSFQv+s9YPNgHnVi+d4DmterpXNxy9ZZ+NtckJx6u7g==",
+ "license": "MIT",
"dependencies": {
- "color-name": "~1.1.4"
+ "@messageformat/parser": "^5.0.0",
+ "js-sha256": "^0.10.1"
},
"engines": {
- "node": ">=7.0.0"
+ "node": ">=20.0.0"
}
},
- "node_modules/@lingui/conf/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@lingui/conf/node_modules/cosmiconfig": {
- "version": "8.3.6",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
- "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
- "dev": true,
+ "node_modules/@lingui/react": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/react/-/react-5.9.3.tgz",
+ "integrity": "sha512-aje78l3zGGZ3C75fiGhDVKyVALHfiKlYFjcOlZpgXY/JAVfFuZX+6wUGG9x1A8k7BfxrDy/ofHIBahPvNAqoKw==",
+ "license": "MIT",
"dependencies": {
- "import-fresh": "^3.3.0",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.2.0",
- "path-type": "^4.0.0"
+ "@babel/runtime": "^7.20.13",
+ "@lingui/core": "5.9.3"
},
"engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/d-fischer"
+ "node": ">=20.0.0"
},
"peerDependencies": {
- "typescript": ">=4.9.5"
+ "@lingui/babel-plugin-lingui-macro": "5.9.3",
+ "babel-plugin-macros": "2 || 3",
+ "react": "^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
- "typescript": {
+ "@lingui/babel-plugin-lingui-macro": {
+ "optional": true
+ },
+ "babel-plugin-macros": {
"optional": true
}
}
},
- "node_modules/@lingui/conf/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
+ "node_modules/@messageformat/parser": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@messageformat/parser/-/parser-5.1.0.tgz",
+ "integrity": "sha512-jKlkls3Gewgw6qMjKZ9SFfHUpdzEVdovKFtW1qRhJ3WI4FW5R/NnGDqr8SDGz+krWDO3ki94boMmQvGke1HwUQ==",
+ "dependencies": {
+ "moo": "^0.5.1"
}
},
- "node_modules/@lingui/conf/node_modules/jest-get-type": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
- "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
+ "node_modules/@nicolo-ribaudo/chokidar-2": {
+ "version": "2.1.8-no-fsevents.3",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
+ "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/@noble/hashes": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
+ "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
"dev": true,
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": "^14.21.3 || >=16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
}
},
- "node_modules/@lingui/conf/node_modules/jest-validate": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
- "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.6.3",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "leven": "^3.1.0",
- "pretty-format": "^29.7.0"
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 8"
}
},
- "node_modules/@lingui/conf/node_modules/js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
+ "engines": {
+ "node": ">= 8"
}
},
- "node_modules/@lingui/conf/node_modules/pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">= 8"
}
},
- "node_modules/@lingui/conf/node_modules/pretty-format/node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "node_modules/@paralleldrive/cuid2": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz",
+ "integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==",
"dev": true,
- "engines": {
- "node": ">=10"
- },
+ "dependencies": {
+ "@noble/hashes": "^1.1.5"
+ }
+ },
+ "node_modules/@popperjs/core": {
+ "version": "2.11.8",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
+ "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
}
},
- "node_modules/@lingui/conf/node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "node_modules/@protobufjs/aspromise": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
+ "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==",
"dev": true
},
- "node_modules/@lingui/conf/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/@protobufjs/base64": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
+ "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
+ "dev": true
+ },
+ "node_modules/@protobufjs/codegen": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
+ "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
+ "dev": true
+ },
+ "node_modules/@protobufjs/eventemitter": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
+ "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==",
+ "dev": true
+ },
+ "node_modules/@protobufjs/fetch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
+ "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
"dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
+ "@protobufjs/aspromise": "^1.1.1",
+ "@protobufjs/inquire": "^1.1.0"
}
},
- "node_modules/@lingui/core": {
- "version": "4.11.3",
- "resolved": "https://registry.npmjs.org/@lingui/core/-/core-4.11.3.tgz",
- "integrity": "sha512-IjJxn0Kvzv+ICnGlMqn8wRIQLikCJVrolb1oyi6GqtbiuPiwKYeU0D6Hbe146lMaTN8juc3tOCBS+Fr02XqFIQ==",
- "dependencies": {
- "@babel/runtime": "^7.20.13",
- "@lingui/message-utils": "4.11.3",
- "unraw": "^3.0.0"
- },
- "engines": {
- "node": ">=16.0.0"
- }
+ "node_modules/@protobufjs/float": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
+ "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==",
+ "dev": true
},
- "node_modules/@lingui/format-po": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/format-po/-/format-po-5.4.0.tgz",
- "integrity": "sha512-zQ930if6pTXAT4fQzbVdqORNc9g4XNCB2LwQ4nhzm65acCHI/BVMnGXkeU5qWLdX5xXPRIxaJbUvhXWh3Shy3A==",
- "dev": true,
- "dependencies": {
- "@lingui/conf": "5.4.0",
- "@lingui/message-utils": "5.4.0",
- "date-fns": "^3.6.0",
- "pofile": "^1.1.4"
- },
+ "node_modules/@protobufjs/inquire": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
+ "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==",
+ "dev": true
+ },
+ "node_modules/@protobufjs/path": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
+ "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==",
+ "dev": true
+ },
+ "node_modules/@protobufjs/pool": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
+ "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==",
+ "dev": true
+ },
+ "node_modules/@protobufjs/utf8": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
+ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==",
+ "dev": true
+ },
+ "node_modules/@remix-run/router": {
+ "version": "1.23.2",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.2.tgz",
+ "integrity": "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==",
"engines": {
- "node": ">=20.0.0"
+ "node": ">=14.0.0"
}
},
- "node_modules/@lingui/format-po/node_modules/@jest/types": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
- "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+ "node_modules/@sinclair/typebox": {
+ "version": "0.27.10",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz",
+ "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==",
+ "devOptional": true,
+ "license": "MIT"
+ },
+ "node_modules/@sinonjs/commons": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz",
+ "integrity": "sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.6.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "type-detect": "4.0.8"
}
},
- "node_modules/@lingui/format-po/node_modules/@lingui/conf": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-5.4.0.tgz",
- "integrity": "sha512-S4YIWyyPpncTfilNzmvSrPUJ8lFKvOs/2+j4Lpzwj5Ue5DIpxB+2WnpNkfw3GsQl3ilPiFbo87R21XKLNzMF+Q==",
+ "node_modules/@sinonjs/fake-timers": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
+ "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
"dev": true,
"dependencies": {
- "@babel/runtime": "^7.20.13",
- "cosmiconfig": "^8.0.0",
- "jest-validate": "^29.4.3",
- "jiti": "^1.17.1",
- "picocolors": "^1.1.1"
- },
- "engines": {
- "node": ">=20.0.0"
+ "@sinonjs/commons": "^1.7.0"
}
},
- "node_modules/@lingui/format-po/node_modules/@lingui/message-utils": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-5.4.0.tgz",
- "integrity": "sha512-Ok++R55W3kvI8dN7itti0DmQatDLodOUJVuEDDhCydzpYJCurwc60hZCn/o/M2SI2+BCVlkTOCXGkdcrpJVS2Q==",
- "bundleDependencies": [
- "@messageformat/date-skeleton"
- ],
+ "node_modules/@testing-library/dom": {
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.13.0.tgz",
+ "integrity": "sha512-9VHgfIatKNXQNaZTtLnalIy0jNZzY35a4S3oi08YAt9Hv1VsfZ/DfA45lM8D/UhtHBGJ4/lGwp0PZkVndRkoOQ==",
"dev": true,
"dependencies": {
- "@messageformat/parser": "^5.0.0",
- "js-sha256": "^0.10.1"
+ "@babel/code-frame": "^7.10.4",
+ "@babel/runtime": "^7.12.5",
+ "@types/aria-query": "^4.2.0",
+ "aria-query": "^5.0.0",
+ "chalk": "^4.1.0",
+ "dom-accessibility-api": "^0.5.9",
+ "lz-string": "^1.4.4",
+ "pretty-format": "^27.0.2"
},
"engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@lingui/format-po/node_modules/@types/yargs": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
- "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
+ "node": ">=12"
}
},
- "node_modules/@lingui/format-po/node_modules/ansi-styles": {
+ "node_modules/@testing-library/dom/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
@@ -6389,21 +6102,12 @@
},
"engines": {
"node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@lingui/format-po/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/@lingui/format-po/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/@testing-library/dom/node_modules/chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
@@ -6411,12 +6115,9 @@
},
"engines": {
"node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@lingui/format-po/node_modules/color-convert": {
+ "node_modules/@testing-library/dom/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
@@ -6428,39 +6129,13 @@
"node": ">=7.0.0"
}
},
- "node_modules/@lingui/format-po/node_modules/color-name": {
+ "node_modules/@testing-library/dom/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "node_modules/@lingui/format-po/node_modules/cosmiconfig": {
- "version": "8.3.6",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
- "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
- "dev": true,
- "dependencies": {
- "import-fresh": "^3.3.0",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.2.0",
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/d-fischer"
- },
- "peerDependencies": {
- "typescript": ">=4.9.5"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@lingui/format-po/node_modules/has-flag": {
+ "node_modules/@testing-library/dom/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
@@ -6469,59 +6144,21 @@
"node": ">=8"
}
},
- "node_modules/@lingui/format-po/node_modules/jest-get-type": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
- "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
- "dev": true,
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@lingui/format-po/node_modules/jest-validate": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
- "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^29.6.3",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "leven": "^3.1.0",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@lingui/format-po/node_modules/js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/@lingui/format-po/node_modules/pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
+ "node_modules/@testing-library/dom/node_modules/pretty-format": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
+ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.6.3",
+ "ansi-regex": "^5.0.1",
"ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
+ "react-is": "^17.0.1"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
- "node_modules/@lingui/format-po/node_modules/pretty-format/node_modules/ansi-styles": {
+ "node_modules/@testing-library/dom/node_modules/pretty-format/node_modules/ansi-styles": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
@@ -6533,13 +6170,13 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@lingui/format-po/node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "node_modules/@testing-library/dom/node_modules/react-is": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
"dev": true
},
- "node_modules/@lingui/format-po/node_modules/supports-color": {
+ "node_modules/@testing-library/dom/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
@@ -6551,66 +6188,29 @@
"node": ">=8"
}
},
- "node_modules/@lingui/loader": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/loader/-/loader-5.4.0.tgz",
- "integrity": "sha512-iU5fnP6IvnaofTTov9PmePYPIm2xLgxruQY/z5LDZV+G0oo9RGER8HEF/1D0lSypHuNuLQZCncoOhnxF6XN81w==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.20.13",
- "@lingui/cli": "5.4.0",
- "@lingui/conf": "5.4.0"
- },
- "engines": {
- "node": ">=20.0.0"
- },
- "peerDependencies": {
- "webpack": "^5.0.0"
- }
- },
- "node_modules/@lingui/loader/node_modules/@jest/types": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
- "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@lingui/loader/node_modules/@lingui/conf": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-5.4.0.tgz",
- "integrity": "sha512-S4YIWyyPpncTfilNzmvSrPUJ8lFKvOs/2+j4Lpzwj5Ue5DIpxB+2WnpNkfw3GsQl3ilPiFbo87R21XKLNzMF+Q==",
+ "node_modules/@testing-library/jest-dom": {
+ "version": "5.16.5",
+ "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz",
+ "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==",
"dev": true,
"dependencies": {
- "@babel/runtime": "^7.20.13",
- "cosmiconfig": "^8.0.0",
- "jest-validate": "^29.4.3",
- "jiti": "^1.17.1",
- "picocolors": "^1.1.1"
+ "@adobe/css-tools": "^4.0.1",
+ "@babel/runtime": "^7.9.2",
+ "@types/testing-library__jest-dom": "^5.9.1",
+ "aria-query": "^5.0.0",
+ "chalk": "^3.0.0",
+ "css.escape": "^1.5.1",
+ "dom-accessibility-api": "^0.5.6",
+ "lodash": "^4.17.15",
+ "redent": "^3.0.0"
},
"engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@lingui/loader/node_modules/@types/yargs": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
- "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
- "dev": true,
- "dependencies": {
- "@types/yargs-parser": "*"
+ "node": ">=8",
+ "npm": ">=6",
+ "yarn": ">=1"
}
},
- "node_modules/@lingui/loader/node_modules/ansi-styles": {
+ "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
@@ -6620,34 +6220,22 @@
},
"engines": {
"node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@lingui/loader/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/@lingui/loader/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/@testing-library/jest-dom/node_modules/chalk": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "node": ">=8"
}
},
- "node_modules/@lingui/loader/node_modules/color-convert": {
+ "node_modules/@testing-library/jest-dom/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
@@ -6659,39 +6247,13 @@
"node": ">=7.0.0"
}
},
- "node_modules/@lingui/loader/node_modules/color-name": {
+ "node_modules/@testing-library/jest-dom/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "node_modules/@lingui/loader/node_modules/cosmiconfig": {
- "version": "8.3.6",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
- "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
- "dev": true,
- "dependencies": {
- "import-fresh": "^3.3.0",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.2.0",
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/d-fischer"
- },
- "peerDependencies": {
- "typescript": ">=4.9.5"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@lingui/loader/node_modules/has-flag": {
+ "node_modules/@testing-library/jest-dom/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
@@ -6700,750 +6262,276 @@
"node": ">=8"
}
},
- "node_modules/@lingui/loader/node_modules/jest-get-type": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
- "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
+ "node_modules/@testing-library/jest-dom/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">=8"
}
},
- "node_modules/@lingui/loader/node_modules/jest-validate": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
- "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
+ "node_modules/@testing-library/react": {
+ "version": "13.4.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz",
+ "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.6.3",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "leven": "^3.1.0",
- "pretty-format": "^29.7.0"
+ "@babel/runtime": "^7.12.5",
+ "@testing-library/dom": "^8.5.0",
+ "@types/react-dom": "^18.0.0"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
}
},
- "node_modules/@lingui/loader/node_modules/js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "node_modules/@testing-library/react-hooks": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-7.0.2.tgz",
+ "integrity": "sha512-dYxpz8u9m4q1TuzfcUApqi8iFfR6R0FaMbr2hjZJy1uC8z+bO/K4v8Gs9eogGKYQop7QsrBTFkv/BCF7MzD2Cg==",
"dev": true,
"dependencies": {
- "argparse": "^2.0.1"
+ "@babel/runtime": "^7.12.5",
+ "@types/react": ">=16.9.0",
+ "@types/react-dom": ">=16.9.0",
+ "@types/react-test-renderer": ">=16.9.0",
+ "react-error-boundary": "^3.1.0"
},
- "bin": {
- "js-yaml": "bin/js-yaml.js"
+ "engines": {
+ "node": ">=12"
+ },
+ "peerDependencies": {
+ "react": ">=16.9.0",
+ "react-dom": ">=16.9.0",
+ "react-test-renderer": ">=16.9.0"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ },
+ "react-test-renderer": {
+ "optional": true
+ }
}
},
- "node_modules/@lingui/loader/node_modules/pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
+ "node_modules/@testing-library/user-event": {
+ "version": "13.5.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz",
+ "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==",
"dev": true,
"dependencies": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
+ "@babel/runtime": "^7.12.5"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": ">=10",
+ "npm": ">=6"
+ },
+ "peerDependencies": {
+ "@testing-library/dom": ">=7.21.4"
}
},
- "node_modules/@lingui/loader/node_modules/pretty-format/node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "node_modules/@tootallnate/once": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
"dev": true,
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "node": ">= 6"
}
},
- "node_modules/@lingui/loader/node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "dev": true
- },
- "node_modules/@lingui/loader/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/@types/accepts": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz",
+ "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==",
"dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
+ "@types/node": "*"
}
},
- "node_modules/@lingui/macro": {
- "version": "4.11.3",
- "resolved": "https://registry.npmjs.org/@lingui/macro/-/macro-4.11.3.tgz",
- "integrity": "sha512-D0me8ZRtH0ylSavhKZu0FYf5mJ1y6kDMMPjYVDyiT5ooOI/5jjv9LIAqrdYGCBygnwsxOG1dzDw6+3s5GTs+Bg==",
+ "node_modules/@types/anymatch": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz",
+ "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==",
+ "dev": true
+ },
+ "node_modules/@types/aria-query": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.0.tgz",
+ "integrity": "sha512-iIgQNzCm0v7QMhhe4Jjn9uRh+I6GoPmt03CbEtwx3ao8/EfoQcmgtqH4vQ5Db/lxiIGaWDv6nwvunuh0RyX0+A==",
+ "dev": true
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.1.14",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz",
+ "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==",
"dev": true,
"dependencies": {
- "@babel/runtime": "^7.20.13",
- "@babel/types": "^7.20.7",
- "@lingui/conf": "4.11.3",
- "@lingui/core": "4.11.3",
- "@lingui/message-utils": "4.11.3"
- },
- "engines": {
- "node": ">=16.0.0"
- },
- "peerDependencies": {
- "@lingui/react": "^4.0.0",
- "babel-plugin-macros": "2 || 3"
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
}
},
- "node_modules/@lingui/message-utils": {
- "version": "4.11.3",
- "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-4.11.3.tgz",
- "integrity": "sha512-ZSw3OoKbknOw3nSrqt194g2F8r0guKow9csb46zlL7zX/yOWCaj767wvSvMoglZtVvurfQs4NPv2cohYlWORNw==",
+ "node_modules/@types/babel__generator": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz",
+ "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==",
+ "dev": true,
"dependencies": {
- "@messageformat/parser": "^5.0.0",
- "js-sha256": "^0.10.1"
- },
- "engines": {
- "node": ">=16.0.0"
+ "@babel/types": "^7.0.0"
}
},
- "node_modules/@lingui/react": {
- "version": "4.11.3",
- "resolved": "https://registry.npmjs.org/@lingui/react/-/react-4.11.3.tgz",
- "integrity": "sha512-FuorwDsz5zDpUNpyj7J8ZKqJrrVxOz1EtQ3aJGJsmnTtVO01N3nR3ckMzpYvZ71XXdDEvhUC9ihmiKbFvpaZ/w==",
+ "node_modules/@types/babel__template": {
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz",
+ "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==",
+ "dev": true,
"dependencies": {
- "@babel/runtime": "^7.20.13",
- "@lingui/core": "4.11.3"
- },
- "engines": {
- "node": ">=16.0.0"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
}
},
- "node_modules/@messageformat/parser": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/@messageformat/parser/-/parser-5.1.0.tgz",
- "integrity": "sha512-jKlkls3Gewgw6qMjKZ9SFfHUpdzEVdovKFtW1qRhJ3WI4FW5R/NnGDqr8SDGz+krWDO3ki94boMmQvGke1HwUQ==",
+ "node_modules/@types/babel__traverse": {
+ "version": "7.11.1",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz",
+ "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==",
+ "dev": true,
"dependencies": {
- "moo": "^0.5.1"
+ "@babel/types": "^7.3.0"
}
},
- "node_modules/@nicolo-ribaudo/chokidar-2": {
- "version": "2.1.8-no-fsevents.3",
- "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
- "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==",
- "dev": true,
- "optional": true
- },
- "node_modules/@noble/hashes": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
- "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
+ "node_modules/@types/body-parser": {
+ "version": "1.19.2",
+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
+ "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
"dev": true,
- "engines": {
- "node": "^14.21.3 || >=16"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
+ "dependencies": {
+ "@types/connect": "*",
+ "@types/node": "*"
}
},
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "node_modules/@types/bonjour": {
+ "version": "3.5.10",
+ "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz",
+ "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==",
"dev": true,
"dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
+ "@types/node": "*"
}
},
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "node_modules/@types/connect": {
+ "version": "3.4.35",
+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
+ "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
"dev": true,
- "engines": {
- "node": ">= 8"
+ "dependencies": {
+ "@types/node": "*"
}
},
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "node_modules/@types/connect-history-api-fallback": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz",
+ "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==",
"dev": true,
"dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
+ "@types/express-serve-static-core": "*",
+ "@types/node": "*"
}
},
- "node_modules/@paralleldrive/cuid2": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz",
- "integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==",
- "dev": true,
+ "node_modules/@types/cors": {
+ "version": "2.8.12",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
+ "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==",
+ "dev": true
+ },
+ "node_modules/@types/d3-array": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.3.tgz",
+ "integrity": "sha512-Reoy+pKnvsksN0lQUlcH6dOGjRZ/3WRwXR//m+/8lt1BXeI4xyaUZoqULNjyXXRuh0Mj4LNpkCvhUpQlY3X5xQ=="
+ },
+ "node_modules/@types/d3-color": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-1.4.5.tgz",
+ "integrity": "sha512-5sNP3DmtSnSozxcjqmzQKsDOuVJXZkceo1KJScDc1982kk/TS9mTPc6lpli1gTu1MIBF1YWutpHpjucNWcIj5g=="
+ },
+ "node_modules/@types/d3-delaunay": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.1.tgz",
+ "integrity": "sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ=="
+ },
+ "node_modules/@types/d3-format": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.1.tgz",
+ "integrity": "sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg=="
+ },
+ "node_modules/@types/d3-geo": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz",
+ "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==",
"dependencies": {
- "@noble/hashes": "^1.1.5"
+ "@types/geojson": "*"
}
},
- "node_modules/@popperjs/core": {
- "version": "2.11.8",
- "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
- "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/popperjs"
- }
+ "node_modules/@types/d3-path": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.9.tgz",
+ "integrity": "sha512-NaIeSIBiFgSC6IGUBjZWcscUJEq7vpVu7KthHN8eieTV9d9MqkSOZLH4chq1PmcKy06PNe3axLeKmRIyxJ+PZQ=="
},
- "node_modules/@protobufjs/aspromise": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
- "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==",
- "dev": true
+ "node_modules/@types/d3-random": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-2.2.3.tgz",
+ "integrity": "sha512-Ghs4R3CcgJ3o6svszRzIH4b8PPYex/COo+rhhZjDAs+bVducXwjmVSi27WcDOaLLCBV2t3tfVH9bYXAL76IvQA=="
},
- "node_modules/@protobufjs/base64": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
- "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
- "dev": true
+ "node_modules/@types/d3-shape": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.3.8.tgz",
+ "integrity": "sha512-gqfnMz6Fd5H6GOLYixOZP/xlrMtJms9BaS+6oWxTKHNqPGZ93BkWWupQSCYm6YHqx6h9wjRupuJb90bun6ZaYg==",
+ "dependencies": {
+ "@types/d3-path": "^1"
+ }
},
- "node_modules/@protobufjs/codegen": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
- "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
- "dev": true
+ "node_modules/@types/d3-time": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-2.1.4.tgz",
+ "integrity": "sha512-BTfLsxTeo7yFxI/haOOf1ZwJ6xKgQLT9dCp+EcmQv87Gox6X+oKl4mLKfO6fnWm3P22+A6DknMNEZany8ql2Rw=="
},
- "node_modules/@protobufjs/eventemitter": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
- "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==",
- "dev": true
+ "node_modules/@types/d3-time-format": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.1.0.tgz",
+ "integrity": "sha512-/myT3I7EwlukNOX2xVdMzb8FRgNzRMpsZddwst9Ld/VFe6LyJyRp0s32l/V9XoUzk+Gqu56F/oGk6507+8BxrA=="
},
- "node_modules/@protobufjs/fetch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
- "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
+ "node_modules/@types/eslint": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
+ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
"dev": true,
"dependencies": {
- "@protobufjs/aspromise": "^1.1.1",
- "@protobufjs/inquire": "^1.1.0"
+ "@types/estree": "*",
+ "@types/json-schema": "*"
}
},
- "node_modules/@protobufjs/float": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
- "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==",
- "dev": true
+ "node_modules/@types/eslint-scope": {
+ "version": "3.7.7",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+ "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+ "dev": true,
+ "dependencies": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
},
- "node_modules/@protobufjs/inquire": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
- "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==",
- "dev": true
- },
- "node_modules/@protobufjs/path": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
- "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==",
- "dev": true
- },
- "node_modules/@protobufjs/pool": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
- "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==",
- "dev": true
- },
- "node_modules/@protobufjs/utf8": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
- "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==",
- "dev": true
- },
- "node_modules/@remix-run/router": {
- "version": "1.23.2",
- "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.2.tgz",
- "integrity": "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==",
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@sinclair/typebox": {
- "version": "0.27.8",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
- "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
- "dev": true
- },
- "node_modules/@sinonjs/commons": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz",
- "integrity": "sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==",
- "dev": true,
- "dependencies": {
- "type-detect": "4.0.8"
- }
- },
- "node_modules/@sinonjs/fake-timers": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
- "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "node_modules/@testing-library/dom": {
- "version": "8.13.0",
- "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.13.0.tgz",
- "integrity": "sha512-9VHgfIatKNXQNaZTtLnalIy0jNZzY35a4S3oi08YAt9Hv1VsfZ/DfA45lM8D/UhtHBGJ4/lGwp0PZkVndRkoOQ==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.10.4",
- "@babel/runtime": "^7.12.5",
- "@types/aria-query": "^4.2.0",
- "aria-query": "^5.0.0",
- "chalk": "^4.1.0",
- "dom-accessibility-api": "^0.5.9",
- "lz-string": "^1.4.4",
- "pretty-format": "^27.0.2"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@testing-library/dom/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@testing-library/dom/node_modules/chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@testing-library/dom/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/@testing-library/dom/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@testing-library/dom/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@testing-library/dom/node_modules/pretty-format": {
- "version": "27.5.1",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
- "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1",
- "ansi-styles": "^5.0.0",
- "react-is": "^17.0.1"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/@testing-library/dom/node_modules/pretty-format/node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@testing-library/dom/node_modules/react-is": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
- "dev": true
- },
- "node_modules/@testing-library/dom/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@testing-library/jest-dom": {
- "version": "5.16.5",
- "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.5.tgz",
- "integrity": "sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==",
- "dev": true,
- "dependencies": {
- "@adobe/css-tools": "^4.0.1",
- "@babel/runtime": "^7.9.2",
- "@types/testing-library__jest-dom": "^5.9.1",
- "aria-query": "^5.0.0",
- "chalk": "^3.0.0",
- "css.escape": "^1.5.1",
- "dom-accessibility-api": "^0.5.6",
- "lodash": "^4.17.15",
- "redent": "^3.0.0"
- },
- "engines": {
- "node": ">=8",
- "npm": ">=6",
- "yarn": ">=1"
- }
- },
- "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@testing-library/jest-dom/node_modules/chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@testing-library/jest-dom/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/@testing-library/jest-dom/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@testing-library/jest-dom/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@testing-library/jest-dom/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@testing-library/react": {
- "version": "13.4.0",
- "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz",
- "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@testing-library/dom": "^8.5.0",
- "@types/react-dom": "^18.0.0"
- },
- "engines": {
- "node": ">=12"
- },
- "peerDependencies": {
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
- }
- },
- "node_modules/@testing-library/react-hooks": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-7.0.2.tgz",
- "integrity": "sha512-dYxpz8u9m4q1TuzfcUApqi8iFfR6R0FaMbr2hjZJy1uC8z+bO/K4v8Gs9eogGKYQop7QsrBTFkv/BCF7MzD2Cg==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@types/react": ">=16.9.0",
- "@types/react-dom": ">=16.9.0",
- "@types/react-test-renderer": ">=16.9.0",
- "react-error-boundary": "^3.1.0"
- },
- "engines": {
- "node": ">=12"
- },
- "peerDependencies": {
- "react": ">=16.9.0",
- "react-dom": ">=16.9.0",
- "react-test-renderer": ">=16.9.0"
- },
- "peerDependenciesMeta": {
- "react-dom": {
- "optional": true
- },
- "react-test-renderer": {
- "optional": true
- }
- }
- },
- "node_modules/@testing-library/user-event": {
- "version": "13.5.0",
- "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz",
- "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.12.5"
- },
- "engines": {
- "node": ">=10",
- "npm": ">=6"
- },
- "peerDependencies": {
- "@testing-library/dom": ">=7.21.4"
- }
- },
- "node_modules/@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/@types/accepts": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz",
- "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/anymatch": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz",
- "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==",
- "dev": true
- },
- "node_modules/@types/aria-query": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.0.tgz",
- "integrity": "sha512-iIgQNzCm0v7QMhhe4Jjn9uRh+I6GoPmt03CbEtwx3ao8/EfoQcmgtqH4vQ5Db/lxiIGaWDv6nwvunuh0RyX0+A==",
- "dev": true
- },
- "node_modules/@types/babel__core": {
- "version": "7.1.14",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz",
- "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==",
- "dev": true,
- "dependencies": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0",
- "@types/babel__generator": "*",
- "@types/babel__template": "*",
- "@types/babel__traverse": "*"
- }
- },
- "node_modules/@types/babel__generator": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz",
- "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.0.0"
- }
- },
- "node_modules/@types/babel__template": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz",
- "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==",
- "dev": true,
- "dependencies": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "node_modules/@types/babel__traverse": {
- "version": "7.11.1",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz",
- "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.3.0"
- }
- },
- "node_modules/@types/body-parser": {
- "version": "1.19.2",
- "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
- "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
- "dev": true,
- "dependencies": {
- "@types/connect": "*",
- "@types/node": "*"
- }
- },
- "node_modules/@types/bonjour": {
- "version": "3.5.10",
- "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz",
- "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/connect": {
- "version": "3.4.35",
- "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
- "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/connect-history-api-fallback": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz",
- "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==",
- "dev": true,
- "dependencies": {
- "@types/express-serve-static-core": "*",
- "@types/node": "*"
- }
- },
- "node_modules/@types/cors": {
- "version": "2.8.12",
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
- "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==",
- "dev": true
- },
- "node_modules/@types/d3-array": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.3.tgz",
- "integrity": "sha512-Reoy+pKnvsksN0lQUlcH6dOGjRZ/3WRwXR//m+/8lt1BXeI4xyaUZoqULNjyXXRuh0Mj4LNpkCvhUpQlY3X5xQ=="
- },
- "node_modules/@types/d3-color": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-1.4.5.tgz",
- "integrity": "sha512-5sNP3DmtSnSozxcjqmzQKsDOuVJXZkceo1KJScDc1982kk/TS9mTPc6lpli1gTu1MIBF1YWutpHpjucNWcIj5g=="
- },
- "node_modules/@types/d3-delaunay": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.1.tgz",
- "integrity": "sha512-tLxQ2sfT0p6sxdG75c6f/ekqxjyYR0+LwPrsO1mbC9YDBzPJhs2HbJJRrn8Ez1DBoHRo2yx7YEATI+8V1nGMnQ=="
- },
- "node_modules/@types/d3-format": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.1.tgz",
- "integrity": "sha512-5KY70ifCCzorkLuIkDe0Z9YTf9RR2CjBX1iaJG+rgM/cPP+sO+q9YdQ9WdhQcgPj1EQiJ2/0+yUkkziTG6Lubg=="
- },
- "node_modules/@types/d3-geo": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz",
- "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==",
- "dependencies": {
- "@types/geojson": "*"
- }
- },
- "node_modules/@types/d3-path": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.9.tgz",
- "integrity": "sha512-NaIeSIBiFgSC6IGUBjZWcscUJEq7vpVu7KthHN8eieTV9d9MqkSOZLH4chq1PmcKy06PNe3axLeKmRIyxJ+PZQ=="
- },
- "node_modules/@types/d3-random": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-2.2.3.tgz",
- "integrity": "sha512-Ghs4R3CcgJ3o6svszRzIH4b8PPYex/COo+rhhZjDAs+bVducXwjmVSi27WcDOaLLCBV2t3tfVH9bYXAL76IvQA=="
- },
- "node_modules/@types/d3-shape": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.3.8.tgz",
- "integrity": "sha512-gqfnMz6Fd5H6GOLYixOZP/xlrMtJms9BaS+6oWxTKHNqPGZ93BkWWupQSCYm6YHqx6h9wjRupuJb90bun6ZaYg==",
- "dependencies": {
- "@types/d3-path": "^1"
- }
- },
- "node_modules/@types/d3-time": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-2.1.4.tgz",
- "integrity": "sha512-BTfLsxTeo7yFxI/haOOf1ZwJ6xKgQLT9dCp+EcmQv87Gox6X+oKl4mLKfO6fnWm3P22+A6DknMNEZany8ql2Rw=="
- },
- "node_modules/@types/d3-time-format": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.1.0.tgz",
- "integrity": "sha512-/myT3I7EwlukNOX2xVdMzb8FRgNzRMpsZddwst9Ld/VFe6LyJyRp0s32l/V9XoUzk+Gqu56F/oGk6507+8BxrA=="
- },
- "node_modules/@types/estree": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "node_modules/@types/estree": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
"dev": true
},
"node_modules/@types/express": {
@@ -7512,13 +6600,13 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
"integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
- "dev": true
+ "devOptional": true
},
"node_modules/@types/istanbul-lib-report": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
"integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"@types/istanbul-lib-coverage": "*"
}
@@ -7527,7 +6615,7 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
"integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"@types/istanbul-lib-report": "*"
}
@@ -7543,9 +6631,9 @@
}
},
"node_modules/@types/json-schema": {
- "version": "7.0.9",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
- "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true
},
"node_modules/@types/json5": {
@@ -7581,7 +6669,7 @@
"version": "14.0.26",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.26.tgz",
"integrity": "sha512-W+fpe5s91FBGE0pEa0lnqGLL4USgpLgs4nokw16SrBBco/gQxuua7KnArSEOd5iaMqbbSHV10vUDkJYJJqpXKA==",
- "dev": true
+ "devOptional": true
},
"node_modules/@types/node-forge": {
"version": "1.3.14",
@@ -7808,7 +6896,7 @@
"version": "15.0.0",
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz",
"integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==",
- "dev": true
+ "devOptional": true
},
"node_modules/@typescript-eslint/scope-manager": {
"version": "5.62.0",
@@ -8432,148 +7520,148 @@
}
},
"node_modules/@webassemblyjs/ast": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
- "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
+ "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
"dev": true,
"dependencies": {
- "@webassemblyjs/helper-numbers": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
+ "@webassemblyjs/helper-numbers": "1.13.2",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
}
},
"node_modules/@webassemblyjs/floating-point-hex-parser": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
- "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
+ "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
"dev": true
},
"node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
- "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
+ "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
"dev": true
},
"node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
- "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
+ "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
"dev": true
},
"node_modules/@webassemblyjs/helper-numbers": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
- "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
+ "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
"dev": true,
"dependencies": {
- "@webassemblyjs/floating-point-hex-parser": "1.11.6",
- "@webassemblyjs/helper-api-error": "1.11.6",
+ "@webassemblyjs/floating-point-hex-parser": "1.13.2",
+ "@webassemblyjs/helper-api-error": "1.13.2",
"@xtuc/long": "4.2.2"
}
},
"node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
- "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
+ "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
"dev": true
},
"node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
- "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
+ "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.12.1"
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/wasm-gen": "1.14.1"
}
},
"node_modules/@webassemblyjs/ieee754": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
- "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
+ "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
"dev": true,
"dependencies": {
"@xtuc/ieee754": "^1.2.0"
}
},
"node_modules/@webassemblyjs/leb128": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
- "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
+ "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
"dev": true,
"dependencies": {
"@xtuc/long": "4.2.2"
}
},
"node_modules/@webassemblyjs/utf8": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
- "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
+ "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
"dev": true
},
"node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
- "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
+ "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/helper-wasm-section": "1.12.1",
- "@webassemblyjs/wasm-gen": "1.12.1",
- "@webassemblyjs/wasm-opt": "1.12.1",
- "@webassemblyjs/wasm-parser": "1.12.1",
- "@webassemblyjs/wast-printer": "1.12.1"
+ "@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"
}
},
"node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
- "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
+ "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
+ "@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"
}
},
"node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
- "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
+ "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/wasm-gen": "1.12.1",
- "@webassemblyjs/wasm-parser": "1.12.1"
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/wasm-gen": "1.14.1",
+ "@webassemblyjs/wasm-parser": "1.14.1"
}
},
"node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
- "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
+ "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-api-error": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
+ "@webassemblyjs/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"
}
},
"node_modules/@webassemblyjs/wast-printer": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
- "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
+ "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/ast": "1.14.1",
"@xtuc/long": "4.2.2"
}
},
@@ -8716,9 +7804,9 @@
}
},
"node_modules/acorn": {
- "version": "8.11.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
- "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -8749,13 +7837,16 @@
"node": ">=0.4.0"
}
},
- "node_modules/acorn-import-attributes": {
- "version": "1.9.5",
- "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
- "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
+ "node_modules/acorn-import-phases": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz",
+ "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==",
"dev": true,
+ "engines": {
+ "node": ">=10.13.0"
+ },
"peerDependencies": {
- "acorn": "^8"
+ "acorn": "^8.14.0"
}
},
"node_modules/acorn-jsx": {
@@ -9663,13 +8754,6 @@
"node": ">= 10.14.2"
}
},
- "node_modules/backo2": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
- "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
- "optional": true,
- "peer": true
- },
"node_modules/balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@@ -9749,6 +8833,15 @@
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"dev": true
},
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.9.19",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz",
+ "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==",
+ "devOptional": true,
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.js"
+ }
+ },
"node_modules/batch": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
@@ -9910,9 +9003,9 @@
"dev": true
},
"node_modules/browserslist": {
- "version": "4.23.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
- "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+ "version": "4.28.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
+ "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
"devOptional": true,
"funding": [
{
@@ -9929,10 +9022,11 @@
}
],
"dependencies": {
- "caniuse-lite": "^1.0.30001646",
- "electron-to-chromium": "^1.5.4",
- "node-releases": "^2.0.18",
- "update-browserslist-db": "^1.1.0"
+ "baseline-browser-mapping": "^2.9.0",
+ "caniuse-lite": "^1.0.30001759",
+ "electron-to-chromium": "^1.5.263",
+ "node-releases": "^2.0.27",
+ "update-browserslist-db": "^1.2.0"
},
"bin": {
"browserslist": "cli.js"
@@ -10073,7 +9167,7 @@
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz",
"integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==",
- "dev": true,
+ "devOptional": true,
"engines": {
"node": ">=10"
},
@@ -10082,9 +9176,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001653",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz",
- "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==",
+ "version": "1.0.30001768",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001768.tgz",
+ "integrity": "sha512-qY3aDRZC5nWPgHUgIB84WL+nySuo19wk0VJpp/XI9T34lrvkyhRvNVOFJOp2kxClQhiFBu+TaUSudf6oa3vkSA==",
"devOptional": true,
"funding": [
{
@@ -10581,6 +9675,103 @@
"toggle-selection": "^1.0.6"
}
},
+ "node_modules/copy-webpack-plugin": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-14.0.0.tgz",
+ "integrity": "sha512-3JLW90aBGeaTLpM7mYQKpnVdgsUZRExY55giiZgLuX/xTQRUs1dOCwbBnWnvY6Q6rfZoXMNwzOQJCSZPppfqXA==",
+ "dev": true,
+ "dependencies": {
+ "glob-parent": "^6.0.1",
+ "normalize-path": "^3.0.0",
+ "schema-utils": "^4.2.0",
+ "serialize-javascript": "^7.0.3",
+ "tinyglobby": "^0.2.12"
+ },
+ "engines": {
+ "node": ">= 20.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.1.0"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3"
+ },
+ "peerDependencies": {
+ "ajv": "^8.8.2"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
+ "node_modules/copy-webpack-plugin/node_modules/schema-utils": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
+ "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/copy-webpack-plugin/node_modules/serialize-javascript": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.5.tgz",
+ "integrity": "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==",
+ "dev": true,
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
"node_modules/core-js-compat": {
"version": "3.35.0",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.0.tgz",
@@ -11176,6 +10367,7 @@
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz",
"integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==",
"dev": true,
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/kossnocorp"
@@ -11733,9 +10925,9 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"node_modules/electron-to-chromium": {
- "version": "1.5.13",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
- "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
+ "version": "1.5.286",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz",
+ "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==",
"devOptional": true
},
"node_modules/emittery": {
@@ -11780,13 +10972,13 @@
}
},
"node_modules/enhanced-resolve": {
- "version": "5.17.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
- "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
+ "version": "5.19.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz",
+ "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
+ "tapable": "^2.3.0"
},
"engines": {
"node": ">=10.13.0"
@@ -11892,9 +11084,9 @@
}
},
"node_modules/es-module-lexer": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
- "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz",
+ "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==",
"dev": true
},
"node_modules/es-object-atoms": {
@@ -11988,9 +11180,9 @@
}
},
"node_modules/escalade": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
- "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"devOptional": true,
"engines": {
"node": ">=6"
@@ -12631,6 +11823,17 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/esm": {
+ "version": "3.2.25",
+ "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
+ "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/espree": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
@@ -13174,6 +12377,22 @@
"integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
"dev": true
},
+ "node_modules/fast-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
+ "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ]
+ },
"node_modules/fastest-levenshtein": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
@@ -13376,9 +12595,9 @@
}
},
"node_modules/flatted": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz",
- "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
"node_modules/focus-lock": {
@@ -13398,9 +12617,9 @@
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
},
"node_modules/follow-redirects": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
+ "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
"dev": true,
"funding": [
{
@@ -14895,6 +14114,19 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-observable": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-2.1.0.tgz",
+ "integrity": "sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-path-cwd": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
@@ -15232,7 +14464,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz",
"integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==",
- "devOptional": true
+ "dev": true
},
"node_modules/jackspeak": {
"version": "4.1.1",
@@ -16930,12 +16162,13 @@
}
},
"node_modules/jiti": {
- "version": "1.21.6",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
- "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
- "dev": true,
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
+ "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
+ "devOptional": true,
+ "license": "MIT",
"bin": {
- "jiti": "bin/jiti.js"
+ "jiti": "lib/jiti-cli.mjs"
}
},
"node_modules/js-sha256": {
@@ -17178,7 +16411,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
- "dev": true,
+ "devOptional": true,
"engines": {
"node": ">=6"
}
@@ -17202,12 +16435,16 @@
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
},
"node_modules/loader-runner": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
- "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz",
+ "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==",
"dev": true,
"engines": {
"node": ">=6.11.5"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
}
},
"node_modules/loader-utils": {
@@ -17225,26 +16462,20 @@
}
},
"node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
+ "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="
},
"node_modules/lodash-es": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz",
+ "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A=="
},
"node_modules/lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
"integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
},
- "node_modules/lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
- "dev": true
- },
"node_modules/lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -17514,11 +16745,6 @@
"node": ">= 4.0.0"
}
},
- "node_modules/memoize-one": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
- "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
- },
"node_modules/merge-descriptors": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
@@ -17628,9 +16854,9 @@
"dev": true
},
"node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -17826,9 +17052,9 @@
}
},
"node_modules/node-forge": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.2.tgz",
- "integrity": "sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz",
+ "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==",
"dev": true,
"engines": {
"node": ">= 6.13.0"
@@ -17881,9 +17107,9 @@
}
},
"node_modules/node-releases": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
- "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
+ "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
"devOptional": true
},
"node_modules/nodemon": {
@@ -18195,6 +17421,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/observable-fns": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/observable-fns/-/observable-fns-0.6.1.tgz",
+ "integrity": "sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/obuf": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
@@ -18587,10 +17820,9 @@
}
},
"node_modules/path-to-regexp": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
- "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
- "license": "MIT"
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
+ "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA=="
},
"node_modules/path-type": {
"version": "4.0.0",
@@ -18606,9 +17838,9 @@
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
},
"node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"engines": {
"node": ">=8.6"
@@ -18663,7 +17895,8 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/pofile/-/pofile-1.1.4.tgz",
"integrity": "sha512-r6Q21sKsY1AjTVVjOuU02VYKVNQGJNQHjTIvs4dEbeuuYfxgYk/DGD2mqqq4RDaVkwdSq0VEtmQUOPe/wH8X3g==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/popmotion": {
"version": "9.3.6",
@@ -18905,10 +18138,9 @@
}
},
"node_modules/qs": {
- "version": "6.14.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
- "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
- "license": "BSD-3-Clause",
+ "version": "6.14.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
+ "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
"dependencies": {
"side-channel": "^1.1.0"
},
@@ -18945,15 +18177,6 @@
}
]
},
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
"node_modules/range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -19043,33 +18266,6 @@
"react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/react-diff-viewer-continued": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/react-diff-viewer-continued/-/react-diff-viewer-continued-3.2.6.tgz",
- "integrity": "sha512-GrzyqQnjIMoej+jMjWvtVSsQqhXgzEGqpXlJ2dAGfOk7Q26qcm8Gu6xtI430PBUyZsERe8BJSQf+7VZZo8IBNQ==",
- "dependencies": {
- "@emotion/css": "^11.10.5",
- "classnames": "^2.3.1",
- "diff": "^5.1.0",
- "memoize-one": "^6.0.0",
- "prop-types": "^15.8.1"
- },
- "engines": {
- "node": ">= 8"
- },
- "peerDependencies": {
- "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
- }
- },
- "node_modules/react-diff-viewer-continued/node_modules/diff": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
- "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==",
- "engines": {
- "node": ">=0.3.1"
- }
- },
"node_modules/react-dom": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
@@ -20183,15 +19379,6 @@
"node": ">= 0.8"
}
},
- "node_modules/serialize-javascript": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
- "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
"node_modules/serve-index": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
@@ -21188,40 +20375,6 @@
"resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
"integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="
},
- "node_modules/subscriptions-transport-ws": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.11.0.tgz",
- "integrity": "sha512-8D4C6DIH5tGiAIpp5I0wD/xRlNiZAPGHygzCe7VzyzUoxHtawzjNAY9SUTXU05/EY2NMY9/9GF0ycizkXr1CWQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "backo2": "^1.0.2",
- "eventemitter3": "^3.1.0",
- "iterall": "^1.2.1",
- "symbol-observable": "^1.0.4",
- "ws": "^5.2.0 || ^6.0.0 || ^7.0.0"
- },
- "peerDependencies": {
- "graphql": "^15.7.2 || ^16.0.0"
- }
- },
- "node_modules/subscriptions-transport-ws/node_modules/eventemitter3": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz",
- "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==",
- "optional": true,
- "peer": true
- },
- "node_modules/subscriptions-transport-ws/node_modules/symbol-observable": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
- "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/superagent": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz",
@@ -21417,12 +20570,16 @@
"dev": true
},
"node_modules/tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
+ "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
"dev": true,
"engines": {
"node": ">=6"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
}
},
"node_modules/terminal-link": {
@@ -21439,13 +20596,13 @@
}
},
"node_modules/terser": {
- "version": "5.26.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz",
- "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==",
+ "version": "5.46.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz",
+ "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
- "acorn": "^8.8.2",
+ "acorn": "^8.15.0",
"commander": "^2.20.0",
"source-map-support": "~0.5.20"
},
@@ -21457,16 +20614,15 @@
}
},
"node_modules/terser-webpack-plugin": {
- "version": "5.3.10",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
- "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz",
+ "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==",
"dev": true,
"dependencies": {
- "@jridgewell/trace-mapping": "^0.3.20",
+ "@jridgewell/trace-mapping": "^0.3.25",
"jest-worker": "^27.4.5",
- "schema-utils": "^3.1.1",
- "serialize-javascript": "^6.0.1",
- "terser": "^5.26.0"
+ "schema-utils": "^4.3.0",
+ "terser": "^5.31.1"
},
"engines": {
"node": ">= 10.13.0"
@@ -21490,15 +20646,50 @@
}
}
},
+ "node_modules/terser-webpack-plugin/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3"
+ },
+ "peerDependencies": {
+ "ajv": "^8.8.2"
+ }
+ },
+ "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
"node_modules/terser-webpack-plugin/node_modules/schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
+ "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
"dev": true,
"dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
},
"engines": {
"node": ">= 10.13.0"
@@ -21534,6 +20725,50 @@
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
+ "node_modules/threads": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/threads/-/threads-1.7.0.tgz",
+ "integrity": "sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.1.0",
+ "debug": "^4.2.0",
+ "is-observable": "^2.1.0",
+ "observable-fns": "^0.6.1"
+ },
+ "funding": {
+ "url": "https://github.com/andywer/threads.js?sponsor=1"
+ },
+ "optionalDependencies": {
+ "tiny-worker": ">= 2"
+ }
+ },
+ "node_modules/threads/node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/threads/node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/throat": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz",
@@ -21556,6 +20791,62 @@
"resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
},
+ "node_modules/tiny-worker": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tiny-worker/-/tiny-worker-2.3.0.tgz",
+ "integrity": "sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "dependencies": {
+ "esm": "^3.2.25"
+ }
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -21851,7 +21142,7 @@
"version": "5.8.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
- "dev": true,
+ "devOptional": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
@@ -21951,11 +21242,6 @@
"node": ">= 0.8"
}
},
- "node_modules/unraw": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unraw/-/unraw-3.0.0.tgz",
- "integrity": "sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg=="
- },
"node_modules/unset-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
@@ -22011,9 +21297,9 @@
"dev": true
},
"node_modules/update-browserslist-db": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
- "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
"devOptional": true,
"funding": [
{
@@ -22030,8 +21316,8 @@
}
],
"dependencies": {
- "escalade": "^3.1.2",
- "picocolors": "^1.0.1"
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
},
"bin": {
"update-browserslist-db": "cli.js"
@@ -22241,9 +21527,9 @@
}
},
"node_modules/watchpack": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
- "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz",
+ "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==",
"dev": true,
"dependencies": {
"glob-to-regexp": "^0.4.1",
@@ -22281,34 +21567,36 @@
}
},
"node_modules/webpack": {
- "version": "5.94.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
- "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
- "dev": true,
- "dependencies": {
- "@types/estree": "^1.0.5",
- "@webassemblyjs/ast": "^1.12.1",
- "@webassemblyjs/wasm-edit": "^1.12.1",
- "@webassemblyjs/wasm-parser": "^1.12.1",
- "acorn": "^8.7.1",
- "acorn-import-attributes": "^1.9.5",
- "browserslist": "^4.21.10",
+ "version": "5.105.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz",
+ "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==",
+ "dev": true,
+ "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.28.1",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.17.1",
- "es-module-lexer": "^1.2.1",
+ "enhanced-resolve": "^5.19.0",
+ "es-module-lexer": "^2.0.0",
"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.2.0",
+ "loader-runner": "^4.3.1",
"mime-types": "^2.1.27",
"neo-async": "^2.6.2",
- "schema-utils": "^3.2.0",
- "tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.3.10",
- "watchpack": "^2.4.1",
- "webpack-sources": "^3.2.3"
+ "schema-utils": "^4.3.3",
+ "tapable": "^2.3.0",
+ "terser-webpack-plugin": "^5.3.16",
+ "watchpack": "^2.5.1",
+ "webpack-sources": "^3.3.3"
},
"bin": {
"webpack": "bin/webpack.js"
@@ -22673,23 +21961,58 @@
}
},
"node_modules/webpack-sources": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
- "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz",
+ "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==",
"dev": true,
"engines": {
"node": ">=10.13.0"
}
},
+ "node_modules/webpack/node_modules/ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/webpack/node_modules/ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3"
+ },
+ "peerDependencies": {
+ "ajv": "^8.8.2"
+ }
+ },
+ "node_modules/webpack/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
"node_modules/webpack/node_modules/schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
+ "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
"dev": true,
"dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
},
"engines": {
"node": ">= 10.13.0"
@@ -22941,7 +22264,7 @@
"version": "7.5.10",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
"integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "devOptional": true,
+ "dev": true,
"engines": {
"node": ">=8.3.0"
},
@@ -23005,9 +22328,9 @@
"dev": true
},
"node_modules/yaml": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
- "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==",
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz",
+ "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==",
"engines": {
"node": ">= 6"
}
@@ -25773,18 +25096,6 @@
}
}
},
- "@emotion/css": {
- "version": "11.11.2",
- "resolved": "https://registry.npmjs.org/@emotion/css/-/css-11.11.2.tgz",
- "integrity": "sha512-VJxe1ucoMYMS7DkiMdC2T7PWNbrEI0a39YRiyDvK2qq4lXwjRbVP/z4lpG+odCsRzadlR+1ywwrTzhdm5HNdew==",
- "requires": {
- "@emotion/babel-plugin": "^11.11.0",
- "@emotion/cache": "^11.11.0",
- "@emotion/serialize": "^1.1.2",
- "@emotion/sheet": "^1.2.2",
- "@emotion/utils": "^1.2.1"
- }
- },
"@emotion/hash": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz",
@@ -26300,21 +25611,6 @@
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
"dev": true
},
- "@isaacs/balanced-match": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz",
- "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==",
- "dev": true
- },
- "@isaacs/brace-expansion": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz",
- "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==",
- "dev": true,
- "requires": {
- "@isaacs/balanced-match": "^4.0.1"
- }
- },
"@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -26453,858 +25749,14 @@
"integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==",
"dev": true,
"requires": {
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "jest-message-util": "^26.6.2",
- "jest-util": "^26.6.2",
- "slash": "^3.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "@jest/core": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz",
- "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==",
- "dev": true,
- "requires": {
- "@jest/console": "^26.6.2",
- "@jest/reporters": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/transform": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-changed-files": "^26.6.2",
- "jest-config": "^26.6.3",
- "jest-haste-map": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-resolve": "^26.6.2",
- "jest-resolve-dependencies": "^26.6.3",
- "jest-runner": "^26.6.3",
- "jest-runtime": "^26.6.3",
- "jest-snapshot": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-validate": "^26.6.2",
- "jest-watcher": "^26.6.2",
- "micromatch": "^4.0.2",
- "p-each-series": "^2.1.0",
- "rimraf": "^3.0.0",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "@jest/environment": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz",
- "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==",
- "dev": true,
- "requires": {
- "@jest/fake-timers": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "jest-mock": "^26.6.2"
- }
- },
- "@jest/fake-timers": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz",
- "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "@sinonjs/fake-timers": "^6.0.1",
- "@types/node": "*",
- "jest-message-util": "^26.6.2",
- "jest-mock": "^26.6.2",
- "jest-util": "^26.6.2"
- }
- },
- "@jest/globals": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz",
- "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==",
- "dev": true,
- "requires": {
- "@jest/environment": "^26.6.2",
- "@jest/types": "^26.6.2",
- "expect": "^26.6.2"
- }
- },
- "@jest/reporters": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz",
- "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==",
- "dev": true,
- "requires": {
- "@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/transform": "^26.6.2",
- "@jest/types": "^26.6.2",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.2",
- "graceful-fs": "^4.2.4",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^4.0.3",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "jest-haste-map": "^26.6.2",
- "jest-resolve": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-worker": "^26.6.2",
- "node-notifier": "^8.0.0",
- "slash": "^3.0.0",
- "source-map": "^0.6.0",
- "string-length": "^4.0.1",
- "terminal-link": "^2.0.0",
- "v8-to-istanbul": "^7.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "jest-worker": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
- "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^7.0.0"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "@jest/schemas": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
- "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
- "dev": true,
- "requires": {
- "@sinclair/typebox": "^0.27.8"
- }
- },
- "@jest/source-map": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz",
- "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.4",
- "source-map": "^0.6.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "@jest/test-result": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz",
- "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==",
- "dev": true,
- "requires": {
- "@jest/console": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
- }
- },
- "@jest/test-sequencer": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz",
- "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==",
- "dev": true,
- "requires": {
- "@jest/test-result": "^26.6.2",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^26.6.2",
- "jest-runner": "^26.6.3",
- "jest-runtime": "^26.6.3"
- }
- },
- "@jest/transform": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz",
- "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.1.0",
- "@jest/types": "^26.6.2",
- "babel-plugin-istanbul": "^6.0.0",
- "chalk": "^4.0.0",
- "convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-util": "^26.6.2",
- "micromatch": "^4.0.2",
- "pirates": "^4.0.1",
- "slash": "^3.0.0",
- "source-map": "^0.6.1",
- "write-file-atomic": "^3.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "@jest/types": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
- "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
- "dev": true,
- "requires": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^15.0.0",
- "chalk": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "@josephg/resolvable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@josephg/resolvable/-/resolvable-1.0.1.tgz",
- "integrity": "sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==",
- "dev": true
- },
- "@jridgewell/gen-mapping": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
- "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
- "devOptional": true,
- "requires": {
- "@jridgewell/set-array": "^1.0.0",
- "@jridgewell/sourcemap-codec": "^1.4.10"
- }
- },
- "@jridgewell/resolve-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w=="
- },
- "@jridgewell/set-array": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
- "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="
- },
- "@jridgewell/source-map": {
- "version": "0.3.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
- "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
- "dev": true,
- "requires": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "dependencies": {
- "@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
- "dev": true,
- "requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- }
- }
- },
- "@jridgewell/sourcemap-codec": {
- "version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
- },
- "@jridgewell/trace-mapping": {
- "version": "0.3.25",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
- "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
- "requires": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "@juggle/resize-observer": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.3.1.tgz",
- "integrity": "sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw=="
- },
- "@leichtgewicht/ip-codec": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz",
- "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==",
- "dev": true
- },
- "@lingui/babel-plugin-extract-messages": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-5.4.0.tgz",
- "integrity": "sha512-hcxnDgtby6rfhRvLM0Q9IsJhIjNR9dnHrKLKgSHsc5dTA/RYajSYbsdUXECvOQN+whwgBoQtZb/hvALmBpmjQA==",
- "dev": true
- },
- "@lingui/babel-plugin-lingui-macro": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-lingui-macro/-/babel-plugin-lingui-macro-5.4.0.tgz",
- "integrity": "sha512-VKRc/uQ4fyFJfRcBwaWDqDXNTj99IJzgAFX/P0keeTmLltW1nm/d367Ksku19JI1SDUo42p65YEuk3VxuXyQ3g==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.20.12",
- "@babel/runtime": "^7.20.13",
- "@babel/types": "^7.20.7",
- "@lingui/conf": "5.4.0",
- "@lingui/core": "5.4.0",
- "@lingui/message-utils": "5.4.0"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
- "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.6.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@lingui/conf": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-5.4.0.tgz",
- "integrity": "sha512-S4YIWyyPpncTfilNzmvSrPUJ8lFKvOs/2+j4Lpzwj5Ue5DIpxB+2WnpNkfw3GsQl3ilPiFbo87R21XKLNzMF+Q==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.20.13",
- "cosmiconfig": "^8.0.0",
- "jest-validate": "^29.4.3",
- "jiti": "^1.17.1",
- "picocolors": "^1.1.1"
- }
- },
- "@lingui/core": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/core/-/core-5.4.0.tgz",
- "integrity": "sha512-WtdAMkSU8Hbw0nOt+sZsNLJ2B8AO5EfZTpPIrzpKRiZ8RHZl/JOPzQlBLGbxKEoiPIiNcLnm3SZDNRJ16F/AYw==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.20.13",
- "@lingui/message-utils": "5.4.0"
- }
- },
- "@lingui/message-utils": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-5.4.0.tgz",
- "integrity": "sha512-Ok++R55W3kvI8dN7itti0DmQatDLodOUJVuEDDhCydzpYJCurwc60hZCn/o/M2SI2+BCVlkTOCXGkdcrpJVS2Q==",
- "dev": true,
- "requires": {
- "@messageformat/parser": "^5.0.0",
- "js-sha256": "^0.10.1"
- }
- },
- "@types/yargs": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
- "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "cosmiconfig": {
- "version": "8.3.6",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
- "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
- "dev": true,
- "requires": {
- "import-fresh": "^3.3.0",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.2.0",
- "path-type": "^4.0.0"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "jest-get-type": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
- "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
- "dev": true
- },
- "jest-validate": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
- "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
- "dev": true,
- "requires": {
- "@jest/types": "^29.6.3",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "leven": "^3.1.0",
- "pretty-format": "^29.7.0"
- }
- },
- "js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true
- }
- }
- },
- "react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "@lingui/cli": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-5.4.0.tgz",
- "integrity": "sha512-S/mWIsTc1ggx0GajoIftIVEiv5pQWuBK+ip/YMrJrvr/gVHEzja/cT4db5f8dwadWyZ/YfJuEnz22RSKqBrrKA==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.21.0",
- "@babel/generator": "^7.21.1",
- "@babel/parser": "^7.22.0",
- "@babel/runtime": "^7.21.0",
- "@babel/types": "^7.21.2",
- "@lingui/babel-plugin-extract-messages": "5.4.0",
- "@lingui/babel-plugin-lingui-macro": "5.4.0",
- "@lingui/conf": "5.4.0",
- "@lingui/core": "5.4.0",
- "@lingui/format-po": "5.4.0",
- "@lingui/message-utils": "5.4.0",
- "chokidar": "3.5.1",
- "cli-table": "^0.3.11",
- "commander": "^10.0.0",
- "convert-source-map": "^2.0.0",
- "date-fns": "^3.6.0",
- "esbuild": "^0.25.1",
- "glob": "^11.0.0",
- "micromatch": "^4.0.7",
- "normalize-path": "^3.0.0",
- "ora": "^5.1.0",
- "picocolors": "^1.1.1",
- "pofile": "^1.1.4",
- "pseudolocale": "^2.0.0",
- "source-map": "^0.8.0-beta.0"
- },
- "dependencies": {
- "@jest/types": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
- "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.6.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@lingui/conf": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-5.4.0.tgz",
- "integrity": "sha512-S4YIWyyPpncTfilNzmvSrPUJ8lFKvOs/2+j4Lpzwj5Ue5DIpxB+2WnpNkfw3GsQl3ilPiFbo87R21XKLNzMF+Q==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.20.13",
- "cosmiconfig": "^8.0.0",
- "jest-validate": "^29.4.3",
- "jiti": "^1.17.1",
- "picocolors": "^1.1.1"
- }
- },
- "@lingui/core": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/core/-/core-5.4.0.tgz",
- "integrity": "sha512-WtdAMkSU8Hbw0nOt+sZsNLJ2B8AO5EfZTpPIrzpKRiZ8RHZl/JOPzQlBLGbxKEoiPIiNcLnm3SZDNRJ16F/AYw==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.20.13",
- "@lingui/message-utils": "5.4.0"
- }
- },
- "@lingui/message-utils": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-5.4.0.tgz",
- "integrity": "sha512-Ok++R55W3kvI8dN7itti0DmQatDLodOUJVuEDDhCydzpYJCurwc60hZCn/o/M2SI2+BCVlkTOCXGkdcrpJVS2Q==",
- "dev": true,
- "requires": {
- "@messageformat/parser": "^5.0.0",
- "js-sha256": "^0.10.1"
- }
- },
- "@types/yargs": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
- "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- },
+ "@jest/types": "^26.6.2",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "jest-message-util": "^26.6.2",
+ "jest-util": "^26.6.2",
+ "slash": "^3.0.0"
+ },
+ "dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -27314,16 +25766,10 @@
"color-convert": "^2.0.1"
}
},
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
"chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
@@ -27345,114 +25791,106 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
- },
- "cosmiconfig": {
- "version": "8.3.6",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
- "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
- "dev": true,
- "requires": {
- "import-fresh": "^3.3.0",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.2.0",
- "path-type": "^4.0.0"
- }
- },
- "glob": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz",
- "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==",
- "dev": true,
- "requires": {
- "foreground-child": "^3.3.1",
- "jackspeak": "^4.1.1",
- "minimatch": "^10.1.1",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^2.0.0"
- }
- },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
- "jest-get-type": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
- "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
- "dev": true
- },
- "jest-validate": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
- "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
- "@jest/types": "^29.6.3",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "leven": "^3.1.0",
- "pretty-format": "^29.7.0"
+ "has-flag": "^4.0.0"
}
- },
- "js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ }
+ }
+ },
+ "@jest/core": {
+ "version": "26.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz",
+ "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==",
+ "dev": true,
+ "requires": {
+ "@jest/console": "^26.6.2",
+ "@jest/reporters": "^26.6.2",
+ "@jest/test-result": "^26.6.2",
+ "@jest/transform": "^26.6.2",
+ "@jest/types": "^26.6.2",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.4",
+ "jest-changed-files": "^26.6.2",
+ "jest-config": "^26.6.3",
+ "jest-haste-map": "^26.6.2",
+ "jest-message-util": "^26.6.2",
+ "jest-regex-util": "^26.0.0",
+ "jest-resolve": "^26.6.2",
+ "jest-resolve-dependencies": "^26.6.3",
+ "jest-runner": "^26.6.3",
+ "jest-runtime": "^26.6.3",
+ "jest-snapshot": "^26.6.2",
+ "jest-util": "^26.6.2",
+ "jest-validate": "^26.6.2",
+ "jest-watcher": "^26.6.2",
+ "micromatch": "^4.0.2",
+ "p-each-series": "^2.1.0",
+ "rimraf": "^3.0.0",
+ "slash": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
- "argparse": "^2.0.1"
+ "color-convert": "^2.0.1"
}
},
- "minimatch": {
- "version": "10.1.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz",
- "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==",
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
- "@isaacs/brace-expansion": "^5.0.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
}
},
- "pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true
- }
+ "color-name": "~1.1.4"
}
},
- "react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "source-map": {
- "version": "0.8.0-beta.0",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
- "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==",
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"requires": {
- "whatwg-url": "^7.0.0"
+ "glob": "^7.1.3"
}
},
"supports-color": {
@@ -27463,72 +25901,79 @@
"requires": {
"has-flag": "^4.0.0"
}
- },
- "tr46": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
- "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "webidl-conversions": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
- "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
- "dev": true
- },
- "whatwg-url": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
- "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
- "dev": true,
- "requires": {
- "lodash.sortby": "^4.7.0",
- "tr46": "^1.0.1",
- "webidl-conversions": "^4.0.2"
- }
}
}
},
- "@lingui/conf": {
- "version": "4.11.3",
- "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-4.11.3.tgz",
- "integrity": "sha512-KwUJDrbzlZEXmlmqttpB/Sd9hiIo0sqccsZaYTHzW/uULZT9T11aw/f6RcPLCVJeSKazg/7dJhR1cKlxKzvjKA==",
+ "@jest/environment": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz",
+ "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==",
"dev": true,
"requires": {
- "@babel/runtime": "^7.20.13",
- "chalk": "^4.1.0",
- "cosmiconfig": "^8.0.0",
- "jest-validate": "^29.4.3",
- "jiti": "^1.17.1",
- "lodash.get": "^4.4.2"
+ "@jest/fake-timers": "^26.6.2",
+ "@jest/types": "^26.6.2",
+ "@types/node": "*",
+ "jest-mock": "^26.6.2"
+ }
+ },
+ "@jest/fake-timers": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz",
+ "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^26.6.2",
+ "@sinonjs/fake-timers": "^6.0.1",
+ "@types/node": "*",
+ "jest-message-util": "^26.6.2",
+ "jest-mock": "^26.6.2",
+ "jest-util": "^26.6.2"
+ }
+ },
+ "@jest/globals": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz",
+ "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "^26.6.2",
+ "@jest/types": "^26.6.2",
+ "expect": "^26.6.2"
+ }
+ },
+ "@jest/reporters": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz",
+ "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==",
+ "dev": true,
+ "requires": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@jest/console": "^26.6.2",
+ "@jest/test-result": "^26.6.2",
+ "@jest/transform": "^26.6.2",
+ "@jest/types": "^26.6.2",
+ "chalk": "^4.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "exit": "^0.1.2",
+ "glob": "^7.1.2",
+ "graceful-fs": "^4.2.4",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^4.0.3",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.0.2",
+ "jest-haste-map": "^26.6.2",
+ "jest-resolve": "^26.6.2",
+ "jest-util": "^26.6.2",
+ "jest-worker": "^26.6.2",
+ "node-notifier": "^8.0.0",
+ "slash": "^3.0.0",
+ "source-map": "^0.6.0",
+ "string-length": "^4.0.1",
+ "terminal-link": "^2.0.0",
+ "v8-to-istanbul": "^7.0.0"
},
"dependencies": {
- "@jest/types": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
- "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
- "dev": true,
- "requires": {
- "@jest/schemas": "^29.6.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- }
- },
- "@types/yargs": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
- "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
- "dev": true,
- "requires": {
- "@types/yargs-parser": "*"
- }
- },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -27538,16 +25983,10 @@
"color-convert": "^2.0.1"
}
},
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
"chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
@@ -27569,76 +26008,27 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "cosmiconfig": {
- "version": "8.3.6",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
- "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
- "dev": true,
- "requires": {
- "import-fresh": "^3.3.0",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.2.0",
- "path-type": "^4.0.0"
- }
- },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
- "jest-get-type": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
- "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
- "dev": true
- },
- "jest-validate": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
- "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
- "dev": true,
- "requires": {
- "@jest/types": "^29.6.3",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "leven": "^3.1.0",
- "pretty-format": "^29.7.0"
- }
- },
- "js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
+ "jest-worker": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
+ "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true
- }
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^7.0.0"
}
},
- "react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
},
"supports-color": {
@@ -27652,74 +26042,152 @@
}
}
},
- "@lingui/core": {
- "version": "4.11.3",
- "resolved": "https://registry.npmjs.org/@lingui/core/-/core-4.11.3.tgz",
- "integrity": "sha512-IjJxn0Kvzv+ICnGlMqn8wRIQLikCJVrolb1oyi6GqtbiuPiwKYeU0D6Hbe146lMaTN8juc3tOCBS+Fr02XqFIQ==",
+ "@jest/schemas": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
+ "devOptional": true,
"requires": {
- "@babel/runtime": "^7.20.13",
- "@lingui/message-utils": "4.11.3",
- "unraw": "^3.0.0"
+ "@sinclair/typebox": "^0.27.8"
}
},
- "@lingui/format-po": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/format-po/-/format-po-5.4.0.tgz",
- "integrity": "sha512-zQ930if6pTXAT4fQzbVdqORNc9g4XNCB2LwQ4nhzm65acCHI/BVMnGXkeU5qWLdX5xXPRIxaJbUvhXWh3Shy3A==",
+ "@jest/source-map": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz",
+ "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==",
"dev": true,
"requires": {
- "@lingui/conf": "5.4.0",
- "@lingui/message-utils": "5.4.0",
- "date-fns": "^3.6.0",
- "pofile": "^1.1.4"
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.2.4",
+ "source-map": "^0.6.0"
},
"dependencies": {
- "@jest/types": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
- "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "@jest/test-result": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz",
+ "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==",
+ "dev": true,
+ "requires": {
+ "@jest/console": "^26.6.2",
+ "@jest/types": "^26.6.2",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "collect-v8-coverage": "^1.0.0"
+ }
+ },
+ "@jest/test-sequencer": {
+ "version": "26.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz",
+ "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==",
+ "dev": true,
+ "requires": {
+ "@jest/test-result": "^26.6.2",
+ "graceful-fs": "^4.2.4",
+ "jest-haste-map": "^26.6.2",
+ "jest-runner": "^26.6.3",
+ "jest-runtime": "^26.6.3"
+ }
+ },
+ "@jest/transform": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz",
+ "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.1.0",
+ "@jest/types": "^26.6.2",
+ "babel-plugin-istanbul": "^6.0.0",
+ "chalk": "^4.0.0",
+ "convert-source-map": "^1.4.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "graceful-fs": "^4.2.4",
+ "jest-haste-map": "^26.6.2",
+ "jest-regex-util": "^26.0.0",
+ "jest-util": "^26.6.2",
+ "micromatch": "^4.0.2",
+ "pirates": "^4.0.1",
+ "slash": "^3.0.0",
+ "source-map": "^0.6.1",
+ "write-file-atomic": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.6.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
+ "color-convert": "^2.0.1"
}
},
- "@lingui/conf": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-5.4.0.tgz",
- "integrity": "sha512-S4YIWyyPpncTfilNzmvSrPUJ8lFKvOs/2+j4Lpzwj5Ue5DIpxB+2WnpNkfw3GsQl3ilPiFbo87R21XKLNzMF+Q==",
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
- "@babel/runtime": "^7.20.13",
- "cosmiconfig": "^8.0.0",
- "jest-validate": "^29.4.3",
- "jiti": "^1.17.1",
- "picocolors": "^1.1.1"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
}
},
- "@lingui/message-utils": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-5.4.0.tgz",
- "integrity": "sha512-Ok++R55W3kvI8dN7itti0DmQatDLodOUJVuEDDhCydzpYJCurwc60hZCn/o/M2SI2+BCVlkTOCXGkdcrpJVS2Q==",
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
- "@messageformat/parser": "^5.0.0",
- "js-sha256": "^0.10.1"
+ "color-name": "~1.1.4"
}
},
- "@types/yargs": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
- "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
- "@types/yargs-parser": "*"
+ "has-flag": "^4.0.0"
}
- },
+ }
+ }
+ },
+ "@jest/types": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
+ "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^15.0.0",
+ "chalk": "^4.0.0"
+ },
+ "dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -27729,16 +26197,10 @@
"color-convert": "^2.0.1"
}
},
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
"chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
@@ -27760,105 +26222,228 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "cosmiconfig": {
- "version": "8.3.6",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
- "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
- "dev": true,
- "requires": {
- "import-fresh": "^3.3.0",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.2.0",
- "path-type": "^4.0.0"
- }
- },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
- "jest-get-type": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
- "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
- "dev": true
- },
- "jest-validate": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
- "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
- "@jest/types": "^29.6.3",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "leven": "^3.1.0",
- "pretty-format": "^29.7.0"
+ "has-flag": "^4.0.0"
}
- },
- "js-yaml": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ }
+ }
+ },
+ "@josephg/resolvable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@josephg/resolvable/-/resolvable-1.0.1.tgz",
+ "integrity": "sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==",
+ "dev": true
+ },
+ "@jridgewell/gen-mapping": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
+ "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
+ "devOptional": true,
+ "requires": {
+ "@jridgewell/set-array": "^1.0.0",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w=="
+ },
+ "@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A=="
+ },
+ "@jridgewell/source-map": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
+ "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "dependencies": {
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
"dev": true,
"requires": {
- "argparse": "^2.0.1"
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
}
+ }
+ }
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "@juggle/resize-observer": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.3.1.tgz",
+ "integrity": "sha512-zMM9Ds+SawiUkakS7y94Ymqx+S0ORzpG3frZirN3l+UlXUmSUR7hF4wxCVqW+ei94JzV5kt0uXBcoOEAuiydrw=="
+ },
+ "@leichtgewicht/ip-codec": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz",
+ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==",
+ "dev": true
+ },
+ "@lingui/babel-plugin-extract-messages": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-5.9.3.tgz",
+ "integrity": "sha512-zm6QHDILmhj8olgLL2zHQn18yFA5mf4hX7QzCr1OOI/e815I0IkecCYue1Ych+y+B+V0eLriiW8AcfpDRCQFFw==",
+ "dev": true
+ },
+ "@lingui/babel-plugin-lingui-macro": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-lingui-macro/-/babel-plugin-lingui-macro-5.9.3.tgz",
+ "integrity": "sha512-fLMhBarRsuqBGOq2YuEoqOjEAV2VNezz/+f/Dn0vLFHF/kAjnFwTHb8pL8DRSIMsWG16mPrGnLpdROZBmJlFtA==",
+ "devOptional": true,
+ "requires": {
+ "@babel/core": "^7.20.12",
+ "@babel/runtime": "^7.20.13",
+ "@babel/types": "^7.20.7",
+ "@lingui/conf": "5.9.3",
+ "@lingui/core": "5.9.3",
+ "@lingui/message-utils": "5.9.3"
+ }
+ },
+ "@lingui/cli": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-5.9.3.tgz",
+ "integrity": "sha512-KEE0J4eGlfpiLZ+l019qjraWfqfh5mUmQSJeTFw5PulO4v50zvxw5tDX8stpBzJ3QtgUQZlrMUh0OTGdURaAMg==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.21.0",
+ "@babel/generator": "^7.21.1",
+ "@babel/parser": "^7.22.0",
+ "@babel/runtime": "^7.21.0",
+ "@babel/types": "^7.21.2",
+ "@lingui/babel-plugin-extract-messages": "5.9.3",
+ "@lingui/babel-plugin-lingui-macro": "5.9.3",
+ "@lingui/conf": "5.9.3",
+ "@lingui/core": "5.9.3",
+ "@lingui/format-po": "5.9.3",
+ "@lingui/message-utils": "5.9.3",
+ "chokidar": "3.5.1",
+ "cli-table": "^0.3.11",
+ "commander": "^10.0.0",
+ "convert-source-map": "^2.0.0",
+ "date-fns": "^3.6.0",
+ "esbuild": "^0.25.1",
+ "glob": "^11.0.0",
+ "micromatch": "^4.0.7",
+ "ms": "^2.1.3",
+ "normalize-path": "^3.0.0",
+ "ora": "^5.1.0",
+ "picocolors": "^1.1.1",
+ "pofile": "^1.1.4",
+ "pseudolocale": "^2.0.0",
+ "source-map": "^0.7.6",
+ "threads": "^1.7.0"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
+ "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
+ "dev": true
},
- "pretty-format": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
- "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
+ "brace-expansion": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
+ "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
"dev": true,
"requires": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true
- }
+ "balanced-match": "^4.0.2"
}
},
- "react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true
},
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "glob": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz",
+ "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==",
"dev": true,
"requires": {
- "has-flag": "^4.0.0"
+ "foreground-child": "^3.3.1",
+ "jackspeak": "^4.1.1",
+ "minimatch": "^10.1.1",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^2.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "10.2.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
+ "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^5.0.5"
}
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
+ "dev": true
}
}
},
- "@lingui/loader": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/loader/-/loader-5.4.0.tgz",
- "integrity": "sha512-iU5fnP6IvnaofTTov9PmePYPIm2xLgxruQY/z5LDZV+G0oo9RGER8HEF/1D0lSypHuNuLQZCncoOhnxF6XN81w==",
- "dev": true,
+ "@lingui/conf": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-5.9.3.tgz",
+ "integrity": "sha512-hVEoYHmO2A3XmFX4A5RuBgcoVBoM7Xgoqejeq25XELvesJj2s2T15F47TA5n3/S7iTqngd6n/8KxBli9TYwgqQ==",
+ "devOptional": true,
"requires": {
"@babel/runtime": "^7.20.13",
- "@lingui/cli": "5.4.0",
- "@lingui/conf": "5.4.0"
+ "cosmiconfig": "^8.0.0",
+ "jest-validate": "^29.4.3",
+ "jiti": "^2.5.1",
+ "picocolors": "^1.1.1"
},
"dependencies": {
"@jest/types": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
"integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
- "dev": true,
+ "devOptional": true,
"requires": {
"@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
@@ -27868,24 +26453,11 @@
"chalk": "^4.0.0"
}
},
- "@lingui/conf": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-5.4.0.tgz",
- "integrity": "sha512-S4YIWyyPpncTfilNzmvSrPUJ8lFKvOs/2+j4Lpzwj5Ue5DIpxB+2WnpNkfw3GsQl3ilPiFbo87R21XKLNzMF+Q==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.20.13",
- "cosmiconfig": "^8.0.0",
- "jest-validate": "^29.4.3",
- "jiti": "^1.17.1",
- "picocolors": "^1.1.1"
- }
- },
"@types/yargs": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
- "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
- "dev": true,
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "devOptional": true,
"requires": {
"@types/yargs-parser": "*"
}
@@ -27894,7 +26466,7 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
+ "devOptional": true,
"requires": {
"color-convert": "^2.0.1"
}
@@ -27903,13 +26475,13 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
+ "devOptional": true
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
+ "devOptional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -27919,7 +26491,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
+ "devOptional": true,
"requires": {
"color-name": "~1.1.4"
}
@@ -27928,13 +26500,13 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
+ "devOptional": true
},
"cosmiconfig": {
"version": "8.3.6",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
"integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
- "dev": true,
+ "devOptional": true,
"requires": {
"import-fresh": "^3.3.0",
"js-yaml": "^4.1.0",
@@ -27946,19 +26518,19 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
+ "devOptional": true
},
"jest-get-type": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
"integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
- "dev": true
+ "devOptional": true
},
"jest-validate": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
"integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
- "dev": true,
+ "devOptional": true,
"requires": {
"@jest/types": "^29.6.3",
"camelcase": "^6.2.0",
@@ -27972,7 +26544,7 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
"integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
- "dev": true,
+ "devOptional": true,
"requires": {
"argparse": "^2.0.1"
}
@@ -27981,7 +26553,7 @@
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
"integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
- "dev": true,
+ "devOptional": true,
"requires": {
"@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
@@ -27992,7 +26564,7 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true
+ "devOptional": true
}
}
},
@@ -28000,48 +26572,77 @@
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
"integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "dev": true
+ "devOptional": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
+ "devOptional": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
- "@lingui/macro": {
- "version": "4.11.3",
- "resolved": "https://registry.npmjs.org/@lingui/macro/-/macro-4.11.3.tgz",
- "integrity": "sha512-D0me8ZRtH0ylSavhKZu0FYf5mJ1y6kDMMPjYVDyiT5ooOI/5jjv9LIAqrdYGCBygnwsxOG1dzDw6+3s5GTs+Bg==",
+ "@lingui/core": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/core/-/core-5.9.3.tgz",
+ "integrity": "sha512-3b8LnDjx8POdQ6q6UKBe2DHynyQFCO66vm8/UPQnvlQowUk4Xdu5bK6oet11D9/vrSznrDDS+Qb5JVcNBUImgg==",
+ "requires": {
+ "@babel/runtime": "^7.20.13",
+ "@lingui/message-utils": "5.9.3"
+ }
+ },
+ "@lingui/format-po": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/format-po/-/format-po-5.9.3.tgz",
+ "integrity": "sha512-+LMnhWl7EmXrdOv10gopE1g8w8vtPY5Fxk72OORrGQFVMGBIioz4BEnKrNdV1ek2M+GxoMZtnUs17KrJN5Jv9A==",
+ "dev": true,
+ "requires": {
+ "@lingui/conf": "5.9.3",
+ "@lingui/message-utils": "5.9.3",
+ "date-fns": "^3.6.0",
+ "pofile": "^1.1.4"
+ }
+ },
+ "@lingui/loader": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/loader/-/loader-5.9.3.tgz",
+ "integrity": "sha512-V+m8vfZ1doPSc26fPZa1zVso75nl70mgdz51OHGAvFfafyDqYasFHmBf5xihS58vy6LXuep3K19Ymf6TG6i5TQ==",
"dev": true,
"requires": {
"@babel/runtime": "^7.20.13",
- "@babel/types": "^7.20.7",
- "@lingui/conf": "4.11.3",
- "@lingui/core": "4.11.3",
- "@lingui/message-utils": "4.11.3"
+ "@lingui/cli": "5.9.3",
+ "@lingui/conf": "5.9.3"
+ }
+ },
+ "@lingui/macro": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/macro/-/macro-5.9.3.tgz",
+ "integrity": "sha512-xWqJ+hpp5T+xmE++VYlcfMxrF48LpY5Ak9N/luibY9d0AqvyYZiiv7Xaq7E2eK69v9CJWx+6eXA6uPhC8gHY+Q==",
+ "dev": true,
+ "requires": {
+ "@lingui/core": "5.9.3",
+ "@lingui/react": "5.9.3"
}
},
"@lingui/message-utils": {
- "version": "4.11.3",
- "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-4.11.3.tgz",
- "integrity": "sha512-ZSw3OoKbknOw3nSrqt194g2F8r0guKow9csb46zlL7zX/yOWCaj767wvSvMoglZtVvurfQs4NPv2cohYlWORNw==",
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/message-utils/-/message-utils-5.9.3.tgz",
+ "integrity": "sha512-oAK7HA7lcQrzaEaM6G1T5RwwxJxaSKfG/IFIxpZIl49TSFQv+s9YPNgHnVi+d4DmterpXNxy9ZZ+NtckJx6u7g==",
"requires": {
"@messageformat/parser": "^5.0.0",
"js-sha256": "^0.10.1"
}
},
"@lingui/react": {
- "version": "4.11.3",
- "resolved": "https://registry.npmjs.org/@lingui/react/-/react-4.11.3.tgz",
- "integrity": "sha512-FuorwDsz5zDpUNpyj7J8ZKqJrrVxOz1EtQ3aJGJsmnTtVO01N3nR3ckMzpYvZ71XXdDEvhUC9ihmiKbFvpaZ/w==",
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/@lingui/react/-/react-5.9.3.tgz",
+ "integrity": "sha512-aje78l3zGGZ3C75fiGhDVKyVALHfiKlYFjcOlZpgXY/JAVfFuZX+6wUGG9x1A8k7BfxrDy/ofHIBahPvNAqoKw==",
"requires": {
"@babel/runtime": "^7.20.13",
- "@lingui/core": "4.11.3"
+ "@lingui/core": "5.9.3"
}
},
"@messageformat/parser": {
@@ -28175,10 +26776,10 @@
"integrity": "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w=="
},
"@sinclair/typebox": {
- "version": "0.27.8",
- "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
- "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
- "dev": true
+ "version": "0.27.10",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz",
+ "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==",
+ "devOptional": true
},
"@sinonjs/commons": {
"version": "1.8.2",
@@ -28559,10 +27160,30 @@
"resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.1.0.tgz",
"integrity": "sha512-/myT3I7EwlukNOX2xVdMzb8FRgNzRMpsZddwst9Ld/VFe6LyJyRp0s32l/V9XoUzk+Gqu56F/oGk6507+8BxrA=="
},
+ "@types/eslint": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
+ "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "@types/eslint-scope": {
+ "version": "3.7.7",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
+ "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
+ "dev": true,
+ "requires": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
+ },
"@types/estree": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
- "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
"dev": true
},
"@types/express": {
@@ -28631,13 +27252,13 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
"integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
- "dev": true
+ "devOptional": true
},
"@types/istanbul-lib-report": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
"integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
- "dev": true,
+ "devOptional": true,
"requires": {
"@types/istanbul-lib-coverage": "*"
}
@@ -28646,7 +27267,7 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
"integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
- "dev": true,
+ "devOptional": true,
"requires": {
"@types/istanbul-lib-report": "*"
}
@@ -28662,9 +27283,9 @@
}
},
"@types/json-schema": {
- "version": "7.0.9",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
- "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true
},
"@types/json5": {
@@ -28700,7 +27321,7 @@
"version": "14.0.26",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.26.tgz",
"integrity": "sha512-W+fpe5s91FBGE0pEa0lnqGLL4USgpLgs4nokw16SrBBco/gQxuua7KnArSEOd5iaMqbbSHV10vUDkJYJJqpXKA==",
- "dev": true
+ "devOptional": true
},
"@types/node-forge": {
"version": "1.3.14",
@@ -28924,7 +27545,7 @@
"version": "15.0.0",
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz",
"integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==",
- "dev": true
+ "devOptional": true
},
"@typescript-eslint/scope-manager": {
"version": "5.62.0",
@@ -29437,148 +28058,148 @@
}
},
"@webassemblyjs/ast": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
- "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
+ "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
"dev": true,
"requires": {
- "@webassemblyjs/helper-numbers": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
+ "@webassemblyjs/helper-numbers": "1.13.2",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2"
}
},
"@webassemblyjs/floating-point-hex-parser": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
- "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
+ "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
"dev": true
},
"@webassemblyjs/helper-api-error": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
- "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
+ "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
"dev": true
},
"@webassemblyjs/helper-buffer": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
- "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
+ "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
"dev": true
},
"@webassemblyjs/helper-numbers": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
- "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
+ "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
"dev": true,
"requires": {
- "@webassemblyjs/floating-point-hex-parser": "1.11.6",
- "@webassemblyjs/helper-api-error": "1.11.6",
+ "@webassemblyjs/floating-point-hex-parser": "1.13.2",
+ "@webassemblyjs/helper-api-error": "1.13.2",
"@xtuc/long": "4.2.2"
}
},
"@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
- "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
+ "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
"dev": true
},
"@webassemblyjs/helper-wasm-section": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
- "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
+ "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/wasm-gen": "1.12.1"
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/helper-wasm-bytecode": "1.13.2",
+ "@webassemblyjs/wasm-gen": "1.14.1"
}
},
"@webassemblyjs/ieee754": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
- "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
+ "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
"dev": true,
"requires": {
"@xtuc/ieee754": "^1.2.0"
}
},
"@webassemblyjs/leb128": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
- "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
+ "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
"dev": true,
"requires": {
"@xtuc/long": "4.2.2"
}
},
"@webassemblyjs/utf8": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
- "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
+ "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
"dev": true
},
"@webassemblyjs/wasm-edit": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
- "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
+ "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/helper-wasm-section": "1.12.1",
- "@webassemblyjs/wasm-gen": "1.12.1",
- "@webassemblyjs/wasm-opt": "1.12.1",
- "@webassemblyjs/wasm-parser": "1.12.1",
- "@webassemblyjs/wast-printer": "1.12.1"
+ "@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"
}
},
"@webassemblyjs/wasm-gen": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
- "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
+ "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
+ "@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"
}
},
"@webassemblyjs/wasm-opt": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
- "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
+ "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-buffer": "1.12.1",
- "@webassemblyjs/wasm-gen": "1.12.1",
- "@webassemblyjs/wasm-parser": "1.12.1"
+ "@webassemblyjs/ast": "1.14.1",
+ "@webassemblyjs/helper-buffer": "1.14.1",
+ "@webassemblyjs/wasm-gen": "1.14.1",
+ "@webassemblyjs/wasm-parser": "1.14.1"
}
},
"@webassemblyjs/wasm-parser": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
- "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
+ "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.12.1",
- "@webassemblyjs/helper-api-error": "1.11.6",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
- "@webassemblyjs/ieee754": "1.11.6",
- "@webassemblyjs/leb128": "1.11.6",
- "@webassemblyjs/utf8": "1.11.6"
+ "@webassemblyjs/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"
}
},
"@webassemblyjs/wast-printer": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
- "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
+ "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.12.1",
+ "@webassemblyjs/ast": "1.14.1",
"@xtuc/long": "4.2.2"
}
},
@@ -29702,9 +28323,9 @@
}
},
"acorn": {
- "version": "8.11.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
- "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true
},
"acorn-globals": {
@@ -29725,10 +28346,10 @@
}
}
},
- "acorn-import-attributes": {
- "version": "1.9.5",
- "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
- "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
+ "acorn-import-phases": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz",
+ "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==",
"dev": true,
"requires": {}
},
@@ -30417,13 +29038,6 @@
"babel-preset-current-node-syntax": "^1.0.0"
}
},
- "backo2": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
- "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
- "optional": true,
- "peer": true
- },
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@@ -30490,6 +29104,12 @@
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"dev": true
},
+ "baseline-browser-mapping": {
+ "version": "2.9.19",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz",
+ "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==",
+ "devOptional": true
+ },
"batch": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
@@ -30627,15 +29247,16 @@
"dev": true
},
"browserslist": {
- "version": "4.23.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
- "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+ "version": "4.28.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
+ "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
"devOptional": true,
"requires": {
- "caniuse-lite": "^1.0.30001646",
- "electron-to-chromium": "^1.5.4",
- "node-releases": "^2.0.18",
- "update-browserslist-db": "^1.1.0"
+ "baseline-browser-mapping": "^2.9.0",
+ "caniuse-lite": "^1.0.30001759",
+ "electron-to-chromium": "^1.5.263",
+ "node-releases": "^2.0.27",
+ "update-browserslist-db": "^1.2.0"
}
},
"bser": {
@@ -30748,12 +29369,12 @@
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz",
"integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==",
- "dev": true
+ "devOptional": true
},
"caniuse-lite": {
- "version": "1.0.30001653",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz",
- "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==",
+ "version": "1.0.30001768",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001768.tgz",
+ "integrity": "sha512-qY3aDRZC5nWPgHUgIB84WL+nySuo19wk0VJpp/XI9T34lrvkyhRvNVOFJOp2kxClQhiFBu+TaUSudf6oa3vkSA==",
"devOptional": true
},
"capture-exit": {
@@ -31127,6 +29748,75 @@
"toggle-selection": "^1.0.6"
}
},
+ "copy-webpack-plugin": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-14.0.0.tgz",
+ "integrity": "sha512-3JLW90aBGeaTLpM7mYQKpnVdgsUZRExY55giiZgLuX/xTQRUs1dOCwbBnWnvY6Q6rfZoXMNwzOQJCSZPppfqXA==",
+ "dev": true,
+ "requires": {
+ "glob-parent": "^6.0.1",
+ "normalize-path": "^3.0.0",
+ "schema-utils": "^4.2.0",
+ "serialize-javascript": "^7.0.3",
+ "tinyglobby": "^0.2.12"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ }
+ },
+ "ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.3"
+ }
+ },
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
+ "schema-utils": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
+ "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
+ }
+ },
+ "serialize-javascript": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.5.tgz",
+ "integrity": "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==",
+ "dev": true
+ }
+ }
+ },
"core-js-compat": {
"version": "3.35.0",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.0.tgz",
@@ -32015,9 +30705,9 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"electron-to-chromium": {
- "version": "1.5.13",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
- "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
+ "version": "1.5.286",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz",
+ "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==",
"devOptional": true
},
"emittery": {
@@ -32053,13 +30743,13 @@
}
},
"enhanced-resolve": {
- "version": "5.17.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
- "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
+ "version": "5.19.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz",
+ "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==",
"dev": true,
"requires": {
"graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
+ "tapable": "^2.3.0"
}
},
"enquirer": {
@@ -32140,9 +30830,9 @@
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
},
"es-module-lexer": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
- "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz",
+ "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==",
"dev": true
},
"es-object-atoms": {
@@ -32219,9 +30909,9 @@
}
},
"escalade": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
- "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"devOptional": true
},
"escape-html": {
@@ -32699,6 +31389,13 @@
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true
},
+ "esm": {
+ "version": "3.2.25",
+ "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz",
+ "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==",
+ "dev": true,
+ "optional": true
+ },
"espree": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
@@ -33123,6 +31820,12 @@
"integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
"dev": true
},
+ "fast-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
+ "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
+ "dev": true
+ },
"fastest-levenshtein": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
@@ -33283,9 +31986,9 @@
}
},
"flatted": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz",
- "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
"focus-lock": {
@@ -33304,9 +32007,9 @@
}
},
"follow-redirects": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
+ "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
"dev": true
},
"for-each": {
@@ -34412,6 +33115,12 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-observable": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-2.1.0.tgz",
+ "integrity": "sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw==",
+ "dev": true
+ },
"is-path-cwd": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
@@ -34668,7 +33377,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz",
"integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==",
- "devOptional": true
+ "dev": true
},
"jackspeak": {
"version": "4.1.1",
@@ -36016,10 +34725,10 @@
}
},
"jiti": {
- "version": "1.21.6",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
- "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
- "dev": true
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
+ "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
+ "devOptional": true
},
"js-sha256": {
"version": "0.10.1",
@@ -36214,7 +34923,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
- "dev": true
+ "devOptional": true
},
"levn": {
"version": "0.4.1",
@@ -36232,9 +34941,9 @@
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
},
"loader-runner": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
- "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz",
+ "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==",
"dev": true
},
"loader-utils": {
@@ -36249,26 +34958,20 @@
}
},
"lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
+ "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="
},
"lodash-es": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz",
+ "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A=="
},
"lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
"integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
},
- "lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
- "dev": true
- },
"lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -36489,11 +35192,6 @@
"fs-monkey": "1.0.3"
}
},
- "memoize-one": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
- "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
- },
"merge-descriptors": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
@@ -36572,9 +35270,9 @@
"dev": true
},
"minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
@@ -36740,9 +35438,9 @@
}
},
"node-forge": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.2.tgz",
- "integrity": "sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz",
+ "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==",
"dev": true
},
"node-int64": {
@@ -36785,9 +35483,9 @@
}
},
"node-releases": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
- "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
+ "version": "2.0.27",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
+ "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
"devOptional": true
},
"nodemon": {
@@ -37020,6 +35718,12 @@
"es-abstract": "^1.19.1"
}
},
+ "observable-fns": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/observable-fns/-/observable-fns-0.6.1.tgz",
+ "integrity": "sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg==",
+ "dev": true
+ },
"obuf": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
@@ -37327,9 +36031,9 @@
}
},
"path-to-regexp": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
- "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
+ "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA=="
},
"path-type": {
"version": "4.0.0",
@@ -37342,9 +36046,9 @@
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
},
"picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true
},
"pify": {
@@ -37574,9 +36278,9 @@
"dev": true
},
"qs": {
- "version": "6.14.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
- "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
+ "version": "6.14.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
+ "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
"requires": {
"side-channel": "^1.1.0"
}
@@ -37593,15 +36297,6 @@
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true
},
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -37663,25 +36358,6 @@
"@babel/runtime": "^7.12.13"
}
},
- "react-diff-viewer-continued": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/react-diff-viewer-continued/-/react-diff-viewer-continued-3.2.6.tgz",
- "integrity": "sha512-GrzyqQnjIMoej+jMjWvtVSsQqhXgzEGqpXlJ2dAGfOk7Q26qcm8Gu6xtI430PBUyZsERe8BJSQf+7VZZo8IBNQ==",
- "requires": {
- "@emotion/css": "^11.10.5",
- "classnames": "^2.3.1",
- "diff": "^5.1.0",
- "memoize-one": "^6.0.0",
- "prop-types": "^15.8.1"
- },
- "dependencies": {
- "diff": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
- "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw=="
- }
- }
- },
"react-dom": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
@@ -38546,15 +37222,6 @@
}
}
},
- "serialize-javascript": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
- "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
"serve-index": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
@@ -39339,36 +38006,6 @@
"resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
"integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="
},
- "subscriptions-transport-ws": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.11.0.tgz",
- "integrity": "sha512-8D4C6DIH5tGiAIpp5I0wD/xRlNiZAPGHygzCe7VzyzUoxHtawzjNAY9SUTXU05/EY2NMY9/9GF0ycizkXr1CWQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "backo2": "^1.0.2",
- "eventemitter3": "^3.1.0",
- "iterall": "^1.2.1",
- "symbol-observable": "^1.0.4",
- "ws": "^5.2.0 || ^6.0.0 || ^7.0.0"
- },
- "dependencies": {
- "eventemitter3": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz",
- "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==",
- "optional": true,
- "peer": true
- },
- "symbol-observable": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
- "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==",
- "optional": true,
- "peer": true
- }
- }
- },
"superagent": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz",
@@ -39516,9 +38153,9 @@
}
},
"tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz",
+ "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==",
"dev": true
},
"terminal-link": {
@@ -39532,13 +38169,13 @@
}
},
"terser": {
- "version": "5.26.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz",
- "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==",
+ "version": "5.46.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz",
+ "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==",
"dev": true,
"requires": {
"@jridgewell/source-map": "^0.3.3",
- "acorn": "^8.8.2",
+ "acorn": "^8.15.0",
"commander": "^2.20.0",
"source-map-support": "~0.5.20"
},
@@ -39552,27 +38189,54 @@
}
},
"terser-webpack-plugin": {
- "version": "5.3.10",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
- "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz",
+ "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==",
"dev": true,
"requires": {
- "@jridgewell/trace-mapping": "^0.3.20",
+ "@jridgewell/trace-mapping": "^0.3.25",
"jest-worker": "^27.4.5",
- "schema-utils": "^3.1.1",
- "serialize-javascript": "^6.0.1",
- "terser": "^5.26.0"
+ "schema-utils": "^4.3.0",
+ "terser": "^5.31.1"
},
"dependencies": {
+ "ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ }
+ },
+ "ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.3"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
"schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
+ "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
"dev": true,
"requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
}
}
}
@@ -39594,6 +38258,36 @@
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
+ "threads": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/threads/-/threads-1.7.0.tgz",
+ "integrity": "sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.1.0",
+ "debug": "^4.2.0",
+ "is-observable": "^2.1.0",
+ "observable-fns": "^0.6.1",
+ "tiny-worker": ">= 2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.3"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
+ }
+ }
+ },
"throat": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz",
@@ -39616,6 +38310,41 @@
"resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
},
+ "tiny-worker": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/tiny-worker/-/tiny-worker-2.3.0.tgz",
+ "integrity": "sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "esm": "^3.2.25"
+ }
+ },
+ "tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "requires": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "dependencies": {
+ "fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "requires": {}
+ },
+ "picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true
+ }
+ }
+ },
"tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -39850,7 +38579,7 @@
"version": "5.8.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
- "dev": true,
+ "devOptional": true,
"peer": true
},
"unbox-primitive": {
@@ -39921,11 +38650,6 @@
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
- "unraw": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unraw/-/unraw-3.0.0.tgz",
- "integrity": "sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg=="
- },
"unset-value": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
@@ -39973,13 +38697,13 @@
}
},
"update-browserslist-db": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
- "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
"devOptional": true,
"requires": {
- "escalade": "^3.1.2",
- "picocolors": "^1.0.1"
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
}
},
"uri-js": {
@@ -40141,9 +38865,9 @@
}
},
"watchpack": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
- "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz",
+ "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==",
"dev": true,
"requires": {
"glob-to-regexp": "^0.4.1",
@@ -40175,45 +38899,75 @@
"dev": true
},
"webpack": {
- "version": "5.94.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
- "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==",
- "dev": true,
- "requires": {
- "@types/estree": "^1.0.5",
- "@webassemblyjs/ast": "^1.12.1",
- "@webassemblyjs/wasm-edit": "^1.12.1",
- "@webassemblyjs/wasm-parser": "^1.12.1",
- "acorn": "^8.7.1",
- "acorn-import-attributes": "^1.9.5",
- "browserslist": "^4.21.10",
+ "version": "5.105.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz",
+ "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==",
+ "dev": true,
+ "requires": {
+ "@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.28.1",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.17.1",
- "es-module-lexer": "^1.2.1",
+ "enhanced-resolve": "^5.19.0",
+ "es-module-lexer": "^2.0.0",
"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.2.0",
+ "loader-runner": "^4.3.1",
"mime-types": "^2.1.27",
"neo-async": "^2.6.2",
- "schema-utils": "^3.2.0",
- "tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.3.10",
- "watchpack": "^2.4.1",
- "webpack-sources": "^3.2.3"
+ "schema-utils": "^4.3.3",
+ "tapable": "^2.3.0",
+ "terser-webpack-plugin": "^5.3.16",
+ "watchpack": "^2.5.1",
+ "webpack-sources": "^3.3.3"
},
"dependencies": {
+ "ajv": {
+ "version": "8.17.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
+ "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2"
+ }
+ },
+ "ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.3"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
"schema-utils": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
- "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz",
+ "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==",
"dev": true,
"requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
}
}
}
@@ -40447,9 +39201,9 @@
}
},
"webpack-sources": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
- "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz",
+ "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==",
"dev": true
},
"websocket-driver": {
@@ -40646,7 +39400,7 @@
"version": "7.5.10",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
"integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "devOptional": true,
+ "dev": true,
"requires": {}
},
"xml-name-validator": {
@@ -40692,9 +39446,9 @@
"dev": true
},
"yaml": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
- "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg=="
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz",
+ "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA=="
},
"yargs": {
"version": "15.4.1",
diff --git a/frontend/package.json b/frontend/package.json
index 77eae25301..f25a87c314 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -3,9 +3,11 @@
"version": "0.1.0",
"scripts": {
"build": "webpack --env production --config webpack.config.js",
+ "build:dev": "webpack --env development --config webpack.config.js",
"dev": "webpack serve --hot --env development",
"webpack": "webpack",
"start": "NODE_OPTIONS=--openssl-legacy-provider node index.js",
+ "start:dev": "NODE_ENV=development PORT=3300 HOST=127.0.0.1 node index.js",
"test": "jest --silent",
"test-coverage": "jest --coverage",
"lint": "eslint src",
@@ -22,7 +24,7 @@
"@chakra-ui/system": "^2.6.2",
"@emotion/react": "^11.9.3",
"@emotion/styled": "^11.9.3",
- "@lingui/react": "^4.11.3",
+ "@lingui/react": "^5.9.3",
"@visx/axis": "^2.17.0",
"@visx/curve": "^3.3.0",
"@visx/event": "^2.17.0",
@@ -48,11 +50,10 @@
"intro.js-react": "^1.0.0",
"isomorphic-unfetch": "^3.1.0",
"json-2-csv": "^3.17.1",
- "lodash-es": "^4.17.21",
+ "lodash-es": "^4.18.1",
"make-plural": "^7.1.0",
"prop-types": "^15.8.1",
"react": "^18.2.0",
- "react-diff-viewer-continued": "^3.2.6",
"react-dom": "^18.2.0",
"react-error-boundary": "^3.1.4",
"react-joyride": "^2.8.2",
@@ -70,10 +71,10 @@
"@babel/preset-react": "^7.18.6",
"@graphql-tools/mock": "^8.7.0",
"@graphql-tools/schema": "^10.0.0",
- "@lingui/cli": "^5.4.0",
- "@lingui/core": "^4.11.3",
- "@lingui/loader": "^5.4.0",
- "@lingui/macro": "^4.11.3",
+ "@lingui/cli": "^5.9.3",
+ "@lingui/core": "^5.9.3",
+ "@lingui/loader": "^5.9.3",
+ "@lingui/macro": "^5.9.3",
"@testing-library/jest-dom": "^5.16.4",
"@testing-library/react": "^13.4.0",
"@testing-library/react-hooks": "^7.0.2",
@@ -83,6 +84,7 @@
"babel-loader": "^8.2.5",
"babel-plugin-macros": "^3.1.0",
"clean-webpack-plugin": "^3.0.0",
+ "copy-webpack-plugin": "^14.0.0",
"eslint": "^7.32.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-import": "^2.26.0",
@@ -104,7 +106,7 @@
"react-test-renderer": "^18.2.0",
"source-map-loader": "^4.0.0",
"supertest": "^6.2.3",
- "webpack": "^5.94.0",
+ "webpack": "^5.105.0",
"webpack-cli": "^4.10.0",
"webpack-config-utils": "^2.3.1",
"webpack-dev-server": "^4.9.2"
diff --git a/frontend/src/Server.js b/frontend/src/Server.js
index c8b4f9fee2..526c3edb3a 100644
--- a/frontend/src/Server.js
+++ b/frontend/src/Server.js
@@ -9,6 +9,23 @@ const staticPath = join(resolve(process.cwd()), 'public')
const frenchHosts = process.env.FRENCH_HOSTS?.split(',') || []
const isProduction = process.env.TRACKER_PRODUCTION === 'true'
+const baseHtml = fs.readFileSync(resolve(join('public', 'index.html')), 'utf8')
+
+const htmlByLanguage = {
+ en: baseHtml.replace(
+ '',
+ ``,
+ ),
+ fr: baseHtml.replace(
+ '',
+ ``,
+ ),
+}
+
+function isHashed(filePath) {
+ return /\.[0-9a-f]{8,}\./i.test(filePath)
+}
+
function Server() {
const server = express()
server.use(bodyParser.json())
@@ -24,19 +41,37 @@ function Server() {
res.json({ status: 'ready' })
})
- server.use('/', express.static(staticPath, { maxage: '365d', index: false }))
+ server.use(
+ ['/manifest.json', '/robots.txt', '/favicon.ico'],
+ express.static(staticPath, { maxAge: '1d', index: false }),
+ )
+
+ server.use(
+ '/',
+ express.static(staticPath, {
+ index: false,
+ setHeaders(res, filePath) {
+ if (isHashed(filePath)) {
+ // filePath contains a hash? Cache for 1 year
+ res.setHeader('Cache-Control', 'public, max-age=31536000')
+ } else {
+ // file not already handled and does not contain a hash? Cache for 1d
+ res.setHeader('Cache-Control', 'public, max-age=86400')
+ }
+ },
+ }),
+ )
server.get('*', (req, res) => {
const host = req.hostname
- const defaultLanguage = frenchHosts.includes(host) ? 'fr' : 'en'
- let html = fs
- .readFileSync(resolve(join('public', 'index.html')), 'utf8')
- .replace(
- '',
- ``,
- )
- res.send(html)
+ const lang = frenchHosts.includes(host) ? 'fr' : 'en'
+
+ res.set('Cache-Control', 'no-cache')
+
+ res.send(htmlByLanguage[lang])
})
+
return server
}
+
module.exports.Server = Server
diff --git a/frontend/src/admin/AdminDomainCard.js b/frontend/src/admin/AdminDomainCard.js
index 52554c922b..ae329088d1 100644
--- a/frontend/src/admin/AdminDomainCard.js
+++ b/frontend/src/admin/AdminDomainCard.js
@@ -1,9 +1,10 @@
import React from 'react'
-import { t, Trans } from '@lingui/macro'
-import { array, bool, string } from 'prop-types'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
+import { any, array, bool, object, string } from 'prop-types'
import { Flex, ListItem, Tag, TagLabel, Text, Tooltip } from '@chakra-ui/react'
-export function AdminDomainCard({ url, tags, assetState, isArchived, rcode, ...rest }) {
+export function AdminDomainCard({ url, tags, assetState, isArchived, rcode, cvdEnrollment, children, ...rest }) {
const assetStateLabels = {
APPROVED: t`Approved`,
DEPENDENCY: t`Dependency`,
@@ -14,7 +15,8 @@ export function AdminDomainCard({ url, tags, assetState, isArchived, rcode, ...r
return (
-
+
+ {children}
{url}
@@ -37,6 +39,13 @@ export function AdminDomainCard({ url, tags, assetState, isArchived, rcode, ...r
{assetStateLabels[assetState]}
)}
+ {cvdEnrollment && cvdEnrollment.status !== 'NOT_ENROLLED' && (
+
+
+ CVD {cvdEnrollment.status}
+
+
+ )}
{rcode === 'NXDOMAIN' && (
NXDOMAIN
@@ -60,4 +69,6 @@ AdminDomainCard.propTypes = {
isArchived: bool,
rcode: string,
assetState: string,
+ children: any,
+ cvdEnrollment: object,
}
diff --git a/frontend/src/admin/AdminDomainList.js b/frontend/src/admin/AdminDomainList.js
index c31c1bd451..834fd1c615 100644
--- a/frontend/src/admin/AdminDomainList.js
+++ b/frontend/src/admin/AdminDomainList.js
@@ -1,19 +1,15 @@
import React from 'react'
-import { Divider, Flex, IconButton, Stack, Text } from '@chakra-ui/react'
+import { IconButton, Text } from '@chakra-ui/react'
import { ListOf } from '../components/ListOf'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
import { EditIcon, MinusIcon } from '@chakra-ui/icons'
import { AdminDomainCard } from './AdminDomainCard'
-import { ABTestVariant, ABTestWrapper } from '../app/ABTestWrapper'
-import SubdomainDiscoveryButton from '../domains/SubdomainDiscoveryButton'
import { array, bool, func, object, string } from 'prop-types'
export function AdminDomainList({
nodes,
verified,
permission,
- orgId,
- orgSlug,
i18n,
setSelectedRemoveProps,
removeOnOpen,
@@ -29,61 +25,56 @@ export function AdminDomainList({
)}
>
- {({ id: domainId, domain, claimTags, archived, rcode, organizations, assetState }, index) => (
+ {({ id: domainId, domain, claimTags, archived, rcode, organizations, assetState, cvdEnrollment }, index) => (
- {index === 0 && }
-
-
- {(!verified || permission === 'SUPER_ADMIN' || rcode === 'NXDOMAIN') && (
- {
- setSelectedRemoveProps({ domain, domainId, rcode })
- removeOnOpen()
- }}
- variant="danger"
- px="2"
- icon={}
- aria-label={'Remove ' + domain}
- />
- )}
+
+ {(!verified || permission === 'SUPER_ADMIN' || rcode === 'NXDOMAIN') && (
{
- setModalProps({
- archived,
- mutation: 'update',
- assetState,
- tagInputList: claimTags,
- editingDomainId: domainId,
- editingDomainUrl: domain,
- orgCount: organizations.totalCount,
- })
- updateOnOpen()
+ setSelectedRemoveProps({ domain, domainId, rcode })
+ removeOnOpen()
}}
- icon={}
- aria-label={'Edit ' + domain}
+ variant="danger"
+ px="2"
+ icon={}
+ aria-label={'Remove ' + domain}
+ mr="1"
/>
-
- {
+ setModalProps({
+ archived,
+ mutation: 'update',
+ assetState,
+ tagInputList: claimTags,
+ editingDomainId: domainId,
+ editingDomainUrl: domain,
+ orgCount: organizations.totalCount,
+ cvdEnrollment,
+ permission,
+ })
+ updateOnOpen()
+ }}
+ icon={}
+ aria-label={'Edit ' + domain}
+ mr="2"
/>
-
-
-
-
-
-
-
+
)}
@@ -93,8 +84,6 @@ AdminDomainList.propTypes = {
nodes: array.isRequired,
verified: bool,
permission: string,
- orgId: string.isRequired,
- orgSlug: string,
i18n: object.isRequired,
setSelectedRemoveProps: func.isRequired,
removeOnOpen: func.isRequired,
diff --git a/frontend/src/admin/AdminDomainModal.js b/frontend/src/admin/AdminDomainModal.js
index e4a696a2c9..190620ac4e 100644
--- a/frontend/src/admin/AdminDomainModal.js
+++ b/frontend/src/admin/AdminDomainModal.js
@@ -1,5 +1,6 @@
import React, { useRef } from 'react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useLingui } from '@lingui/react'
import {
Badge,
@@ -31,13 +32,31 @@ import { AddIcon, QuestionOutlineIcon } from '@chakra-ui/icons'
import { array, bool, func, number, object, string } from 'prop-types'
import { FieldArray, Formik } from 'formik'
import { useMutation } from '@apollo/client'
+import { ABTestVariant, ABTestWrapper } from '../app/ABTestWrapper'
import { DomainField } from '../components/fields/DomainField'
import { CREATE_DOMAIN, UPDATE_DOMAIN } from '../graphql/mutations'
import withSuperAdmin from '../app/withSuperAdmin'
+import { CvdEnrollmentForm } from './CvdEnrollmentForm'
-export function AdminDomainModal({ isOpen, onClose, validationSchema, orgId, availableTags, ...props }) {
- const { editingDomainId, editingDomainUrl, tagInputList, orgSlug, archived, assetState, mutation, orgCount } = props
+export function AdminDomainModal({
+ isOpen,
+ onClose,
+ validationSchema,
+ orgId,
+ availableTags,
+ editingDomainId,
+ editingDomainUrl,
+ tagInputList,
+ orgSlug,
+ archived,
+ assetState,
+ mutation,
+ orgCount,
+ cvdEnrollment,
+ permission,
+ ...rest
+}) {
const toast = useToast()
const initialFocusRef = useRef()
const { i18n } = useLingui()
@@ -105,9 +124,7 @@ export function AdminDomainModal({ isOpen, onClose, validationSchema, orgId, ava
onClose()
toast({
title: i18n._(t`Domain updated`),
- description: i18n._(
- t`${editingDomainUrl} from ${orgSlug} successfully updated to ${updateDomain.result.domain}`,
- ),
+ description: i18n._(t`${editingDomainUrl} from ${orgSlug} successfully updated.`),
status: 'success',
duration: 9000,
isClosable: true,
@@ -187,16 +204,16 @@ export function AdminDomainModal({ isOpen, onClose, validationSchema, orgId, ava
}
return (
-
+
{
// Submit update detail mutation
+ const sanitizeCvdEnrollment = (enrollment) => {
+ if (!enrollment || typeof enrollment !== 'object') return enrollment
+ const { __typename, ...rest } = enrollment
+ return rest
+ }
if (mutation === 'update') {
await updateDomain({
variables: {
@@ -213,6 +235,7 @@ export function AdminDomainModal({ isOpen, onClose, validationSchema, orgId, ava
archived: values.archiveDomain,
assetState: values.assetState,
ignoreRua: values.ignoreRua,
+ cvdEnrollment: sanitizeCvdEnrollment(values.cvdEnrollment),
},
})
} else if (mutation === 'create') {
@@ -223,6 +246,7 @@ export function AdminDomainModal({ isOpen, onClose, validationSchema, orgId, ava
tags: values.tags.map(({ tagId }) => tagId),
archived: values.archiveDomain,
assetState: values.assetState,
+ cvdEnrollment: sanitizeCvdEnrollment(values.cvdEnrollment),
},
})
}
@@ -306,6 +330,13 @@ export function AdminDomainModal({ isOpen, onClose, validationSchema, orgId, ava
+
+
+
+
+
+
+
+
+
+
+ CVD Enrollment Status
+
+
+
+
+
+
+
+
+ About Coordinated Vulnerability Disclosure (CVD)
+
+
+
+
+ 1. What is Coordinated Vulnerability Disclosure (CVD)?
+
A structured process that allows security researchers to report vulnerabilities safely and
+ responsibly. It ensures findings are received, validated, and addressed in an organized way,
+ helping organizations fix issues before they can be exploited.
+
+
+
+
+
+ 2. Why enroll your domains?
+
+ Enrolling your internet‑facing assets ensures researchers can report real vulnerabilities directly
+ to the Government of Canada through an approved and safe channel. This improves early detection,
+ reduces security risk, and strengthens your organization’s ability to respond quickly and
+ consistently.
+
+
+
+
+
+ 3. Which domains should you enroll?
+
+ Enroll any public, internet‑facing domains or subdomains your organization owns—especially
+ production systems that deliver services or expose application functionality. Test or pre‑launch
+ environments may be excluded unless they are publicly accessible.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {values.cvdEnrollment.status !== 'NOT_ENROLLED' && (
+ <>
+
+
+
+ Description
+
+
+
+
+
+
+
+
+ Max Severity
+
+
+
+
+
+
+
+
+ Confidentiality Requirement
+
+
+
+
+
+
+
+
+ Integrity Requirement
+
+
+
+
+
+
+
+
+ Availability Requirement
+
+
+
+
+ >
+ )}
+
+ )
+}
+
+CvdEnrollmentForm.propTypes = {
+ values: object,
+ permission: string,
+ handleChange: func,
+}
diff --git a/frontend/src/admin/DomainTagsList.js b/frontend/src/admin/DomainTagsList.js
index 398c88a65c..28f9ec0f39 100644
--- a/frontend/src/admin/DomainTagsList.js
+++ b/frontend/src/admin/DomainTagsList.js
@@ -6,7 +6,8 @@ import { EditIcon, PlusSquareIcon, ViewIcon, ViewOffIcon } from '@chakra-ui/icon
import { LoadingMessage } from '../components/LoadingMessage'
import { ErrorFallbackMessage } from '../components/ErrorFallbackMessage'
import { TagForm } from './TagForm'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { string } from 'prop-types'
export const DomainTagsList = ({ orgId, createOwnership }) => {
diff --git a/frontend/src/admin/DomainUpdateList.js b/frontend/src/admin/DomainUpdateList.js
index 754fc114c6..0c42f1eb2c 100644
--- a/frontend/src/admin/DomainUpdateList.js
+++ b/frontend/src/admin/DomainUpdateList.js
@@ -30,7 +30,8 @@ import {
} from '@chakra-ui/react'
import { useMutation } from '@apollo/client'
import { array, func, number, string } from 'prop-types'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { UPDATE_DOMAINS_BY_DOMAIN_IDS, UPDATE_DOMAINS_BY_FILTERS } from '../graphql/mutations'
export function DomainUpdateList({ orgId, domains, availableTags, filters, search, domainCount, resetToFirstPage }) {
diff --git a/frontend/src/admin/OrganizationInformation.js b/frontend/src/admin/OrganizationInformation.js
index 46dbd9f196..5ccf183c28 100644
--- a/frontend/src/admin/OrganizationInformation.js
+++ b/frontend/src/admin/OrganizationInformation.js
@@ -22,7 +22,8 @@ import {
import { CheckCircleIcon, MinusIcon, EditIcon } from '@chakra-ui/icons'
import { bool, func, string } from 'prop-types'
import { useMutation, useQuery } from '@apollo/client'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { Formik } from 'formik'
import { ORGANIZATION_INFORMATION } from '../graphql/queries'
diff --git a/frontend/src/admin/SuperAdminUserList.js b/frontend/src/admin/SuperAdminUserList.js
index 14acec41a6..c559bddbed 100644
--- a/frontend/src/admin/SuperAdminUserList.js
+++ b/frontend/src/admin/SuperAdminUserList.js
@@ -29,7 +29,8 @@ import { ErrorFallbackMessage } from '../components/ErrorFallbackMessage'
import { RelayPaginationControls } from '../components/RelayPaginationControls'
import { usePaginatedCollection } from '../utilities/usePaginatedCollection'
import { useDebouncedFunction } from '../utilities/useDebouncedFunction'
-import { Trans, t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { CheckCircleIcon, EditIcon, MinusIcon } from '@chakra-ui/icons'
import { SearchBox } from '../components/SearchBox'
import { UserListModal } from './UserListModal'
diff --git a/frontend/src/admin/TagForm.js b/frontend/src/admin/TagForm.js
index 18dc2784a8..41603dc552 100644
--- a/frontend/src/admin/TagForm.js
+++ b/frontend/src/admin/TagForm.js
@@ -2,7 +2,8 @@ import React from 'react'
import { Badge, Box, Button, Flex, FormLabel, Grid, Select, Switch, Text, useToast } from '@chakra-ui/react'
import { useMutation } from '@apollo/client'
import { CREATE_TAG, UPDATE_TAG } from '../graphql/mutations'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { Formik } from 'formik'
import { FormField } from '../components/fields/FormField'
import { getRequirement, schemaToValidation } from '../utilities/fieldRequirements'
diff --git a/frontend/src/admin/UserList.js b/frontend/src/admin/UserList.js
index 23f935ec5a..f8230ddcb9 100644
--- a/frontend/src/admin/UserList.js
+++ b/frontend/src/admin/UserList.js
@@ -8,12 +8,12 @@ import {
Input,
InputGroup,
InputLeftElement,
- Stack,
Text,
useDisclosure,
} from '@chakra-ui/react'
import { AddIcon, EditIcon, EmailIcon, MinusIcon } from '@chakra-ui/icons'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { string } from 'prop-types'
import { UserListModal } from './UserListModal'
@@ -85,45 +85,40 @@ export function UserList({ includePending, permission, orgSlug, orgId }) {
) : (
nodes.map(({ id, permission: userRole, user }) => {
return (
-
-
-
- {
- setSelectedRemoveUser(user)
- setMutation('remove')
- onOpen()
- }}
- p={2}
- m={0}
- icon={}
- />
- {
- setEditingUserRole(userRole)
- setEditingUserName(user.userName)
- setMutation('update')
- onOpen()
- }}
- p={2}
- m={0}
- icon={}
- />
-
-
-
-
-
+
+ {
+ setSelectedRemoveUser(user)
+ setMutation('remove')
+ onOpen()
+ }}
+ px="2"
+ mr="1"
+ icon={}
+ />
+ {
+ setEditingUserRole(userRole)
+ setEditingUserName(user.userName)
+ setMutation('update')
+ onOpen()
+ }}
+ px="2"
+ mr="2"
+ icon={}
+ />
+
)
})
)
diff --git a/frontend/src/admin/UserListModal.js b/frontend/src/admin/UserListModal.js
index 425fec42a2..c74c4d0e08 100644
--- a/frontend/src/admin/UserListModal.js
+++ b/frontend/src/admin/UserListModal.js
@@ -14,7 +14,8 @@ import {
Select,
Text,
} from '@chakra-ui/react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { Formik } from 'formik'
import { useMutation } from '@apollo/client'
import { bool, func, string } from 'prop-types'
diff --git a/frontend/src/admin/__tests__/AdminDomainCard.test.js b/frontend/src/admin/__tests__/AdminDomainCard.test.js
index 49f3187ca2..46d1eb1d9f 100644
--- a/frontend/src/admin/__tests__/AdminDomainCard.test.js
+++ b/frontend/src/admin/__tests__/AdminDomainCard.test.js
@@ -3,24 +3,13 @@ import { render, waitFor } from '@testing-library/react'
import { MemoryRouter } from 'react-router-dom'
import { List, theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { AdminDomainCard } from '../AdminDomainCard'
import { MockedProvider } from '@apollo/client/testing'
import { IS_USER_SUPER_ADMIN } from '../../graphql/queries'
import { UserVarProvider } from '../../utilities/userState'
import { makeVar } from '@apollo/client'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
const mocks = [
{
request: {
diff --git a/frontend/src/admin/__tests__/AdminDomains.test.js b/frontend/src/admin/__tests__/AdminDomains.test.js
index e88904dfaf..b9118938ee 100644
--- a/frontend/src/admin/__tests__/AdminDomains.test.js
+++ b/frontend/src/admin/__tests__/AdminDomains.test.js
@@ -3,30 +3,17 @@ import { fireEvent, render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { MemoryRouter } from 'react-router-dom'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import { makeVar } from '@apollo/client'
import userEvent from '@testing-library/user-event'
-import { en } from 'make-plural/plurals'
-
import { AdminDomains } from '../AdminDomains'
-
import { createCache } from '../../client'
import { UserVarProvider } from '../../utilities/userState'
import { rawOrgDomainListData, rawOrgDomainListDataEmpty } from '../../fixtures/orgDomainListData'
import { PAGINATED_ORG_DOMAINS_ADMIN_PAGE as FORWARD } from '../../graphql/queries'
import { CREATE_DOMAIN, REMOVE_DOMAIN, UPDATE_DOMAIN } from '../../graphql/mutations'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
const mocks = [
{
request: {
@@ -231,6 +218,7 @@ describe('', () => {
tags: [],
archived: false,
assetState: 'APPROVED',
+ cvdEnrollment: { status: 'NOT_ENROLLED' },
},
},
result: {
@@ -327,6 +315,7 @@ describe('', () => {
tags: [],
archived: false,
assetState: 'APPROVED',
+ cvdEnrollment: { status: 'NOT_ENROLLED' },
},
},
result: {
@@ -503,6 +492,7 @@ describe('', () => {
tags: [],
archived: false,
assetState: 'MONITOR_ONLY',
+ cvdEnrollment: { status: 'NOT_ENROLLED' },
},
},
result: {
diff --git a/frontend/src/admin/__tests__/AdminPage.test.js b/frontend/src/admin/__tests__/AdminPage.test.js
index d544206a0e..50ec096d92 100644
--- a/frontend/src/admin/__tests__/AdminPage.test.js
+++ b/frontend/src/admin/__tests__/AdminPage.test.js
@@ -1,15 +1,13 @@
import React from 'react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import AdminPage from '../AdminPage'
import { waitFor, render } from '@testing-library/react'
import { MemoryRouter } from 'react-router-dom'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
import userEvent from '@testing-library/user-event'
-
import { UserVarProvider } from '../../utilities/userState'
import { TourProvider } from '../../userOnboarding/contexts/TourContext'
@@ -20,16 +18,6 @@ import {
PAGINATED_ORG_DOMAINS_ADMIN_PAGE,
} from '../../graphql/queries'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
describe('', () => {
it('shows a list of the users organizations', async () => {
const { getByText } = render(
diff --git a/frontend/src/admin/__tests__/AdminPanel.test.js b/frontend/src/admin/__tests__/AdminPanel.test.js
index 2698b2b67b..c9ecfc7f06 100644
--- a/frontend/src/admin/__tests__/AdminPanel.test.js
+++ b/frontend/src/admin/__tests__/AdminPanel.test.js
@@ -2,14 +2,11 @@ import React from 'react'
import { render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import { createMemoryRouter, RouterProvider } from 'react-router-dom'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import { AdminPanel } from '../AdminPanel'
-
import { createCache } from '../../client'
import { UserVarProvider } from '../../utilities/userState'
import { rawOrgDomainListData } from '../../fixtures/orgDomainListData'
@@ -17,16 +14,6 @@ import { rawOrgUserListData } from '../../fixtures/orgUserListData'
import { PAGINATED_ORG_AFFILIATIONS_ADMIN_PAGE, PAGINATED_ORG_DOMAINS_ADMIN_PAGE } from '../../graphql/queries'
import { TourProvider } from '../../userOnboarding/contexts/TourContext'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
const mocks = [
{
request: {
diff --git a/frontend/src/admin/__tests__/AuditLogTable.test.js b/frontend/src/admin/__tests__/AuditLogTable.test.js
index ac4d3dd677..d9860efe8d 100644
--- a/frontend/src/admin/__tests__/AuditLogTable.test.js
+++ b/frontend/src/admin/__tests__/AuditLogTable.test.js
@@ -1,28 +1,16 @@
import React from 'react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import { AuditLogTable } from '../AuditLogTable'
import { waitFor, render } from '@testing-library/react'
import { MemoryRouter } from 'react-router-dom'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
import userEvent from '@testing-library/user-event'
-
import { UserVarProvider } from '../../utilities/userState'
import { AUDIT_LOGS } from '../../graphql/queries'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
describe('', () => {
it('shows a table displaying activity logs from organizations', async () => {
const { queryByText } = render(
diff --git a/frontend/src/admin/__tests__/CvdEnrollmentForm.test.js b/frontend/src/admin/__tests__/CvdEnrollmentForm.test.js
new file mode 100644
index 0000000000..b5e64e55e5
--- /dev/null
+++ b/frontend/src/admin/__tests__/CvdEnrollmentForm.test.js
@@ -0,0 +1,138 @@
+import React from 'react'
+import { render, screen, fireEvent } from '@testing-library/react'
+import { ChakraProvider, theme } from '@chakra-ui/react'
+import { I18nProvider } from '@lingui/react'
+import { i18n } from '@lingui/core'
+import { CvdEnrollmentForm } from '../CvdEnrollmentForm'
+import '@testing-library/jest-dom'
+
+describe('', () => {
+ const baseValues = {
+ cvdEnrollment: {
+ status: 'NOT_ENROLLED',
+ description: '',
+ maxSeverity: '',
+ confidentialityRequirement: '',
+ integrityRequirement: '',
+ availabilityRequirement: '',
+ },
+ }
+ const handleChange = jest.fn()
+
+ function renderForm(props) {
+ return render(
+
+
+
+
+ ,
+ )
+ }
+
+ afterEach(() => {
+ jest.clearAllMocks()
+ })
+
+ it('renders the enrollment status select and info popover', () => {
+ renderForm({ values: baseValues, handleChange, permission: 'USER' })
+ expect(screen.getAllByText(/CVD Enrollment Status/i)[0]).toBeInTheDocument()
+ expect(screen.getByText(/More Info/i)).toBeInTheDocument()
+ expect(screen.getByText(/Not Enrolled/i)).toBeInTheDocument()
+ })
+
+ it('shows Pending option for ADMIN permission', () => {
+ renderForm({
+ values: { cvdEnrollment: { ...baseValues.cvdEnrollment, status: 'PENDING' } },
+ handleChange,
+ permission: 'ADMIN',
+ })
+ // Use queryByText with fallback for option
+ const pendingOption = screen.queryByText((content, element) => {
+ return element.tagName && element.tagName.toLowerCase() === 'option' && /Pending/i.test(content)
+ })
+ expect(pendingOption).not.toBeNull()
+ })
+
+ it('shows Enrolled option for OWNER permission', () => {
+ renderForm({
+ values: { cvdEnrollment: { ...baseValues.cvdEnrollment, status: 'ENROLLED' } },
+ handleChange,
+ permission: 'OWNER',
+ })
+ expect(screen.getAllByText(/Enrolled/i)[0]).toBeInTheDocument()
+ })
+
+ it('renders additional fields when status is not NOT_ENROLLED', () => {
+ renderForm({
+ values: {
+ cvdEnrollment: {
+ ...baseValues.cvdEnrollment,
+ status: 'ENROLLED',
+ description: 'desc',
+ maxSeverity: 'HIGH',
+ confidentialityRequirement: 'LOW',
+ integrityRequirement: 'HIGH',
+ availabilityRequirement: 'LOW',
+ },
+ },
+ handleChange,
+ permission: 'OWNER',
+ })
+ expect(screen.getByLabelText(/Description/i)).toBeInTheDocument()
+ expect(screen.getByLabelText(/Max Severity/i)).toBeInTheDocument()
+ expect(screen.getByLabelText(/Confidentiality Requirement/i)).toBeInTheDocument()
+ expect(screen.getByLabelText(/Integrity Requirement/i)).toBeInTheDocument()
+ expect(screen.getByLabelText(/Availability Requirement/i)).toBeInTheDocument()
+ })
+
+ it('calls handleChange when status is changed', () => {
+ renderForm({ values: baseValues, handleChange, permission: 'ADMIN' })
+ // Use getByRole to select by combobox and name
+ const select = screen.getByRole('combobox', { name: /CVD Enrollment Status/i })
+ fireEvent.change(select, {
+ target: { value: 'PENDING' },
+ })
+ expect(handleChange).toHaveBeenCalled()
+ })
+
+ it('calls handleChange for description input', () => {
+ renderForm({
+ values: {
+ cvdEnrollment: { ...baseValues.cvdEnrollment, status: 'ENROLLED' },
+ },
+ handleChange,
+ permission: 'OWNER',
+ })
+ fireEvent.change(screen.getByLabelText(/Description/i), {
+ target: { value: 'Test description' },
+ })
+ expect(handleChange).toHaveBeenCalled()
+ })
+
+ it('handles empty values for select fields', () => {
+ renderForm({
+ values: {
+ cvdEnrollment: {
+ status: 'ENROLLED',
+ description: '',
+ maxSeverity: '',
+ confidentialityRequirement: '',
+ integrityRequirement: '',
+ availabilityRequirement: '',
+ },
+ },
+ handleChange,
+ permission: 'OWNER',
+ })
+ expect(screen.getByLabelText(/Max Severity/i).value).toBe('')
+ expect(screen.getByLabelText(/Confidentiality Requirement/i).value).toBe('')
+ expect(screen.getByLabelText(/Integrity Requirement/i).value).toBe('')
+ expect(screen.getByLabelText(/Availability Requirement/i).value).toBe('')
+ })
+
+ it('does not render additional fields when status is NOT_ENROLLED', () => {
+ renderForm({ values: baseValues, handleChange, permission: 'USER' })
+ expect(screen.queryByLabelText(/Description/i)).not.toBeInTheDocument()
+ expect(screen.queryByLabelText(/Max Severity/i)).not.toBeInTheDocument()
+ })
+})
diff --git a/frontend/src/admin/__tests__/DomainTagsList.test.js b/frontend/src/admin/__tests__/DomainTagsList.test.js
index 41cd5fabeb..2b980e044c 100644
--- a/frontend/src/admin/__tests__/DomainTagsList.test.js
+++ b/frontend/src/admin/__tests__/DomainTagsList.test.js
@@ -2,9 +2,8 @@ import React from 'react'
import { ChakraProvider, theme } from '@chakra-ui/react'
import { MemoryRouter } from 'react-router-dom'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
import { render, screen, fireEvent, within } from '@testing-library/react'
import { MockedProvider } from '@apollo/client/testing'
import { DomainTagsList } from '../DomainTagsList'
@@ -13,12 +12,6 @@ import { CREATE_TAG, UPDATE_TAG } from '../../graphql/mutations'
import { UserVarProvider } from '../../utilities/userState'
import '@testing-library/jest-dom'
-const i18n = setupI18n({
- locale: 'en',
- messages: { en: {} },
- localeData: { en: { plurals: en } },
-})
-
jest.mock('@chakra-ui/react', () => {
const actual = jest.requireActual('@chakra-ui/react')
return { ...actual, useToast: () => jest.fn() }
diff --git a/frontend/src/admin/__tests__/DomainUpdateList.test.js b/frontend/src/admin/__tests__/DomainUpdateList.test.js
index 1c71bdaa76..17f3665127 100644
--- a/frontend/src/admin/__tests__/DomainUpdateList.test.js
+++ b/frontend/src/admin/__tests__/DomainUpdateList.test.js
@@ -2,26 +2,21 @@ import React from 'react'
import { render, fireEvent, waitFor } from '@testing-library/react'
import { ChakraProvider, theme } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
-import { en } from 'make-plural/plurals'
import { DomainUpdateList } from '../DomainUpdateList'
import { UPDATE_DOMAINS_BY_DOMAIN_IDS, UPDATE_DOMAINS_BY_FILTERS } from '../../graphql/mutations'
-const i18n = setupI18n({
- locale: 'en',
- messages: { en: {} },
- localeData: { en: { plurals: en } },
-})
-
const domains = [
{ id: '1', domain: 'example.com', tags: ['tag1'] },
{ id: '2', domain: 'test.com', tags: ['tag2'] },
]
+
const availableTags = [
{ label: 'Tag 1', tagId: 'tag1' },
{ label: 'Tag 2', tagId: 'tag2' },
]
+
const filters = []
const orgId = 'org-1'
const search = ''
diff --git a/frontend/src/admin/__tests__/SuperAdminUserList.test.js b/frontend/src/admin/__tests__/SuperAdminUserList.test.js
index 4c76e990e4..75a2dccb48 100644
--- a/frontend/src/admin/__tests__/SuperAdminUserList.test.js
+++ b/frontend/src/admin/__tests__/SuperAdminUserList.test.js
@@ -4,27 +4,14 @@ import { MemoryRouter } from 'react-router-dom'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
import { MockedProvider } from '@apollo/client/testing'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import { SuperAdminUserList } from '../SuperAdminUserList'
-
import { UserVarProvider } from '../../utilities/userState'
import { createCache } from '../../client'
import { FIND_MY_USERS } from '../../graphql/queries'
import { UPDATE_USER_ROLE, REMOVE_USER_FROM_ORG } from '../../graphql/mutations'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
const saUserListMockData = {
data: {
findMyUsers: {
diff --git a/frontend/src/admin/__tests__/TagForm.test.js b/frontend/src/admin/__tests__/TagForm.test.js
index 19a1b71dcb..cc907b7c54 100644
--- a/frontend/src/admin/__tests__/TagForm.test.js
+++ b/frontend/src/admin/__tests__/TagForm.test.js
@@ -3,18 +3,11 @@ import { render, screen, fireEvent, waitFor } from '@testing-library/react'
import { MockedProvider } from '@apollo/client/testing'
import { ChakraProvider, theme } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-import { en } from 'make-plural/plurals'
+import { i18n } from '@lingui/core'
import { TagForm } from '../TagForm'
import { CREATE_TAG, UPDATE_TAG } from '../../graphql/mutations'
import '@testing-library/jest-dom'
-const i18n = setupI18n({
- locale: 'en',
- messages: { en: {} },
- localeData: { en: { plurals: en } },
-})
-
jest.mock('@chakra-ui/react', () => {
const actual = jest.requireActual('@chakra-ui/react')
return {
diff --git a/frontend/src/admin/__tests__/UserList.test.js b/frontend/src/admin/__tests__/UserList.test.js
index d59fcc6be4..418457bc2e 100644
--- a/frontend/src/admin/__tests__/UserList.test.js
+++ b/frontend/src/admin/__tests__/UserList.test.js
@@ -4,28 +4,15 @@ import { MemoryRouter } from 'react-router-dom'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
import { MockedProvider } from '@apollo/client/testing'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import { UserList } from '../UserList'
-
import { UserVarProvider } from '../../utilities/userState'
import { createCache } from '../../client'
import { PAGINATED_ORG_AFFILIATIONS_ADMIN_PAGE as FORWARD } from '../../graphql/queries'
import { UPDATE_USER_ROLE, INVITE_USER_TO_ORG, REMOVE_USER_FROM_ORG } from '../../graphql/mutations'
import { rawOrgUserListData } from '../../fixtures/orgUserListData'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
const successMocks = [
{
request: {
@@ -142,11 +129,7 @@ describe('', () => {
,
)
- await waitFor(() =>
- expect(
- getByText(rawOrgUserListData.findOrganizationBySlug.affiliations.edges[0].node.user.userName),
- ).toBeInTheDocument(),
- )
+ await waitFor(() => expect(getByText(/test.user@email.com/i)).toBeInTheDocument())
})
describe('Admin profile userlist', () => {
diff --git a/frontend/src/admin/__tests__/UserListModal.test.js b/frontend/src/admin/__tests__/UserListModal.test.js
index 903f9ade0a..d21c830849 100644
--- a/frontend/src/admin/__tests__/UserListModal.test.js
+++ b/frontend/src/admin/__tests__/UserListModal.test.js
@@ -4,27 +4,14 @@ import { MemoryRouter } from 'react-router-dom'
import { theme, ChakraProvider, useDisclosure } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
import { MockedProvider } from '@apollo/client/testing'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import { UserVarProvider } from '../../utilities/userState'
import { createCache } from '../../client'
import { UPDATE_USER_ROLE, INVITE_USER_TO_ORG, REMOVE_USER_FROM_ORG } from '../../graphql/mutations'
import { UserListModal } from '../UserListModal'
import userEvent from '@testing-library/user-event'
import canada from '../../theme/canada'
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
const orgId = 'test-id'
const editingUserId = 'test-id'
const editingUserName = 'test-username@email.com'
diff --git a/frontend/src/app/App.js b/frontend/src/app/App.js
index bd0a3bcac7..b0cf9ebc19 100644
--- a/frontend/src/app/App.js
+++ b/frontend/src/app/App.js
@@ -1,7 +1,8 @@
import React, { Suspense } from 'react'
import { Link as RouteLink, Routes, Route, Navigate } from 'react-router-dom'
import { AlertDescription, AlertTitle, Box, Code, CSSReset, Flex, Link, Skeleton, Text } from '@chakra-ui/react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { Main } from './Main'
import { TopBanner } from './TopBanner'
diff --git a/frontend/src/app/ContactUsPage.js b/frontend/src/app/ContactUsPage.js
index 1f09210f10..7ac31800b9 100644
--- a/frontend/src/app/ContactUsPage.js
+++ b/frontend/src/app/ContactUsPage.js
@@ -1,5 +1,5 @@
import React from 'react'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
import { Box, Divider, Heading, Button, Text, Link } from '@chakra-ui/react'
import { Link as RouteLink } from 'react-router-dom'
diff --git a/frontend/src/app/FloatingMenu.js b/frontend/src/app/FloatingMenu.js
index 24dbeecfcb..e7efbce810 100644
--- a/frontend/src/app/FloatingMenu.js
+++ b/frontend/src/app/FloatingMenu.js
@@ -18,7 +18,8 @@ import {
useDisclosure,
useToast,
} from '@chakra-ui/react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useLingui } from '@lingui/react'
import { useMutation } from '@apollo/client'
diff --git a/frontend/src/app/NotificationBanner.js b/frontend/src/app/NotificationBanner.js
index 0e40f0cca7..c1d352009c 100644
--- a/frontend/src/app/NotificationBanner.js
+++ b/frontend/src/app/NotificationBanner.js
@@ -3,7 +3,8 @@ import { Flex, Box, CloseButton, Button, Alert, AlertIcon, useToast } from '@cha
import { any, bool, oneOf, string } from 'prop-types'
import { CloseIcon } from '@chakra-ui/icons'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useMutation } from '@apollo/client'
import { DISMISS_MESSAGE } from '../graphql/mutations'
import { useUserVar } from '../utilities/userState'
diff --git a/frontend/src/app/PageNotFound.js b/frontend/src/app/PageNotFound.js
index 33a6f62a19..36b597cbd1 100644
--- a/frontend/src/app/PageNotFound.js
+++ b/frontend/src/app/PageNotFound.js
@@ -1,7 +1,7 @@
import React from 'react'
import { Box, Divider, Heading, Stack, Text } from '@chakra-ui/react'
import { WarningTwoIcon } from '@chakra-ui/icons'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
export default function PageNotFound() {
return (
diff --git a/frontend/src/app/ReadGuidancePage.js b/frontend/src/app/ReadGuidancePage.js
index c17f65d7b4..08f8137126 100644
--- a/frontend/src/app/ReadGuidancePage.js
+++ b/frontend/src/app/ReadGuidancePage.js
@@ -1,5 +1,5 @@
import React from 'react'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
import { Box, Heading, Text, Link, ListItem, OrderedList, UnorderedList, Divider, Code } from '@chakra-ui/react'
import { useLingui } from '@lingui/react'
diff --git a/frontend/src/app/RequestScanNotificationHandler.js b/frontend/src/app/RequestScanNotificationHandler.js
index 93c753e563..736d2baa13 100644
--- a/frontend/src/app/RequestScanNotificationHandler.js
+++ b/frontend/src/app/RequestScanNotificationHandler.js
@@ -1,7 +1,7 @@
import React from 'react'
import { useSubscription } from '@apollo/client'
import { Box, useToast } from '@chakra-ui/react'
-import { t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
import { node } from 'prop-types'
import { useUserVar } from '../utilities/userState'
diff --git a/frontend/src/app/SlideMessage.js b/frontend/src/app/SlideMessage.js
index 77fc6cc0da..36de7aa7f5 100644
--- a/frontend/src/app/SlideMessage.js
+++ b/frontend/src/app/SlideMessage.js
@@ -1,7 +1,7 @@
import React from 'react'
import { useLingui } from '@lingui/react'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
import sigEn from '../images/goc-header-logo-en.svg'
import sigFr from '../images/goc-header-logo-fr.svg'
diff --git a/frontend/src/app/TopBanner.js b/frontend/src/app/TopBanner.js
index d2f1a70662..2df0ea448b 100644
--- a/frontend/src/app/TopBanner.js
+++ b/frontend/src/app/TopBanner.js
@@ -1,5 +1,6 @@
import React from 'react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { Box, Button, Flex, useToast, Image, Link, Skeleton } from '@chakra-ui/react'
import { Link as RouteLink } from 'react-router-dom'
import { useMutation } from '@apollo/client'
diff --git a/frontend/src/app/__tests__/App.test.js b/frontend/src/app/__tests__/App.test.js
index 4b2f339457..def4e881d6 100644
--- a/frontend/src/app/__tests__/App.test.js
+++ b/frontend/src/app/__tests__/App.test.js
@@ -4,27 +4,14 @@ import { MemoryRouter } from 'react-router-dom'
import { cleanup, render, waitFor } from '@testing-library/react'
import { MockedProvider } from '@apollo/client/testing'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import { App } from '../App'
-
import { UserVarProvider } from '../../utilities/userState'
import { REFRESH_TOKENS } from '../../graphql/mutations'
import { IS_LOGIN_REQUIRED } from '../../graphql/queries'
import { TourProvider } from '../../userOnboarding/contexts/TourContext'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
const mocks = [
{
request: {
diff --git a/frontend/src/app/__tests__/ContactUsPage.test.js b/frontend/src/app/__tests__/ContactUsPage.test.js
index 01bda95544..76ff46c917 100644
--- a/frontend/src/app/__tests__/ContactUsPage.test.js
+++ b/frontend/src/app/__tests__/ContactUsPage.test.js
@@ -4,24 +4,11 @@ import { MemoryRouter } from 'react-router-dom'
import { cleanup, fireEvent, render, waitFor } from '@testing-library/react'
import { MockedProvider } from '@apollo/client/testing'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import ContactUsPage from '../ContactUsPage'
-
import { UserVarProvider } from '../../utilities/userState'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
describe('', () => {
afterEach(cleanup)
@@ -68,9 +55,7 @@ describe('', () => {
,
)
- const button = await waitFor(() =>
- getByRole('link', { name: /Contact Us/i }),
- )
+ const button = await waitFor(() => getByRole('link', { name: /Contact Us/i }))
await waitFor(() => {
expect(button)
fireEvent.click(button)
diff --git a/frontend/src/app/__tests__/FloatingMenu.test.js b/frontend/src/app/__tests__/FloatingMenu.test.js
index 91f5046f92..2339d3eaa5 100644
--- a/frontend/src/app/__tests__/FloatingMenu.test.js
+++ b/frontend/src/app/__tests__/FloatingMenu.test.js
@@ -2,27 +2,15 @@ import React from 'react'
import { cleanup, render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { createMemoryRouter, MemoryRouter, RouterProvider } from 'react-router-dom'
import { fireEvent } from '@testing-library/dom'
import { MockedProvider } from '@apollo/client/testing'
import { makeVar } from '@apollo/client'
-
import { FloatingMenu } from '../FloatingMenu'
-
import { UserVarProvider } from '../../utilities/userState'
import { SIGN_OUT } from '../../graphql/mutations'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
it('renders', async () => {
const { getByText } = render(
diff --git a/frontend/src/app/__tests__/FloatingMenuLink.test.js b/frontend/src/app/__tests__/FloatingMenuLink.test.js
index 21c40b8c8e..e074f34bee 100644
--- a/frontend/src/app/__tests__/FloatingMenuLink.test.js
+++ b/frontend/src/app/__tests__/FloatingMenuLink.test.js
@@ -2,25 +2,13 @@ import React from 'react'
import { render, waitFor, fireEvent } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { createMemoryRouter, MemoryRouter, RouterProvider } from 'react-router-dom'
import { MockedProvider } from '@apollo/client/testing'
import { makeVar } from '@apollo/client'
-
import { FloatingMenuLink } from '../FloatingMenuLink'
-
import { UserVarProvider } from '../../utilities/userState'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
it('renders', async () => {
const { getByText } = render(
diff --git a/frontend/src/app/__tests__/Footer.test.js b/frontend/src/app/__tests__/Footer.test.js
index 84f13808b7..435ebc568e 100644
--- a/frontend/src/app/__tests__/Footer.test.js
+++ b/frontend/src/app/__tests__/Footer.test.js
@@ -2,20 +2,9 @@ import React from 'react'
import { I18nProvider } from '@lingui/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { render } from '@testing-library/react'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { Footer } from '../Footer'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
beforeEach(() => (global.scrollTo = jest.fn()))
diff --git a/frontend/src/app/__tests__/NotificationBanner.test.js b/frontend/src/app/__tests__/NotificationBanner.test.js
index 42d2a2367a..9b0c71f1b6 100644
--- a/frontend/src/app/__tests__/NotificationBanner.test.js
+++ b/frontend/src/app/__tests__/NotificationBanner.test.js
@@ -2,25 +2,13 @@ import React from 'react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { render } from '@testing-library/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import { MemoryRouter } from 'react-router-dom'
import { makeVar } from '@apollo/client'
-
import { NotificationBanner } from '../NotificationBanner'
-
import { UserVarProvider } from '../../utilities/userState'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
it('renders correctly', () => {
const { getByText } = render(
diff --git a/frontend/src/app/__tests__/PhaseBanner.test.js b/frontend/src/app/__tests__/PhaseBanner.test.js
index 8c4d179e2a..7e7cc43f86 100644
--- a/frontend/src/app/__tests__/PhaseBanner.test.js
+++ b/frontend/src/app/__tests__/PhaseBanner.test.js
@@ -2,20 +2,9 @@ import React from 'react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { render } from '@testing-library/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { PhaseBanner } from '../PhaseBanner'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
it('properly renders alpha banner', async () => {
const { queryByText } = render(
diff --git a/frontend/src/app/__tests__/PrivatePage.test.js b/frontend/src/app/__tests__/PrivatePage.test.js
index 0b5f5aafa6..6913607607 100644
--- a/frontend/src/app/__tests__/PrivatePage.test.js
+++ b/frontend/src/app/__tests__/PrivatePage.test.js
@@ -2,25 +2,12 @@ import React from 'react'
import { render } from '@testing-library/react'
import { createMemoryRouter, RouterProvider } from 'react-router-dom'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
import { MockedProvider } from '@apollo/client/testing'
-import { en } from 'make-plural/plurals'
-
import { PrivatePage } from '../PrivatePage'
-
import { UserVarProvider } from '../../utilities/userState'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
describe('', () => {
describe('when a userName is defined', () => {
it('executes its child as a function', async () => {
diff --git a/frontend/src/app/__tests__/ReadGuidancePage.test.js b/frontend/src/app/__tests__/ReadGuidancePage.test.js
index 0f9c919045..5d3ddd8ce2 100644
--- a/frontend/src/app/__tests__/ReadGuidancePage.test.js
+++ b/frontend/src/app/__tests__/ReadGuidancePage.test.js
@@ -4,24 +4,11 @@ import { MemoryRouter } from 'react-router-dom'
import { cleanup, render, waitFor } from '@testing-library/react'
import { MockedProvider } from '@apollo/client/testing'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import ReadGuidancePage from '../ReadGuidancePage'
-
import { UserVarProvider } from '../../utilities/userState'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
describe('', () => {
afterEach(cleanup)
@@ -45,8 +32,6 @@ describe('', () => {
,
)
- await waitFor(() =>
- expect(getByText('Getting Started')).toBeInTheDocument(),
- )
+ await waitFor(() => expect(getByText('Getting Started')).toBeInTheDocument())
})
})
diff --git a/frontend/src/app/__tests__/SlideMessage.test.js b/frontend/src/app/__tests__/SlideMessage.test.js
index 9becc420b8..6a5c0f6121 100644
--- a/frontend/src/app/__tests__/SlideMessage.test.js
+++ b/frontend/src/app/__tests__/SlideMessage.test.js
@@ -2,25 +2,13 @@ import React from 'react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { cleanup, render } from '@testing-library/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import { MemoryRouter } from 'react-router-dom'
import { makeVar } from '@apollo/client'
-
import { SlideMessage } from '../SlideMessage'
-
import { UserVarProvider } from '../../utilities/userState'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
afterEach(cleanup)
diff --git a/frontend/src/app/__tests__/TopBanner.test.js b/frontend/src/app/__tests__/TopBanner.test.js
index 024028b1ae..6522ef27af 100644
--- a/frontend/src/app/__tests__/TopBanner.test.js
+++ b/frontend/src/app/__tests__/TopBanner.test.js
@@ -2,27 +2,15 @@ import React from 'react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { cleanup, fireEvent, render, waitFor } from '@testing-library/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import { MemoryRouter } from 'react-router-dom'
import { makeVar } from '@apollo/client'
-
import { TopBanner } from '../TopBanner'
-
import { UserVarProvider } from '../../utilities/userState'
import { SIGN_OUT } from '../../graphql/mutations'
import { TourProvider } from '../../userOnboarding/contexts/TourContext'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
afterEach(cleanup)
diff --git a/frontend/src/app/__tests__/withSuperAdmin.test.js b/frontend/src/app/__tests__/withSuperAdmin.test.js
index 484ae75e5a..df388630ef 100644
--- a/frontend/src/app/__tests__/withSuperAdmin.test.js
+++ b/frontend/src/app/__tests__/withSuperAdmin.test.js
@@ -4,8 +4,7 @@ import { MockedProvider } from '@apollo/client/testing'
import withSuperAdmin from '../withSuperAdmin'
import { IS_USER_SUPER_ADMIN } from '../../graphql/queries'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-import { en } from 'make-plural/plurals'
+import { i18n } from '@lingui/core'
import { UserVarProvider } from '../../utilities/userState'
import { makeVar } from '@apollo/client'
@@ -36,16 +35,6 @@ const mocks = [
},
]
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
describe('withSuperAdmin', () => {
it('renders the component if the user is a super admin', async () => {
const SuperAdminComponent = withSuperAdmin(MockComponent)
diff --git a/frontend/src/auth/CreateUserPage.js b/frontend/src/auth/CreateUserPage.js
index ee2ee41087..19455ccf15 100644
--- a/frontend/src/auth/CreateUserPage.js
+++ b/frontend/src/auth/CreateUserPage.js
@@ -3,7 +3,8 @@ import { Box, Button, Heading, Stack, Text, useToast, Checkbox, Link } from '@ch
import { useMutation } from '@apollo/client'
import { Link as RouteLink, useParams, useNavigate, useLocation } from 'react-router-dom'
import { Formik } from 'formik'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { ExternalLinkIcon } from '@chakra-ui/icons'
import { EmailField } from '../components/fields/EmailField'
diff --git a/frontend/src/auth/EmailValidationPage.js b/frontend/src/auth/EmailValidationPage.js
index bcc616b22f..70dddf2d30 100644
--- a/frontend/src/auth/EmailValidationPage.js
+++ b/frontend/src/auth/EmailValidationPage.js
@@ -1,5 +1,5 @@
import React, { useEffect, useState } from 'react'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
import { Button, Divider, Stack, Text } from '@chakra-ui/react'
import {
ArrowForwardIcon,
diff --git a/frontend/src/auth/ForgotPasswordPage.js b/frontend/src/auth/ForgotPasswordPage.js
index 73f2c63b6a..100dca746e 100644
--- a/frontend/src/auth/ForgotPasswordPage.js
+++ b/frontend/src/auth/ForgotPasswordPage.js
@@ -1,5 +1,6 @@
import React from 'react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { Box, Button, Heading, Stack, Text, useToast } from '@chakra-ui/react'
import { object, string } from 'yup'
import { Formik } from 'formik'
diff --git a/frontend/src/auth/LanguageSelect.js b/frontend/src/auth/LanguageSelect.js
index c34e8c7067..2cb74cade6 100644
--- a/frontend/src/auth/LanguageSelect.js
+++ b/frontend/src/auth/LanguageSelect.js
@@ -7,7 +7,8 @@ import {
FormLabel,
Select,
} from '@chakra-ui/react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
export function LanguageSelect({ name, ...props }) {
const [field, meta] = useField(name)
diff --git a/frontend/src/auth/ResetPasswordPage.js b/frontend/src/auth/ResetPasswordPage.js
index 5501a074be..481c279987 100644
--- a/frontend/src/auth/ResetPasswordPage.js
+++ b/frontend/src/auth/ResetPasswordPage.js
@@ -1,5 +1,6 @@
import React from 'react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { Box, Button, Heading, Text, useToast } from '@chakra-ui/react'
import { object, ref, string } from 'yup'
import { Formik } from 'formik'
diff --git a/frontend/src/auth/SignInPage.js b/frontend/src/auth/SignInPage.js
index cd16184e92..5a384b357c 100644
--- a/frontend/src/auth/SignInPage.js
+++ b/frontend/src/auth/SignInPage.js
@@ -1,5 +1,6 @@
import React from 'react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { Box, Button, Checkbox, Flex, Heading, Link, Text, useToast } from '@chakra-ui/react'
import { Link as RouteLink, useNavigate, useLocation } from 'react-router-dom'
import { useMutation } from '@apollo/client'
diff --git a/frontend/src/auth/TwoFactorAuthenticatePage.js b/frontend/src/auth/TwoFactorAuthenticatePage.js
index f695d89fd0..ee4bcf33fb 100644
--- a/frontend/src/auth/TwoFactorAuthenticatePage.js
+++ b/frontend/src/auth/TwoFactorAuthenticatePage.js
@@ -1,5 +1,6 @@
import React from 'react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useLingui } from '@lingui/react'
import { Box, Button, Heading, Stack, Text, useToast } from '@chakra-ui/react'
import { useNavigate, useLocation, useParams } from 'react-router-dom'
diff --git a/frontend/src/auth/__tests__/CreateUserPage.test.js b/frontend/src/auth/__tests__/CreateUserPage.test.js
index cd61ff9740..d5b134c7aa 100644
--- a/frontend/src/auth/__tests__/CreateUserPage.test.js
+++ b/frontend/src/auth/__tests__/CreateUserPage.test.js
@@ -4,26 +4,13 @@ import { createMemoryRouter, MemoryRouter, RouterProvider } from 'react-router-d
import { fireEvent, render, waitFor } from '@testing-library/react'
import { MockedProvider } from '@apollo/client/testing'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
import userEvent from '@testing-library/user-event'
-
import CreateUserPage from '../CreateUserPage'
-
import { UserVarProvider } from '../../utilities/userState'
import { SIGN_UP } from '../../graphql/mutations'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
const mocks = [
{
request: {
diff --git a/frontend/src/auth/__tests__/EmailValidationPage.test.js b/frontend/src/auth/__tests__/EmailValidationPage.test.js
index aa172d0a85..a6dddc19fc 100644
--- a/frontend/src/auth/__tests__/EmailValidationPage.test.js
+++ b/frontend/src/auth/__tests__/EmailValidationPage.test.js
@@ -3,25 +3,13 @@ import { theme, ChakraProvider } from '@chakra-ui/react'
import { createMemoryRouter, RouterProvider } from 'react-router-dom'
import { render, waitFor } from '@testing-library/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import EmailValidationPage from '../EmailValidationPage'
import { UserVarProvider } from '../../utilities/userState'
import { VERIFY_ACCOUNT } from '../../graphql/mutations'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
const successMocks = [
{
request: {
diff --git a/frontend/src/auth/__tests__/ForgotPasswordPage.test.js b/frontend/src/auth/__tests__/ForgotPasswordPage.test.js
index 2e95c88c84..a4f32736ea 100644
--- a/frontend/src/auth/__tests__/ForgotPasswordPage.test.js
+++ b/frontend/src/auth/__tests__/ForgotPasswordPage.test.js
@@ -3,13 +3,10 @@ import { theme, ChakraProvider } from '@chakra-ui/react'
import { createMemoryRouter, RouterProvider } from 'react-router-dom'
import { fireEvent, render, waitFor } from '@testing-library/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import ForgotPasswordPage from '../../auth/ForgotPasswordPage'
-
import { UserVarProvider } from '../../utilities/userState'
import { SEND_PASSWORD_RESET_LINK } from '../../graphql/mutations'
@@ -30,16 +27,6 @@ const mocks = [
},
]
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
describe('', () => {
describe('given no input', () => {
describe('when onBlur fires', () => {
diff --git a/frontend/src/auth/__tests__/LanguageSelect.test.js b/frontend/src/auth/__tests__/LanguageSelect.test.js
index a54cbd0e17..c8c1dcd84b 100644
--- a/frontend/src/auth/__tests__/LanguageSelect.test.js
+++ b/frontend/src/auth/__tests__/LanguageSelect.test.js
@@ -3,20 +3,9 @@ import { render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { Formik } from 'formik'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { LanguageSelect } from '../LanguageSelect'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
describe('by default', () => {
it('renders language selection', async () => {
diff --git a/frontend/src/auth/__tests__/ResetPasswordPage.test.js b/frontend/src/auth/__tests__/ResetPasswordPage.test.js
index 66ea594d54..2e258e9f95 100644
--- a/frontend/src/auth/__tests__/ResetPasswordPage.test.js
+++ b/frontend/src/auth/__tests__/ResetPasswordPage.test.js
@@ -3,25 +3,13 @@ import { theme, ChakraProvider } from '@chakra-ui/react'
import { createMemoryRouter, RouterProvider } from 'react-router-dom'
import { fireEvent, render, waitFor } from '@testing-library/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import ResetPasswordPage from '../ResetPasswordPage'
import { UserVarProvider } from '../../utilities/userState'
import { RESET_PASSWORD } from '../../graphql/mutations'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
const failMocks = [
{
request: {
diff --git a/frontend/src/auth/__tests__/SignInPage.test.js b/frontend/src/auth/__tests__/SignInPage.test.js
index f36f1d39c2..952683f55d 100644
--- a/frontend/src/auth/__tests__/SignInPage.test.js
+++ b/frontend/src/auth/__tests__/SignInPage.test.js
@@ -4,24 +4,12 @@ import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
import { fireEvent, render, waitFor } from '@testing-library/react'
import { MockedProvider } from '@apollo/client/testing'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import SignInPage from '../SignInPage'
import { UserVarProvider } from '../../utilities/userState'
import { SIGN_IN } from '../../graphql/mutations'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
describe('', () => {
describe('when the email field is empty', () => {
it('displays an error message', async () => {
diff --git a/frontend/src/auth/__tests__/TwoFactorAuthenticatePage.test.js b/frontend/src/auth/__tests__/TwoFactorAuthenticatePage.test.js
index 8679926f7c..01152ef83d 100644
--- a/frontend/src/auth/__tests__/TwoFactorAuthenticatePage.test.js
+++ b/frontend/src/auth/__tests__/TwoFactorAuthenticatePage.test.js
@@ -4,25 +4,12 @@ import { createMemoryRouter, RouterProvider } from 'react-router-dom'
import { fireEvent, render, waitFor } from '@testing-library/react'
import { MockedProvider } from '@apollo/client/testing'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import TwoFactorAuthenticatePage from '../TwoFactorAuthenticatePage'
-
import { UserVarProvider } from '../../utilities/userState'
import { AUTHENTICATE } from '../../graphql/mutations'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
describe('', () => {
it('renders correctly', async () => {
const router = createMemoryRouter(
diff --git a/frontend/src/browserconfig.xml b/frontend/src/browserconfig.xml
deleted file mode 100644
index c987d4ae9f..0000000000
--- a/frontend/src/browserconfig.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
- #2e2e40
-
-
-
diff --git a/frontend/src/components/AffiliationFilterSwitch.js b/frontend/src/components/AffiliationFilterSwitch.js
index c7ce20f7b5..9ba995b2c2 100644
--- a/frontend/src/components/AffiliationFilterSwitch.js
+++ b/frontend/src/components/AffiliationFilterSwitch.js
@@ -2,7 +2,7 @@ import React from 'react'
import { Flex, Switch, Tooltip } from '@chakra-ui/react'
import { bool, func } from 'prop-types'
import { UserIcon } from '../theme/Icons'
-import { t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
import { useUserVar } from '../utilities/userState'
export function AffiliationFilterSwitch({ isAffiliated, setIsAffiliated, resetToFirstPage }) {
diff --git a/frontend/src/components/ErrorFallbackMessage.js b/frontend/src/components/ErrorFallbackMessage.js
index 1a5ba61e76..e98433b481 100644
--- a/frontend/src/components/ErrorFallbackMessage.js
+++ b/frontend/src/components/ErrorFallbackMessage.js
@@ -1,7 +1,7 @@
import React from 'react'
import { Box, Divider, SimpleGrid, Stack, Text } from '@chakra-ui/react'
import { object } from 'prop-types'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
export function ErrorFallbackMessage({ error }) {
return (
diff --git a/frontend/src/components/ExportButton.js b/frontend/src/components/ExportButton.js
index 6716fae2c7..24d7a76410 100644
--- a/frontend/src/components/ExportButton.js
+++ b/frontend/src/components/ExportButton.js
@@ -13,7 +13,8 @@ import {
} from '@chakra-ui/react'
import { arrayOf, object, string, func } from 'prop-types'
import { json2csvAsync } from 'json-2-csv'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { any } from 'prop-types'
import { Popover, PopoverTrigger, PopoverContent, PopoverArrow, PopoverCloseButton } from '@chakra-ui/react'
import { ABTestWrapper, ABTestVariant } from '../app/ABTestWrapper'
diff --git a/frontend/src/components/InfoPanel.js b/frontend/src/components/InfoPanel.js
index ef70cbc7d0..edd371bad0 100644
--- a/frontend/src/components/InfoPanel.js
+++ b/frontend/src/components/InfoPanel.js
@@ -1,6 +1,7 @@
import React from 'react'
import { any, bool, func, string } from 'prop-types'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import {
Box,
Drawer,
diff --git a/frontend/src/components/LoadingMessage.js b/frontend/src/components/LoadingMessage.js
index f833faed38..ce927703be 100644
--- a/frontend/src/components/LoadingMessage.js
+++ b/frontend/src/components/LoadingMessage.js
@@ -1,7 +1,7 @@
import React from 'react'
import { Spinner, Stack, Text } from '@chakra-ui/react'
import { any } from 'prop-types'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
export function LoadingMessage({ children, ...rest }) {
return (
diff --git a/frontend/src/components/MonthSelect.js b/frontend/src/components/MonthSelect.js
index 5465b80b60..ee6df5fbfd 100644
--- a/frontend/src/components/MonthSelect.js
+++ b/frontend/src/components/MonthSelect.js
@@ -1,7 +1,7 @@
import { Select } from '@chakra-ui/react'
import { any, func } from 'prop-types'
import React from 'react'
-import { t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
export function MonthSelect({ selectedValue, handleChange, ...props }) {
const currentDate = new Date()
diff --git a/frontend/src/components/ReactTableGlobalFilter.js b/frontend/src/components/ReactTableGlobalFilter.js
index 13273173e1..36b76aa5ca 100644
--- a/frontend/src/components/ReactTableGlobalFilter.js
+++ b/frontend/src/components/ReactTableGlobalFilter.js
@@ -9,7 +9,8 @@ import {
Text,
} from '@chakra-ui/react'
import { SearchIcon } from '@chakra-ui/icons'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useLingui } from '@lingui/react'
export function ReactTableGlobalFilter({
@@ -35,7 +36,6 @@ export function ReactTableGlobalFilter({
>
Search:
-
@@ -52,7 +52,7 @@ export function ReactTableGlobalFilter({
/>
- )
+ );
}
ReactTableGlobalFilter.propTypes = {
diff --git a/frontend/src/components/RelayPaginationControls.js b/frontend/src/components/RelayPaginationControls.js
index 9ed7c3566a..40e9cf0e72 100644
--- a/frontend/src/components/RelayPaginationControls.js
+++ b/frontend/src/components/RelayPaginationControls.js
@@ -1,5 +1,5 @@
import { Select, Flex, Text, IconButton, Divider } from '@chakra-ui/react'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
import React from 'react'
import { array, bool, func, number } from 'prop-types'
import { ChevronLeftIcon, ChevronRightIcon } from '@chakra-ui/icons'
diff --git a/frontend/src/components/SearchBox.js b/frontend/src/components/SearchBox.js
index 6f9e8ee202..d6451f23c5 100644
--- a/frontend/src/components/SearchBox.js
+++ b/frontend/src/components/SearchBox.js
@@ -11,7 +11,7 @@ import {
Stack,
Text,
} from '@chakra-ui/react'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
import { ArrowDownIcon, ArrowUpIcon, SearchIcon } from '@chakra-ui/icons'
import { RelayPaginationControls } from './RelayPaginationControls'
import { array, bool, element, func, number, string } from 'prop-types'
diff --git a/frontend/src/components/TrackerAccordionItem.js b/frontend/src/components/TrackerAccordionItem.js
index 4e1c4350e1..7d4a716467 100644
--- a/frontend/src/components/TrackerAccordionItem.js
+++ b/frontend/src/components/TrackerAccordionItem.js
@@ -9,7 +9,7 @@ import {
Flex,
Spacer,
} from '@chakra-ui/react'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
export const TrackerAccordionItem = ({
buttonLabel,
diff --git a/frontend/src/components/TrackerTable.js b/frontend/src/components/TrackerTable.js
index fb2232e5a6..e6cb531433 100644
--- a/frontend/src/components/TrackerTable.js
+++ b/frontend/src/components/TrackerTable.js
@@ -33,7 +33,8 @@ import {
ChevronRightIcon,
ExternalLinkIcon,
} from '@chakra-ui/icons'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useLingui } from '@lingui/react'
import { ExportButton } from './ExportButton'
import { InfoButton } from './InfoPanel'
@@ -142,7 +143,6 @@ export function TrackerTable({ ...props }) {
/>
)}
-
{headerGroups.map((headerGroup) => (
@@ -204,7 +204,6 @@ export function TrackerTable({ ...props }) {
})}
-
{frontendPagination && (
)}
- )
+ );
}
TrackerTable.propTypes = {
diff --git a/frontend/src/components/UserCard.js b/frontend/src/components/UserCard.js
index c0fbc146ed..679fb3f0de 100644
--- a/frontend/src/components/UserCard.js
+++ b/frontend/src/components/UserCard.js
@@ -1,16 +1,17 @@
import React from 'react'
-import { Badge, Grid, Text } from '@chakra-ui/react'
-import { string } from 'prop-types'
+import { Badge, Flex, Text } from '@chakra-ui/react'
+import { any, string } from 'prop-types'
-export function UserCard({ userName, displayName, role, ...props }) {
+export function UserCard({ userName, displayName, role, children, ...props }) {
return (
-
-
- {userName}
+
+ {children}
+
+ {displayName} ({userName})
- {displayName}
{role && (
)}
-
+
)
}
@@ -28,4 +29,5 @@ UserCard.propTypes = {
userName: string.isRequired,
displayName: string,
role: string,
+ children: any,
}
diff --git a/frontend/src/components/__tests__/Dropdown.test.js b/frontend/src/components/__tests__/Dropdown.test.js
index 3657905d25..0a76941b55 100644
--- a/frontend/src/components/__tests__/Dropdown.test.js
+++ b/frontend/src/components/__tests__/Dropdown.test.js
@@ -2,25 +2,13 @@ import React from 'react'
import { UserVarProvider } from '../../utilities/userState'
import { theme, ThemeProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import { waitFor, render, fireEvent } from '@testing-library/react'
import { MemoryRouter } from 'react-router-dom'
import { makeVar } from '@apollo/client'
-
import { Dropdown } from '../Dropdown'
import userEvent from '@testing-library/user-event'
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
const handleSearch = jest.fn()
describe('', () => {
diff --git a/frontend/src/components/__tests__/ExportButton.test.js b/frontend/src/components/__tests__/ExportButton.test.js
index a68dd6b3fc..df32cf281e 100644
--- a/frontend/src/components/__tests__/ExportButton.test.js
+++ b/frontend/src/components/__tests__/ExportButton.test.js
@@ -2,24 +2,13 @@ import React from 'react'
import { UserVarProvider } from '../../utilities/userState'
import { theme, ThemeProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import { waitFor, render, fireEvent } from '@testing-library/react'
import { MemoryRouter } from 'react-router-dom'
import { makeVar } from '@apollo/client'
-
import { ExportButton } from '../ExportButton'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
const mocks = [
{
key: 'value1',
diff --git a/frontend/src/components/__tests__/InfoPanel.test.js b/frontend/src/components/__tests__/InfoPanel.test.js
index f9288cef9d..2cb99a22a8 100644
--- a/frontend/src/components/__tests__/InfoPanel.test.js
+++ b/frontend/src/components/__tests__/InfoPanel.test.js
@@ -2,21 +2,9 @@ import React from 'react'
import { render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-import { en } from 'make-plural/plurals'
-
+import { i18n } from '@lingui/core'
import { InfoButton, InfoBox, InfoPanel } from '../InfoPanel'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
describe('', () => {
it('successfully renders with mocked data', async () => {
const isOpen = true
diff --git a/frontend/src/components/__tests__/MonthSelect.test.js b/frontend/src/components/__tests__/MonthSelect.test.js
index 364b8798e7..895dd37bf0 100644
--- a/frontend/src/components/__tests__/MonthSelect.test.js
+++ b/frontend/src/components/__tests__/MonthSelect.test.js
@@ -2,24 +2,12 @@ import React from 'react'
import { UserVarProvider } from '../../utilities/userState'
import { theme, ThemeProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import { waitFor, render, fireEvent } from '@testing-library/react'
import { MemoryRouter } from 'react-router-dom'
import { makeVar } from '@apollo/client'
-
import { MonthSelect } from '../MonthSelect'
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
const handleChange = jest.fn()
describe('', () => {
diff --git a/frontend/src/components/__tests__/TrackerTable.test.js b/frontend/src/components/__tests__/TrackerTable.test.js
index 26eb6a8523..255d447577 100644
--- a/frontend/src/components/__tests__/TrackerTable.test.js
+++ b/frontend/src/components/__tests__/TrackerTable.test.js
@@ -2,24 +2,11 @@ import React from 'react'
import { ChakraProvider, theme } from '@chakra-ui/react'
import { render, waitFor } from '@testing-library/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-import { en } from 'make-plural/plurals'
-
+import { i18n } from '@lingui/core'
import { TrackerTable } from '../TrackerTable'
-
import { rawDmarcReportSummaryTableColumns } from '../../fixtures/dmarcReportSummaryTable'
import userEvent from '@testing-library/user-event'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
Object.defineProperty(window, 'matchMedia', {
writable: true,
value: jest.fn().mockImplementation((query) => ({
diff --git a/frontend/src/components/__tests__/UserCard.test.js b/frontend/src/components/__tests__/UserCard.test.js
index a75a8d35fd..0de9cf99c5 100644
--- a/frontend/src/components/__tests__/UserCard.test.js
+++ b/frontend/src/components/__tests__/UserCard.test.js
@@ -4,20 +4,9 @@ import { MemoryRouter } from 'react-router-dom'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
import { MockedProvider } from '@apollo/client/testing'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { UserCard } from '../UserCard'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
it('renders', async () => {
const { getByText } = render(
diff --git a/frontend/src/components/fields/AuthenticateField.js b/frontend/src/components/fields/AuthenticateField.js
index 9029ef8207..6813babaff 100644
--- a/frontend/src/components/fields/AuthenticateField.js
+++ b/frontend/src/components/fields/AuthenticateField.js
@@ -1,6 +1,6 @@
import React from 'react'
import { func, object, oneOfType, shape, string } from 'prop-types'
-import { t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
import { Field } from 'formik'
import { FormControl, FormLabel, HStack, PinInput, PinInputField } from '@chakra-ui/react'
@@ -31,12 +31,12 @@ function AuthenticateField({ name = 'twoFactorCode', sendMethod }) {
name={name}
onChange={(val) => form.setFieldValue(field.name, val)}
>
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/frontend/src/components/fields/DisplayNameField.js b/frontend/src/components/fields/DisplayNameField.js
index c1621afb9b..379c4943d1 100644
--- a/frontend/src/components/fields/DisplayNameField.js
+++ b/frontend/src/components/fields/DisplayNameField.js
@@ -1,6 +1,6 @@
import React from 'react'
import { func, object, oneOfType, shape } from 'prop-types'
-import { t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
import { PersonIcon } from '../../theme/Icons'
import { FormField } from './FormField'
diff --git a/frontend/src/components/fields/DomainField.js b/frontend/src/components/fields/DomainField.js
index 40514d8aad..f22248cf4e 100644
--- a/frontend/src/components/fields/DomainField.js
+++ b/frontend/src/components/fields/DomainField.js
@@ -1,13 +1,13 @@
import React from 'react'
import { func, object, oneOfType, shape, string } from 'prop-types'
-import { t } from '@lingui/macro'
+import { t } from '@lingui/core/macro'
import { FormField } from './FormField'
function DomainField({
- name,
- label,
- placeholder,
+ name = 'domainURL',
+ label = t`Domain URL:`,
+ placeholder = t`Domain URL`,
forwardedRef,
inputProps,
...props
@@ -32,12 +32,6 @@ DomainField.propTypes = {
forwardedRef: oneOfType([func, shape({ current: object })]),
}
-DomainField.defaultProps = {
- name: 'domainURL',
- label: t`Domain URL:`,
- placeholder: t`Domain URL`,
-}
-
const withForwardedRef = React.forwardRef((props, ref) => {
return
})
diff --git a/frontend/src/components/fields/EmailField.js b/frontend/src/components/fields/EmailField.js
index db5ada4a70..934c6f472d 100644
--- a/frontend/src/components/fields/EmailField.js
+++ b/frontend/src/components/fields/EmailField.js
@@ -1,6 +1,6 @@
import React from 'react'
import { func, object, oneOfType, shape } from 'prop-types'
-import { t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
import { EmailIcon } from '@chakra-ui/icons'
import { FormField } from './FormField'
diff --git a/frontend/src/components/fields/PasswordConfirmation.js b/frontend/src/components/fields/PasswordConfirmation.js
index 6662794e6c..fded4bc2f3 100644
--- a/frontend/src/components/fields/PasswordConfirmation.js
+++ b/frontend/src/components/fields/PasswordConfirmation.js
@@ -1,6 +1,6 @@
import React from 'react'
import { object, string } from 'prop-types'
-import { t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
import { IconButton, Spinner, Stack } from '@chakra-ui/react'
import { CheckIcon, CloseIcon, LockIcon, ViewIcon, ViewOffIcon } from '@chakra-ui/icons'
diff --git a/frontend/src/components/fields/PasswordField.js b/frontend/src/components/fields/PasswordField.js
index 842d2d771e..b0ef336dcd 100644
--- a/frontend/src/components/fields/PasswordField.js
+++ b/frontend/src/components/fields/PasswordField.js
@@ -1,12 +1,12 @@
import React from 'react'
import { func, object, oneOfType, shape, string } from 'prop-types'
-import { t } from '@lingui/macro'
+import { t } from '@lingui/core/macro'
import { IconButton } from '@chakra-ui/react'
import { LockIcon, ViewIcon, ViewOffIcon } from '@chakra-ui/icons'
import { FormField } from './FormField'
-function PasswordField({ forwardedRef, name, label, inputProps, ...props }) {
+function PasswordField({ forwardedRef, name = 'password', label = t`Password`, inputProps, ...props }) {
const [show, setShow] = React.useState(false)
const handleClick = () => setShow(!show)
@@ -41,11 +41,6 @@ PasswordField.propTypes = {
forwardedRef: oneOfType([func, shape({ current: object })]),
}
-PasswordField.defaultProps = {
- name: 'password',
- label: t`Password:`,
-}
-
const withForwardedRef = React.forwardRef((props, ref) => {
return
})
diff --git a/frontend/src/components/fields/PhoneNumberField.js b/frontend/src/components/fields/PhoneNumberField.js
index 794219174b..d72f995bba 100644
--- a/frontend/src/components/fields/PhoneNumberField.js
+++ b/frontend/src/components/fields/PhoneNumberField.js
@@ -1,6 +1,6 @@
import React from 'react'
import { string } from 'prop-types'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
import { Box, FormControl, FormErrorMessage, FormLabel } from '@chakra-ui/react'
import { useField, useFormikContext } from 'formik'
import PhoneInput from 'react-phone-input-2'
diff --git a/frontend/src/components/fields/__tests__/CreateOrganizationField.test.js b/frontend/src/components/fields/__tests__/CreateOrganizationField.test.js
index fcdde00ae5..7041392b0b 100644
--- a/frontend/src/components/fields/__tests__/CreateOrganizationField.test.js
+++ b/frontend/src/components/fields/__tests__/CreateOrganizationField.test.js
@@ -4,20 +4,9 @@ import { fireEvent, render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { Formik } from 'formik'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { CreateOrganizationField } from '../CreateOrganizationField'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
describe('when validation fails', () => {
it('displays an error message', async () => {
diff --git a/frontend/src/components/fields/__tests__/DisplayNameField.test.js b/frontend/src/components/fields/__tests__/DisplayNameField.test.js
index 9240aa1edb..8c543d5cc0 100644
--- a/frontend/src/components/fields/__tests__/DisplayNameField.test.js
+++ b/frontend/src/components/fields/__tests__/DisplayNameField.test.js
@@ -4,20 +4,9 @@ import { fireEvent, render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { Formik } from 'formik'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { DisplayNameField } from '../DisplayNameField'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
describe('when validation fails', () => {
it('displays an error message', async () => {
diff --git a/frontend/src/components/fields/__tests__/DomainField.test.js b/frontend/src/components/fields/__tests__/DomainField.test.js
index 0acfd355bf..9f160d1191 100644
--- a/frontend/src/components/fields/__tests__/DomainField.test.js
+++ b/frontend/src/components/fields/__tests__/DomainField.test.js
@@ -4,20 +4,9 @@ import { fireEvent, render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { Formik } from 'formik'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { DomainField } from '../DomainField'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
describe('when validation fails', () => {
it('displays an error message', async () => {
diff --git a/frontend/src/components/fields/__tests__/EmailField.test.js b/frontend/src/components/fields/__tests__/EmailField.test.js
index fc5baad989..b61886b7d9 100644
--- a/frontend/src/components/fields/__tests__/EmailField.test.js
+++ b/frontend/src/components/fields/__tests__/EmailField.test.js
@@ -4,20 +4,9 @@ import { fireEvent, render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { Formik } from 'formik'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { EmailField } from '../EmailField'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
describe('when validation fails', () => {
it('displays an error message', async () => {
diff --git a/frontend/src/components/fields/__tests__/PasswordConfirmation.test.js b/frontend/src/components/fields/__tests__/PasswordConfirmation.test.js
index 5e29fbd5d4..670839ac9d 100644
--- a/frontend/src/components/fields/__tests__/PasswordConfirmation.test.js
+++ b/frontend/src/components/fields/__tests__/PasswordConfirmation.test.js
@@ -4,20 +4,9 @@ import { render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { Formik } from 'formik'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { PasswordConfirmation } from '../PasswordConfirmation'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
it('renders within a wrapper', async () => {
const validationSchema = object().shape({
diff --git a/frontend/src/components/fields/__tests__/PasswordField.test.js b/frontend/src/components/fields/__tests__/PasswordField.test.js
index 54bbff6ca8..94c2b1f223 100644
--- a/frontend/src/components/fields/__tests__/PasswordField.test.js
+++ b/frontend/src/components/fields/__tests__/PasswordField.test.js
@@ -4,24 +4,14 @@ import { fireEvent, render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { Formik } from 'formik'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import userEvent from '@testing-library/user-event'
-
import { PasswordField } from '../PasswordField'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
describe('when validation fails', () => {
it('displays an error message', async () => {
+ i18n.activate('en')
const validationSchema = object().shape({
password: string().required('sadness'),
})
@@ -35,9 +25,7 @@ describe('', () => {
password: '',
}}
>
- {() => (
-
- )}
+ {() => }
,
@@ -63,9 +51,7 @@ describe('', () => {
password: '',
}}
>
- {() => (
-
- )}
+ {() => }
,
diff --git a/frontend/src/createOrganization/CreateOrganizationPage.js b/frontend/src/createOrganization/CreateOrganizationPage.js
index 39c346412f..fb6649316f 100644
--- a/frontend/src/createOrganization/CreateOrganizationPage.js
+++ b/frontend/src/createOrganization/CreateOrganizationPage.js
@@ -1,6 +1,7 @@
import React from 'react'
-import { Box, Button, Flex, SimpleGrid, Heading, Stack, useToast, useDisclosure } from '@chakra-ui/react'
-import { t, Trans } from '@lingui/macro'
+import { Box, Button, Flex, SimpleGrid, Heading, Stack, useToast, Switch, Badge } from '@chakra-ui/react'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useMutation } from '@apollo/client'
import { Formik } from 'formik'
import { Link as RouteLink, useNavigate } from 'react-router-dom'
@@ -8,18 +9,18 @@ import { useLingui } from '@lingui/react'
import { CreateOrganizationField } from '../components/fields/CreateOrganizationField'
-import { InfoButton, InfoBox, InfoPanel } from '../components/InfoPanel'
import { LoadingMessage } from '../components/LoadingMessage'
import { getRequirement, schemaToValidation } from '../utilities/fieldRequirements'
import { CREATE_ORGANIZATION } from '../graphql/mutations'
+import { FormField } from '../components/fields/FormField'
+import { CheckCircleIcon } from '@chakra-ui/icons'
+import withSuperAdmin from '../app/withSuperAdmin'
export default function CreateOrganizationPage() {
const toast = useToast()
const navigate = useNavigate()
const { i18n } = useLingui()
- const { isOpen, onToggle } = useDisclosure()
-
const fieldRequirement = getRequirement('field')
const acronymRequirement = getRequirement('acronym').required(i18n._(t`This field cannot be empty`))
@@ -28,12 +29,6 @@ export default function CreateOrganizationPage() {
nameFR: fieldRequirement,
acronymEN: acronymRequirement,
acronymFR: acronymRequirement,
- cityEN: fieldRequirement,
- cityFR: fieldRequirement,
- provinceEN: fieldRequirement,
- provinceFR: fieldRequirement,
- countryEN: fieldRequirement,
- countryFR: fieldRequirement,
})
const [createOrganization, { loading }] = useMutation(CREATE_ORGANIZATION, {
@@ -92,12 +87,8 @@ export default function CreateOrganizationPage() {
nameFR: '',
acronymEN: '',
acronymFR: '',
- cityEN: '',
- cityFR: '',
- provinceEN: '',
- provinceFR: '',
- countryEN: '',
- countryFR: '',
+ externalId: '',
+ verified: false,
}}
onSubmit={async (values) => {
createOrganization({
@@ -106,21 +97,13 @@ export default function CreateOrganizationPage() {
nameFR: values.nameFR,
acronymEN: values.acronymEN,
acronymFR: values.acronymFR,
- zoneEN: '',
- zoneFR: '',
- sectorEN: '',
- sectorFR: '',
- countryEN: values.countryEN,
- countryFR: values.countryFR,
- provinceEN: values.provinceEN,
- provinceFR: values.provinceFR,
- cityEN: values.cityEN,
- cityFR: values.cityFR,
+ externalId: values.externalId,
+ verified: values.verified,
},
})
}}
>
- {({ handleSubmit, isSubmitting }) => (
+ {({ handleSubmit, isSubmitting, handleChange }) => (
)}
-
)
}
+
+const VerifiedSwitch = withSuperAdmin(({ handleChange }) => {
+ return (
+
+
+
+
+
+ Verified
+
+
+
+
+
+ )
+})
diff --git a/frontend/src/createOrganization/__tests__/CreateOrganizationPage.test.js b/frontend/src/createOrganization/__tests__/CreateOrganizationPage.test.js
index 19fcc806ea..6906ff0628 100644
--- a/frontend/src/createOrganization/__tests__/CreateOrganizationPage.test.js
+++ b/frontend/src/createOrganization/__tests__/CreateOrganizationPage.test.js
@@ -4,26 +4,13 @@ import { MemoryRouter } from 'react-router-dom'
import { fireEvent, render, waitFor } from '@testing-library/react'
import { MockedProvider } from '@apollo/client/testing'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
import userEvent from '@testing-library/user-event'
-
import CreateOrganizationPage from '../CreateOrganizationPage'
-
import { UserVarProvider } from '../../utilities/userState'
import { CREATE_ORGANIZATION } from '../../graphql/mutations'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
const mocks = [
{
request: {
@@ -33,16 +20,8 @@ const mocks = [
nameFR: 'Test Org Name FR',
acronymEN: 'TESTACREN',
acronymFR: 'TESTACRFR',
- cityEN: 'Test Org City EN',
- cityFR: 'Test Org City FR',
- provinceEN: 'Test Org Province EN',
- provinceFR: 'Test Org Province FR',
- countryEN: 'Test Org Country EN',
- countryFR: 'Test Org Country FR',
- zoneEN: '',
- zoneFR: '',
- sectorEN: '',
- sectorFR: '',
+ externalId: 'EXT123',
+ verified: false,
},
},
result: {
@@ -62,9 +41,7 @@ describe('', () => {
it('renders', async () => {
const { getByText } = render(
-
+
@@ -144,8 +121,7 @@ describe('', () => {
await waitFor(() => {
fireEvent.change(acronymEN, {
target: {
- value:
- 'THIS_ACRONYM_IS_OVER_FIFTY_CHARACTERS_WHICH_MAKES_IT_INVALID',
+ value: 'THIS_ACRONYM_IS_OVER_FIFTY_CHARACTERS_WHICH_MAKES_IT_INVALID',
},
})
})
@@ -189,22 +165,7 @@ describe('', () => {
name: /Acronym \(French\)/,
})
- const cityENInput = getByRole('textbox', { name: /City \(English\)/ })
- const cityFRInput = getByRole('textbox', { name: /City \(French\)/ })
-
- const provinceENInput = getByRole('textbox', {
- name: /Province \(English\)/,
- })
- const provinceFRInput = getByRole('textbox', {
- name: /Province \(French\)/,
- })
-
- const countryENInput = getByRole('textbox', {
- name: /Country \(English\)/,
- })
- const countryFRInput = getByRole('textbox', {
- name: /Country \(French\)/,
- })
+ const externalIdInput = getByRole('textbox', { name: /External ID/ })
userEvent.type(nameENInput, 'Test Org Name EN')
userEvent.type(nameFRInput, 'Test Org Name FR')
@@ -212,14 +173,7 @@ describe('', () => {
userEvent.type(acronymENInput, 'TESTACREN')
userEvent.type(acronymFRInput, 'TESTACRFR')
- userEvent.type(cityENInput, 'Test Org City EN')
- userEvent.type(cityFRInput, 'Test Org City FR')
-
- userEvent.type(provinceENInput, 'Test Org Province EN')
- userEvent.type(provinceFRInput, 'Test Org Province FR')
-
- userEvent.type(countryENInput, 'Test Org Country EN')
- userEvent.type(countryFRInput, 'Test Org Country FR')
+ userEvent.type(externalIdInput, 'EXT123')
const createOrganizationButton = getByRole('button', {
name: /Create Organization/,
@@ -241,16 +195,8 @@ describe('', () => {
nameFR: 'Test Org Name FR',
acronymEN: 'TESTACREN',
acronymFR: 'TESTACRFR',
- cityEN: 'Test Org City EN',
- cityFR: 'Test Org City FR',
- provinceEN: 'Test Org Province EN',
- provinceFR: 'Test Org Province FR',
- countryEN: 'Test Org Country EN',
- countryFR: 'Test Org Country FR',
- zoneEN: '',
- zoneFR: '',
- sectorEN: '',
- sectorFR: '',
+ externalId: '',
+ verified: false,
},
},
result: {
@@ -300,22 +246,7 @@ describe('', () => {
name: /Acronym \(French\)/,
})
- const cityENInput = getByRole('textbox', { name: /City \(English\)/ })
- const cityFRInput = getByRole('textbox', { name: /City \(French\)/ })
-
- const provinceENInput = getByRole('textbox', {
- name: /Province \(English\)/,
- })
- const provinceFRInput = getByRole('textbox', {
- name: /Province \(French\)/,
- })
-
- const countryENInput = getByRole('textbox', {
- name: /Country \(English\)/,
- })
- const countryFRInput = getByRole('textbox', {
- name: /Country \(French\)/,
- })
+ const externalIdInput = getByRole('textbox', { name: /External ID/ })
userEvent.type(nameENInput, 'Test Org Name EN')
userEvent.type(nameFRInput, 'Test Org Name FR')
@@ -323,14 +254,7 @@ describe('', () => {
userEvent.type(acronymENInput, 'TESTACREN')
userEvent.type(acronymFRInput, 'TESTACRFR')
- userEvent.type(cityENInput, 'Test Org City EN')
- userEvent.type(cityFRInput, 'Test Org City FR')
-
- userEvent.type(provinceENInput, 'Test Org Province EN')
- userEvent.type(provinceFRInput, 'Test Org Province FR')
-
- userEvent.type(countryENInput, 'Test Org Country EN')
- userEvent.type(countryFRInput, 'Test Org Country FR')
+ userEvent.type(externalIdInput, '')
const createOrganizationButton = getByRole('button', {
name: /Create Organization/,
diff --git a/frontend/src/dmarc/DmarcByDomainPage.js b/frontend/src/dmarc/DmarcByDomainPage.js
index c2c0a7af62..1ae2b939e0 100644
--- a/frontend/src/dmarc/DmarcByDomainPage.js
+++ b/frontend/src/dmarc/DmarcByDomainPage.js
@@ -15,7 +15,8 @@ import {
useDisclosure,
} from '@chakra-ui/react'
import { LinkIcon, SearchIcon } from '@chakra-ui/icons'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useLingui } from '@lingui/react'
import { ErrorBoundary } from 'react-error-boundary'
import { Link as RouteLink } from 'react-router-dom'
diff --git a/frontend/src/dmarc/DmarcReportPage.js b/frontend/src/dmarc/DmarcReportPage.js
index 2db5e3ee72..7868adea5a 100644
--- a/frontend/src/dmarc/DmarcReportPage.js
+++ b/frontend/src/dmarc/DmarcReportPage.js
@@ -13,7 +13,8 @@ import {
useDisclosure,
} from '@chakra-ui/react'
import { LinkIcon } from '@chakra-ui/icons'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useLingui } from '@lingui/react'
import { number } from 'prop-types'
import { Link as RouteLink, useNavigate, useParams } from 'react-router-dom'
diff --git a/frontend/src/dmarc/DmarcReportSummaryGraph.js b/frontend/src/dmarc/DmarcReportSummaryGraph.js
index 3f15ee5013..4861b62522 100644
--- a/frontend/src/dmarc/DmarcReportSummaryGraph.js
+++ b/frontend/src/dmarc/DmarcReportSummaryGraph.js
@@ -8,7 +8,8 @@ import { useTooltip, useTooltipInPortal, defaultStyles } from '@visx/tooltip'
import { LegendOrdinal } from '@visx/legend'
import { withScreenSize } from '@visx/responsive'
import { localPoint } from '@visx/event'
-import { Trans, t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useLingui } from '@lingui/react'
import { Box, Flex, Select, Stack, Text } from '@chakra-ui/react'
import { number, array, object } from 'prop-types'
@@ -42,7 +43,7 @@ const getDate = (d) => d.date
let tooltipTimeout
function formatLargeInt(x) {
- return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
+ return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
export function DmarcReportSummaryGraph({ ...props }) {
diff --git a/frontend/src/dmarc/ExportRuaListButton.js b/frontend/src/dmarc/ExportRuaListButton.js
index 2304d368d6..024b8d404a 100644
--- a/frontend/src/dmarc/ExportRuaListButton.js
+++ b/frontend/src/dmarc/ExportRuaListButton.js
@@ -1,6 +1,7 @@
import React, { useCallback } from 'react'
import { Button, useToast } from '@chakra-ui/react'
-import { Trans, t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useLazyQuery } from '@apollo/client'
import { GET_ALL_VERIFIED_RUA_DOMAINS as EXPORT } from '../graphql/queries'
diff --git a/frontend/src/dmarc/__tests__/DmarcByDomainPage.test.js b/frontend/src/dmarc/__tests__/DmarcByDomainPage.test.js
index 4fdb255df1..7a038d13c0 100644
--- a/frontend/src/dmarc/__tests__/DmarcByDomainPage.test.js
+++ b/frontend/src/dmarc/__tests__/DmarcByDomainPage.test.js
@@ -3,30 +3,16 @@ import { ChakraProvider, theme } from '@chakra-ui/react'
import { render, waitFor } from '@testing-library/react'
import { MockedProvider } from '@apollo/client/testing'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
import { matchMediaSize } from '../../helpers/matchMedia'
import { MemoryRouter } from 'react-router-dom'
import userEvent from '@testing-library/user-event'
-
import DmarcByDomainPage from '../DmarcByDomainPage'
-
import { UserVarProvider } from '../../utilities/userState'
import { rawDmarcReportSummaryTableData } from '../../fixtures/dmarcReportSummaryTable'
import { PAGINATED_DMARC_REPORT_SUMMARY_TABLE as FORWARD } from '../../graphql/queries'
import { TourProvider } from '../../userOnboarding/contexts/TourContext'
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
matchMediaSize()
describe('', () => {
diff --git a/frontend/src/dmarc/__tests__/DmarcReportPage.test.js b/frontend/src/dmarc/__tests__/DmarcReportPage.test.js
index 7997a97818..4a319d61c1 100644
--- a/frontend/src/dmarc/__tests__/DmarcReportPage.test.js
+++ b/frontend/src/dmarc/__tests__/DmarcReportPage.test.js
@@ -4,18 +4,14 @@ import { createMemoryRouter, RouterProvider } from 'react-router-dom'
import { render, waitFor } from '@testing-library/react'
import { MockedProvider } from '@apollo/client/testing'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
import userEvent from '@testing-library/user-event'
-
import DmarcReportPage from '../DmarcReportPage'
-
import { createCache } from '../../client'
import { UserVarProvider } from '../../utilities/userState'
import { rawDmarcReportGraphData, rawDmarcReportGraphDataWithoutReport } from '../../fixtures/dmarcReportGraphData'
import { rawDmarcReportData, augustDmarcReportData } from '../../fixtures/dmarcReportData.js'
-
import { DMARC_REPORT_GRAPH, PAGINATED_DMARC_REPORT } from '../../graphql/queries'
// ** need to mock the ResizeObserver and polute the window object to avoid errors
@@ -34,10 +30,13 @@ class ResizeObserver {
}
window.ResizeObserver = ResizeObserver
+
// **
const d = new Date()
+
const currentYear = d.getFullYear()
+
// dynamic year value, changes in September
const getDynamicYear = () => {
const currentMonth = d.getMonth()
@@ -48,16 +47,6 @@ const getDynamicYear = () => {
}
}
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
Object.defineProperty(window, 'matchMedia', {
writable: true,
value: jest.fn().mockImplementation((query) => ({
diff --git a/frontend/src/dmarc/__tests__/DmarcReportSummaryGraph.test.js b/frontend/src/dmarc/__tests__/DmarcReportSummaryGraph.test.js
index c4ce585d96..08a106bfc4 100644
--- a/frontend/src/dmarc/__tests__/DmarcReportSummaryGraph.test.js
+++ b/frontend/src/dmarc/__tests__/DmarcReportSummaryGraph.test.js
@@ -2,10 +2,8 @@ import React from 'react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { render, waitFor } from '@testing-library/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { DmarcReportSummaryGraph } from '../DmarcReportSummaryGraph'
-
import { formattedBarData } from '../../fixtures/summaryListData'
import userEvent from '@testing-library/user-event'
import canada from '../../theme/canada'
@@ -26,17 +24,6 @@ class ResizeObserver {
}
window.ResizeObserver = ResizeObserver
-// **
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
describe('', () => {
it('renders correctly', async () => {
diff --git a/frontend/src/dmarc/__tests__/ExportRuaListButton.test.js b/frontend/src/dmarc/__tests__/ExportRuaListButton.test.js
index 838018e490..c74414ba8a 100644
--- a/frontend/src/dmarc/__tests__/ExportRuaListButton.test.js
+++ b/frontend/src/dmarc/__tests__/ExportRuaListButton.test.js
@@ -2,24 +2,13 @@ import React from 'react'
import { UserVarProvider } from '../../utilities/userState'
import { theme, ThemeProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import { waitFor, render, fireEvent } from '@testing-library/react'
import { MemoryRouter } from 'react-router-dom'
import { makeVar } from '@apollo/client'
-
import { ExportRuaListButton } from '../ExportRuaListButton'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
it('renders without error', async () => {
const { queryByText } = render(
diff --git a/frontend/src/domains/DomainCard.js b/frontend/src/domains/DomainCard.js
index 9ac0557335..0bcf082332 100644
--- a/frontend/src/domains/DomainCard.js
+++ b/frontend/src/domains/DomainCard.js
@@ -1,5 +1,6 @@
import React, { memo } from 'react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import {
Badge,
Box,
@@ -39,6 +40,7 @@ function DomainCard({
webScanPending,
userHasPermission,
cveDetected,
+ cvdEnrollment,
...rest
}) {
const location = useLocation()
@@ -193,6 +195,14 @@ function DomainCard({
)}
+
+ {userHasPermission && cvdEnrollment && cvdEnrollment.status !== 'NOT_ENROLLED' && (
+
+
+ CVD {cvdEnrollment.status}
+
+
+ )}
@@ -294,6 +304,7 @@ DomainCard.propTypes = {
userHasPermission: bool,
assetState: string,
cveDetected: bool,
+ cvdEnrollment: object,
}
const memoizedDomainCard = memo(DomainCard, (prevProps, nextProps) => {
diff --git a/frontend/src/domains/DomainListFilters.js b/frontend/src/domains/DomainListFilters.js
index d7e7d5f03b..4eb135235f 100644
--- a/frontend/src/domains/DomainListFilters.js
+++ b/frontend/src/domains/DomainListFilters.js
@@ -1,6 +1,7 @@
import React from 'react'
import { Box, Button, Flex, Select, Text } from '@chakra-ui/react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { Formik } from 'formik'
import { getRequirement, schemaToValidation } from '../utilities/fieldRequirements'
import { array, func } from 'prop-types'
diff --git a/frontend/src/domains/DomainsPage.js b/frontend/src/domains/DomainsPage.js
index a8e23e44d3..a8eb43664f 100644
--- a/frontend/src/domains/DomainsPage.js
+++ b/frontend/src/domains/DomainsPage.js
@@ -1,5 +1,6 @@
import React, { useCallback, useState } from 'react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import {
Box,
Code,
@@ -115,6 +116,7 @@ export default function DomainsPage() {
},
fetchPolicy: 'cache-and-network',
nextFetchPolicy: 'cache-first',
+ errorPolicy: 'ignore',
})
const { isOpen, onToggle } = useDisclosure()
@@ -248,6 +250,7 @@ export default function DomainsPage() {
webScanPending,
userHasPermission,
cveDetected,
+ cvdEnrollment,
},
index,
) => (
@@ -266,6 +269,7 @@ export default function DomainsPage() {
webScanPending={webScanPending}
userHasPermission={userHasPermission}
cveDetected={cveDetected}
+ cvdEnrollment={cvdEnrollment}
mb="3"
/>
diff --git a/frontend/src/domains/FilterList.js b/frontend/src/domains/FilterList.js
index 20a559a35f..ad257cb905 100644
--- a/frontend/src/domains/FilterList.js
+++ b/frontend/src/domains/FilterList.js
@@ -2,7 +2,7 @@ import React from 'react'
import { CheckCircleIcon, InfoIcon, WarningIcon } from '@chakra-ui/icons'
import { Text } from '@chakra-ui/layout'
import { Tag, TagCloseButton, TagLabel, TagRightIcon } from '@chakra-ui/tag'
-import { t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
import { array, func } from 'prop-types'
export function FilterList({ filters, setFilters, resetToFirstPage, filterTagOptions, guidanceTagOptions }) {
diff --git a/frontend/src/domains/ScanDomain.js b/frontend/src/domains/ScanDomain.js
index 704cb155f2..f83a5f1ed4 100644
--- a/frontend/src/domains/ScanDomain.js
+++ b/frontend/src/domains/ScanDomain.js
@@ -1,5 +1,6 @@
import React from 'react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { Formik } from 'formik'
import {
Accordion,
diff --git a/frontend/src/domains/ScanDomainButton.js b/frontend/src/domains/ScanDomainButton.js
index 362cf34869..8356e22399 100644
--- a/frontend/src/domains/ScanDomainButton.js
+++ b/frontend/src/domains/ScanDomainButton.js
@@ -4,7 +4,7 @@ import { IconButton, keyframes, useToast } from '@chakra-ui/react'
import { RepeatIcon } from '@chakra-ui/icons'
import { useMutation } from '@apollo/client'
import { REQUEST_SCAN } from '../graphql/mutations'
-import { t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
const spin = keyframes`
from {transform: rotate(0deg);}
diff --git a/frontend/src/domains/SubdomainDiscoveryButton.js b/frontend/src/domains/SubdomainDiscoveryButton.js
index 763e4b962d..81398f33d4 100644
--- a/frontend/src/domains/SubdomainDiscoveryButton.js
+++ b/frontend/src/domains/SubdomainDiscoveryButton.js
@@ -18,7 +18,8 @@ import {
import { Search2Icon } from '@chakra-ui/icons'
import { useMutation } from '@apollo/client'
import { REQUEST_DISCOVERY } from '../graphql/mutations'
-import { Trans, t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import withSuperAdmin from '../app/withSuperAdmin'
function SubdomainDiscoveryButton({ orgId, orgSlug, domainUrl, ...props }) {
diff --git a/frontend/src/domains/SubdomainWarning.js b/frontend/src/domains/SubdomainWarning.js
index 9668f68498..93ee646a52 100644
--- a/frontend/src/domains/SubdomainWarning.js
+++ b/frontend/src/domains/SubdomainWarning.js
@@ -1,7 +1,7 @@
import React from 'react'
import { Flex, Text } from '@chakra-ui/react'
import { WarningTwoIcon } from '@chakra-ui/icons'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
export function SubdomainWarning({ ...props }) {
return (
diff --git a/frontend/src/domains/__tests__/DomainCard.test.js b/frontend/src/domains/__tests__/DomainCard.test.js
index 24a572cae5..119d95bf77 100644
--- a/frontend/src/domains/__tests__/DomainCard.test.js
+++ b/frontend/src/domains/__tests__/DomainCard.test.js
@@ -4,21 +4,11 @@ import { MemoryRouter } from 'react-router-dom'
import { List, theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
import { MockedProvider } from '@apollo/client/testing'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { DomainCard } from '../DomainCard'
import { UserVarProvider } from '../../utilities/userState'
import { makeVar } from '@apollo/client'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
const status = {
policy: 'pass',
ciphers: 'pass',
diff --git a/frontend/src/domains/__tests__/DomainListFilters.test.js b/frontend/src/domains/__tests__/DomainListFilters.test.js
index 4595e2847b..e343a5dc01 100644
--- a/frontend/src/domains/__tests__/DomainListFilters.test.js
+++ b/frontend/src/domains/__tests__/DomainListFilters.test.js
@@ -2,24 +2,13 @@ import React from 'react'
import { render, fireEvent, waitFor } from '@testing-library/react'
import { DomainListFilters } from '../DomainListFilters'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import { UserVarProvider } from '../../utilities/userState'
import { makeVar } from '@apollo/client'
import { createCache } from '../../client'
import { ChakraProvider, theme } from '@chakra-ui/react'
import { MemoryRouter } from 'react-router-dom'
-import { en } from 'make-plural/plurals'
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
describe('DomainListFilters', () => {
let setFilters
diff --git a/frontend/src/domains/__tests__/DomainsPage.test.js b/frontend/src/domains/__tests__/DomainsPage.test.js
index dbf9270a99..c7578c4eb9 100644
--- a/frontend/src/domains/__tests__/DomainsPage.test.js
+++ b/frontend/src/domains/__tests__/DomainsPage.test.js
@@ -4,27 +4,14 @@ import { createMemoryRouter, MemoryRouter, RouterProvider } from 'react-router-d
import { fireEvent, render, waitFor } from '@testing-library/react'
import { MockedProvider } from '@apollo/client/testing'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import DomainsPage from '../DomainsPage'
-
import { createCache } from '../../client'
import { UserVarProvider } from '../../utilities/userState'
import { PAGINATED_DOMAINS } from '../../graphql/queries'
import { TourProvider } from '../../userOnboarding/contexts/TourContext'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
describe('', () => {
const mocks = [
{
diff --git a/frontend/src/domains/__tests__/ScanDomain.test.js b/frontend/src/domains/__tests__/ScanDomain.test.js
index e6c1d0b195..8b96897987 100644
--- a/frontend/src/domains/__tests__/ScanDomain.test.js
+++ b/frontend/src/domains/__tests__/ScanDomain.test.js
@@ -4,26 +4,12 @@ import { MemoryRouter } from 'react-router-dom'
import { fireEvent, render, waitFor } from '@testing-library/react'
import { MockedProvider } from '@apollo/client/testing'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import { ScanDomain } from '../ScanDomain'
-
import { createCache } from '../../client'
import { UserVarProvider } from '../../utilities/userState'
import { REQUEST_SCAN } from '../../graphql/mutations'
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
const fillIn = (element, { with: value }) => fireEvent.change(element, { target: { value } })
const clickOn = (element) => fireEvent.click(element)
const values = { domain: 'cse-cst.gc.ca' }
diff --git a/frontend/src/graphql/mutations.js b/frontend/src/graphql/mutations.js
index 4d071e881a..de6c924781 100644
--- a/frontend/src/graphql/mutations.js
+++ b/frontend/src/graphql/mutations.js
@@ -183,8 +183,18 @@ export const CREATE_DOMAIN = gql`
$tags: [String]
$archived: Boolean
$assetState: AssetStateEnums!
+ $cvdEnrollment: CvdEnrollmenInputOptions
) {
- createDomain(input: { orgId: $orgId, domain: $domain, tags: $tags, archived: $archived, assetState: $assetState }) {
+ createDomain(
+ input: {
+ orgId: $orgId
+ domain: $domain
+ tags: $tags
+ archived: $archived
+ assetState: $assetState
+ cvdEnrollment: $cvdEnrollment
+ }
+ ) {
result {
... on Domain {
id
@@ -200,6 +210,14 @@ export const CREATE_DOMAIN = gql`
assetState
archived
rcode
+ cvdEnrollment {
+ status
+ description
+ maxSeverity
+ confidentialityRequirement
+ integrityRequirement
+ availabilityRequirement
+ }
}
... on DomainError {
code
@@ -272,6 +290,7 @@ export const UPDATE_DOMAIN = gql`
$archived: Boolean
$assetState: AssetStateEnums
$ignoreRua: Boolean
+ $cvdEnrollment: CvdEnrollmenInputOptions
) {
updateDomain(
input: {
@@ -281,6 +300,7 @@ export const UPDATE_DOMAIN = gql`
archived: $archived
assetState: $assetState
ignoreRua: $ignoreRua
+ cvdEnrollment: $cvdEnrollment
}
) {
result {
@@ -299,6 +319,14 @@ export const UPDATE_DOMAIN = gql`
archived
rcode
ignoreRua
+ cvdEnrollment {
+ status
+ description
+ maxSeverity
+ confidentialityRequirement
+ integrityRequirement
+ availabilityRequirement
+ }
}
... on DomainError {
code
@@ -433,16 +461,8 @@ export const CREATE_ORGANIZATION = gql`
$acronymFR: Acronym!
$nameEN: String!
$nameFR: String!
- $zoneEN: String!
- $zoneFR: String!
- $sectorEN: String!
- $sectorFR: String!
- $countryEN: String!
- $countryFR: String!
- $provinceEN: String!
- $provinceFR: String!
- $cityEN: String!
- $cityFR: String!
+ $externalId: String
+ $verified: Boolean
) {
createOrganization(
input: {
@@ -450,16 +470,8 @@ export const CREATE_ORGANIZATION = gql`
acronymFR: $acronymFR
nameEN: $nameEN
nameFR: $nameFR
- zoneEN: $zoneEN
- zoneFR: $zoneFR
- sectorEN: $sectorEN
- sectorFR: $sectorFR
- countryEN: $countryEN
- countryFR: $countryFR
- provinceEN: $provinceEN
- provinceFR: $provinceFR
- cityEN: $cityEN
- cityFR: $cityFR
+ externalId: $externalId
+ verified: $verified
}
) {
result {
diff --git a/frontend/src/graphql/queries.js b/frontend/src/graphql/queries.js
index 2b1d9749bc..c3e4c1ce2b 100644
--- a/frontend/src/graphql/queries.js
+++ b/frontend/src/graphql/queries.js
@@ -96,35 +96,39 @@ export const FIND_ORGANIZATION_BY_SLUG = gql`
export const LANDING_PAGE_SUMMARIES = gql`
query LandingPageSummaries {
- # Tier 1
- httpsSummary {
- ...RequiredSummaryFields
- }
- dmarcSummary {
- ...RequiredSummaryFields
- }
- # Tier 2
- webConnectionsSummary {
- ...RequiredSummaryFields
- }
- sslSummary {
- ...RequiredSummaryFields
- }
- spfSummary {
- ...RequiredSummaryFields
- }
- dkimSummary {
- ...RequiredSummaryFields
- }
- dmarcPhaseSummary {
- ...RequiredSummaryFields
- }
- # Tier 3
- webSummary {
- ...RequiredSummaryFields
- }
- mailSummary {
- ...RequiredSummaryFields
+ findChartSummaries(limit: 1, sortDirection: DESC) {
+ # Tier 1
+ https {
+ ...RequiredSummaryFields
+ }
+ dmarc {
+ ...RequiredSummaryFields
+ }
+
+ # Tier 2
+ webConnections {
+ ...RequiredSummaryFields
+ }
+ ssl {
+ ...RequiredSummaryFields
+ }
+ spf {
+ ...RequiredSummaryFields
+ }
+ dkim {
+ ...RequiredSummaryFields
+ }
+ dmarcPhase {
+ ...RequiredSummaryFields
+ }
+
+ # Tier 3
+ web {
+ ...RequiredSummaryFields
+ }
+ mail {
+ ...RequiredSummaryFields
+ }
}
}
${Summary.fragments.requiredFields}
@@ -276,6 +280,14 @@ export const PAGINATED_ORG_DOMAINS_ADMIN_PAGE = gql`
archived
ignoreRua
rcode
+ cvdEnrollment {
+ status
+ description
+ maxSeverity
+ confidentialityRequirement
+ integrityRequirement
+ availabilityRequirement
+ }
organizations(first: 1) {
totalCount
}
@@ -343,23 +355,6 @@ export const DOMAIN_GUIDANCE_PAGE = gql`
dmarcPhase
hasDMARCReport
userHasPermission
- mxRecordDiff(limit: 10, orderBy: { field: TIMESTAMP, direction: DESC }) {
- totalCount
- edges {
- node {
- id
- timestamp
- mxRecords {
- hosts {
- preference
- hostname
- addresses
- }
- warnings
- }
- }
- }
- }
dnsScan(limit: 1, orderBy: { field: TIMESTAMP, direction: DESC }) {
edges {
cursor
@@ -594,6 +589,18 @@ export const DOMAIN_GUIDANCE_PAGE = gql`
error
scheme
}
+ securityTxt {
+ url
+ statusCode
+ redirected
+ redirectStatusCode
+ redirectLocation
+ isValid
+ path
+ raw
+ fields
+ error
+ }
}
}
}
@@ -816,6 +823,9 @@ export const PAGINATED_ORG_DOMAINS = gql`
webScanPending
userHasPermission
cveDetected
+ cvdEnrollment {
+ status
+ }
}
}
}
@@ -886,6 +896,9 @@ export const PAGINATED_DOMAINS = gql`
hasDMARCReport
userHasPermission
cveDetected
+ cvdEnrollment {
+ status
+ }
__typename
}
__typename
diff --git a/frontend/src/guidance/AdditionalFindings.js b/frontend/src/guidance/AdditionalFindings.js
index c638fdad6a..3df8f7f554 100644
--- a/frontend/src/guidance/AdditionalFindings.js
+++ b/frontend/src/guidance/AdditionalFindings.js
@@ -19,7 +19,8 @@ import {
TableContainer,
} from '@chakra-ui/react'
import { CheckIcon, ExternalLinkIcon } from '@chakra-ui/icons'
-import { Trans, t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { any, bool, string } from 'prop-types'
import { useLingui } from '@lingui/react'
import { useQuery } from '@apollo/client'
diff --git a/frontend/src/guidance/CveIgnorer.js b/frontend/src/guidance/CveIgnorer.js
index 4697ce019c..abdd65ceff 100644
--- a/frontend/src/guidance/CveIgnorer.js
+++ b/frontend/src/guidance/CveIgnorer.js
@@ -1,7 +1,8 @@
import React, { useState } from 'react'
import { useMutation } from '@apollo/client'
import { IGNORE_CVE, UNIGNORE_CVE } from '../graphql/mutations'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { Box, Button, Text, useToast } from '@chakra-ui/react'
import { useLingui } from '@lingui/react'
import withSuperAdmin from '../app/withSuperAdmin'
diff --git a/frontend/src/guidance/DmarcPhaseStepper.js b/frontend/src/guidance/DmarcPhaseStepper.js
index 51db828776..77c5559aeb 100644
--- a/frontend/src/guidance/DmarcPhaseStepper.js
+++ b/frontend/src/guidance/DmarcPhaseStepper.js
@@ -11,7 +11,8 @@ import {
Stepper,
useSteps,
} from '@chakra-ui/react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { string } from 'prop-types'
import { useLingui } from '@lingui/react'
diff --git a/frontend/src/guidance/EmailGuidance.js b/frontend/src/guidance/EmailGuidance.js
index cd39be81fc..0e5158f0fc 100644
--- a/frontend/src/guidance/EmailGuidance.js
+++ b/frontend/src/guidance/EmailGuidance.js
@@ -10,15 +10,14 @@ import {
Flex,
Text,
} from '@chakra-ui/react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { any, object } from 'prop-types'
import { GuidanceTagList } from './GuidanceTagList'
import { StatusIcon } from '../components/StatusIcon'
import { GuidanceSummaryCategories } from './GuidanceSummaryCategories'
-import { ABTestWrapper, ABTestVariant } from '../app/ABTestWrapper'
-import ReactDiffViewer, { DiffMethod } from 'react-diff-viewer-continued'
-export function EmailGuidance({ dnsResults, status, mxRecordDiff, children }) {
+export function EmailGuidance({ dnsResults, status, children }) {
const formatTimestamp = (ts) => {
const date = new Date(ts)
return date.toLocaleString('en-CA', {
@@ -337,33 +336,6 @@ export function EmailGuidance({ dnsResults, status, mxRecordDiff, children }) {
)}
- {mxRecordDiff.edges.length > 1 && (
-
-
-
- Changes:
-
- {mxRecordDiff.edges.map(({ node }, idx) => {
- if (idx !== mxRecordDiff.edges.length - 1) {
- const nextNode = mxRecordDiff.edges[idx + 1].node
- return (
-
- )
- }
- })}
-
-
- )}
@@ -421,5 +393,4 @@ EmailGuidance.propTypes = {
dnsResults: object,
children: any,
status: object,
- mxRecordDiff: object,
}
diff --git a/frontend/src/guidance/GuidancePage.js b/frontend/src/guidance/GuidancePage.js
index b95bc6bb49..4f20aa9392 100644
--- a/frontend/src/guidance/GuidancePage.js
+++ b/frontend/src/guidance/GuidancePage.js
@@ -27,7 +27,8 @@ import { ScanDomainButton } from '../domains/ScanDomainButton'
import { Link as RouteLink, useNavigate, useLocation, useParams } from 'react-router-dom'
import { WebGuidance } from './WebGuidance'
import { EmailGuidance } from './EmailGuidance'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useMutation, useQuery } from '@apollo/client'
import { DOMAIN_GUIDANCE_PAGE } from '../graphql/queries'
import { FAVOURITE_DOMAIN } from '../graphql/mutations'
@@ -76,7 +77,6 @@ function GuidancePage() {
web: webScan,
hasDMARCReport,
dnsScan,
- mxRecordDiff,
organizations,
dmarcPhase,
rcode,
@@ -309,7 +309,7 @@ function GuidancePage() {
{hasNoDnsScans ? (
noScanData
) : (
-
+
)}
diff --git a/frontend/src/guidance/GuidanceSummaryCategories.js b/frontend/src/guidance/GuidanceSummaryCategories.js
index 6cad52ecc6..92d2906e4c 100644
--- a/frontend/src/guidance/GuidanceSummaryCategories.js
+++ b/frontend/src/guidance/GuidanceSummaryCategories.js
@@ -2,7 +2,7 @@ import React from 'react'
import { NumberedStatusIcon } from '../components/NumberedStatusIcon'
import { Flex, Text } from '@chakra-ui/react'
import { number } from 'prop-types'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
export function GuidanceSummaryCategories({ passCount, infoCount, failCount }) {
const summaryCategoryStyleProps = {
diff --git a/frontend/src/guidance/GuidanceTagDetails.js b/frontend/src/guidance/GuidanceTagDetails.js
index e4c7c942ce..af5ecc6aae 100644
--- a/frontend/src/guidance/GuidanceTagDetails.js
+++ b/frontend/src/guidance/GuidanceTagDetails.js
@@ -12,7 +12,8 @@ import {
Text,
} from '@chakra-ui/react'
import { CheckCircleIcon, ExternalLinkIcon, InfoIcon, WarningIcon } from '@chakra-ui/icons'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
export function GuidanceTagDetails({ guidanceTag, tagType }) {
const tagTypeList = {
@@ -28,7 +29,7 @@ export function GuidanceTagDetails({ guidanceTag, tagType }) {
}
const getTagCategoryFromId = (tagId) => {
- return tagId.split(/[0-9]/)[0].toUpperCase()
+ return tagId.split(/[0-9]/)[0].toUpperCase();
}
const cccsGuidance =
diff --git a/frontend/src/guidance/GuidanceTagList.js b/frontend/src/guidance/GuidanceTagList.js
index 1ebf6437eb..c6b59ed46e 100644
--- a/frontend/src/guidance/GuidanceTagList.js
+++ b/frontend/src/guidance/GuidanceTagList.js
@@ -2,7 +2,7 @@ import React from 'react'
import { array, string } from 'prop-types'
import { Box, Heading, Text, Flex, Link, Accordion } from '@chakra-ui/react'
import { ExternalLinkIcon, WarningTwoIcon } from '@chakra-ui/icons'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
import { GuidanceTagDetails } from './GuidanceTagDetails'
export function GuidanceTagList({ negativeTags, positiveTags, neutralTags, selector }) {
diff --git a/frontend/src/guidance/IgnoredCves.js b/frontend/src/guidance/IgnoredCves.js
index 148b3b2252..89b8a966b5 100644
--- a/frontend/src/guidance/IgnoredCves.js
+++ b/frontend/src/guidance/IgnoredCves.js
@@ -1,6 +1,7 @@
import React from 'react'
import { Box, Button, Divider, Flex, SimpleGrid, Text } from '@chakra-ui/react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import withSuperAdmin from '../app/withSuperAdmin'
import PropTypes from 'prop-types'
diff --git a/frontend/src/guidance/SecurityTxt.js b/frontend/src/guidance/SecurityTxt.js
new file mode 100644
index 0000000000..a2613ec8cf
--- /dev/null
+++ b/frontend/src/guidance/SecurityTxt.js
@@ -0,0 +1,49 @@
+import React from 'react'
+import { Box, Code, Text } from '@chakra-ui/react'
+import { array } from 'prop-types'
+import { Trans } from "@lingui/react/macro"
+
+export function SecurityTxt({ data, ...props }) {
+ let validRecords = []
+ const getErrorMsg = () => {
+ if (!data || data?.length === 0) {
+ return (
+
+ Data not available for this service. Try rescanning or come back later.
+
+ )
+ }
+
+ validRecords = data?.filter(({ error }) => !error)
+ if (validRecords?.length === 0) {
+ return (
+
+ No record was found for this service.
+
+ )
+ }
+
+ return null
+ }
+
+ const errorMsg = getErrorMsg()
+
+ return (
+
+
+ Security.txt
+
+ {errorMsg ? (
+ errorMsg
+ ) : (
+
+ {validRecords[0]?.raw}
+
+ )}
+
+ )
+}
+
+SecurityTxt.propTypes = {
+ data: array,
+}
diff --git a/frontend/src/guidance/WebConnectionResults.js b/frontend/src/guidance/WebConnectionResults.js
index 1bb3e4df61..8c84526272 100644
--- a/frontend/src/guidance/WebConnectionResults.js
+++ b/frontend/src/guidance/WebConnectionResults.js
@@ -14,8 +14,11 @@ import { bool, object } from 'prop-types'
import { PlusSquareIcon } from '@chakra-ui/icons'
import { StatusIcon } from '../components/StatusIcon'
import { GuidanceTagList } from './GuidanceTagList'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { DetailTooltip } from './DetailTooltip'
+import { SecurityTxt } from './SecurityTxt'
+import { ABTestVariant, ABTestWrapper } from '../app/ABTestWrapper'
export function WebConnectionResults({ connectionResults, isWebHosting }) {
const {
@@ -30,11 +33,31 @@ export function WebConnectionResults({ connectionResults, isWebHosting }) {
httpsChainResult,
} = connectionResults
- const columnInfoStyleProps = {
- align: 'center',
- py: '0.5',
- px: '2',
- _even: { bg: 'gray.200' },
+ let connectionResultsStatus = 'FAIL'
+ if (
+ [connectionResults.httpsStatus, connectionResults.hstsStatus].every(
+ (status) => status.toUpperCase() === 'PASS',
+ )
+ )
+ connectionResultsStatus = 'PASS'
+ else if (
+ [connectionResults.httpsStatus, connectionResults.hstsStatus].every(
+ (status) => status.toUpperCase() === 'INFO',
+ )
+ )
+ connectionResultsStatus = 'INFO'
+
+ // eslint-disable-next-line react/prop-types
+ const InfoTableItem = ({ label, icon, title, value, ...props }) => {
+ return (
+
+
+ {icon}
+ {title}
+
+ {value}
+
+ )
}
const connChainResult = (chainResult) =>
@@ -56,27 +79,28 @@ export function WebConnectionResults({ connectionResults, isWebHosting }) {
{idx + 1}. {uri}
-
-
- Status: {statusCode}
-
-
- {blockedCategory}
- {HSTS}
-
+ {[
+ { label: Status:, value: statusCode },
+ { label: '', value: blockedCategory },
+ { label: '', value: HSTS },
+ ].map(({ label, value }, i) =>
+ value ? (
+
+ {label} {value}
+
+ ) : null,
+ )}
See headers
- {Object.keys(headers).map((key, idx) => {
- return (
-
- {key}: {headers[key]}
-
- )
- })}
+ {Object.keys(headers).map((key, idx) => (
+
+ {key}: {headers[key]}
+
+ ))}
@@ -85,16 +109,6 @@ export function WebConnectionResults({ connectionResults, isWebHosting }) {
}
})
- let connectionResultsStatus = 'FAIL'
- if (
- [(connectionResults.httpsStatus, connectionResults.hstsStatus)].every((status) => status.toUpperCase() === 'PASS')
- )
- connectionResultsStatus = 'PASS'
- else if (
- [(connectionResults.httpsStatus, connectionResults.hstsStatus)].every((status) => status.toUpperCase() === 'INFO')
- )
- connectionResultsStatus = 'INFO'
-
return (
@@ -120,34 +134,28 @@ export function WebConnectionResults({ connectionResults, isWebHosting }) {
-
-
-
-
- HTTP Live
-
-
- {httpLive ? t`Yes` : t`No`}
-
-
-
-
-
- HTTP Upgrades
-
-
-
- {!httpLive
+ {[
+ {
+ label: t`Shows if the HTTP connection is live.`,
+ icon: ,
+ title: HTTP Live,
+ value: httpLive ? t`Yes` : t`No`,
+ },
+ {
+ label: t`Shows if the HTTP endpoint upgrades to HTTPS upgrade immediately, eventually (after the first redirect), or never.`,
+ icon: ,
+ title: HTTP Upgrades,
+ value: !httpLive
? t`Not available`
: httpImmediatelyUpgrades
? t`Immediately`
: httpEventuallyUpgrades
? t`Eventually`
- : t`Never`}
-
-
+ : t`Never`,
+ },
+ ].map((vals, idx) => (
+
+ ))}
URL: {httpChainResult.uri}
@@ -166,72 +174,60 @@ export function WebConnectionResults({ connectionResults, isWebHosting }) {
-
-
-
-
- HTTPS Live
-
-
- {httpsLive ? t`Yes` : t`No`}
-
-
-
-
-
- HTTPS Downgrades
-
-
-
- {httpsImmediatelyDowngrades ? t`Immediately` : httpsEventuallyDowngrades ? t`Eventually` : t`Never`}
-
-
-
-
-
-
- HSTS Parsed
-
-
- {hstsParsed ? t`Yes` : t`No`}
-
-
-
-
-
- HSTS Max Age
-
-
- {hstsParsed?.maxAge || t`Not available`}
-
-
-
-
-
- HSTS Preloaded
-
-
- {!hstsParsed ? t`Not available` : hstsParsed?.preload ? t`Yes` : t`No`}
-
-
-
-
-
- HSTS Includes Subdomains
-
-
- {!hstsParsed ? t`Not available` : hstsParsed?.includeSubdomains ? t`Yes` : t`No`}
-
+ {[
+ {
+ label: t`Shows if the HTTPS connection is live.`,
+ icon: ,
+ title: HTTPS Live,
+ value: httpsLive ? t`Yes` : t`No`,
+ },
+ {
+ label: t`Shows if the HTTPS endpoint downgrades to unsecured HTTP immediately, eventually, or never.`,
+ icon: (
+
+ ),
+ title: HTTPS Downgrades,
+ value: httpsImmediatelyDowngrades
+ ? t`Immediately`
+ : httpsEventuallyDowngrades
+ ? t`Eventually`
+ : t`Never`,
+ },
+ {
+ label: t`Shows if the HSTS (HTTP Strict Transport Security) header is present.`,
+ icon: ,
+ title: HSTS Parsed,
+ value: hstsParsed ? t`Yes` : t`No`,
+ },
+ {
+ label: t`Shows the duration of time, in seconds, that the HSTS header is valid.`,
+ icon: ,
+ title: HSTS Max Age,
+ value: hstsParsed?.maxAge || t`Not available`,
+ },
+ {
+ label: t`Shows if the HSTS header includes the preload directive.`,
+ icon: ,
+ title: HSTS Preloaded,
+ value: !hstsParsed ? t`Not available` : hstsParsed?.preload ? t`Yes` : t`No`,
+ },
+ {
+ label: t`Shows if the HSTS header includes the includeSubdomains directive.`,
+ icon: ,
+ title: HSTS Includes Subdomains,
+ value: !hstsParsed ? t`Not available` : hstsParsed?.includeSubdomains ? t`Yes` : t`No`,
+ },
+ ].map((vals, idx) => (
+
+ ))}
URL: {httpsChainResult?.uri}
@@ -239,6 +235,11 @@ export function WebConnectionResults({ connectionResults, isWebHosting }) {
{connChainResult(httpsChainResult)}
+
+
+
+
+
diff --git a/frontend/src/guidance/WebGuidance.js b/frontend/src/guidance/WebGuidance.js
index 6b4351f343..02f5fc5b19 100644
--- a/frontend/src/guidance/WebGuidance.js
+++ b/frontend/src/guidance/WebGuidance.js
@@ -15,7 +15,7 @@ import {
Text,
} from '@chakra-ui/react'
import { array, string } from 'prop-types'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
import { WebTLSResults } from './WebTLSResults'
import { WebConnectionResults } from './WebConnectionResults'
import { GuidanceSummaryCategories } from './GuidanceSummaryCategories'
diff --git a/frontend/src/guidance/WebTLSResults.js b/frontend/src/guidance/WebTLSResults.js
index 98ed1acac6..30d8c29bd9 100644
--- a/frontend/src/guidance/WebTLSResults.js
+++ b/frontend/src/guidance/WebTLSResults.js
@@ -13,7 +13,8 @@ import { object } from 'prop-types'
import { PlusSquareIcon } from '@chakra-ui/icons'
import { StatusIcon } from '../components/StatusIcon'
import { GuidanceTagList } from './GuidanceTagList'
-import { Trans, t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { DetailTooltip } from './DetailTooltip'
export function WebTLSResults({ tlsResult }) {
diff --git a/frontend/src/guidance/__tests__/AdditionalFindings.test.js b/frontend/src/guidance/__tests__/AdditionalFindings.test.js
index f8f5172647..3e80632454 100644
--- a/frontend/src/guidance/__tests__/AdditionalFindings.test.js
+++ b/frontend/src/guidance/__tests__/AdditionalFindings.test.js
@@ -7,20 +7,9 @@ import { ChakraProvider, theme } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
import { MemoryRouter } from 'react-router-dom'
import { makeVar } from '@apollo/client'
-import { setupI18n } from '@lingui/core'
-import { en } from 'make-plural'
+import { i18n } from '@lingui/core'
import { GUIDANCE_ADDITIONAL_FINDINGS } from '../../graphql/queries'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
const mocks = [
{
request: {
diff --git a/frontend/src/guidance/__tests__/GuidancePage.test.js b/frontend/src/guidance/__tests__/GuidancePage.test.js
index c8860eb711..0ced46cccb 100644
--- a/frontend/src/guidance/__tests__/GuidancePage.test.js
+++ b/frontend/src/guidance/__tests__/GuidancePage.test.js
@@ -4,29 +4,16 @@ import { createMemoryRouter, RouterProvider } from 'react-router-dom'
import { render, waitFor, fireEvent } from '@testing-library/react'
import { MockedProvider } from '@apollo/client/testing'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import matchMediaPolyfill from 'mq-polyfill'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import GuidancePage from '../GuidancePage'
-
import { UserVarProvider } from '../../utilities/userState'
import { rawDmarcGuidancePageData, rawDomainGuidancePageDataNoAffiliations } from '../../fixtures/dmarcGuidancePageData'
import { DOMAIN_GUIDANCE_PAGE } from '../../graphql/queries'
import { REQUEST_INVITE_TO_ORG } from '../../graphql/mutations'
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
matchMediaPolyfill(window)
+
window
.matchMedia('(min-width: 920px)') // Create MediaQueryList instance
.addListener(console.log) // Subscribe to MQ mode changes
diff --git a/frontend/src/guidance/__tests__/GuidanceTagDetails.test.js b/frontend/src/guidance/__tests__/GuidanceTagDetails.test.js
index ae7ccffdaa..7bdfac6c41 100644
--- a/frontend/src/guidance/__tests__/GuidanceTagDetails.test.js
+++ b/frontend/src/guidance/__tests__/GuidanceTagDetails.test.js
@@ -3,25 +3,12 @@ import { theme, ChakraProvider, Accordion } from '@chakra-ui/react'
import { MemoryRouter } from 'react-router-dom'
import { render, waitFor } from '@testing-library/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import { makeVar } from '@apollo/client'
-
import { GuidanceTagDetails } from '../GuidanceTagDetails'
-
import { UserVarProvider } from '../../utilities/userState'
import { rawDmarcGuidancePageData } from '../../fixtures/dmarcGuidancePageData'
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
const guidanceTag = rawDmarcGuidancePageData.data.findDomainByDomain.dnsScan.edges[0].node.spf.positiveTags[0]
Object.defineProperty(window, 'matchMedia', {
diff --git a/frontend/src/guidance/__tests__/GuidanceTagList.test.js b/frontend/src/guidance/__tests__/GuidanceTagList.test.js
index 0523cf1ff2..4abb30cce8 100644
--- a/frontend/src/guidance/__tests__/GuidanceTagList.test.js
+++ b/frontend/src/guidance/__tests__/GuidanceTagList.test.js
@@ -3,26 +3,12 @@ import { theme, ChakraProvider } from '@chakra-ui/react'
import { MemoryRouter } from 'react-router-dom'
import { render, waitFor } from '@testing-library/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MockedProvider } from '@apollo/client/testing'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import { GuidanceTagList } from '../GuidanceTagList'
-
import { UserVarProvider } from '../../utilities/userState'
import { rawDmarcGuidancePageData } from '../../fixtures/dmarcGuidancePageData'
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
const spfResult = rawDmarcGuidancePageData.data.findDomainByDomain.dnsScan.edges[0].node.spf
const negativeTags = spfResult.negativeTags
const neutralTags = spfResult.neutralTags
diff --git a/frontend/src/guidance/__tests__/SecurityTxt.test.js b/frontend/src/guidance/__tests__/SecurityTxt.test.js
new file mode 100644
index 0000000000..23ef6e6da8
--- /dev/null
+++ b/frontend/src/guidance/__tests__/SecurityTxt.test.js
@@ -0,0 +1,72 @@
+// frontend/src/guidance/SecurityTxt.test.js
+import React from 'react'
+
+import { render } from '@testing-library/react'
+import { SecurityTxt } from '../SecurityTxt'
+import { I18nProvider } from '@lingui/react'
+import { i18n } from '@lingui/core'
+
+describe('SecurityTxt', () => {
+ it('renders error message when data is undefined', () => {
+ const { getByText } = render(
+
+
+ ,
+ )
+ expect(getByText('Data not available for this service. Try rescanning or come back later.')).toBeInTheDocument()
+ })
+
+ it('renders error message when data is an empty array', () => {
+ const { getByText } = render(
+
+
+ ,
+ )
+ expect(getByText('Data not available for this service. Try rescanning or come back later.')).toBeInTheDocument()
+ })
+
+ it('renders error message when all records have errors', () => {
+ const data = [{ error: 'Some error' }, { error: 'Another error' }]
+ const { getByText } = render(
+
+
+ ,
+ )
+ expect(getByText('No record was found for this service.')).toBeInTheDocument()
+ })
+
+ it('renders security.txt content when valid record exists', async () => {
+ const data = [{ raw: 'Contact: mailto:security@example.com' }, { error: 'Some error' }]
+ const { getByText } = render(
+
+
+ ,
+ )
+ expect(getByText('Security.txt')).toBeInTheDocument()
+ // await waitFor(() => expect(getByText('Contact: mailto:security@example.com')).toBeInTheDocument())
+ expect(getByText('Contact: mailto:security@example.com')).toBeInTheDocument()
+ })
+
+ it('passes additional props to Box', () => {
+ const data = [{ raw: 'Contact: mailto:security@example.com' }]
+ const { getByTestId } = render(
+
+
+ ,
+ )
+ expect(getByTestId('security-txt-box')).toBeInTheDocument()
+ })
+
+ it('renders nothing in if data.raw is undefined', () => {
+ const data = [{}]
+ const { getByText } = render(
+
+
+ ,
+ )
+ // Should render with no content
+ expect(getByText('Security.txt')).toBeInTheDocument()
+ // No error message, so Code is rendered
+ expect(getByText('', { selector: 'code' })).toBeInTheDocument()
+ })
+})
diff --git a/frontend/src/html.js b/frontend/src/html.js
index 5bee01702d..c71a015e03 100644
--- a/frontend/src/html.js
+++ b/frontend/src/html.js
@@ -1,14 +1,3 @@
-import './images/apple-touch-icon.png'
-import './images/android-chrome-192x192.png'
-import './images/android-chrome-512x512.png'
-import './images/favicon.ico'
-import './images/favicon-32x32.png'
-import './images/favicon-16x16.png'
-import './images/logo192.png'
-import './images/logo512.png'
-import './manifest.json'
-import './robots.txt'
-
export default () => `
@@ -21,29 +10,27 @@ export default () => `
-
-
-
-
+
+
if (error) return
- const summaries = {
- https: data?.httpsSummary,
- dmarc: data?.dmarcSummary,
- webConnections: data?.webConnectionsSummary,
- ssl: data?.sslSummary,
- spf: data?.spfSummary,
- dkim: data?.dkimSummary,
- dmarcPhase: data?.dmarcPhaseSummary,
- web: data?.webSummary,
- mail: data?.mailSummary,
- }
+ const summaries = data?.findChartSummaries?.[0]
return (
diff --git a/frontend/src/locales/en.po b/frontend/src/locales/en.po
index d1eade21b3..dd9a05add2 100644
--- a/frontend/src/locales/en.po
+++ b/frontend/src/locales/en.po
@@ -46,7 +46,7 @@ msgid ". Personal information will not be disclosed by Treasury Board Secretaria
msgstr ". Personal information will not be disclosed by Treasury Board Secretariat of Canada (TBS) except in accordance with the"
#. placeholder {0}: guidanceTag?.count
-#: src/guidance/GuidanceTagDetails.js:88
+#: src/guidance/GuidanceTagDetails.js:89
msgid "{0} Findings"
msgstr "{0} Findings"
@@ -55,27 +55,27 @@ msgstr "{0} Findings"
#~ msgstr "{0} selected"
#. placeholder {0}: selectedIds.size
-#: src/admin/DomainUpdateList.js:303
+#: src/admin/DomainUpdateList.js:304
msgid "{0} selected in total"
msgstr "{0} selected in total"
#. placeholder {0}: createDomain.result.domain
-#: src/admin/AdminDomainModal.js:62
+#: src/admin/AdminDomainModal.js:81
msgid "{0} was added to {orgSlug}"
msgstr "{0} was added to {orgSlug}"
#. placeholder {0}: createTag.result.tagId
-#: src/admin/TagForm.js:84
+#: src/admin/TagForm.js:85
msgid "{0} was added to tag list."
msgstr "{0} was added to tag list."
#. placeholder {0}: createOrganization.result.name
-#: src/createOrganization/CreateOrganizationPage.js:54
+#: src/createOrganization/CreateOrganizationPage.js:49
msgid "{0} was created"
msgstr "{0} was created"
#. placeholder {0}: updateTag.result.tagId
-#: src/admin/TagForm.js:39
+#: src/admin/TagForm.js:40
msgid "{0} was successfully updated."
msgstr "{0} was successfully updated."
@@ -87,16 +87,19 @@ msgstr "{buttonLabel}"
msgid "{count} records..."
msgstr "{count} records..."
-#: src/dmarc/DmarcReportPage.js:116
+#: src/dmarc/DmarcReportPage.js:117
msgid "{domainSlug} does not support aggregate data"
msgstr "{domainSlug} does not support aggregate data"
-#. placeholder {0}: updateDomain.result.domain
#: src/admin/AdminDomainModal.js:109
-msgid "{editingDomainUrl} from {orgSlug} successfully updated to {0}"
-msgstr "{editingDomainUrl} from {orgSlug} successfully updated to {0}"
+#~ msgid "{editingDomainUrl} from {orgSlug} successfully updated to {0}"
+#~ msgstr "{editingDomainUrl} from {orgSlug} successfully updated to {0}"
-#: src/components/InfoPanel.js:45
+#: src/admin/AdminDomainModal.js:127
+msgid "{editingDomainUrl} from {orgSlug} successfully updated."
+msgstr "{editingDomainUrl} from {orgSlug} successfully updated."
+
+#: src/components/InfoPanel.js:46
msgid "{info}"
msgstr "{info}"
@@ -104,11 +107,11 @@ msgstr "{info}"
#~ msgid "{label}"
#~ msgstr "{label}"
-#: src/admin/DomainUpdateList.js:279
+#: src/admin/DomainUpdateList.js:280
msgid "{selectedOnPage} selected on this page."
msgstr "{selectedOnPage} selected on this page."
-#: src/components/InfoPanel.js:42
+#: src/components/InfoPanel.js:43
msgid "{title}"
msgstr "{title}"
@@ -120,10 +123,34 @@ msgstr "{title} - Tracker"
msgid "{totalRecords} total item(s)"
msgstr "{totalRecords} total item(s)"
-#: src/domains/DomainsPage.js:382
+#: src/domains/DomainsPage.js:386
msgid "<0><1>Search Tip: Wildcard <2>%2>1>0><3>Use <4>%4> to broaden your search:3><5><6><7>Start with <8>%8>7>: Search <9><10>%example.gc.ca10>9> to find subdomains like <11>\"sub.example.gc.ca.\"11>6><12><13>End with <14>%14>13>: Search <15><16>example%16> 15>to find domains like <17>\"example.gc.ca\"17> or <18>\"example.canada.ca.\"18>12><19><20>Use both20>: Search <21><22>%example%22> 21>to find anything containing \"example\", like<23>\"sub.example.gc.ca\"23> or <24>\"example.canada.ca.\"24>19>5><25>This helps you quickly locate related domains and subdomains.25>"
msgstr "<0><1>Search Tip: Wildcard <2>%2>1>0><3>Use <4>%4> to broaden your search:3><5><6><7>Start with <8>%8>7>: Search <9><10>%example.gc.ca10>9> to find subdomains like <11>\"sub.example.gc.ca.\"11>6><12><13>End with <14>%14>13>: Search <15><16>example%16> 15>to find domains like <17>\"example.gc.ca\"17> or <18>\"example.canada.ca.\"18>12><19><20>Use both20>: Search <21><22>%example%22> 21>to find anything containing \"example\", like<23>\"sub.example.gc.ca\"23> or <24>\"example.canada.ca.\"24>19>5><25>This helps you quickly locate related domains and subdomains.25>"
+#: src/admin/CvdEnrollmentForm.js:43
+#~ msgid "<0>1. What is Coordinated Vulnerability Disclosure (CVD)?0><1/>A structured process that allows security researchers to report vulnerabilities safely and responsibly. It ensures findings are received, validated, and addressed in an organized way, helping departments fix issues before they can be exploited."
+#~ msgstr "<0>1. What is Coordinated Vulnerability Disclosure (CVD)?0><1/>A structured process that allows security researchers to report vulnerabilities safely and responsibly. It ensures findings are received, validated, and addressed in an organized way, helping departments fix issues before they can be exploited."
+
+#: src/admin/CvdEnrollmentForm.js:47
+msgid "<0>1. What is Coordinated Vulnerability Disclosure (CVD)?0><1/>A structured process that allows security researchers to report vulnerabilities safely and responsibly. It ensures findings are received, validated, and addressed in an organized way, helping organizations fix issues before they can be exploited."
+msgstr "<0>1. What is Coordinated Vulnerability Disclosure (CVD)?0><1/>A structured process that allows security researchers to report vulnerabilities safely and responsibly. It ensures findings are received, validated, and addressed in an organized way, helping organizations fix issues before they can be exploited."
+
+#: src/admin/CvdEnrollmentForm.js:52
+#~ msgid "<0>2. Why enroll your domains?0><1/>Enrolling your internet‑facing assets ensures researchers can report real vulnerabilities directly to the Government of Canada through an approved and safe channel. This improves early detection, reduces security risk, and strengthens your department’s ability to respond quickly and consistently."
+#~ msgstr "<0>2. Why enroll your domains?0><1/>Enrolling your internet‑facing assets ensures researchers can report real vulnerabilities directly to the Government of Canada through an approved and safe channel. This improves early detection, reduces security risk, and strengthens your department’s ability to respond quickly and consistently."
+
+#: src/admin/CvdEnrollmentForm.js:56
+msgid "<0>2. Why enroll your domains?0><1/>Enrolling your internet‑facing assets ensures researchers can report real vulnerabilities directly to the Government of Canada through an approved and safe channel. This improves early detection, reduces security risk, and strengthens your organization’s ability to respond quickly and consistently."
+msgstr "<0>2. Why enroll your domains?0><1/>Enrolling your internet‑facing assets ensures researchers can report real vulnerabilities directly to the Government of Canada through an approved and safe channel. This improves early detection, reduces security risk, and strengthens your organization’s ability to respond quickly and consistently."
+
+#: src/admin/CvdEnrollmentForm.js:63
+#~ msgid "<0>3. Which domains should you enroll?0><1/>Enroll any public, internet‑facing domains or subdomains your department owns—especially production systems that deliver services or expose application functionality. Test or pre‑launch environments may be excluded unless they are publicly accessible."
+#~ msgstr "<0>3. Which domains should you enroll?0><1/>Enroll any public, internet‑facing domains or subdomains your department owns—especially production systems that deliver services or expose application functionality. Test or pre‑launch environments may be excluded unless they are publicly accessible."
+
+#: src/admin/CvdEnrollmentForm.js:67
+msgid "<0>3. Which domains should you enroll?0><1/>Enroll any public, internet‑facing domains or subdomains your organization owns—especially production systems that deliver services or expose application functionality. Test or pre‑launch environments may be excluded unless they are publicly accessible."
+msgstr "<0>3. Which domains should you enroll?0><1/>Enroll any public, internet‑facing domains or subdomains your organization owns—especially production systems that deliver services or expose application functionality. Test or pre‑launch environments may be excluded unless they are publicly accessible."
+
#: src/app/ReadGuidancePage.js:586
msgid "<0>Application Availability0>: This cloud-based web application is to be 95% fully operational from 8:00 AM to 4:00 PM Eastern time on regular business days."
msgstr "<0>Application Availability0>: This cloud-based web application is to be 95% fully operational from 8:00 AM to 4:00 PM Eastern time on regular business days."
@@ -132,14 +159,14 @@ msgstr "<0>Application Availability0>: This cloud-based web application is to
#~ msgid "<0>Application Availability0>: This cloud-based web application is to be 95% fully operational from 8:00 AM to 4:00 PM Eatern time on regular business days."
#~ msgstr "<0>Application Availability0>: This cloud-based web application is to be 95% fully operational from 8:00 AM to 4:00 PM Eatern time on regular business days."
-#: src/user/EditableUserPhoneNumber.js:169
+#: src/user/EditableUserPhoneNumber.js:170
msgid "<0>Current Phone Number:0> {detailValue}"
msgstr "<0>Current Phone Number:0> {detailValue}"
#. placeholder {0}: mxRecords.error
#. placeholder {0}: nsRecords.error
-#: src/guidance/EmailGuidance.js:334
-#: src/guidance/EmailGuidance.js:407
+#: src/guidance/EmailGuidance.js:333
+#: src/guidance/EmailGuidance.js:379
msgid "<0>Error:0> {0}"
msgstr "<0>Error:0> {0}"
@@ -159,20 +186,20 @@ msgstr "<0>Help Desk0>: All enquiries submitted via generic mailboxes <1>track
#~ msgid "<0>Help Desk0>: All enquiries submitted via generic mailboxs tracker@tbs-sct.gc.ca, suivi@tbs-sct.gc.ca will be responded to within 10 business days."
#~ msgstr "<0>Help Desk0>: All enquiries submitted via generic mailboxs tracker@tbs-sct.gc.ca, suivi@tbs-sct.gc.ca will be responded to within 10 business days."
-#: src/guidance/EmailGuidance.js:294
-#: src/guidance/EmailGuidance.js:381
+#: src/guidance/EmailGuidance.js:293
+#: src/guidance/EmailGuidance.js:353
msgid "<0>Hostname:0> {hostname}"
msgstr "<0>Hostname:0> {hostname}"
#. placeholder {0}: addresses.join(', ')
-#: src/guidance/EmailGuidance.js:299
+#: src/guidance/EmailGuidance.js:298
msgid "<0>IPs:0> {0}"
msgstr "<0>IPs:0> {0}"
#. placeholder {0}: formatTimestamp(timestamp)
#. placeholder {0}: formatTimestamp(webTimestamp)
-#: src/guidance/AdditionalFindings.js:80
-#: src/guidance/EmailGuidance.js:114
+#: src/guidance/AdditionalFindings.js:81
+#: src/guidance/EmailGuidance.js:113
#: src/guidance/GuidancePage.js:263
#: src/guidance/WebGuidance.js:175
msgid "<0>Last Scanned:0> {0}"
@@ -182,11 +209,11 @@ msgstr "<0>Last Scanned:0> {0}"
#~ msgid "<0>Note: 0>Domains from outside the GC scope may not be scanned right away"
#~ msgstr "<0>Note: 0>Domains from outside the GC scope may not be scanned right away"
-#: src/admin/TagForm.js:129
+#: src/admin/TagForm.js:130
msgid "<0>Note:0> Tags must not include data that would reclassify the asset above <1>Unclassified, Low Integrity, Low Availability (ULL)1>"
msgstr "<0>Note:0> Tags must not include data that would reclassify the asset above <1>Unclassified, Low Integrity, Low Availability (ULL)1>"
-#: src/guidance/EmailGuidance.js:304
+#: src/guidance/EmailGuidance.js:303
msgid "<0>Preference:0> {preference}"
msgstr "<0>Preference:0> {preference}"
@@ -218,11 +245,11 @@ msgstr "1. Assess"
msgid "2. Deploy"
msgstr "2. Deploy"
-#: src/guidance/AdditionalFindings.js:197
+#: src/guidance/AdditionalFindings.js:198
msgid "2.1 Robust web application frameworks are used to aid in developing secure web applications."
msgstr "2.1 Robust web application frameworks are used to aid in developing secure web applications."
-#: src/guidance/AdditionalFindings.js:244
+#: src/guidance/AdditionalFindings.js:245
msgid "2.4 Web applications implement Content-Security-Policy, HSTS and X-Frame-Options response headers."
msgstr "2.4 Web applications implement Content-Security-Policy, HSTS and X-Frame-Options response headers."
@@ -230,11 +257,11 @@ msgstr "2.4 Web applications implement Content-Security-Policy, HSTS and X-Frame
msgid "3. Enforce"
msgstr "3. Enforce"
-#: src/guidance/AdditionalFindings.js:272
+#: src/guidance/AdditionalFindings.js:273
msgid "3.1.2 Use a denial-of-service mitigation service"
msgstr "3.1.2 Use a denial-of-service mitigation service"
-#: src/guidance/AdditionalFindings.js:303
+#: src/guidance/AdditionalFindings.js:304
msgid "3.1.3 Use GC-approved content delivery networks (CDN) that cache websites and protects access to the origin server."
msgstr "3.1.3 Use GC-approved content delivery networks (CDN) that cache websites and protects access to the origin server."
@@ -262,7 +289,7 @@ msgstr "404 - Page Not Found"
msgid "A DNS request for this service has resulted in the following error code:"
msgstr "A DNS request for this service has resulted in the following error code:"
-#: src/admin/AdminDomains.js:507
+#: src/admin/AdminDomains.js:510
msgid "A domain may only be removed for one of the reasons below. For a domain to no longer exist, it must be removed from the DNS. If you need to remove this domain for a different reason, please contact TBS Cyber Security."
msgstr "A domain may only be removed for one of the reasons below. For a domain to no longer exist, it must be removed from the DNS. If you need to remove this domain for a different reason, please contact TBS Cyber Security."
@@ -270,11 +297,11 @@ msgstr "A domain may only be removed for one of the reasons below. For a domain
msgid "A minimum DMARC policy of “p=none” with at least one address defined as a recipient of aggregate reports"
msgstr "A minimum DMARC policy of “p=none” with at least one address defined as a recipient of aggregate reports"
-#: src/dmarc/DmarcByDomainPage.js:319
+#: src/dmarc/DmarcByDomainPage.js:320
msgid "A more detailed breakdown of each domain can be found by clicking on its address in the first column."
msgstr "A more detailed breakdown of each domain can be found by clicking on its address in the first column."
-#: src/user/EditableUserEmail.js:50
+#: src/user/EditableUserEmail.js:51
msgid "A verification email has been sent to your new email address. Please verify your email address to complete the change."
msgstr "A verification email has been sent to your new email address. Please verify your email address to complete the change."
@@ -282,7 +309,11 @@ msgstr "A verification email has been sent to your new email address. Please ver
#~ msgid "A verification link has been sent to your email account"
#~ msgstr "A verification link has been sent to your email account"
-#: src/guidance/WebTLSResults.js:30
+#: src/admin/CvdEnrollmentForm.js:43
+msgid "About Coordinated Vulnerability Disclosure (CVD)"
+msgstr "About Coordinated Vulnerability Disclosure (CVD)"
+
+#: src/guidance/WebTLSResults.js:31
msgid "acceptable"
msgstr "acceptable"
@@ -306,52 +337,52 @@ msgstr "Access to Information Act."
msgid "Account"
msgstr "Account"
-#: src/admin/SuperAdminUserList.js:87
-#: src/user/UserPage.js:62
+#: src/admin/SuperAdminUserList.js:88
+#: src/user/UserPage.js:63
msgid "Account Closed Successfully"
msgstr "Account Closed Successfully"
-#: src/auth/CreateUserPage.js:43
+#: src/auth/CreateUserPage.js:44
msgid "Account created."
msgstr "Account created."
-#: src/app/App.js:152
-#: src/app/FloatingMenu.js:177
-#: src/user/UserPage.js:111
+#: src/app/App.js:153
+#: src/app/FloatingMenu.js:178
+#: src/user/UserPage.js:112
msgid "Account Settings"
msgstr "Account Settings"
-#: src/createOrganization/CreateOrganizationPage.js:143
-#: src/createOrganization/CreateOrganizationPage.js:144
-#: src/organizations/Organizations.js:93
+#: src/createOrganization/CreateOrganizationPage.js:118
+#: src/createOrganization/CreateOrganizationPage.js:119
+#: src/organizations/Organizations.js:94
msgid "Acronym"
msgstr "Acronym"
-#: src/admin/OrganizationInformation.js:461
+#: src/admin/OrganizationInformation.js:462
msgid "Acronym (EN)"
msgstr "Acronym (EN)"
-#: src/admin/OrganizationInformation.js:464
+#: src/admin/OrganizationInformation.js:465
msgid "Acronym (FR)"
msgstr "Acronym (FR)"
-#: src/admin/OrganizationInformation.js:363
+#: src/admin/OrganizationInformation.js:364
msgid "Acronym:"
msgstr "Acronym:"
-#: src/utilities/fieldRequirements.js:36
+#: src/utilities/fieldRequirements.js:37
msgid "Acronyms can only use upper case letters and underscores"
msgstr "Acronyms can only use upper case letters and underscores"
-#: src/utilities/fieldRequirements.js:37
+#: src/utilities/fieldRequirements.js:38
msgid "Acronyms must be at most 50 characters"
msgstr "Acronyms must be at most 50 characters"
-#: src/admin/AuditLogTable.js:118
+#: src/admin/AuditLogTable.js:119
msgid "Action"
msgstr "Action"
-#: src/admin/AuditLogTable.js:247
+#: src/admin/AuditLogTable.js:248
msgid "Action:"
msgstr "Action:"
@@ -359,23 +390,27 @@ msgstr "Action:"
msgid "Activity"
msgstr "Activity"
-#: src/admin/AuditLogTable.js:84
+#: src/admin/AuditLogTable.js:85
msgid "Add"
msgstr "Add"
-#: src/admin/AdminDomains.js:425
+#: src/admin/CvdEnrollmentForm.js:137
+msgid "Add details about the enrollment (optional)"
+msgstr "Add details about the enrollment (optional)"
+
+#: src/admin/AdminDomains.js:428
msgid "Add Domain"
msgstr "Add Domain"
-#: src/admin/AdminDomainModal.js:234
+#: src/admin/AdminDomainModal.js:258
msgid "Add Domain Details"
msgstr "Add Domain Details"
-#: src/admin/DomainTagsList.js:140
+#: src/admin/DomainTagsList.js:141
msgid "Add Tag"
msgstr "Add Tag"
-#: src/admin/UserListModal.js:219
+#: src/admin/UserListModal.js:220
msgid "Add User"
msgstr "Add User"
@@ -383,8 +418,8 @@ msgstr "Add User"
#~ msgid "Additional findings"
#~ msgstr "Additional findings"
-#: src/guidance/AdditionalFindings.js:45
-#: src/guidance/GuidancePage.js:296
+#: src/guidance/AdditionalFindings.js:46
+#: src/guidance/GuidancePage.js:295
msgid "Additional Findings"
msgstr "Additional Findings"
@@ -392,11 +427,11 @@ msgstr "Additional Findings"
#~ msgid "Additonal findings"
#~ msgstr "Additonal findings"
-#: src/app/App.js:314
+#: src/app/App.js:315
msgid "Admin"
msgstr "Admin"
-#: src/admin/UserListModal.js:261
+#: src/admin/UserListModal.js:262
msgid "ADMIN"
msgstr "ADMIN"
@@ -408,15 +443,15 @@ msgstr "ADMIN"
#~ msgid "Admin accounts must activate a multi-factor authentication option, <0>please activate MFA0>."
#~ msgstr "Admin accounts must activate a multi-factor authentication option, <0>please activate MFA0>."
-#: src/user/UserPage.js:135
+#: src/user/UserPage.js:136
msgid "Admin accounts must activate a multi-factor authentication option."
msgstr "Admin accounts must activate a multi-factor authentication option."
-#: src/app/FloatingMenu.js:179
+#: src/app/FloatingMenu.js:180
msgid "Admin Portal"
msgstr "Admin Portal"
-#: src/app/App.js:160
+#: src/app/App.js:161
msgid "Admin Profile"
msgstr "Admin Profile"
@@ -424,7 +459,7 @@ msgstr "Admin Profile"
msgid "Admins of an organization can add domains to their list."
msgstr "Admins of an organization can add domains to their list."
-#: src/guidance/AdditionalFindings.js:134
+#: src/guidance/AdditionalFindings.js:135
msgid "Affected Components"
msgstr "Affected Components"
@@ -432,7 +467,7 @@ msgstr "Affected Components"
#~ msgid "Affected Components:"
#~ msgstr "Affected Components:"
-#: src/admin/SuperAdminUserList.js:322
+#: src/admin/SuperAdminUserList.js:323
msgid "Affiliations:"
msgstr "Affiliations:"
@@ -441,52 +476,52 @@ msgstr "Affiliations:"
#~ msgstr "All {0} domain(s) on this page are selected."
#. placeholder {0}: domains.length
-#: src/admin/DomainUpdateList.js:277
+#: src/admin/DomainUpdateList.js:278
msgid "All {0} domains on this page are selected."
msgstr "All {0} domains on this page are selected."
-#: src/admin/DomainUpdateList.js:293
+#: src/admin/DomainUpdateList.js:294
msgid "All {domainCount} domains are selected. Updates will apply to all filtered domains, not just this page."
msgstr "All {domainCount} domains are selected. Updates will apply to all filtered domains, not just this page."
-#: src/admin/DomainUpdateList.js:308
+#: src/admin/DomainUpdateList.js:309
msgid "All {domainCount} selected"
msgstr "All {domainCount} selected"
-#: src/summaries/HistoricalSummariesGraph.js:217
+#: src/summaries/HistoricalSummariesGraph.js:218
msgid "All Time"
msgstr "All Time"
-#: src/auth/CreateUserPage.js:154
+#: src/auth/CreateUserPage.js:155
msgid "Already have an account? <0>Log in0>"
msgstr "Already have an account? <0>Log in0>"
-#: src/admin/AdminDomains.js:556
-#: src/organizationDetails/OrganizationDomains.js:262
+#: src/admin/AdminDomains.js:559
+#: src/organizationDetails/OrganizationDomains.js:267
msgid "An asset confirmed to belong to the organization."
msgstr "An asset confirmed to belong to the organization."
-#: src/admin/AdminDomains.js:559
-#: src/organizationDetails/OrganizationDomains.js:265
+#: src/admin/AdminDomains.js:562
+#: src/organizationDetails/OrganizationDomains.js:270
msgid "An asset that is owned by a third party and supports the operation of organization-owned assets."
msgstr "An asset that is owned by a third party and supports the operation of organization-owned assets."
-#: src/admin/AdminDomains.js:563
-#: src/organizationDetails/OrganizationDomains.js:269
+#: src/admin/AdminDomains.js:566
+#: src/organizationDetails/OrganizationDomains.js:274
msgid "An asset that is relevant to the organization but is not a direct part of the attack surface."
msgstr "An asset that is relevant to the organization but is not a direct part of the attack surface."
-#: src/admin/AdminDomains.js:567
-#: src/organizationDetails/OrganizationDomains.js:273
+#: src/admin/AdminDomains.js:570
+#: src/organizationDetails/OrganizationDomains.js:278
msgid "An asset that is suspected to belong to the organization but has not been confirmed."
msgstr "An asset that is suspected to belong to the organization but has not been confirmed."
-#: src/admin/AdminDomains.js:571
-#: src/organizationDetails/OrganizationDomains.js:277
+#: src/admin/AdminDomains.js:574
+#: src/organizationDetails/OrganizationDomains.js:282
msgid "An asset that requires further investigation to determine its relationship to the organization."
msgstr "An asset that requires further investigation to determine its relationship to the organization."
-#: src/auth/ForgotPasswordPage.js:37
+#: src/auth/ForgotPasswordPage.js:38
msgid "An email was sent with a link to reset your password"
msgstr "An email was sent with a link to reset your password"
@@ -507,34 +542,34 @@ msgstr "An error has occurred."
#~ msgid "An error occured when you attempted to sign out"
#~ msgstr "An error occured when you attempted to sign out"
-#: src/userOnboarding/components/TourComponent.js:32
+#: src/userOnboarding/components/TourComponent.js:33
msgid "An error occurred when completing the tour."
msgstr "An error occurred when completing the tour."
-#: src/app/NotificationBanner.js:27
+#: src/app/NotificationBanner.js:28
msgid "An error occurred when dismissing the message."
msgstr "An error occurred when dismissing the message."
-#: src/admin/SuperAdminUserList.js:195
+#: src/admin/SuperAdminUserList.js:196
msgid "An error occurred when fetching this organization's information"
msgstr "An error occurred when fetching this organization's information"
-#: src/domains/DomainsPage.js:64
-#: src/domains/DomainsPage.js:80
+#: src/domains/DomainsPage.js:65
+#: src/domains/DomainsPage.js:81
msgid "An error occurred when you attempted to download all domain statuses."
msgstr "An error occurred when you attempted to download all domain statuses."
-#: src/app/FloatingMenu.js:38
-#: src/app/TopBanner.js:32
+#: src/app/FloatingMenu.js:39
+#: src/app/TopBanner.js:33
msgid "An error occurred when you attempted to sign out"
msgstr "An error occurred when you attempted to sign out"
-#: src/domains/DomainCard.js:52
+#: src/domains/DomainCard.js:54
#: src/guidance/GuidancePage.js:108
msgid "An error occurred while favouriting a domain."
msgstr "An error occurred while favouriting a domain."
-#: src/admin/OrganizationInformation.js:62
+#: src/admin/OrganizationInformation.js:63
msgid "An error occurred while removing this organization."
msgstr "An error occurred while removing this organization."
@@ -542,31 +577,31 @@ msgstr "An error occurred while removing this organization."
msgid "An error occurred while requesting a scan."
msgstr "An error occurred while requesting a scan."
-#: src/domains/SubdomainDiscoveryButton.js:30
+#: src/domains/SubdomainDiscoveryButton.js:31
msgid "An error occurred while requesting subdomain discovery."
msgstr "An error occurred while requesting subdomain discovery."
-#: src/domains/DomainCard.js:78
+#: src/domains/DomainCard.js:80
msgid "An error occurred while unfavouriting a domain."
msgstr "An error occurred while unfavouriting a domain."
-#: src/admin/OrganizationInformation.js:118
+#: src/admin/OrganizationInformation.js:119
msgid "An error occurred while updating this organization."
msgstr "An error occurred while updating this organization."
-#: src/user/EditableUserDisplayName.js:40
+#: src/user/EditableUserDisplayName.js:41
msgid "An error occurred while updating your display name."
msgstr "An error occurred while updating your display name."
-#: src/user/EditableUserEmail.js:38
+#: src/user/EditableUserEmail.js:39
msgid "An error occurred while updating your email address."
msgstr "An error occurred while updating your email address."
-#: src/user/EditableEmailUpdateOptions.js:39
+#: src/user/EditableEmailUpdateOptions.js:40
msgid "An error occurred while updating your email update preference."
msgstr "An error occurred while updating your email update preference."
-#: src/user/InsideUserSwitch.js:19
+#: src/user/InsideUserSwitch.js:20
msgid "An error occurred while updating your inside user preference."
msgstr "An error occurred while updating your inside user preference."
@@ -578,36 +613,36 @@ msgstr "An error occurred while updating your inside user preference."
#~ msgid "An error occurred while updating your language."
#~ msgstr "An error occurred while updating your language."
-#: src/user/EditableUserPassword.js:40
+#: src/user/EditableUserPassword.js:41
msgid "An error occurred while updating your password."
msgstr "An error occurred while updating your password."
-#: src/user/EditableUserPhoneNumber.js:45
+#: src/user/EditableUserPhoneNumber.js:46
msgid "An error occurred while updating your phone number."
msgstr "An error occurred while updating your phone number."
-#: src/user/EditableUserTFAMethod.js:41
+#: src/user/EditableUserTFAMethod.js:42
msgid "An error occurred while updating your TFA send method."
msgstr "An error occurred while updating your TFA send method."
-#: src/user/EditableUserPhoneNumber.js:85
+#: src/user/EditableUserPhoneNumber.js:86
msgid "An error occurred while verifying your phone number."
msgstr "An error occurred while verifying your phone number."
-#: src/admin/AdminDomainModal.js:49
-#: src/admin/AdminDomainModal.js:95
-#: src/admin/AdminDomains.js:132
-#: src/admin/DomainUpdateList.js:56
-#: src/admin/DomainUpdateList.js:103
-#: src/admin/TagForm.js:27
-#: src/admin/TagForm.js:72
-#: src/admin/UserListModal.js:50
-#: src/admin/UserListModal.js:140
-#: src/auth/TwoFactorAuthenticatePage.js:28
-#: src/createOrganization/CreateOrganizationPage.js:42
-#: src/guidance/CveIgnorer.js:19
-#: src/guidance/CveIgnorer.js:68
-#: src/user/UserPage.js:51
+#: src/admin/AdminDomainModal.js:68
+#: src/admin/AdminDomainModal.js:114
+#: src/admin/AdminDomains.js:134
+#: src/admin/DomainUpdateList.js:57
+#: src/admin/DomainUpdateList.js:104
+#: src/admin/TagForm.js:28
+#: src/admin/TagForm.js:73
+#: src/admin/UserListModal.js:51
+#: src/admin/UserListModal.js:141
+#: src/auth/TwoFactorAuthenticatePage.js:29
+#: src/createOrganization/CreateOrganizationPage.js:37
+#: src/guidance/CveIgnorer.js:20
+#: src/guidance/CveIgnorer.js:69
+#: src/user/UserPage.js:52
msgid "An error occurred."
msgstr "An error occurred."
@@ -631,9 +666,9 @@ msgstr "Any products or related services provided to you by TBS are and will rem
#~ msgid "Application Portfolio Management (APM) systems; and"
#~ msgstr "Application Portfolio Management (APM) systems; and"
-#: src/admin/AdminDomains.js:301
-#: src/admin/DomainUpdateList.js:337
-#: src/domains/DomainListFilters.js:169
+#: src/admin/AdminDomains.js:306
+#: src/admin/DomainUpdateList.js:338
+#: src/domains/DomainListFilters.js:170
msgid "Apply"
msgstr "Apply"
@@ -645,22 +680,22 @@ msgstr "Apply filters to refine the organization list."
msgid "Apply filters to refine your domain search results."
msgstr "Apply filters to refine your domain search results."
-#: src/admin/DomainUpdateList.js:320
+#: src/admin/DomainUpdateList.js:321
msgid "Apply Tags"
msgstr "Apply Tags"
-#: src/admin/AdminDomainCard.js:8
-#: src/admin/AdminDomainModal.js:293
-#: src/admin/AdminDomains.js:279
-#: src/admin/AdminDomains.js:556
-#: src/domains/DomainCard.js:111
+#: src/admin/AdminDomainCard.js:9
+#: src/admin/AdminDomainModal.js:317
+#: src/admin/AdminDomains.js:284
+#: src/admin/AdminDomains.js:559
+#: src/domains/DomainCard.js:113
#: src/domains/FilterList.js:22
-#: src/organizationDetails/OrganizationDomains.js:124
-#: src/organizationDetails/OrganizationDomains.js:262
+#: src/organizationDetails/OrganizationDomains.js:127
+#: src/organizationDetails/OrganizationDomains.js:267
msgid "Approved"
msgstr "Approved"
-#: src/organizationDetails/OrganizationDomains.js:124
+#: src/organizationDetails/OrganizationDomains.js:127
msgid "APPROVED"
msgstr "APPROVED"
@@ -669,35 +704,35 @@ msgstr "APPROVED"
msgid "April"
msgstr "April"
-#: src/admin/AdminDomainModal.js:352
+#: src/admin/AdminDomainModal.js:383
msgid "Archive domain"
msgstr "Archive domain"
-#: src/admin/AdminDomains.js:186
-#: src/domains/DomainCard.js:147
-#: src/domains/DomainsPage.js:139
-#: src/organizationDetails/OrganizationDomains.js:119
+#: src/admin/AdminDomains.js:188
+#: src/domains/DomainCard.js:149
+#: src/domains/DomainsPage.js:141
+#: src/organizationDetails/OrganizationDomains.js:120
msgid "Archived"
msgstr "Archived"
-#: src/admin/AdminDomainCard.js:48
+#: src/admin/AdminDomainCard.js:57
msgid "ARCHIVED"
msgstr "ARCHIVED"
-#: src/admin/DomainUpdateList.js:355
+#: src/admin/DomainUpdateList.js:356
msgid "Are you sure you want to apply these tag changes?"
msgstr "Are you sure you want to apply these tag changes?"
-#: src/guidance/CveIgnorer.js:124
+#: src/guidance/CveIgnorer.js:125
msgid "Are you sure you want to ignore this CVE?"
msgstr "Are you sure you want to ignore this CVE?"
#. placeholder {0}: org.name
-#: src/admin/OrganizationInformation.js:432
+#: src/admin/OrganizationInformation.js:433
msgid "Are you sure you want to permanently remove the organization \"{0}\"?"
msgstr "Are you sure you want to permanently remove the organization \"{0}\"?"
-#: src/guidance/CveIgnorer.js:122
+#: src/guidance/CveIgnorer.js:123
msgid "Are you sure you want to stop ignoring this CVE?"
msgstr "Are you sure you want to stop ignoring this CVE?"
@@ -709,33 +744,33 @@ msgstr "Are you sure you want to stop ignoring this CVE?"
#~ msgid "Are you sure you wish to leave {orgName}? You will have to be invited back in to access it."
#~ msgstr "Are you sure you wish to leave {orgName}? You will have to be invited back in to access it."
-#: src/admin/DomainUpdateList.js:348
+#: src/admin/DomainUpdateList.js:349
msgid "Are you sure?"
msgstr "Are you sure?"
-#: src/domains/DomainListFilters.js:45
+#: src/domains/DomainListFilters.js:46
#: src/domains/FilterList.js:30
-#: src/guidance/DmarcPhaseStepper.js:22
+#: src/guidance/DmarcPhaseStepper.js:23
msgid "Assess"
msgstr "Assess"
-#: src/domains/ScanDomain.js:115
-#: src/guidance/DmarcPhaseStepper.js:25
+#: src/domains/ScanDomain.js:116
+#: src/guidance/DmarcPhaseStepper.js:26
msgid "Assess current state;"
msgstr "Assess current state;"
-#: src/admin/AdminDomainModal.js:281
-#: src/admin/AdminDomains.js:240
-#: src/domains/DomainListFilters.js:109
+#: src/admin/AdminDomainModal.js:305
+#: src/admin/AdminDomains.js:245
+#: src/domains/DomainListFilters.js:110
msgid "Asset State"
msgstr "Asset State"
-#: src/admin/AdminDomains.js:550
+#: src/admin/AdminDomains.js:553
msgid "Asset States"
msgstr "Asset States"
-#: src/admin/AdminPage.js:239
-#: src/admin/AuditLogTable.js:96
+#: src/admin/AdminPage.js:240
+#: src/admin/AuditLogTable.js:97
msgid "Audit Logs"
msgstr "Audit Logs"
@@ -744,14 +779,18 @@ msgstr "Audit Logs"
msgid "August"
msgstr "August"
-#: src/app/App.js:235
+#: src/app/App.js:236
msgid "Authenticate"
msgstr "Authenticate"
-#: src/auth/ForgotPasswordPage.js:87
-#: src/createOrganization/CreateOrganizationPage.js:158
-#: src/guidance/CveIgnorer.js:129
-#: src/userOnboarding/components/TourComponent.js:106
+#: src/admin/CvdEnrollmentForm.js:231
+msgid "Availability Requirement"
+msgstr "Availability Requirement"
+
+#: src/auth/ForgotPasswordPage.js:88
+#: src/createOrganization/CreateOrganizationPage.js:127
+#: src/guidance/CveIgnorer.js:130
+#: src/userOnboarding/components/TourComponent.js:107
msgid "Back"
msgstr "Back"
@@ -767,24 +806,24 @@ msgstr "Back"
msgid "Below are steps on how government organizations can leverage the Tracker platform:"
msgstr "Below are steps on how government organizations can leverage the Tracker platform:"
-#: src/app/TopBanner.js:84
+#: src/app/TopBanner.js:85
msgid "BETA"
msgstr "BETA"
-#: src/admin/OrganizationInformation.js:295
+#: src/admin/OrganizationInformation.js:296
msgid "Blank fields will not be included when updating the organization."
msgstr "Blank fields will not be included when updating the organization."
-#: src/admin/AdminDomains.js:182
-#: src/domains/DomainCard.js:152
-#: src/domains/DomainsPage.js:138
+#: src/admin/AdminDomains.js:184
+#: src/domains/DomainCard.js:154
+#: src/domains/DomainsPage.js:140
#: src/guidance/WebGuidance.js:108
-#: src/organizationDetails/OrganizationDomains.js:115
+#: src/organizationDetails/OrganizationDomains.js:116
msgid "Blocked"
msgstr "Blocked"
-#: src/domains/DomainsPage.js:311
-#: src/organizationDetails/OrganizationDomains.js:254
+#: src/domains/DomainsPage.js:315
+#: src/organizationDetails/OrganizationDomains.js:259
msgid "BLOCKED"
msgstr "BLOCKED"
@@ -816,25 +855,25 @@ msgstr "Canadians rely on the Government of Canada to provide secure digital ser
msgid "Canadians rely on the Government of Canada to provide secure digital services. The Policy on Service and Digital guides government online services to adopt good security practices for practices outlined in the <0>email<1/>0> and <2>web<3/>2> services. Track how government sites are becoming more secure."
msgstr "Canadians rely on the Government of Canada to provide secure digital services. The Policy on Service and Digital guides government online services to adopt good security practices for practices outlined in the <0>email<1/>0> and <2>web<3/>2> services. Track how government sites are becoming more secure."
-#: src/admin/DomainUpdateList.js:363
-#: src/admin/SuperAdminUserList.js:423
-#: src/components/ExportButton.js:93
-#: src/user/UserPage.js:215
+#: src/admin/DomainUpdateList.js:364
+#: src/admin/SuperAdminUserList.js:424
+#: src/components/ExportButton.js:94
+#: src/user/UserPage.js:216
msgid "Cancel"
msgstr "Cancel"
-#: src/admin/AdminDomainCard.js:11
-#: src/admin/AdminDomainModal.js:302
-#: src/admin/AdminDomains.js:288
-#: src/admin/AdminDomains.js:566
-#: src/domains/DomainCard.js:114
+#: src/admin/AdminDomainCard.js:12
+#: src/admin/AdminDomainModal.js:326
+#: src/admin/AdminDomains.js:293
+#: src/admin/AdminDomains.js:569
+#: src/domains/DomainCard.js:116
#: src/domains/FilterList.js:25
-#: src/organizationDetails/OrganizationDomains.js:127
-#: src/organizationDetails/OrganizationDomains.js:272
+#: src/organizationDetails/OrganizationDomains.js:130
+#: src/organizationDetails/OrganizationDomains.js:277
msgid "Candidate"
msgstr "Candidate"
-#: src/organizationDetails/OrganizationDomains.js:127
+#: src/organizationDetails/OrganizationDomains.js:130
msgid "CANDIDATE"
msgstr "CANDIDATE"
@@ -850,11 +889,11 @@ msgstr "CCCS has updated their <0>list of recommended TLS cipher suites and elli
#~ msgid "CCS Injection Vulnerability:"
#~ msgstr "CCS Injection Vulnerability:"
-#: src/guidance/WebTLSResults.js:251
+#: src/guidance/WebTLSResults.js:252
msgid "Certificate Chain"
msgstr "Certificate Chain"
-#: src/guidance/WebTLSResults.js:259
+#: src/guidance/WebTLSResults.js:260
msgid "Certificate chain info could not be found during the scan."
msgstr "Certificate chain info could not be found during the scan."
@@ -862,31 +901,31 @@ msgstr "Certificate chain info could not be found during the scan."
msgid "Certificate is valid and configured to use strong protocols, ciphers, and curves"
msgstr "Certificate is valid and configured to use strong protocols, ciphers, and curves"
-#: src/domains/DomainCard.js:206
-#: src/domains/DomainsPage.js:295
-#: src/organizationDetails/OrganizationDomains.js:232
+#: src/domains/DomainCard.js:216
+#: src/domains/DomainsPage.js:299
+#: src/organizationDetails/OrganizationDomains.js:237
msgid "Certificates"
msgstr "Certificates"
-#: src/domains/DomainsPage.js:127
-#: src/organizationDetails/OrganizationDomains.js:101
+#: src/domains/DomainsPage.js:129
+#: src/organizationDetails/OrganizationDomains.js:102
msgid "Certificates Status"
msgstr "Certificates Status"
-#: src/guidance/WebTLSResults.js:458
+#: src/guidance/WebTLSResults.js:459
msgid "Certification Paths"
msgstr "Certification Paths"
-#: src/auth/ResetPasswordPage.js:109
-#: src/user/EditableUserPassword.js:153
+#: src/auth/ResetPasswordPage.js:110
+#: src/user/EditableUserPassword.js:154
msgid "Change Password"
msgstr "Change Password"
-#: src/user/EditableUserTFAMethod.js:52
+#: src/user/EditableUserTFAMethod.js:53
msgid "Changed TFA Send Method"
msgstr "Changed TFA Send Method"
-#: src/user/EditableUserDisplayName.js:51
+#: src/user/EditableUserDisplayName.js:52
msgid "Changed User Display Name"
msgstr "Changed User Display Name"
@@ -898,15 +937,15 @@ msgstr "Changed User Display Name"
#~ msgid "Changed User Language"
#~ msgstr "Changed User Language"
-#: src/user/EditableUserPassword.js:54
+#: src/user/EditableUserPassword.js:55
msgid "Changed User Password"
msgstr "Changed User Password"
-#: src/user/EditableUserPhoneNumber.js:96
+#: src/user/EditableUserPhoneNumber.js:97
msgid "Changed User Phone Number"
msgstr "Changed User Phone Number"
-#: src/domains/ScanDomain.js:276
+#: src/domains/ScanDomain.js:277
msgid "Changes Required for ITPIN Compliance"
msgstr "Changes Required for ITPIN Compliance"
@@ -915,8 +954,8 @@ msgstr "Changes Required for ITPIN Compliance"
#~ msgstr "Changes required for Web Sites and Services Management Configuration Requirements compliance"
#: src/guidance/EmailGuidance.js:344
-msgid "Changes:"
-msgstr "Changes:"
+#~ msgid "Changes:"
+#~ msgstr "Changes:"
#: src/userOnboarding/config/tourSteps.js:183
#~ msgid "Check if your organization is already included in our monitored list. If not, you can create a free account to access an overview of your organization's digital footprint and potential vulnerabilities."
@@ -934,40 +973,40 @@ msgstr "Check if your organization is already included. If not, create a free ac
#~ msgid "Choose the period of data to view"
#~ msgstr "Choose the period of data to view"
-#: src/guidance/WebTLSResults.js:96
+#: src/guidance/WebTLSResults.js:97
msgid "Cipher Suites"
msgstr "Cipher Suites"
-#: src/domains/DomainCard.js:208
-#: src/domains/DomainsPage.js:297
-#: src/organizationDetails/OrganizationDomains.js:234
+#: src/domains/DomainCard.js:218
+#: src/domains/DomainsPage.js:301
+#: src/organizationDetails/OrganizationDomains.js:239
msgid "Ciphers"
msgstr "Ciphers"
-#: src/domains/DomainsPage.js:128
-#: src/organizationDetails/OrganizationDomains.js:102
+#: src/domains/DomainsPage.js:130
+#: src/organizationDetails/OrganizationDomains.js:103
msgid "Ciphers Status"
msgstr "Ciphers Status"
#: src/createOrganization/CreateOrganizationPage.js:146
#: src/createOrganization/CreateOrganizationPage.js:147
-msgid "City"
-msgstr "City"
+#~ msgid "City"
+#~ msgstr "City"
-#: src/admin/OrganizationInformation.js:317
+#: src/admin/OrganizationInformation.js:318
msgid "City (EN)"
msgstr "City (EN)"
-#: src/admin/OrganizationInformation.js:320
+#: src/admin/OrganizationInformation.js:321
msgid "City (FR)"
msgstr "City (FR)"
-#: src/admin/OrganizationInformation.js:370
+#: src/admin/OrganizationInformation.js:371
msgid "City:"
msgstr "City:"
-#: src/admin/OrganizationInformation.js:330
-#: src/admin/TagForm.js:225
+#: src/admin/OrganizationInformation.js:331
+#: src/admin/TagForm.js:226
msgid "Clear"
msgstr "Clear"
@@ -983,7 +1022,7 @@ msgstr "Click for additional information on statuses, tags, and filters."
msgid "Click for guidance on getting started with Tracker and frequently asked questions."
msgstr "Click for guidance on getting started with Tracker and frequently asked questions."
-#: src/admin/AdminPage.js:141
+#: src/admin/AdminPage.js:142
msgid "Click here."
msgstr "Click here."
@@ -991,34 +1030,34 @@ msgstr "Click here."
msgid "Click to view detailed scan results and guidance."
msgstr "Click to view detailed scan results and guidance."
-#: src/admin/OrganizationInformation.js:339
-#: src/admin/TagForm.js:243
-#: src/app/FloatingMenu.js:267
+#: src/admin/OrganizationInformation.js:340
+#: src/admin/TagForm.js:244
+#: src/app/FloatingMenu.js:268
msgid "Close"
msgstr "Close"
-#: src/admin/SuperAdminUserList.js:337
-#: src/admin/SuperAdminUserList.js:403
-#: src/user/UserPage.js:171
-#: src/user/UserPage.js:198
+#: src/admin/SuperAdminUserList.js:338
+#: src/admin/SuperAdminUserList.js:404
+#: src/user/UserPage.js:172
+#: src/user/UserPage.js:199
msgid "Close Account"
msgstr "Close Account"
-#: src/guidance/EmailGuidance.js:273
+#: src/guidance/EmailGuidance.js:272
msgid "CNAME:"
msgstr "CNAME:"
-#: src/utilities/fieldRequirements.js:30
+#: src/utilities/fieldRequirements.js:29
msgid "Code field must not be empty"
msgstr "Code field must not be empty"
-#: src/domains/ScanDomain.js:117
-#: src/guidance/DmarcPhaseStepper.js:27
+#: src/domains/ScanDomain.js:118
+#: src/guidance/DmarcPhaseStepper.js:28
msgid "Collect and analyze DMARC reports."
msgstr "Collect and analyze DMARC reports."
-#: src/admin/AdminDomains.js:250
-#: src/domains/DomainListFilters.js:146
+#: src/admin/AdminDomains.js:255
+#: src/domains/DomainListFilters.js:147
msgid "Comparison"
msgstr "Comparison"
@@ -1026,10 +1065,14 @@ msgstr "Comparison"
msgid "Compliant"
msgstr "Compliant"
-#: src/guidance/AdditionalFindings.js:131
+#: src/guidance/AdditionalFindings.js:132
msgid "Confidence Level"
msgstr "Confidence Level"
+#: src/admin/CvdEnrollmentForm.js:175
+msgid "Confidentiality Requirement"
+msgstr "Confidentiality Requirement"
+
#: src/summaries/TierThreeSummaries.js:18
msgid "Configuration requirements for email services completely met"
msgstr "Configuration requirements for email services completely met"
@@ -1038,27 +1081,27 @@ msgstr "Configuration requirements for email services completely met"
msgid "Configuration requirements for web sites and services completely met"
msgstr "Configuration requirements for web sites and services completely met"
-#: src/admin/AdminDomainModal.js:323
-#: src/admin/AdminDomains.js:542
-#: src/admin/OrganizationInformation.js:347
-#: src/admin/OrganizationInformation.js:445
-#: src/admin/SuperAdminUserList.js:427
-#: src/admin/TagForm.js:246
-#: src/admin/UserListModal.js:277
-#: src/domains/SubdomainDiscoveryButton.js:92
-#: src/guidance/CveIgnorer.js:157
-#: src/organizations/RequestOrgInviteModal.js:75
-#: src/user/EditableEmailUpdateOptions.js:226
-#: src/user/EditableUserDisplayName.js:168
-#: src/user/EditableUserEmail.js:136
-#: src/user/EditableUserPassword.js:182
-#: src/user/EditableUserPhoneNumber.js:186
-#: src/user/EditableUserPhoneNumber.js:244
-#: src/user/UserPage.js:219
+#: src/admin/AdminDomainModal.js:354
+#: src/admin/AdminDomains.js:545
+#: src/admin/OrganizationInformation.js:348
+#: src/admin/OrganizationInformation.js:446
+#: src/admin/SuperAdminUserList.js:428
+#: src/admin/TagForm.js:247
+#: src/admin/UserListModal.js:278
+#: src/domains/SubdomainDiscoveryButton.js:93
+#: src/guidance/CveIgnorer.js:158
+#: src/organizations/RequestOrgInviteModal.js:76
+#: src/user/EditableEmailUpdateOptions.js:227
+#: src/user/EditableUserDisplayName.js:169
+#: src/user/EditableUserEmail.js:137
+#: src/user/EditableUserPassword.js:183
+#: src/user/EditableUserPhoneNumber.js:187
+#: src/user/EditableUserPhoneNumber.js:245
+#: src/user/UserPage.js:220
msgid "Confirm"
msgstr "Confirm"
-#: src/user/EditableUserPassword.js:170
+#: src/user/EditableUserPassword.js:171
msgid "Confirm New Password:"
msgstr "Confirm New Password:"
@@ -1066,7 +1109,7 @@ msgstr "Confirm New Password:"
msgid "Confirm Password:"
msgstr "Confirm Password:"
-#: src/admin/AdminDomains.js:502
+#: src/admin/AdminDomains.js:505
msgid "Confirm removal of domain:"
msgstr "Confirm removal of domain:"
@@ -1074,11 +1117,11 @@ msgstr "Confirm removal of domain:"
#~ msgid "Confirm removal of user:"
#~ msgstr "Confirm removal of user:"
-#: src/domains/SubdomainDiscoveryButton.js:71
+#: src/domains/SubdomainDiscoveryButton.js:72
msgid "Confirm subdomain discovery for <0>{domainUrl}0>:"
msgstr "Confirm subdomain discovery for <0>{domainUrl}0>:"
-#: src/guidance/WebConnectionResults.js:103
+#: src/guidance/WebConnectionResults.js:117
msgid "Connection Results"
msgstr "Connection Results"
@@ -1086,7 +1129,7 @@ msgstr "Connection Results"
msgid "Consider prioritizing websites and web services that exchange Protected data."
msgstr "Consider prioritizing websites and web services that exchange Protected data."
-#: src/app/FloatingMenu.js:238
+#: src/app/FloatingMenu.js:239
msgid "Contact"
msgstr "Contact"
@@ -1098,14 +1141,15 @@ msgstr "Contact the Tracker Team"
msgid "contact us"
msgstr "contact us"
-#: src/app/App.js:271
-#: src/app/App.js:431
+#: src/admin/CvdEnrollmentForm.js:84
+#: src/app/App.js:272
+#: src/app/App.js:432
#: src/app/ContactUsPage.js:52
#: src/app/SlideMessage.js:103
msgid "Contact Us"
msgstr "Contact Us"
-#: src/guidance/AdditionalFindings.js:297
+#: src/guidance/AdditionalFindings.js:298
msgid "Content Delivery Network"
msgstr "Content Delivery Network"
@@ -1117,29 +1161,29 @@ msgstr "Continue"
msgid "Copyright Act"
msgstr "Copyright Act"
-#: src/domains/ScanDomain.js:132
-#: src/guidance/DmarcPhaseStepper.js:51
+#: src/domains/ScanDomain.js:133
+#: src/guidance/DmarcPhaseStepper.js:52
msgid "Correct misconfigurations and update records as required; and"
msgstr "Correct misconfigurations and update records as required; and"
#: src/createOrganization/CreateOrganizationPage.js:152
#: src/createOrganization/CreateOrganizationPage.js:153
-msgid "Country"
-msgstr "Country"
+#~ msgid "Country"
+#~ msgstr "Country"
-#: src/admin/OrganizationInformation.js:305
+#: src/admin/OrganizationInformation.js:306
msgid "Country (EN)"
msgstr "Country (EN)"
-#: src/admin/OrganizationInformation.js:308
+#: src/admin/OrganizationInformation.js:309
msgid "Country (FR)"
msgstr "Country (FR)"
-#: src/admin/OrganizationInformation.js:383
+#: src/admin/OrganizationInformation.js:384
msgid "Country:"
msgstr "Country:"
-#: src/admin/AuditLogTable.js:83
+#: src/admin/AuditLogTable.js:84
msgid "Create"
msgstr "Create"
@@ -1147,14 +1191,14 @@ msgstr "Create"
msgid "Create a free account to gain visibility into your organization's digital footprint and access a dynamic inventory of your web infrastructure."
msgstr "Create a free account to gain visibility into your organization's digital footprint and access a dynamic inventory of your web infrastructure."
-#: src/app/FloatingMenu.js:200
-#: src/app/TopBanner.js:110
-#: src/app/TopBanner.js:148
-#: src/auth/CreateUserPage.js:150
+#: src/app/FloatingMenu.js:201
+#: src/app/TopBanner.js:111
+#: src/app/TopBanner.js:149
+#: src/auth/CreateUserPage.js:151
msgid "Create Account"
msgstr "Create Account"
-#: src/app/App.js:223
+#: src/app/App.js:224
msgid "Create an Account"
msgstr "Create an Account"
@@ -1162,13 +1206,13 @@ msgstr "Create an Account"
#~ msgid "Create an account by entering an email and password."
#~ msgstr "Create an account by entering an email and password."
-#: src/createOrganization/CreateOrganizationPage.js:127
+#: src/createOrganization/CreateOrganizationPage.js:110
msgid "Create an organization"
msgstr "Create an organization"
-#: src/admin/AdminPage.js:168
-#: src/app/App.js:393
-#: src/createOrganization/CreateOrganizationPage.js:162
+#: src/admin/AdminPage.js:169
+#: src/app/App.js:394
+#: src/createOrganization/CreateOrganizationPage.js:131
msgid "Create Organization"
msgstr "Create Organization"
@@ -1176,20 +1220,21 @@ msgstr "Create Organization"
#~ msgid "Create your free account to unlock visibility into your organization's digital footprint. Upon signing up, you'll gain access to a dynamic inventory of web infrastructure under your management."
#~ msgstr "Create your free account to unlock visibility into your organization's digital footprint. Upon signing up, you'll gain access to a dynamic inventory of web infrastructure under your management."
-#: src/guidance/AdditionalFindings.js:33
-#: src/guidance/IgnoredCves.js:8
+#: src/admin/CvdEnrollmentForm.js:167
+#: src/guidance/AdditionalFindings.js:34
+#: src/guidance/IgnoredCves.js:9
msgid "Critical"
msgstr "Critical"
-#: src/user/EditableUserDisplayName.js:148
+#: src/user/EditableUserDisplayName.js:149
msgid "Current Display Name:"
msgstr "Current Display Name:"
-#: src/user/EditableUserEmail.js:125
+#: src/user/EditableUserEmail.js:126
msgid "Current Email:"
msgstr "Current Email:"
-#: src/user/EditableUserPassword.js:160
+#: src/user/EditableUserPassword.js:161
msgid "Current Password:"
msgstr "Current Password:"
@@ -1197,32 +1242,56 @@ msgstr "Current Password:"
#~ msgid "Current Phone Number:"
#~ msgstr "Current Phone Number:"
-#: src/admin/DomainUpdateList.js:264
+#: src/admin/DomainUpdateList.js:265
msgid "Current Tags"
msgstr "Current Tags"
-#: src/domains/DomainCard.js:209
-#: src/domains/DomainsPage.js:298
+#: src/domains/DomainCard.js:219
+#: src/domains/DomainsPage.js:302
#: src/domains/FilterList.js:14
-#: src/guidance/WebTLSResults.js:146
-#: src/organizationDetails/OrganizationDomains.js:235
+#: src/guidance/WebTLSResults.js:147
+#: src/organizationDetails/OrganizationDomains.js:240
msgid "Curves"
msgstr "Curves"
-#: src/domains/DomainsPage.js:129
-#: src/organizationDetails/OrganizationDomains.js:103
+#: src/domains/DomainsPage.js:131
+#: src/organizationDetails/OrganizationDomains.js:104
msgid "Curves Status"
msgstr "Curves Status"
+#. placeholder {0}: cvdEnrollment.status
+#: src/admin/AdminDomainCard.js:45
+#: src/domains/DomainCard.js:202
+msgid "CVD {0}"
+msgstr "CVD {0}"
+
+#: src/admin/AdminDomains.js:192
+#: src/organizationDetails/OrganizationDomains.js:123
+msgid "CVD Denied"
+msgstr "CVD Denied"
+
+#: src/admin/AdminDomains.js:190
+#: src/organizationDetails/OrganizationDomains.js:122
+msgid "CVD Enrolled"
+msgstr "CVD Enrolled"
+
+#: src/admin/CvdEnrollmentForm.js:32
+msgid "CVD Enrollment Status"
+msgstr "CVD Enrollment Status"
+
+#: src/admin/AdminDomains.js:191
+msgid "CVD Pending"
+msgstr "CVD Pending"
+
#: src/organizationDetails/OrganizationDomains.js:101
#~ msgid "CVE Detected"
#~ msgstr "CVE Detected"
-#: src/guidance/AdditionalFindings.js:125
+#: src/guidance/AdditionalFindings.js:126
msgid "CVE ID"
msgstr "CVE ID"
-#: src/guidance/CveIgnorer.js:30
+#: src/guidance/CveIgnorer.js:31
msgid "CVE ignored"
msgstr "CVE ignored"
@@ -1230,21 +1299,25 @@ msgstr "CVE ignored"
msgid "Data Handling"
msgstr "Data Handling"
+#: src/guidance/SecurityTxt.js:12
+msgid "Data not available for this service. Try rescanning or come back later."
+msgstr "Data not available for this service. Try rescanning or come back later."
+
#: src/termsConditions/TermsConditionsPage.js:114
msgid "Data Security and Use"
msgstr "Data Security and Use"
-#: src/dmarc/DmarcReportSummaryGraph.js:114
-#: src/summaries/HistoricalSummariesGraph.js:244
+#: src/dmarc/DmarcReportSummaryGraph.js:115
+#: src/summaries/HistoricalSummariesGraph.js:245
msgid "Data:"
msgstr "Data:"
-#: src/guidance/AdditionalFindings.js:266
+#: src/guidance/AdditionalFindings.js:267
msgid "DDOS Protection"
msgstr "DDOS Protection"
-#: src/user/EditableEmailUpdateOptions.js:121
-#: src/user/EditableEmailUpdateOptions.js:218
+#: src/user/EditableEmailUpdateOptions.js:122
+#: src/user/EditableEmailUpdateOptions.js:219
msgid "Decay Detection"
msgstr "Decay Detection"
@@ -1253,67 +1326,75 @@ msgstr "Decay Detection"
msgid "December"
msgstr "December"
-#: src/guidance/EmailGuidance.js:146
+#: src/guidance/EmailGuidance.js:145
msgid "Default:"
msgstr "Default:"
-#: src/admin/AuditLogTable.js:87
+#: src/admin/AuditLogTable.js:88
msgid "Delete"
msgstr "Delete"
+#: src/admin/CvdEnrollmentForm.js:112
+msgid "Denied"
+msgstr "Denied"
+
#: src/app/ReadGuidancePage.js:63
#~ msgid "Departmental business units"
#~ msgstr "Departmental business units"
-#: src/admin/AdminDomainCard.js:9
-#: src/admin/AdminDomainModal.js:296
-#: src/admin/AdminDomains.js:282
-#: src/admin/AdminDomains.js:558
-#: src/domains/DomainCard.js:112
+#: src/admin/AdminDomainCard.js:10
+#: src/admin/AdminDomainModal.js:320
+#: src/admin/AdminDomains.js:287
+#: src/admin/AdminDomains.js:561
+#: src/domains/DomainCard.js:114
#: src/domains/FilterList.js:23
-#: src/organizationDetails/OrganizationDomains.js:125
-#: src/organizationDetails/OrganizationDomains.js:264
+#: src/organizationDetails/OrganizationDomains.js:128
+#: src/organizationDetails/OrganizationDomains.js:269
msgid "Dependency"
msgstr "Dependency"
-#: src/organizationDetails/OrganizationDomains.js:125
+#: src/organizationDetails/OrganizationDomains.js:128
msgid "DEPENDENCY"
msgstr "DEPENDENCY"
-#: src/domains/DomainListFilters.js:46
+#: src/domains/DomainListFilters.js:47
#: src/domains/FilterList.js:31
-#: src/guidance/DmarcPhaseStepper.js:31
+#: src/guidance/DmarcPhaseStepper.js:32
msgid "Deploy"
msgstr "Deploy"
-#: src/domains/ScanDomain.js:122
-#: src/guidance/DmarcPhaseStepper.js:35
+#: src/domains/ScanDomain.js:123
+#: src/guidance/DmarcPhaseStepper.js:36
msgid "Deploy DKIM records and keys for all domains and senders; and"
msgstr "Deploy DKIM records and keys for all domains and senders; and"
-#: src/domains/ScanDomain.js:116
-#: src/guidance/DmarcPhaseStepper.js:26
+#: src/domains/ScanDomain.js:117
+#: src/guidance/DmarcPhaseStepper.js:27
msgid "Deploy initial DMARC records with policy of none; and"
msgstr "Deploy initial DMARC records with policy of none; and"
-#: src/domains/ScanDomain.js:121
-#: src/guidance/DmarcPhaseStepper.js:34
+#: src/domains/ScanDomain.js:122
+#: src/guidance/DmarcPhaseStepper.js:35
msgid "Deploy SPF records for all domains;"
msgstr "Deploy SPF records for all domains;"
-#: src/admin/TagForm.js:196
+#: src/admin/CvdEnrollmentForm.js:124
+msgid "Description"
+msgstr "Description"
+
+#: src/admin/TagForm.js:197
msgid "Description (EN)"
msgstr "Description (EN)"
-#: src/admin/TagForm.js:199
+#: src/admin/TagForm.js:200
msgid "Description (FR)"
msgstr "Description (FR)"
-#: src/dmarc/DmarcReportPage.js:265
+#: src/dmarc/DmarcReportPage.js:266
msgid "Details for a given guidance tag can be found on the wiki, see below."
msgstr "Details for a given guidance tag can be found on the wiki, see below."
-#: src/guidance/IgnoredCves.js:17
+#: src/guidance/IgnoredCves.js:18
msgid "Detected Ignored CVEs:"
msgstr "Detected Ignored CVEs:"
@@ -1329,11 +1410,11 @@ msgstr "Develop a prioritized schedule to address any failings:"
#~ msgid "Develop a prioritized schedule to address any failings. Consider prioritizing websites and web services that exchange Protected data."
#~ msgstr "Develop a prioritized schedule to address any failings. Consider prioritizing websites and web services that exchange Protected data."
-#: src/domains/SubdomainDiscoveryButton.js:65
+#: src/domains/SubdomainDiscoveryButton.js:66
msgid "Discover Subdomains"
msgstr "Discover Subdomains"
-#: src/admin/SuperAdminUserList.js:145
+#: src/admin/SuperAdminUserList.js:146
#: src/components/fields/DisplayNameField.js:14
msgid "Display Name"
msgstr "Display Name"
@@ -1343,38 +1424,38 @@ msgid "Display name cannot be empty"
msgstr "Display name cannot be empty"
#: src/components/fields/DisplayNameField.js:12
-#: src/user/EditableUserDisplayName.js:88
+#: src/user/EditableUserDisplayName.js:89
msgid "Display Name:"
msgstr "Display Name:"
-#: src/organizations/Organizations.js:193
+#: src/organizations/Organizations.js:194
msgid "Displays the Name of the organization, its acronym, and a blue check mark if it is a verified organization."
msgstr "Displays the Name of the organization, its acronym, and a blue check mark if it is a verified organization."
-#: src/dmarc/DmarcReportPage.js:226
+#: src/dmarc/DmarcReportPage.js:227
msgid "Disposition"
msgstr "Disposition"
-#: src/domains/DomainsPage.js:302
-#: src/organizationDetails/OrganizationDomains.js:239
+#: src/domains/DomainsPage.js:306
+#: src/organizationDetails/OrganizationDomains.js:244
msgid "DKIM"
msgstr "DKIM"
-#: src/dmarc/DmarcReportPage.js:218
+#: src/dmarc/DmarcReportPage.js:219
msgid "DKIM Aligned"
msgstr "DKIM Aligned"
-#: src/dmarc/DmarcReportPage.js:182
+#: src/dmarc/DmarcReportPage.js:183
msgid "DKIM Domains"
msgstr "DKIM Domains"
-#: src/dmarc/DmarcReportPage.js:326
+#: src/dmarc/DmarcReportPage.js:327
msgid "DKIM Failure Table"
msgstr "DKIM Failure Table"
-#: src/dmarc/DmarcReportPage.js:334
-#: src/dmarc/DmarcReportPage.js:368
-#: src/dmarc/DmarcReportPage.js:628
+#: src/dmarc/DmarcReportPage.js:335
+#: src/dmarc/DmarcReportPage.js:369
+#: src/dmarc/DmarcReportPage.js:629
msgid "DKIM Failures by IP Address"
msgstr "DKIM Failures by IP Address"
@@ -1386,7 +1467,7 @@ msgstr "DKIM record and keys are deployed and valid"
#~ msgid "DKIM record could not be found for this selector."
#~ msgstr "DKIM record could not be found for this selector."
-#: src/dmarc/DmarcReportPage.js:222
+#: src/dmarc/DmarcReportPage.js:223
msgid "DKIM Results"
msgstr "DKIM Results"
@@ -1394,7 +1475,7 @@ msgstr "DKIM Results"
#~ msgid "DKIM Selector"
#~ msgstr "DKIM Selector"
-#: src/dmarc/DmarcReportPage.js:186
+#: src/dmarc/DmarcReportPage.js:187
msgid "DKIM Selectors"
msgstr "DKIM Selectors"
@@ -1402,8 +1483,8 @@ msgstr "DKIM Selectors"
#~ msgid "DKIM Selectors:"
#~ msgstr "DKIM Selectors:"
-#: src/domains/DomainsPage.js:132
-#: src/organizationDetails/OrganizationDomains.js:106
+#: src/domains/DomainsPage.js:134
+#: src/organizationDetails/OrganizationDomains.js:107
msgid "DKIM Status"
msgstr "DKIM Status"
@@ -1411,12 +1492,12 @@ msgstr "DKIM Status"
msgid "DKIM Summary"
msgstr "DKIM Summary"
-#: src/domains/DomainsPage.js:306
-#: src/organizationDetails/OrganizationDomains.js:243
+#: src/domains/DomainsPage.js:310
+#: src/organizationDetails/OrganizationDomains.js:248
msgid "DMARC"
msgstr "DMARC"
-#: src/organizations/Organizations.js:201
+#: src/organizations/Organizations.js:202
msgid "DMARC Configuration"
msgstr "DMARC Configuration"
@@ -1428,26 +1509,26 @@ msgstr "DMARC Configuration Summary"
msgid "DMARC Configured"
msgstr "DMARC Configured"
-#: src/dmarc/DmarcReportPage.js:541
+#: src/dmarc/DmarcReportPage.js:542
msgid "DMARC Failure Table"
msgstr "DMARC Failure Table"
-#: src/dmarc/DmarcReportPage.js:549
-#: src/dmarc/DmarcReportPage.js:585
-#: src/dmarc/DmarcReportPage.js:630
+#: src/dmarc/DmarcReportPage.js:550
+#: src/dmarc/DmarcReportPage.js:586
+#: src/dmarc/DmarcReportPage.js:631
msgid "DMARC Failures by IP Address"
msgstr "DMARC Failures by IP Address"
#. placeholder {0}: mergedScan.scan.dmarc.dmarcPhase ? mergedScan.scan.dmarc.dmarcPhase.toUpperCase() : 'UNKNOWN'
-#: src/domains/ScanDomain.js:322
+#: src/domains/ScanDomain.js:323
msgid "DMARC Implementation Phase: {0}"
msgstr "DMARC Implementation Phase: {0}"
-#: src/guidance/DmarcPhaseStepper.js:74
+#: src/guidance/DmarcPhaseStepper.js:75
msgid "DMARC Implementation Phase: {currentPhase}"
msgstr "DMARC Implementation Phase: {currentPhase}"
-#: src/domains/DomainListFilters.js:113
+#: src/domains/DomainListFilters.js:114
msgid "DMARC Phase"
msgstr "DMARC Phase"
@@ -1475,26 +1556,26 @@ msgstr "DMARC policy of quarantine or reject, and all messages from non-mail dom
#~ msgid "DMARC record could not be found during the scan."
#~ msgstr "DMARC record could not be found during the scan."
-#: src/dmarc/DmarcReportPage.js:94
-#: src/domains/DomainCard.js:244
-#: src/guidance/GuidancePage.js:373
+#: src/dmarc/DmarcReportPage.js:95
+#: src/domains/DomainCard.js:254
+#: src/guidance/GuidancePage.js:371
msgid "DMARC Report"
msgstr "DMARC Report"
-#: src/dmarc/DmarcReportPage.js:40
+#: src/dmarc/DmarcReportPage.js:41
msgid "DMARC Report for {domainSlug}"
msgstr "DMARC Report for {domainSlug}"
-#: src/domains/DomainsPage.js:133
-#: src/organizationDetails/OrganizationDomains.js:107
+#: src/domains/DomainsPage.js:135
+#: src/organizationDetails/OrganizationDomains.js:108
msgid "DMARC Status"
msgstr "DMARC Status"
-#: src/app/App.js:141
-#: src/app/App.js:355
-#: src/app/FloatingMenu.js:131
-#: src/dmarc/DmarcByDomainPage.js:168
-#: src/dmarc/DmarcByDomainPage.js:226
+#: src/app/App.js:142
+#: src/app/App.js:356
+#: src/app/FloatingMenu.js:132
+#: src/dmarc/DmarcByDomainPage.js:169
+#: src/dmarc/DmarcByDomainPage.js:227
msgid "DMARC Summaries"
msgstr "DMARC Summaries"
@@ -1502,11 +1583,11 @@ msgstr "DMARC Summaries"
msgid "DMARC Summary"
msgstr "DMARC Summary"
-#: src/dmarc/DmarcReportPage.js:195
+#: src/dmarc/DmarcReportPage.js:196
msgid "DNS Host"
msgstr "DNS Host"
-#: src/guidance/EmailGuidance.js:53
+#: src/guidance/EmailGuidance.js:52
msgid "DNS Result Summary"
msgstr "DNS Result Summary"
@@ -1519,35 +1600,35 @@ msgstr "DNS Scan Complete"
msgid "DNS scan for domain \"{0}\" has completed."
msgstr "DNS scan for domain \"{0}\" has completed."
-#: src/admin/AdminDomains.js:256
-#: src/domains/DomainListFilters.js:152
+#: src/admin/AdminDomains.js:261
+#: src/domains/DomainListFilters.js:153
msgid "DOES NOT EQUAL"
msgstr "DOES NOT EQUAL"
-#: src/admin/AuditLogTable.js:77
-#: src/admin/DomainUpdateList.js:261
-#: src/dmarc/DmarcByDomainPage.js:111
-#: src/dmarc/DmarcByDomainPage.js:297
-#: src/domains/DomainsPage.js:288
-#: src/domains/DomainsPage.js:336
-#: src/organizationDetails/OrganizationDomains.js:225
-#: src/organizationDetails/OrganizationDomains.js:294
+#: src/admin/AuditLogTable.js:78
+#: src/admin/DomainUpdateList.js:262
+#: src/dmarc/DmarcByDomainPage.js:112
+#: src/dmarc/DmarcByDomainPage.js:298
+#: src/domains/DomainsPage.js:292
+#: src/domains/DomainsPage.js:340
+#: src/organizationDetails/OrganizationDomains.js:230
+#: src/organizationDetails/OrganizationDomains.js:299
msgid "Domain"
msgstr "Domain"
-#: src/admin/AdminDomainModal.js:61
+#: src/admin/AdminDomainModal.js:80
msgid "Domain added"
msgstr "Domain added"
-#: src/summaries/HistoricalSummariesGraph.js:258
+#: src/summaries/HistoricalSummariesGraph.js:259
msgid "Domain count"
msgstr "Domain count"
-#: src/dmarc/DmarcReportPage.js:237
+#: src/dmarc/DmarcReportPage.js:238
msgid "Domain from Simple Mail Transfer Protocol (SMTP) banner message."
msgstr "Domain from Simple Mail Transfer Protocol (SMTP) banner message."
-#: src/admin/AdminDomains.js:192
+#: src/admin/AdminDomains.js:197
msgid "Domain List"
msgstr "Domain List"
@@ -1555,47 +1636,47 @@ msgstr "Domain List"
msgid "Domain Name System (DNS) Services Management Configuration Requirements - Canada.ca"
msgstr "Domain Name System (DNS) Services Management Configuration Requirements - Canada.ca"
-#: src/admin/AdminDomains.js:144
+#: src/admin/AdminDomains.js:146
msgid "Domain removed"
msgstr "Domain removed"
-#: src/admin/AdminDomains.js:145
+#: src/admin/AdminDomains.js:147
msgid "Domain removed from {orgSlug}"
msgstr "Domain removed from {orgSlug}"
-#: src/admin/AdminPage.js:240
+#: src/admin/AdminPage.js:241
msgid "Domain Tags"
msgstr "Domain Tags"
-#: src/admin/AdminDomainModal.js:107
+#: src/admin/AdminDomainModal.js:126
msgid "Domain updated"
msgstr "Domain updated"
-#: src/admin/AdminDomains.js:414
-#: src/components/fields/DomainField.js:38
+#: src/admin/AdminDomains.js:417
+#: src/components/fields/DomainField.js:10
msgid "Domain URL"
msgstr "Domain URL"
-#: src/utilities/fieldRequirements.js:31
+#: src/utilities/fieldRequirements.js:32
msgid "Domain url field must not be empty"
msgstr "Domain url field must not be empty"
-#: src/components/fields/DomainField.js:37
+#: src/components/fields/DomainField.js:9
msgid "Domain URL:"
msgstr "Domain URL:"
-#: src/domains/ScanDomain.js:211
+#: src/domains/ScanDomain.js:212
msgid "Domain:"
msgstr "Domain:"
#: src/admin/AdminPanel.js:23
-#: src/app/App.js:134
-#: src/app/App.js:325
-#: src/app/FloatingMenu.js:116
-#: src/domains/DomainsPage.js:216
-#: src/domains/DomainsPage.js:282
+#: src/app/App.js:135
+#: src/app/App.js:326
+#: src/app/FloatingMenu.js:117
+#: src/domains/DomainsPage.js:218
+#: src/domains/DomainsPage.js:286
#: src/organizationDetails/OrganizationDetails.js:146
-#: src/organizationDetails/OrganizationDomains.js:140
+#: src/organizationDetails/OrganizationDomains.js:143
#: src/summaries/Doughnut.js:53
#: src/summaries/Doughnut.js:74
#: src/summaries/RadialBarChart.js:153
@@ -1607,7 +1688,7 @@ msgstr "Domains"
msgid "Domains are only to be removed from your list when 1) they no longer exist, meaning they are deleted from the DNS returning an error code of NXDOMAIN (domain name does not exist); or 2) if you have identified that they do not belong to your organization."
msgstr "Domains are only to be removed from your list when 1) they no longer exist, meaning they are deleted from the DNS returning an error code of NXDOMAIN (domain name does not exist); or 2) if you have identified that they do not belong to your organization."
-#: src/domains/SubdomainDiscoveryButton.js:76
+#: src/domains/SubdomainDiscoveryButton.js:77
msgid "Domains found through this method will be automatically added to <0>{orgSlug}0> and tagged as \"NEW\". Would you like to proceed?"
msgstr "Domains found through this method will be automatically added to <0>{orgSlug}0> and tagged as \"NEW\". Would you like to proceed?"
@@ -1615,24 +1696,24 @@ msgstr "Domains found through this method will be automatically added to <0>{org
#~ msgid "domains information"
#~ msgstr "domains information"
-#: src/admin/DomainUpdateList.js:70
-#: src/admin/DomainUpdateList.js:117
+#: src/admin/DomainUpdateList.js:71
+#: src/admin/DomainUpdateList.js:118
msgid "Domains updated."
msgstr "Domains updated."
-#: src/dmarc/DmarcReportPage.js:257
+#: src/dmarc/DmarcReportPage.js:258
msgid "Domains used for SPF validation."
msgstr "Domains used for SPF validation."
-#: src/auth/SignInPage.js:150
+#: src/auth/SignInPage.js:151
msgid "Don't have an account? <0>Sign up0>"
msgstr "Don't have an account? <0>Sign up0>"
-#: src/app/NotificationBanner.js:125
+#: src/app/NotificationBanner.js:126
msgid "Don't show again"
msgstr "Don't show again"
-#: src/components/ExportButton.js:101
+#: src/components/ExportButton.js:102
msgid "Download"
msgstr "Download"
@@ -1648,62 +1729,62 @@ msgstr "Download"
msgid "Each organization’s domain list should include every internet-facing service. It is the responsibility of organization admins to manage the current list and identify new domains to add."
msgstr "Each organization’s domain list should include every internet-facing service. It is the responsibility of organization admins to manage the current list and identify new domains to add."
-#: src/user/EditableEmailUpdateOptions.js:128
-#: src/user/EditableUserDisplayName.js:109
-#: src/user/EditableUserEmail.js:91
-#: src/user/EditableUserPassword.js:112
-#: src/user/EditableUserPhoneNumber.js:284
+#: src/user/EditableEmailUpdateOptions.js:129
+#: src/user/EditableUserDisplayName.js:110
+#: src/user/EditableUserEmail.js:92
+#: src/user/EditableUserPassword.js:113
+#: src/user/EditableUserPhoneNumber.js:285
msgid "Edit"
msgstr "Edit"
-#: src/user/EditableUserDisplayName.js:142
+#: src/user/EditableUserDisplayName.js:143
msgid "Edit Display Name"
msgstr "Edit Display Name"
-#: src/admin/AdminDomainModal.js:234
+#: src/admin/AdminDomainModal.js:258
msgid "Edit Domain Details"
msgstr "Edit Domain Details"
-#: src/user/EditableUserEmail.js:119
+#: src/user/EditableUserEmail.js:120
msgid "Edit Email"
msgstr "Edit Email"
-#: src/user/EditableEmailUpdateOptions.js:153
+#: src/user/EditableEmailUpdateOptions.js:154
msgid "Edit Email Update Preferences"
msgstr "Edit Email Update Preferences"
-#: src/admin/OrganizationInformation.js:218
+#: src/admin/OrganizationInformation.js:219
msgid "Edit Organization"
msgstr "Edit Organization"
-#: src/user/EditableUserPhoneNumber.js:159
+#: src/user/EditableUserPhoneNumber.js:160
msgid "Edit Phone Number"
msgstr "Edit Phone Number"
-#: src/admin/UserListModal.js:215
+#: src/admin/UserListModal.js:216
msgid "Edit User"
msgstr "Edit User"
-#: src/admin/SuperAdminUserList.js:144
+#: src/admin/SuperAdminUserList.js:145
#: src/components/fields/EmailField.js:15
-#: src/domains/DomainCard.js:214
-#: src/organizationDetails/OrganizationAffiliations.js:56
-#: src/user/EditableUserTFAMethod.js:166
+#: src/domains/DomainCard.js:224
+#: src/organizationDetails/OrganizationAffiliations.js:57
+#: src/user/EditableUserTFAMethod.js:167
msgid "Email"
msgstr "Email"
-#: src/auth/ForgotPasswordPage.js:18
+#: src/auth/ForgotPasswordPage.js:19
#: src/utilities/fieldRequirements.js:11
#: src/utilities/fieldRequirements.js:14
msgid "Email cannot be empty"
msgstr "Email cannot be empty"
-#: src/domains/ScanDomain.js:245
-#: src/guidance/GuidancePage.js:293
+#: src/domains/ScanDomain.js:246
+#: src/guidance/GuidancePage.js:292
msgid "Email Guidance"
msgstr "Email Guidance"
-#: src/admin/UserListModal.js:62
+#: src/admin/UserListModal.js:63
msgid "Email invitation sent"
msgstr "Email invitation sent"
@@ -1711,7 +1792,7 @@ msgstr "Email invitation sent"
msgid "Email Management Services Configuration Requirements - Canada.ca"
msgstr "Email Management Services Configuration Requirements - Canada.ca"
-#: src/domains/ScanDomain.js:308
+#: src/domains/ScanDomain.js:309
msgid "Email Scan Results"
msgstr "Email Scan Results"
@@ -1719,7 +1800,7 @@ msgstr "Email Scan Results"
msgid "Email Security:"
msgstr "Email Security:"
-#: src/auth/ForgotPasswordPage.js:36
+#: src/auth/ForgotPasswordPage.js:37
msgid "Email Sent"
msgstr "Email Sent"
@@ -1731,7 +1812,7 @@ msgstr "Email Sent"
msgid "Email Summary"
msgstr "Email Summary"
-#: src/user/EditableEmailUpdateOptions.js:87
+#: src/user/EditableEmailUpdateOptions.js:88
msgid "Email Update Preferences:"
msgstr "Email Update Preferences:"
@@ -1739,19 +1820,19 @@ msgstr "Email Update Preferences:"
#~ msgid "Email Updates"
#~ msgstr "Email Updates"
-#: src/user/EditableEmailUpdateOptions.js:50
+#: src/user/EditableEmailUpdateOptions.js:51
msgid "Email Updates status changed"
msgstr "Email Updates status changed"
-#: src/user/EditableUserTFAMethod.js:111
+#: src/user/EditableUserTFAMethod.js:112
msgid "Email Validated"
msgstr "Email Validated"
-#: src/app/App.js:382
+#: src/app/App.js:383
msgid "Email Verification"
msgstr "Email Verification"
-#: src/user/EditableUserEmail.js:49
+#: src/user/EditableUserEmail.js:50
msgid "Email Verification Sent"
msgstr "Email Verification Sent"
@@ -1768,7 +1849,7 @@ msgstr "Email Verification Sent"
#~ msgstr "Email-hosting domains"
#: src/components/fields/EmailField.js:12
-#: src/user/EditableUserEmail.js:83
+#: src/user/EditableUserEmail.js:84
msgid "Email:"
msgstr "Email:"
@@ -1780,9 +1861,9 @@ msgstr "Endpoint Summary"
msgid "Endpoint:"
msgstr "Endpoint:"
-#: src/domains/DomainListFilters.js:47
+#: src/domains/DomainListFilters.js:48
#: src/domains/FilterList.js:32
-#: src/guidance/DmarcPhaseStepper.js:40
+#: src/guidance/DmarcPhaseStepper.js:41
msgid "Enforce"
msgstr "Enforce"
@@ -1798,30 +1879,31 @@ msgstr "Enforce"
#~ msgid "Engage departmental IT planning groups for implementation as appropriate."
#~ msgstr "Engage departmental IT planning groups for implementation as appropriate."
-#: src/createOrganization/CreateOrganizationPage.js:140
-#: src/createOrganization/CreateOrganizationPage.js:143
-#: src/createOrganization/CreateOrganizationPage.js:146
-#: src/createOrganization/CreateOrganizationPage.js:149
-#: src/createOrganization/CreateOrganizationPage.js:152
+#: src/createOrganization/CreateOrganizationPage.js:115
+#: src/createOrganization/CreateOrganizationPage.js:118
msgid "English"
msgstr "English"
+#: src/admin/CvdEnrollmentForm.js:109
+msgid "Enrolled"
+msgstr "Enrolled"
+
#. placeholder {0}: editUserRole.userName
#. placeholder {0}: org.name
-#: src/admin/OrganizationInformation.js:438
-#: src/admin/SuperAdminUserList.js:413
+#: src/admin/OrganizationInformation.js:439
+#: src/admin/SuperAdminUserList.js:414
msgid "Enter \"{0}\" below to confirm removal. This field is case-sensitive."
msgstr "Enter \"{0}\" below to confirm removal. This field is case-sensitive."
-#: src/user/UserPage.js:207
+#: src/user/UserPage.js:208
msgid "Enter \"{userName}\" below to confirm removal. This field is case-sensitive."
msgstr "Enter \"{userName}\" below to confirm removal. This field is case-sensitive."
-#: src/user/EditableUserPassword.js:165
+#: src/user/EditableUserPassword.js:166
msgid "Enter and confirm your new password below:"
msgstr "Enter and confirm your new password below:"
-#: src/auth/ResetPasswordPage.js:100
+#: src/auth/ResetPasswordPage.js:101
msgid "Enter and confirm your new password."
msgstr "Enter and confirm your new password."
@@ -1829,7 +1911,7 @@ msgstr "Enter and confirm your new password."
#~ msgid "Enter two factor code"
#~ msgstr "Enter two factor code"
-#: src/auth/ForgotPasswordPage.js:67
+#: src/auth/ForgotPasswordPage.js:68
msgid "Enter your user account's verified email address and we will send you a password reset link."
msgstr "Enter your user account's verified email address and we will send you a password reset link."
@@ -1856,16 +1938,16 @@ msgstr "Enter your user account's verified email address and we will send you a
#~ msgid "Entrust Certificates issued after October 31, 2024 <0>will be distrusted0> in Chrome 127 and later versions. Immediate action is required to maintain user access. Failure to act may result in security warnings or access issues for Chromes users."
#~ msgstr "Entrust Certificates issued after October 31, 2024 <0>will be distrusted0> in Chrome 127 and later versions. Immediate action is required to maintain user access. Failure to act may result in security warnings or access issues for Chromes users."
-#: src/dmarc/DmarcReportPage.js:177
+#: src/dmarc/DmarcReportPage.js:178
msgid "Envelope From"
msgstr "Envelope From"
-#: src/admin/AdminDomains.js:253
-#: src/domains/DomainListFilters.js:149
+#: src/admin/AdminDomains.js:258
+#: src/domains/DomainListFilters.js:150
msgid "EQUALS"
msgstr "EQUALS"
-#: src/dmarc/DmarcReportPage.js:103
+#: src/dmarc/DmarcReportPage.js:104
msgid "Error while retrieving DMARC data for {domainSlug}. <0/>This could be due to insufficient user privileges or the domain does not exist in the system."
msgstr "Error while retrieving DMARC data for {domainSlug}. <0/>This could be due to insufficient user privileges or the domain does not exist in the system."
@@ -1877,72 +1959,73 @@ msgstr "Error while retrieving DMARC data for {domainSlug}. <0/>This could be du
#~ msgid "Error while retrieving scan data for {domainName}. <0/>This could be due to insufficient user privileges or the Domain does not exist in the system. You can request access to an Organization below to view the Domain results"
#~ msgstr "Error while retrieving scan data for {domainName}. <0/>This could be due to insufficient user privileges or the Domain does not exist in the system. You can request access to an Organization below to view the Domain results"
-#: src/guidance/WebConnectionResults.js:147
-#: src/guidance/WebConnectionResults.js:196
+#: src/guidance/WebConnectionResults.js:153
+#: src/guidance/WebConnectionResults.js:201
msgid "Eventually"
msgstr "Eventually"
-#: src/guidance/WebTLSResults.js:416
+#: src/guidance/WebTLSResults.js:417
msgid "Expired:"
msgstr "Expired:"
-#: src/admin/AuditLogTable.js:88
+#: src/admin/AuditLogTable.js:89
msgid "Export"
msgstr "Export"
-#: src/dmarc/ExportRuaListButton.js:58
+#: src/dmarc/ExportRuaListButton.js:59
msgid "Export RUA List"
msgstr "Export RUA List"
-#: src/domains/DomainsPage.js:208
+#: src/domains/DomainsPage.js:210
msgid "Export SPIN Top 25"
msgstr "Export SPIN Top 25"
-#: src/components/ExportButton.js:21
+#: src/components/ExportButton.js:22
msgid "Export to CSV"
msgstr "Export to CSV"
-#: src/admin/OrganizationInformation.js:473
+#: src/admin/OrganizationInformation.js:474
+#: src/createOrganization/CreateOrganizationPage.js:121
msgid "External ID"
msgstr "External ID"
-#: src/admin/OrganizationInformation.js:390
+#: src/admin/OrganizationInformation.js:391
msgid "External ID:"
msgstr "External ID:"
-#: src/dmarc/DmarcReportPage.js:141
#: src/dmarc/DmarcReportPage.js:142
-#: src/dmarc/DmarcReportSummaryGraph.js:184
-#: src/dmarc/DmarcReportSummaryGraph.js:381
-#: src/domains/DomainListFilters.js:39
+#: src/dmarc/DmarcReportPage.js:143
+#: src/dmarc/DmarcReportSummaryGraph.js:185
+#: src/dmarc/DmarcReportSummaryGraph.js:382
+#: src/domains/DomainListFilters.js:40
msgid "Fail"
msgstr "Fail"
-#: src/dmarc/DmarcReportPage.js:135
#: src/dmarc/DmarcReportPage.js:136
-#: src/dmarc/DmarcReportSummaryGraph.js:184
-#: src/dmarc/DmarcReportSummaryGraph.js:381
+#: src/dmarc/DmarcReportPage.js:137
+#: src/dmarc/DmarcReportSummaryGraph.js:185
+#: src/dmarc/DmarcReportSummaryGraph.js:382
msgid "Fail DKIM"
msgstr "Fail DKIM"
-#: src/dmarc/DmarcByDomainPage.js:143
-#: src/dmarc/DmarcByDomainPage.js:311
+#: src/dmarc/DmarcByDomainPage.js:144
+#: src/dmarc/DmarcByDomainPage.js:312
msgid "Fail DKIM %"
msgstr "Fail DKIM %"
-#: src/dmarc/DmarcReportPage.js:138
#: src/dmarc/DmarcReportPage.js:139
-#: src/dmarc/DmarcReportSummaryGraph.js:184
-#: src/dmarc/DmarcReportSummaryGraph.js:381
+#: src/dmarc/DmarcReportPage.js:140
+#: src/dmarc/DmarcReportSummaryGraph.js:185
+#: src/dmarc/DmarcReportSummaryGraph.js:382
msgid "Fail SPF"
msgstr "Fail SPF"
-#: src/dmarc/DmarcByDomainPage.js:150
-#: src/dmarc/DmarcByDomainPage.js:307
+#: src/dmarc/DmarcByDomainPage.js:151
+#: src/dmarc/DmarcByDomainPage.js:308
msgid "Fail SPF %"
msgstr "Fail SPF %"
-#: src/dmarc/DmarcReportPage.js:635
+#: src/dmarc/DmarcReportPage.js:636
msgid "Fake email domain blocks (reject + quarantine):"
msgstr "Fake email domain blocks (reject + quarantine):"
@@ -1950,12 +2033,12 @@ msgstr "Fake email domain blocks (reject + quarantine):"
#~ msgid "FAQ"
#~ msgstr "FAQ"
-#: src/domains/DomainCard.js:62
+#: src/domains/DomainCard.js:64
#: src/guidance/GuidancePage.js:118
msgid "Favourited Domain"
msgstr "Favourited Domain"
-#: src/user/InsideUserSwitch.js:87
+#: src/user/InsideUserSwitch.js:88
msgid "Feature Preview"
msgstr "Feature Preview"
@@ -1964,7 +2047,7 @@ msgstr "Feature Preview"
msgid "February"
msgstr "February"
-#: src/components/ExportButton.js:84
+#: src/components/ExportButton.js:85
msgid "File name:"
msgstr "File name:"
@@ -1972,7 +2055,7 @@ msgstr "File name:"
msgid "Filter list to affiliated resources only."
msgstr "Filter list to affiliated resources only."
-#: src/organizations/Organizations.js:234
+#: src/organizations/Organizations.js:235
msgid "Filter list to verified organizations only."
msgstr "Filter list to verified organizations only."
@@ -1996,7 +2079,7 @@ msgstr "Filter the list to display only verified organizations."
msgid "Filter the list to show your affiliated organizations."
msgstr "Filter the list to show your affiliated organizations."
-#: src/guidance/AdditionalFindings.js:387
+#: src/guidance/AdditionalFindings.js:388
msgid "Filtered"
msgstr "Filtered"
@@ -2004,11 +2087,11 @@ msgstr "Filtered"
#~ msgid "Filters"
#~ msgstr "Filters"
-#: src/admin/AdminDomains.js:221
-#: src/dmarc/DmarcByDomainPage.js:270
-#: src/domains/DomainsPage.js:345
-#: src/organizationDetails/OrganizationDomains.js:304
-#: src/organizations/Organizations.js:232
+#: src/admin/AdminDomains.js:226
+#: src/dmarc/DmarcByDomainPage.js:271
+#: src/domains/DomainsPage.js:349
+#: src/organizationDetails/OrganizationDomains.js:309
+#: src/organizations/Organizations.js:233
msgid "Filters:"
msgstr "Filters:"
@@ -2016,18 +2099,18 @@ msgstr "Filters:"
msgid "Find domains that potentially belong to your organization."
msgstr "Find domains that potentially belong to your organization."
-#: src/userOnboarding/components/TourComponent.js:109
+#: src/userOnboarding/components/TourComponent.js:110
msgid "Finish"
msgstr "Finish"
#. placeholder {0}: formatTimestamp(webComponentFirstSeen)
#. placeholder {0}: formatTimestamp(ddosProtectionComponent.webComponentFirstSeen)
#. placeholder {0}: formatTimestamp(cdnComponent.webComponentFirstSeen)
-#: src/guidance/AdditionalFindings.js:216
-#: src/guidance/AdditionalFindings.js:280
-#: src/guidance/AdditionalFindings.js:313
-#: src/guidance/AdditionalFindings.js:355
-#: src/guidance/AdditionalFindings.js:397
+#: src/guidance/AdditionalFindings.js:217
+#: src/guidance/AdditionalFindings.js:281
+#: src/guidance/AdditionalFindings.js:314
+#: src/guidance/AdditionalFindings.js:356
+#: src/guidance/AdditionalFindings.js:398
msgid "First Seen: {0}"
msgstr "First Seen: {0}"
@@ -2051,19 +2134,19 @@ msgstr "For details related to terms pertaining to privacy, please refer to"
#~ msgid "For in-depth implementation guidance:"
#~ msgstr "For in-depth implementation guidance:"
-#: src/guidance/DmarcPhaseStepper.js:103
+#: src/guidance/DmarcPhaseStepper.js:104
msgid "For more detailed steps, please see the <0>CCCS implementation guidance0>."
msgstr "For more detailed steps, please see the <0>CCCS implementation guidance0>."
-#: src/user/EditableEmailUpdateOptions.js:160
+#: src/user/EditableEmailUpdateOptions.js:161
msgid "For organization admins interested in receiving email updates on new activity in their organizations."
msgstr "For organization admins interested in receiving email updates on new activity in their organizations."
-#: src/user/EditableEmailUpdateOptions.js:202
+#: src/user/EditableEmailUpdateOptions.js:203
msgid "For organization admins interested in receiving email updates on new changes to their organization's compliance statuses."
msgstr "For organization admins interested in receiving email updates on new changes to their organization's compliance statuses."
-#: src/user/EditableEmailUpdateOptions.js:181
+#: src/user/EditableEmailUpdateOptions.js:182
msgid "For organization admins interested in receiving monthly email updates how their organization is progressing to 100% compliance."
msgstr "For organization admins interested in receiving monthly email updates how their organization is progressing to 100% compliance."
@@ -2083,28 +2166,25 @@ msgstr "For questions and issues related to scan data, your organization's domai
#~ "For users interested in using new features that are still in\n"
#~ "progress."
-#: src/user/InsideUserSwitch.js:69
+#: src/user/InsideUserSwitch.js:70
msgid "For users interested in using new features that are still in progress."
msgstr "For users interested in using new features that are still in progress."
-#: src/app/App.js:244
-#: src/auth/ForgotPasswordPage.js:62
+#: src/app/App.js:245
+#: src/auth/ForgotPasswordPage.js:63
msgid "Forgot Password"
msgstr "Forgot Password"
-#: src/auth/SignInPage.js:140
+#: src/auth/SignInPage.js:141
msgid "Forgot your password?"
msgstr "Forgot your password?"
-#: src/guidance/AdditionalFindings.js:191
+#: src/guidance/AdditionalFindings.js:192
msgid "Frameworks"
msgstr "Frameworks"
-#: src/createOrganization/CreateOrganizationPage.js:141
-#: src/createOrganization/CreateOrganizationPage.js:144
-#: src/createOrganization/CreateOrganizationPage.js:147
-#: src/createOrganization/CreateOrganizationPage.js:150
-#: src/createOrganization/CreateOrganizationPage.js:153
+#: src/createOrganization/CreateOrganizationPage.js:116
+#: src/createOrganization/CreateOrganizationPage.js:119
msgid "French"
msgstr "French"
@@ -2112,27 +2192,27 @@ msgstr "French"
msgid "Frequently Asked Questions"
msgstr "Frequently Asked Questions"
-#: src/dmarc/DmarcByDomainPage.js:157
-#: src/dmarc/DmarcByDomainPage.js:315
+#: src/dmarc/DmarcByDomainPage.js:158
+#: src/dmarc/DmarcByDomainPage.js:316
msgid "Full Fail %"
msgstr "Full Fail %"
-#: src/dmarc/DmarcByDomainPage.js:136
-#: src/dmarc/DmarcByDomainPage.js:303
+#: src/dmarc/DmarcByDomainPage.js:137
+#: src/dmarc/DmarcByDomainPage.js:304
msgid "Full Pass %"
msgstr "Full Pass %"
-#: src/dmarc/DmarcReportPage.js:407
-#: src/dmarc/DmarcReportPage.js:436
-#: src/dmarc/DmarcReportPage.js:627
+#: src/dmarc/DmarcReportPage.js:408
+#: src/dmarc/DmarcReportPage.js:437
+#: src/dmarc/DmarcReportPage.js:628
msgid "Fully Aligned by IP Address"
msgstr "Fully Aligned by IP Address"
-#: src/dmarc/DmarcReportPage.js:399
+#: src/dmarc/DmarcReportPage.js:400
msgid "Fully Aligned Table"
msgstr "Fully Aligned Table"
-#: src/organizations/Organizations.js:205
+#: src/organizations/Organizations.js:206
msgid "Further details for each organization can be found by clicking on its row."
msgstr "Further details for each organization can be found by clicking on its row."
@@ -2144,8 +2224,8 @@ msgstr "Further details for each organization can be found by clicking on its ro
msgid "Getting an Account:"
msgstr "Getting an Account:"
-#: src/dmarc/ExportRuaListButton.js:14
-#: src/domains/DomainsPage.js:153
+#: src/dmarc/ExportRuaListButton.js:15
+#: src/domains/DomainsPage.js:155
msgid "Getting domain statuses"
msgstr "Getting domain statuses"
@@ -2157,21 +2237,21 @@ msgstr "Getting Started"
#~ msgid "Getting Started Using Tracker"
#~ msgstr "Getting Started Using Tracker"
-#: src/domains/DomainsPage.js:183
+#: src/domains/DomainsPage.js:185
msgid "Getting top 25 report"
msgstr "Getting top 25 report"
-#: src/admin/DomainTagsList.js:50
-#: src/admin/TagForm.js:268
-#: src/summaries/HistoricalSummariesGraph.js:238
+#: src/admin/DomainTagsList.js:51
+#: src/admin/TagForm.js:269
+#: src/summaries/HistoricalSummariesGraph.js:239
msgid "Global"
msgstr "Global"
-#: src/components/InfoPanel.js:19
+#: src/components/InfoPanel.js:20
msgid "Glossary"
msgstr "Glossary"
-#: src/components/TrackerTable.js:255
+#: src/components/TrackerTable.js:254
msgid "Go to page:"
msgstr "Go to page:"
@@ -2183,13 +2263,13 @@ msgstr "Go to page:"
msgid "Government of Canada Employees"
msgstr "Government of Canada Employees"
-#: src/dmarc/DmarcReportSummaryGraph.js:101
+#: src/dmarc/DmarcReportSummaryGraph.js:102
msgid "Graph direction:"
msgstr "Graph direction:"
-#: src/app/App.js:435
-#: src/dmarc/DmarcReportPage.js:206
-#: src/dmarc/DmarcReportPage.js:660
+#: src/app/App.js:436
+#: src/dmarc/DmarcReportPage.js:207
+#: src/dmarc/DmarcReportPage.js:661
msgid "Guidance"
msgstr "Guidance"
@@ -2206,11 +2286,11 @@ msgstr "Guidance results"
#~ msgid "Guidance:"
#~ msgstr "Guidance:"
-#: src/guidance/WebTLSResults.js:431
+#: src/guidance/WebTLSResults.js:432
msgid "Hash Algorithm:"
msgstr "Hash Algorithm:"
-#: src/dmarc/DmarcReportPage.js:201
+#: src/dmarc/DmarcReportPage.js:202
msgid "Header From"
msgstr "Header From"
@@ -2218,7 +2298,7 @@ msgstr "Header From"
#~ msgid "Heartbleed Vulnerability:"
#~ msgstr "Heartbleed Vulnerability:"
-#: src/guidance/WebTLSResults.js:212
+#: src/guidance/WebTLSResults.js:213
msgid "Heartbleed Vulnerable"
msgstr "Heartbleed Vulnerable"
@@ -2242,7 +2322,7 @@ msgstr "Heartbleed Vulnerable"
#~ msgid "Here you can filter the list of organizations to only show verified organizations"
#~ msgstr "Here you can filter the list of organizations to only show verified organizations"
-#: src/admin/AdminPage.js:133
+#: src/admin/AdminPage.js:134
msgid "here."
msgstr "here."
@@ -2266,31 +2346,35 @@ msgstr "here."
msgid "Hide password"
msgstr "Hide password"
-#: src/guidance/AdditionalFindings.js:33
-#: src/guidance/IgnoredCves.js:8
+#: src/admin/CvdEnrollmentForm.js:164
+#: src/admin/CvdEnrollmentForm.js:195
+#: src/admin/CvdEnrollmentForm.js:223
+#: src/admin/CvdEnrollmentForm.js:251
+#: src/guidance/AdditionalFindings.js:34
+#: src/guidance/IgnoredCves.js:9
msgid "High"
msgstr "High"
-#: src/app/App.js:114
-#: src/app/App.js:213
-#: src/app/FloatingMenu.js:175
+#: src/app/App.js:115
+#: src/app/App.js:214
+#: src/app/FloatingMenu.js:176
msgid "Home"
msgstr "Home"
-#: src/dmarc/DmarcReportSummaryGraph.js:109
+#: src/dmarc/DmarcReportSummaryGraph.js:110
msgid "Horizontal View"
msgstr "Horizontal View"
-#: src/dmarc/DmarcReportPage.js:253
+#: src/dmarc/DmarcReportPage.js:254
msgid "Host from reverse DNS of source IP address."
msgstr "Host from reverse DNS of source IP address."
-#: src/guidance/WebTLSResults.js:271
+#: src/guidance/WebTLSResults.js:272
msgid "Hostname Matches"
msgstr "Hostname Matches"
#. placeholder {0}: badHostname ? t`No` : t`Yes`
-#: src/guidance/WebTLSResults.js:447
+#: src/guidance/WebTLSResults.js:448
msgid "Hostname Matches: {0}"
msgstr "Hostname Matches: {0}"
@@ -2302,9 +2386,9 @@ msgstr "Hostname Matches: {0}"
msgid "How can I edit my domain list?"
msgstr "How can I edit my domain list?"
-#: src/domains/DomainCard.js:205
-#: src/domains/DomainsPage.js:294
-#: src/organizationDetails/OrganizationDomains.js:231
+#: src/domains/DomainCard.js:215
+#: src/domains/DomainsPage.js:298
+#: src/organizationDetails/OrganizationDomains.js:236
msgid "HSTS"
msgstr "HSTS"
@@ -2312,24 +2396,24 @@ msgstr "HSTS"
#~ msgid "HSTS Age:"
#~ msgstr "HSTS Age:"
-#: src/guidance/WebConnectionResults.js:230
+#: src/guidance/WebConnectionResults.js:225
msgid "HSTS Includes Subdomains"
msgstr "HSTS Includes Subdomains"
-#: src/guidance/WebConnectionResults.js:212
+#: src/guidance/WebConnectionResults.js:213
msgid "HSTS Max Age"
msgstr "HSTS Max Age"
-#: src/guidance/WebConnectionResults.js:203
+#: src/guidance/WebConnectionResults.js:207
msgid "HSTS Parsed"
msgstr "HSTS Parsed"
-#: src/guidance/WebConnectionResults.js:221
+#: src/guidance/WebConnectionResults.js:219
msgid "HSTS Preloaded"
msgstr "HSTS Preloaded"
-#: src/domains/DomainsPage.js:126
-#: src/organizationDetails/OrganizationDomains.js:100
+#: src/domains/DomainsPage.js:128
+#: src/organizationDetails/OrganizationDomains.js:101
msgid "HSTS Status"
msgstr "HSTS Status"
@@ -2337,25 +2421,25 @@ msgstr "HSTS Status"
#~ msgid "HSTS Status:"
#~ msgstr "HSTS Status:"
-#: src/guidance/WebConnectionResults.js:117
+#: src/guidance/WebConnectionResults.js:131
msgid "HTTP (80) Chain"
msgstr "HTTP (80) Chain"
-#: src/guidance/WebConnectionResults.js:127
+#: src/guidance/WebConnectionResults.js:141
msgid "HTTP Live"
msgstr "HTTP Live"
-#: src/guidance/WebConnectionResults.js:138
+#: src/guidance/WebConnectionResults.js:147
msgid "HTTP Upgrades"
msgstr "HTTP Upgrades"
-#: src/domains/DomainCard.js:204
-#: src/domains/DomainsPage.js:291
-#: src/organizationDetails/OrganizationDomains.js:228
+#: src/domains/DomainCard.js:214
+#: src/domains/DomainsPage.js:295
+#: src/organizationDetails/OrganizationDomains.js:233
msgid "HTTPS"
msgstr "HTTPS"
-#: src/guidance/WebConnectionResults.js:163
+#: src/guidance/WebConnectionResults.js:171
msgid "HTTPS (443) Chain"
msgstr "HTTPS (443) Chain"
@@ -2368,11 +2452,11 @@ msgid "HTTPS Configuration Summary"
msgstr "HTTPS Configuration Summary"
#: src/organizations/OrganizationCard.js:94
-#: src/organizations/Organizations.js:197
+#: src/organizations/Organizations.js:198
msgid "HTTPS Configured"
msgstr "HTTPS Configured"
-#: src/guidance/WebConnectionResults.js:192
+#: src/guidance/WebConnectionResults.js:197
msgid "HTTPS Downgrades"
msgstr "HTTPS Downgrades"
@@ -2388,7 +2472,7 @@ msgstr "HTTPS is configured and HTTP connections redirect to HTTPS"
msgid "HTTPS is configured, HTTP redirects, and HSTS is enabled"
msgstr "HTTPS is configured, HTTP redirects, and HSTS is enabled"
-#: src/guidance/WebConnectionResults.js:173
+#: src/guidance/WebConnectionResults.js:181
msgid "HTTPS Live"
msgstr "HTTPS Live"
@@ -2401,8 +2485,8 @@ msgstr "HTTPS Scan Complete"
msgid "HTTPS scan for domain \"{0}\" has completed."
msgstr "HTTPS scan for domain \"{0}\" has completed."
-#: src/domains/DomainsPage.js:125
-#: src/organizationDetails/OrganizationDomains.js:99
+#: src/domains/DomainsPage.js:127
+#: src/organizationDetails/OrganizationDomains.js:100
msgid "HTTPS Status"
msgstr "HTTPS Status"
@@ -2410,17 +2494,17 @@ msgstr "HTTPS Status"
#~ msgid "https://https-everywhere.canada.ca/en/help/"
#~ msgstr "https://https-everywhere.canada.ca/en/help/"
-#: src/auth/CreateUserPage.js:130
+#: src/auth/CreateUserPage.js:131
msgid "I agree to all <0>Terms, Privacy Policy & Code of Conduct Guidelines <1/>0>"
msgstr "I agree to all <0>Terms, Privacy Policy & Code of Conduct Guidelines <1/>0>"
-#: src/domains/ScanDomain.js:120
-#: src/guidance/DmarcPhaseStepper.js:33
+#: src/domains/ScanDomain.js:121
+#: src/guidance/DmarcPhaseStepper.js:34
msgid "Identify all authorized senders;"
msgstr "Identify all authorized senders;"
-#: src/domains/ScanDomain.js:114
-#: src/guidance/DmarcPhaseStepper.js:24
+#: src/domains/ScanDomain.js:115
+#: src/guidance/DmarcPhaseStepper.js:25
msgid "Identify all domains and subdomains used to send mail;"
msgstr "Identify all domains and subdomains used to send mail;"
@@ -2452,7 +2536,7 @@ msgstr "If at any time you or your representatives wish to adjust or cancel thes
#~ msgid "If at any time you or your representatives wish to adjust or cancel these services, please contact us at"
#~ msgstr "If at any time you or your representatives wish to adjust or cancel these services, please contact us at"
-#: src/user/EditableUserPhoneNumber.js:165
+#: src/user/EditableUserPhoneNumber.js:166
msgid "If available, please use a managed device provided by your organization."
msgstr "If available, please use a managed device provided by your organization."
@@ -2476,15 +2560,15 @@ msgstr "If you believe this was caused by a problem with Tracker, please <0>Repo
msgid "If your organization has no affiliated users within Tracker, contact the <0>TBS Cyber Security0> to assist in onboarding."
msgstr "If your organization has no affiliated users within Tracker, contact the <0>TBS Cyber Security0> to assist in onboarding."
-#: src/guidance/CveIgnorer.js:116
+#: src/guidance/CveIgnorer.js:117
msgid "Ignore CVE"
msgstr "Ignore CVE"
-#: src/admin/AdminDomainModal.js:382
+#: src/admin/AdminDomainModal.js:413
msgid "Ignore RUA"
msgstr "Ignore RUA"
-#: src/guidance/AdditionalFindings.js:137
+#: src/guidance/AdditionalFindings.js:138
msgid "Ignored"
msgstr "Ignored"
@@ -2492,8 +2576,8 @@ msgstr "Ignored"
#~ msgid "Ignored CVEs:"
#~ msgstr "Ignored CVEs:"
-#: src/guidance/WebConnectionResults.js:145
-#: src/guidance/WebConnectionResults.js:196
+#: src/guidance/WebConnectionResults.js:151
+#: src/guidance/WebConnectionResults.js:199
msgid "Immediately"
msgstr "Immediately"
@@ -2526,7 +2610,7 @@ msgstr "Implemented"
#~ msgid "Important Notice:"
#~ msgstr "Important Notice:"
-#: src/guidance/AdditionalFindings.js:116
+#: src/guidance/AdditionalFindings.js:117
msgid "Improving GC Cyber Security Health SPIN"
msgstr "Improving GC Cyber Security Health SPIN"
@@ -2535,7 +2619,7 @@ msgstr "Improving GC Cyber Security Health SPIN"
#~ msgid "Inactive"
#~ msgstr "Inactive"
-#: src/organizationDetails/OrganizationDomains.js:252
+#: src/organizationDetails/OrganizationDomains.js:257
msgid "INACTIVE"
msgstr "INACTIVE"
@@ -2546,36 +2630,36 @@ msgstr "INACTIVE"
#~ msgid "Include hidden domains in summaries."
#~ msgstr "Include hidden domains in summaries."
-#: src/auth/TwoFactorAuthenticatePage.js:76
+#: src/auth/TwoFactorAuthenticatePage.js:77
msgid "Incorrect authenticate.result typename."
msgstr "Incorrect authenticate.result typename."
-#: src/admin/SuperAdminUserList.js:107
-#: src/user/UserPage.js:83
+#: src/admin/SuperAdminUserList.js:108
+#: src/user/UserPage.js:84
msgid "Incorrect closeAccount.result typename."
msgstr "Incorrect closeAccount.result typename."
-#: src/admin/AdminDomainModal.js:80
+#: src/admin/AdminDomainModal.js:99
msgid "Incorrect createDomain.result typename."
msgstr "Incorrect createDomain.result typename."
-#: src/createOrganization/CreateOrganizationPage.js:73
+#: src/createOrganization/CreateOrganizationPage.js:68
msgid "Incorrect createOrganization.result typename."
msgstr "Incorrect createOrganization.result typename."
-#: src/app/NotificationBanner.js:60
+#: src/app/NotificationBanner.js:61
msgid "Incorrect dismiss method received."
msgstr "Incorrect dismiss method received."
-#: src/app/NotificationBanner.js:61
+#: src/app/NotificationBanner.js:62
msgid "Incorrect dismissMessage.result typename."
msgstr "Incorrect dismissMessage.result typename."
-#: src/guidance/CveIgnorer.js:53
+#: src/guidance/CveIgnorer.js:54
msgid "Incorrect ignoreCve.result typename."
msgstr "Incorrect ignoreCve.result typename."
-#: src/admin/UserListModal.js:81
+#: src/admin/UserListModal.js:82
msgid "Incorrect inviteUserToOrg.result typename."
msgstr "Incorrect inviteUserToOrg.result typename."
@@ -2584,101 +2668,101 @@ msgstr "Incorrect inviteUserToOrg.result typename."
#~ msgid "Incorrect leaveOrganization.result typename."
#~ msgstr "Incorrect leaveOrganization.result typename."
-#: src/admin/AdminDomains.js:163
+#: src/admin/AdminDomains.js:165
msgid "Incorrect removeDomain.result typename."
msgstr "Incorrect removeDomain.result typename."
-#: src/admin/OrganizationInformation.js:85
+#: src/admin/OrganizationInformation.js:86
msgid "Incorrect removeOrganization.result typename."
msgstr "Incorrect removeOrganization.result typename."
-#: src/auth/ResetPasswordPage.js:61
+#: src/auth/ResetPasswordPage.js:62
msgid "Incorrect resetPassword.result typename."
msgstr "Incorrect resetPassword.result typename."
-#: src/admin/AdminDomainModal.js:79
-#: src/admin/AdminDomainModal.js:127
-#: src/admin/AdminDomains.js:162
-#: src/admin/DomainUpdateList.js:88
-#: src/admin/DomainUpdateList.js:135
-#: src/admin/SuperAdminUserList.js:106
-#: src/admin/TagForm.js:56
-#: src/admin/TagForm.js:102
-#: src/admin/UserListModal.js:80
-#: src/admin/UserListModal.js:125
-#: src/auth/CreateUserPage.js:61
-#: src/auth/ResetPasswordPage.js:60
-#: src/auth/SignInPage.js:85
-#: src/auth/TwoFactorAuthenticatePage.js:75
-#: src/createOrganization/CreateOrganizationPage.js:72
-#: src/guidance/CveIgnorer.js:52
-#: src/guidance/CveIgnorer.js:101
-#: src/user/EditableUserDisplayName.js:72
-#: src/user/EditableUserEmail.js:68
-#: src/user/EditableUserPassword.js:75
-#: src/user/EditableUserPhoneNumber.js:67
-#: src/user/EditableUserPhoneNumber.js:118
-#: src/user/EditableUserTFAMethod.js:76
-#: src/user/UserPage.js:82
+#: src/admin/AdminDomainModal.js:98
+#: src/admin/AdminDomainModal.js:144
+#: src/admin/AdminDomains.js:164
+#: src/admin/DomainUpdateList.js:89
+#: src/admin/DomainUpdateList.js:136
+#: src/admin/SuperAdminUserList.js:107
+#: src/admin/TagForm.js:57
+#: src/admin/TagForm.js:103
+#: src/admin/UserListModal.js:81
+#: src/admin/UserListModal.js:126
+#: src/auth/CreateUserPage.js:62
+#: src/auth/ResetPasswordPage.js:61
+#: src/auth/SignInPage.js:86
+#: src/auth/TwoFactorAuthenticatePage.js:76
+#: src/createOrganization/CreateOrganizationPage.js:67
+#: src/guidance/CveIgnorer.js:53
+#: src/guidance/CveIgnorer.js:102
+#: src/user/EditableUserDisplayName.js:73
+#: src/user/EditableUserEmail.js:69
+#: src/user/EditableUserPassword.js:76
+#: src/user/EditableUserPhoneNumber.js:68
+#: src/user/EditableUserPhoneNumber.js:119
+#: src/user/EditableUserTFAMethod.js:77
+#: src/user/UserPage.js:83
msgid "Incorrect send method received."
msgstr "Incorrect send method received."
-#: src/user/EditableUserPhoneNumber.js:68
+#: src/user/EditableUserPhoneNumber.js:69
msgid "Incorrect setPhoneNumber.result typename."
msgstr "Incorrect setPhoneNumber.result typename."
-#: src/auth/SignInPage.js:86
+#: src/auth/SignInPage.js:87
msgid "Incorrect signIn.result typename."
msgstr "Incorrect signIn.result typename."
-#: src/auth/CreateUserPage.js:62
+#: src/auth/CreateUserPage.js:63
msgid "Incorrect signUp.result typename."
msgstr "Incorrect signUp.result typename."
-#: src/admin/OrganizationInformation.js:84
-#: src/admin/OrganizationInformation.js:147
+#: src/admin/OrganizationInformation.js:85
+#: src/admin/OrganizationInformation.js:148
msgid "Incorrect typename received."
msgstr "Incorrect typename received."
-#: src/guidance/CveIgnorer.js:102
+#: src/guidance/CveIgnorer.js:103
msgid "Incorrect unignoreCve.result typename."
msgstr "Incorrect unignoreCve.result typename."
-#: src/user/EditableEmailUpdateOptions.js:72
-#: src/user/InsideUserSwitch.js:54
+#: src/user/EditableEmailUpdateOptions.js:73
+#: src/user/InsideUserSwitch.js:55
msgid "Incorrect update method received."
msgstr "Incorrect update method received."
-#: src/admin/AdminDomainModal.js:128
+#: src/admin/AdminDomainModal.js:145
msgid "Incorrect updateDomain.result typename."
msgstr "Incorrect updateDomain.result typename."
-#: src/admin/DomainUpdateList.js:89
-#: src/admin/DomainUpdateList.js:136
+#: src/admin/DomainUpdateList.js:90
+#: src/admin/DomainUpdateList.js:137
msgid "Incorrect updateDomainsByDomainIds.result typename."
msgstr "Incorrect updateDomainsByDomainIds.result typename."
-#: src/admin/OrganizationInformation.js:148
+#: src/admin/OrganizationInformation.js:149
msgid "Incorrect updateOrganization.result typename."
msgstr "Incorrect updateOrganization.result typename."
-#: src/user/EditableUserPassword.js:76
+#: src/user/EditableUserPassword.js:77
msgid "Incorrect updateUserPassword.result typename."
msgstr "Incorrect updateUserPassword.result typename."
-#: src/user/EditableEmailUpdateOptions.js:73
-#: src/user/EditableUserDisplayName.js:73
-#: src/user/EditableUserEmail.js:69
-#: src/user/EditableUserTFAMethod.js:77
-#: src/user/InsideUserSwitch.js:55
+#: src/user/EditableEmailUpdateOptions.js:74
+#: src/user/EditableUserDisplayName.js:74
+#: src/user/EditableUserEmail.js:70
+#: src/user/EditableUserTFAMethod.js:78
+#: src/user/InsideUserSwitch.js:56
msgid "Incorrect updateUserProfile.result typename."
msgstr "Incorrect updateUserProfile.result typename."
-#: src/admin/UserListModal.js:126
+#: src/admin/UserListModal.js:127
msgid "Incorrect updateUserRole.result typename."
msgstr "Incorrect updateUserRole.result typename."
-#: src/user/EditableUserPhoneNumber.js:119
+#: src/user/EditableUserPhoneNumber.js:120
msgid "Incorrect verifyPhoneNumber.result typename."
msgstr "Incorrect verifyPhoneNumber.result typename."
@@ -2698,7 +2782,7 @@ msgstr "Individuals from a departmental information technology group may contact
#~ msgid "Individuals with questions about the accuracy of their domain’s compliance data may contact the TBS Cyber Security mailbox."
#~ msgstr "Individuals with questions about the accuracy of their domain’s compliance data may contact the TBS Cyber Security mailbox."
-#: src/domains/DomainListFilters.js:38
+#: src/domains/DomainListFilters.js:39
msgid "Info"
msgstr "Info"
@@ -2711,25 +2795,25 @@ msgid "Information shared with TBS, or acquired via systems hosted by TBS, may b
msgstr "Information shared with TBS, or acquired via systems hosted by TBS, may be subject to public disclosure under the"
#: src/guidance/GuidanceSummaryCategories.js:28
-#: src/guidance/GuidanceTagDetails.js:20
+#: src/guidance/GuidanceTagDetails.js:21
msgid "Informative"
msgstr "Informative"
-#: src/guidance/GuidanceTagDetails.js:102
+#: src/guidance/GuidanceTagDetails.js:103
msgid "Informative tags highlight relevant configuration details, but are not addressed within policy requirements and have no impact on scoring."
msgstr "Informative tags highlight relevant configuration details, but are not addressed within policy requirements and have no impact on scoring."
-#: src/admin/AuditLogTable.js:72
-#: src/admin/AuditLogTable.js:115
+#: src/admin/AuditLogTable.js:73
+#: src/admin/AuditLogTable.js:116
msgid "Initiated By"
msgstr "Initiated By"
-#: src/admin/SuperAdminUserList.js:147
-#: src/admin/SuperAdminUserList.js:317
+#: src/admin/SuperAdminUserList.js:148
+#: src/admin/SuperAdminUserList.js:318
msgid "Inside User"
msgstr "Inside User"
-#: src/user/InsideUserSwitch.js:30
+#: src/user/InsideUserSwitch.js:31
msgid "Inside user status changed"
msgstr "Inside user status changed"
@@ -2742,6 +2826,10 @@ msgstr "Inside user status changed"
#~ msgid "Insider status changed"
#~ msgstr "Insider status changed"
+#: src/admin/CvdEnrollmentForm.js:203
+msgid "Integrity Requirement"
+msgstr "Integrity Requirement"
+
#: src/termsConditions/TermsConditionsPage.js:132
msgid "Intellectual Property, Copyright and Trademarks"
msgstr "Intellectual Property, Copyright and Trademarks"
@@ -2758,32 +2846,32 @@ msgstr "Intellectual Property, Copyright and Trademarks"
msgid "Internet-facing"
msgstr "Internet-facing"
-#: src/auth/ForgotPasswordPage.js:19
+#: src/auth/ForgotPasswordPage.js:20
#: src/utilities/fieldRequirements.js:12
msgid "Invalid email"
msgstr "Invalid email"
-#: src/organizations/RequestOrgInviteModal.js:36
+#: src/organizations/RequestOrgInviteModal.js:37
msgid "Invite Requested"
msgstr "Invite Requested"
-#: src/admin/UserList.js:169
+#: src/admin/UserList.js:164
msgid "Invite User"
msgstr "Invite User"
-#: src/dmarc/DmarcReportPage.js:277
+#: src/dmarc/DmarcReportPage.js:278
msgid "Is DKIM aligned. Can be true or false."
msgstr "Is DKIM aligned. Can be true or false."
-#: src/dmarc/DmarcReportPage.js:269
+#: src/dmarc/DmarcReportPage.js:270
msgid "Is SPF aligned. Can be true or false."
msgstr "Is SPF aligned. Can be true or false."
-#: src/admin/AdminPage.js:138
+#: src/admin/AdminPage.js:139
msgid "Is your organization not using Tracker yet?"
msgstr "Is your organization not using Tracker yet?"
-#: src/guidance/WebTLSResults.js:419
+#: src/guidance/WebTLSResults.js:420
msgid "Issuer:"
msgstr "Issuer:"
@@ -2803,7 +2891,7 @@ msgstr "It is recommended that Shared Service Canada (SSC) partners contact thei
msgid "Items per page:"
msgstr "Items per page:"
-#: src/components/TrackerTable.js:283
+#: src/components/TrackerTable.js:282
msgid "Items per page: "
msgstr "Items per page: "
@@ -2813,7 +2901,7 @@ msgstr "Items per page: "
#~ msgid "ITPIN"
#~ msgstr "ITPIN"
-#: src/domains/ScanDomain.js:269
+#: src/domains/ScanDomain.js:270
msgid "ITPIN Compliant"
msgstr "ITPIN Compliant"
@@ -2841,31 +2929,31 @@ msgstr "June"
msgid "Jurisdiction"
msgstr "Jurisdiction"
-#: src/guidance/EmailGuidance.js:192
+#: src/guidance/EmailGuidance.js:191
msgid "Key length:"
msgstr "Key length:"
-#: src/guidance/EmailGuidance.js:186
+#: src/guidance/EmailGuidance.js:185
msgid "Key type:"
msgstr "Key type:"
-#: src/dmarc/DmarcReportSummaryGraph.js:68
+#: src/dmarc/DmarcReportSummaryGraph.js:69
msgid "L-30-D"
msgstr "L-30-D"
-#: src/admin/TagForm.js:190
+#: src/admin/TagForm.js:191
msgid "Label (EN)"
msgstr "Label (EN)"
-#: src/admin/TagForm.js:193
+#: src/admin/TagForm.js:194
msgid "Label (FR)"
msgstr "Label (FR)"
-#: src/auth/LanguageSelect.js:18
+#: src/auth/LanguageSelect.js:19
msgid "Language:"
msgstr "Language:"
-#: src/summaries/HistoricalSummariesGraph.js:206
+#: src/summaries/HistoricalSummariesGraph.js:207
msgid "Last 30 Days"
msgstr "Last 30 Days"
@@ -2873,7 +2961,7 @@ msgstr "Last 30 Days"
msgid "Last 30 Days of Data"
msgstr "Last 30 Days of Data"
-#: src/summaries/HistoricalSummariesGraph.js:209
+#: src/summaries/HistoricalSummariesGraph.js:210
msgid "Last 365 Days"
msgstr "Last 365 Days"
@@ -2889,19 +2977,19 @@ msgstr "Last 365 Days"
#. placeholder {0}: formatTimestamp(webComponentLastSeen)
#. placeholder {0}: formatTimestamp(ddosProtectionComponent.webComponentLastSeen)
#. placeholder {0}: formatTimestamp(cdnComponent.webComponentLastSeen)
-#: src/guidance/AdditionalFindings.js:219
-#: src/guidance/AdditionalFindings.js:283
-#: src/guidance/AdditionalFindings.js:316
-#: src/guidance/AdditionalFindings.js:358
-#: src/guidance/AdditionalFindings.js:400
+#: src/guidance/AdditionalFindings.js:220
+#: src/guidance/AdditionalFindings.js:284
+#: src/guidance/AdditionalFindings.js:317
+#: src/guidance/AdditionalFindings.js:359
+#: src/guidance/AdditionalFindings.js:401
msgid "Last Seen: {0}"
msgstr "Last Seen: {0}"
-#: src/guidance/EmailGuidance.js:288
+#: src/guidance/EmailGuidance.js:287
msgid "Latest Scan:"
msgstr "Latest Scan:"
-#: src/guidance/WebTLSResults.js:291
+#: src/guidance/WebTLSResults.js:292
msgid "Leaf Certificate is EV"
msgstr "Leaf Certificate is EV"
@@ -2912,7 +3000,7 @@ msgstr "Leaf Certificate is EV"
#~ msgid "Leave Organization"
#~ msgstr "Leave Organization"
-#: src/auth/CreateUserPage.js:116
+#: src/auth/CreateUserPage.js:117
msgid "Let's get you set up so you can verify your account information and begin using Tracker."
msgstr "Let's get you set up so you can verify your account information and begin using Tracker."
@@ -2932,36 +3020,40 @@ msgstr "List of guidance tags"
msgid "Loading {children}..."
msgstr "Loading {children}..."
-#: src/dmarc/DmarcByDomainPage.js:242
+#: src/dmarc/DmarcByDomainPage.js:243
msgid "Loading Data..."
msgstr "Loading Data..."
-#: src/summaries/HistoricalSummariesGraph.js:235
+#: src/summaries/HistoricalSummariesGraph.js:236
msgid "Local"
msgstr "Local"
-#: src/auth/SignInPage.js:117
+#: src/auth/SignInPage.js:118
msgid "Login"
msgstr "Login"
-#: src/auth/SignInPage.js:122
+#: src/auth/SignInPage.js:123
msgid "Login to your account"
msgstr "Login to your account"
-#: src/guidance/EmailGuidance.js:140
+#: src/guidance/EmailGuidance.js:139
msgid "Lookups:"
msgstr "Lookups:"
-#: src/guidance/AdditionalFindings.js:33
-#: src/guidance/IgnoredCves.js:8
+#: src/admin/CvdEnrollmentForm.js:158
+#: src/admin/CvdEnrollmentForm.js:192
+#: src/admin/CvdEnrollmentForm.js:220
+#: src/admin/CvdEnrollmentForm.js:248
+#: src/guidance/AdditionalFindings.js:34
+#: src/guidance/IgnoredCves.js:9
msgid "Low"
msgstr "Low"
-#: src/summaries/HistoricalSummariesGraph.js:102
+#: src/summaries/HistoricalSummariesGraph.js:103
msgid "Mail"
msgstr "Mail"
-#: src/guidance/EmailGuidance.js:283
+#: src/guidance/EmailGuidance.js:282
msgid "Mail Servers (MX)"
msgstr "Mail Servers (MX)"
@@ -2969,9 +3061,9 @@ msgstr "Mail Servers (MX)"
msgid "Mail-sending"
msgstr "Mail-sending"
-#: src/domains/DomainListFilters.js:48
+#: src/domains/DomainListFilters.js:49
#: src/domains/FilterList.js:33
-#: src/guidance/DmarcPhaseStepper.js:48
+#: src/guidance/DmarcPhaseStepper.js:49
msgid "Maintain"
msgstr "Maintain"
@@ -2979,7 +3071,7 @@ msgstr "Maintain"
msgid "Managing Your Domains:"
msgstr "Managing Your Domains:"
-#: src/app/App.js:193
+#: src/app/App.js:194
msgid "Manual management of DKIM selectors is discontinued. DKIM selectors will automatically be added when setting <0>rua=mailto:dmarc@cyber.gc.ca0> in your DMARC record. <1>Learn more1>."
msgstr "Manual management of DKIM selectors is discontinued. DKIM selectors will automatically be added when setting <0>rua=mailto:dmarc@cyber.gc.ca0> in your DMARC record. <1>Learn more1>."
@@ -2992,18 +3084,23 @@ msgstr "March"
msgid "Mark domains as \"Favourite\" to save them to your \"myTracker\" page."
msgstr "Mark domains as \"Favourite\" to save them to your \"myTracker\" page."
+#: src/admin/CvdEnrollmentForm.js:144
+msgid "Max Severity"
+msgstr "Max Severity"
+
#: src/components/MonthSelect.js:27
#: src/utilities/months.js:8
msgid "May"
msgstr "May"
-#: src/guidance/AdditionalFindings.js:33
-#: src/guidance/IgnoredCves.js:8
+#: src/admin/CvdEnrollmentForm.js:161
+#: src/guidance/AdditionalFindings.js:34
+#: src/guidance/IgnoredCves.js:9
msgid "Medium"
msgstr "Medium"
-#: src/app/FloatingMenu.js:146
-#: src/app/FloatingMenu.js:169
+#: src/app/FloatingMenu.js:147
+#: src/app/FloatingMenu.js:170
msgid "Menu"
msgstr "Menu"
@@ -3011,11 +3108,11 @@ msgstr "Menu"
#~ msgid "Menu:"
#~ msgstr "Menu:"
-#: src/app/NotificationBanner.js:38
+#: src/app/NotificationBanner.js:39
msgid "Message dismissed successfully"
msgstr "Message dismissed successfully"
-#: src/summaries/HistoricalSummariesGraph.js:262
+#: src/summaries/HistoricalSummariesGraph.js:263
msgid "Metrics:"
msgstr "Metrics:"
@@ -3023,32 +3120,32 @@ msgstr "Metrics:"
msgid "Monitor changes in your organization's security compliance over time."
msgstr "Monitor changes in your organization's security compliance over time."
-#: src/domains/ScanDomain.js:123
-#: src/guidance/DmarcPhaseStepper.js:36
+#: src/domains/ScanDomain.js:124
+#: src/guidance/DmarcPhaseStepper.js:37
msgid "Monitor DMARC reports and correct misconfigurations."
msgstr "Monitor DMARC reports and correct misconfigurations."
-#: src/domains/ScanDomain.js:131
-#: src/guidance/DmarcPhaseStepper.js:50
+#: src/domains/ScanDomain.js:132
+#: src/guidance/DmarcPhaseStepper.js:51
msgid "Monitor DMARC reports;"
msgstr "Monitor DMARC reports;"
-#: src/admin/AdminDomainCard.js:10
-#: src/admin/AdminDomainModal.js:299
-#: src/admin/AdminDomains.js:285
-#: src/admin/AdminDomains.js:562
-#: src/domains/DomainCard.js:113
+#: src/admin/AdminDomainCard.js:11
+#: src/admin/AdminDomainModal.js:323
+#: src/admin/AdminDomains.js:290
+#: src/admin/AdminDomains.js:565
+#: src/domains/DomainCard.js:115
#: src/domains/FilterList.js:24
-#: src/organizationDetails/OrganizationDomains.js:126
-#: src/organizationDetails/OrganizationDomains.js:268
+#: src/organizationDetails/OrganizationDomains.js:129
+#: src/organizationDetails/OrganizationDomains.js:273
msgid "Monitor Only"
msgstr "Monitor Only"
-#: src/organizationDetails/OrganizationDomains.js:126
+#: src/organizationDetails/OrganizationDomains.js:129
msgid "MONITOR_ONLY"
msgstr "MONITOR_ONLY"
-#: src/guidance/WebTLSResults.js:397
+#: src/guidance/WebTLSResults.js:398
msgid "More details"
msgstr "More details"
@@ -3056,6 +3153,10 @@ msgstr "More details"
#~ msgid "More info"
#~ msgstr "More info"
+#: src/admin/CvdEnrollmentForm.js:36
+msgid "More Info"
+msgstr "More Info"
+
#: src/summaries/AggregatedGuidanceSummary.js:44
msgid "Most Common Negative Findings"
msgstr "Most Common Negative Findings"
@@ -3068,11 +3169,11 @@ msgstr "Mozilla SSL Configuration Generator"
#~ msgid "Multifactor authentication (MFA) is active by deafult and used to verify account email"
#~ msgstr "Multifactor authentication (MFA) is active by deafult and used to verify account email"
-#: src/auth/CreateUserPage.js:140
+#: src/auth/CreateUserPage.js:141
msgid "Multifactor authentication (MFA) is active by default and used to verify account email"
msgstr "Multifactor authentication (MFA) is active by default and used to verify account email"
-#: src/guidance/WebTLSResults.js:282
+#: src/guidance/WebTLSResults.js:283
msgid "Must Staple"
msgstr "Must Staple"
@@ -3084,50 +3185,50 @@ msgstr "My domain does not send emails, how can I get my domain's DMARC, DKIM, a
#~ msgid "My Tracker"
#~ msgstr "My Tracker"
-#: src/app/App.js:148
-#: src/app/App.js:373
+#: src/app/App.js:149
+#: src/app/App.js:374
#: src/user/MyTrackerPage.js:34
#: src/user/MyTrackerPage.js:61
msgid "myTracker"
msgstr "myTracker"
-#: src/createOrganization/CreateOrganizationPage.js:140
-#: src/createOrganization/CreateOrganizationPage.js:141
-#: src/organizationDetails/OrganizationAffiliations.js:57
-#: src/organizations/Organizations.js:92
+#: src/createOrganization/CreateOrganizationPage.js:115
+#: src/createOrganization/CreateOrganizationPage.js:116
+#: src/organizationDetails/OrganizationAffiliations.js:58
+#: src/organizations/Organizations.js:93
msgid "Name"
msgstr "Name"
-#: src/admin/OrganizationInformation.js:299
+#: src/admin/OrganizationInformation.js:300
msgid "Name (EN)"
msgstr "Name (EN)"
-#: src/admin/OrganizationInformation.js:302
+#: src/admin/OrganizationInformation.js:303
msgid "Name (FR)"
msgstr "Name (FR)"
-#: src/guidance/EmailGuidance.js:373
+#: src/guidance/EmailGuidance.js:345
msgid "Name Servers (NS)"
msgstr "Name Servers (NS)"
-#: src/admin/AuditLogTable.js:169
+#: src/admin/AuditLogTable.js:170
msgid "Name:"
msgstr "Name:"
-#: src/guidance/WebTLSResults.js:401
+#: src/guidance/WebTLSResults.js:402
msgid "Names:"
msgstr "Names:"
#: src/guidance/GuidanceSummaryCategories.js:22
-#: src/guidance/GuidanceTagDetails.js:21
+#: src/guidance/GuidanceTagDetails.js:22
msgid "Negative"
msgstr "Negative"
-#: src/domains/DomainListFilters.js:117
+#: src/domains/DomainListFilters.js:118
msgid "Negative Finding"
msgstr "Negative Finding"
-#: src/summaries/HistoricalSummariesGraph.js:103
+#: src/summaries/HistoricalSummariesGraph.js:104
msgid "Negative Findings"
msgstr "Negative Findings"
@@ -3143,8 +3244,8 @@ msgstr "Negative Findings"
#~ msgid "Neutral tags highlight relevant configuration details, but are not addressed within policy requirements and have no impact on scoring."
#~ msgstr "Neutral tags highlight relevant configuration details, but are not addressed within policy requirements and have no impact on scoring."
-#: src/guidance/WebConnectionResults.js:148
-#: src/guidance/WebConnectionResults.js:196
+#: src/guidance/WebConnectionResults.js:154
+#: src/guidance/WebConnectionResults.js:202
msgid "Never"
msgstr "Never"
@@ -3153,31 +3254,31 @@ msgstr "Never"
#~ msgid "New"
#~ msgstr "New"
-#: src/organizationDetails/OrganizationDomains.js:247
+#: src/organizationDetails/OrganizationDomains.js:252
msgid "NEW"
msgstr "NEW"
-#: src/user/EditableUserDisplayName.js:155
+#: src/user/EditableUserDisplayName.js:156
msgid "New Display Name:"
msgstr "New Display Name:"
-#: src/admin/AdminDomainModal.js:240
+#: src/admin/AdminDomainModal.js:264
msgid "New Domain URL"
msgstr "New Domain URL"
-#: src/admin/AdminDomainModal.js:240
+#: src/admin/AdminDomainModal.js:264
msgid "New Domain URL:"
msgstr "New Domain URL:"
-#: src/user/EditableUserEmail.js:130
+#: src/user/EditableUserEmail.js:131
msgid "New Email Address:"
msgstr "New Email Address:"
-#: src/user/EditableUserPassword.js:169
+#: src/user/EditableUserPassword.js:170
msgid "New Password:"
msgstr "New Password:"
-#: src/user/EditableUserPhoneNumber.js:175
+#: src/user/EditableUserPhoneNumber.js:176
msgid "New Phone Number:"
msgstr "New Phone Number:"
@@ -3185,100 +3286,100 @@ msgstr "New Phone Number:"
msgid "New Recommended TLS Ciphers"
msgstr "New Recommended TLS Ciphers"
-#: src/admin/AuditLogTable.js:175
+#: src/admin/AuditLogTable.js:176
msgid "New Value:"
msgstr "New Value:"
-#: src/userOnboarding/components/TourComponent.js:107
+#: src/userOnboarding/components/TourComponent.js:108
msgid "Next"
msgstr "Next"
-#: src/guidance/DmarcPhaseStepper.js:93
+#: src/guidance/DmarcPhaseStepper.js:94
msgid "Next Steps:"
msgstr "Next Steps:"
-#: src/guidance/WebConnectionResults.js:130
-#: src/guidance/WebConnectionResults.js:176
-#: src/guidance/WebConnectionResults.js:206
-#: src/guidance/WebConnectionResults.js:224
-#: src/guidance/WebConnectionResults.js:233
-#: src/guidance/WebTLSResults.js:216
-#: src/guidance/WebTLSResults.js:274
-#: src/guidance/WebTLSResults.js:285
-#: src/guidance/WebTLSResults.js:294
-#: src/guidance/WebTLSResults.js:305
-#: src/guidance/WebTLSResults.js:316
-#: src/guidance/WebTLSResults.js:327
-#: src/guidance/WebTLSResults.js:338
-#: src/guidance/WebTLSResults.js:416
-#: src/guidance/WebTLSResults.js:425
-#: src/guidance/WebTLSResults.js:428
-#: src/guidance/WebTLSResults.js:447
+#: src/guidance/WebConnectionResults.js:142
+#: src/guidance/WebConnectionResults.js:182
+#: src/guidance/WebConnectionResults.js:208
+#: src/guidance/WebConnectionResults.js:220
+#: src/guidance/WebConnectionResults.js:226
+#: src/guidance/WebTLSResults.js:217
+#: src/guidance/WebTLSResults.js:275
+#: src/guidance/WebTLSResults.js:286
+#: src/guidance/WebTLSResults.js:295
+#: src/guidance/WebTLSResults.js:306
+#: src/guidance/WebTLSResults.js:317
+#: src/guidance/WebTLSResults.js:328
+#: src/guidance/WebTLSResults.js:339
+#: src/guidance/WebTLSResults.js:417
+#: src/guidance/WebTLSResults.js:426
+#: src/guidance/WebTLSResults.js:429
+#: src/guidance/WebTLSResults.js:448
msgid "No"
msgstr "No"
-#: src/admin/AuditLogTable.js:102
+#: src/admin/AuditLogTable.js:103
msgid "No activity logs"
msgstr "No activity logs"
-#: src/guidance/AdditionalFindings.js:58
+#: src/guidance/AdditionalFindings.js:59
msgid "No additional findings available at this time."
msgstr "No additional findings available at this time."
-#: src/guidance/AdditionalFindings.js:368
+#: src/guidance/AdditionalFindings.js:369
msgid "No additional web components found"
msgstr "No additional web components found"
-#: src/guidance/AdditionalFindings.js:321
+#: src/guidance/AdditionalFindings.js:322
msgid "No CDN found"
msgstr "No CDN found"
-#: src/user/EditableUserPhoneNumber.js:273
+#: src/user/EditableUserPhoneNumber.js:274
msgid "No current phone number"
msgstr "No current phone number"
-#: src/dmarc/DmarcReportPage.js:387
+#: src/dmarc/DmarcReportPage.js:388
msgid "No data for the DKIM Failures by IP Address table"
msgstr "No data for the DKIM Failures by IP Address table"
-#: src/dmarc/DmarcReportPage.js:604
+#: src/dmarc/DmarcReportPage.js:605
msgid "No data for the DMARC Failures by IP Address table"
msgstr "No data for the DMARC Failures by IP Address table"
-#: src/dmarc/DmarcReportPage.js:166
+#: src/dmarc/DmarcReportPage.js:167
msgid "No data for the DMARC yearly report graph"
msgstr "No data for the DMARC yearly report graph"
-#: src/dmarc/DmarcReportPage.js:455
+#: src/dmarc/DmarcReportPage.js:456
msgid "No data for the Fully Aligned by IP Address table"
msgstr "No data for the Fully Aligned by IP Address table"
-#: src/dmarc/DmarcReportPage.js:524
+#: src/dmarc/DmarcReportPage.js:525
msgid "No data for the SPF Failures by IP Address table"
msgstr "No data for the SPF Failures by IP Address table"
-#: src/dmarc/ExportRuaListButton.js:27
-#: src/dmarc/ExportRuaListButton.js:34
-#: src/domains/DomainsPage.js:163
-#: src/domains/DomainsPage.js:171
-#: src/domains/DomainsPage.js:193
-#: src/domains/DomainsPage.js:201
+#: src/dmarc/ExportRuaListButton.js:28
+#: src/dmarc/ExportRuaListButton.js:35
+#: src/domains/DomainsPage.js:165
+#: src/domains/DomainsPage.js:173
+#: src/domains/DomainsPage.js:195
+#: src/domains/DomainsPage.js:203
msgid "No data found"
msgstr "No data found"
-#: src/domains/DomainsPage.js:164
+#: src/domains/DomainsPage.js:166
msgid "No data found when retrieving all domain statuses."
msgstr "No data found when retrieving all domain statuses."
-#: src/domains/DomainsPage.js:194
+#: src/domains/DomainsPage.js:196
msgid "No data found when retrieving top 25 report."
msgstr "No data found when retrieving top 25 report."
-#: src/dmarc/ExportRuaListButton.js:28
+#: src/dmarc/ExportRuaListButton.js:29
msgid "No data was found to export."
msgstr "No data was found to export."
-#: src/guidance/AdditionalFindings.js:288
+#: src/guidance/AdditionalFindings.js:289
msgid "No DDOS Protection found"
msgstr "No DDOS Protection found"
@@ -3286,7 +3387,7 @@ msgstr "No DDOS Protection found"
#~ msgid "No DKIM selectors are currently attached to this domain. Please contact an admin of an affiliated organization to add selectors."
#~ msgstr "No DKIM selectors are currently attached to this domain. Please contact an admin of an affiliated organization to add selectors."
-#: src/guidance/DmarcPhaseStepper.js:66
+#: src/guidance/DmarcPhaseStepper.js:67
msgid "No DMARC Implementation Phase"
msgstr "No DMARC Implementation Phase"
@@ -3294,13 +3395,13 @@ msgstr "No DMARC Implementation Phase"
#~ msgid "No DMARC phase information available for this organization."
#~ msgstr "No DMARC phase information available for this organization."
-#: src/admin/AdminDomainList.js:28
-#: src/domains/DomainsPage.js:232
-#: src/organizationDetails/OrganizationDomains.js:160
+#: src/admin/AdminDomainList.js:24
+#: src/domains/DomainsPage.js:234
+#: src/organizationDetails/OrganizationDomains.js:163
msgid "No Domains"
msgstr "No Domains"
-#: src/guidance/AdditionalFindings.js:229
+#: src/guidance/AdditionalFindings.js:230
msgid "No frameworks found"
msgstr "No frameworks found"
@@ -3320,11 +3421,11 @@ msgstr "No guidance found for this category"
msgid "No IP addresses were available to scan for this service. Please check your DNS configuration or contact us for assistance."
msgstr "No IP addresses were available to scan for this service. Please check your DNS configuration or contact us for assistance."
-#: src/guidance/WebTLSResults.js:79
+#: src/guidance/WebTLSResults.js:80
msgid "No known weak protocols used."
msgstr "No known weak protocols used."
-#: src/guidance/EmailGuidance.js:319
+#: src/guidance/EmailGuidance.js:318
msgid "No MX records found. Is the domain parked?"
msgstr "No MX records found. Is the domain parked?"
@@ -3336,7 +3437,7 @@ msgstr "No MX records found. Is the domain parked?"
msgid "No negative findings to show. "
msgstr "No negative findings to show. "
-#: src/organizations/Organizations.js:111
+#: src/organizations/Organizations.js:112
msgid "No Organizations"
msgstr "No Organizations"
@@ -3344,7 +3445,11 @@ msgstr "No Organizations"
msgid "No Organizations found for this domain."
msgstr "No Organizations found for this domain."
-#: src/guidance/AdditionalFindings.js:257
+#: src/guidance/SecurityTxt.js:21
+msgid "No record was found for this service."
+msgstr "No record was found for this service."
+
+#: src/guidance/AdditionalFindings.js:258
msgid "No response headers found"
msgstr "No response headers found"
@@ -3360,25 +3465,25 @@ msgstr "No scan data for this organization."
msgid "No scan data is currently available for this service. You may request a scan using the refresh button, or wait up to 24 hours for data to refresh."
msgstr "No scan data is currently available for this service. You may request a scan using the refresh button, or wait up to 24 hours for data to refresh."
-#: src/admin/DomainTagsList.js:59
+#: src/admin/DomainTagsList.js:60
msgid "No Tags"
msgstr "No Tags"
-#: src/guidance/AdditionalFindings.js:181
+#: src/guidance/AdditionalFindings.js:182
msgid "No Top 25 Vulnerabilites Detected"
msgstr "No Top 25 Vulnerabilites Detected"
-#: src/admin/SuperAdminUserList.js:157
+#: src/admin/SuperAdminUserList.js:158
#: src/admin/UserList.js:83
msgid "No users"
msgstr "No users"
-#: src/organizationDetails/OrganizationAffiliations.js:69
+#: src/organizationDetails/OrganizationAffiliations.js:70
msgid "No Users"
msgstr "No Users"
-#: src/admin/OrganizationInformation.js:261
-#: src/admin/TagForm.js:158
+#: src/admin/OrganizationInformation.js:262
+#: src/admin/TagForm.js:159
msgid "No values were supplied when attempting to update organization details."
msgstr "No values were supplied when attempting to update organization details."
@@ -3386,30 +3491,37 @@ msgstr "No values were supplied when attempting to update organization details."
msgid "Non-compliant"
msgstr "Non-compliant"
-#: src/admin/OrganizationInformation.js:392
-#: src/guidance/EmailGuidance.js:275
-#: src/guidance/IgnoredCves.js:22
-#: src/guidance/IgnoredCves.js:66
-#: src/user/EditableUserTFAMethod.js:164
+#: src/admin/CvdEnrollmentForm.js:189
+#: src/admin/CvdEnrollmentForm.js:217
+#: src/admin/CvdEnrollmentForm.js:245
+#: src/admin/OrganizationInformation.js:393
+#: src/guidance/EmailGuidance.js:274
+#: src/guidance/IgnoredCves.js:23
+#: src/guidance/IgnoredCves.js:67
+#: src/user/EditableUserTFAMethod.js:165
msgid "None"
msgstr "None"
-#: src/guidance/WebTLSResults.js:388
-#: src/guidance/WebTLSResults.js:413
+#: src/guidance/WebTLSResults.js:389
+#: src/guidance/WebTLSResults.js:414
msgid "Not After:"
msgstr "Not After:"
-#: src/guidance/WebConnectionResults.js:143
-#: src/guidance/WebConnectionResults.js:215
-#: src/guidance/WebConnectionResults.js:224
-#: src/guidance/WebConnectionResults.js:233
+#: src/guidance/WebConnectionResults.js:149
+#: src/guidance/WebConnectionResults.js:214
+#: src/guidance/WebConnectionResults.js:220
+#: src/guidance/WebConnectionResults.js:226
msgid "Not available"
msgstr "Not available"
-#: src/guidance/WebTLSResults.js:410
+#: src/guidance/WebTLSResults.js:411
msgid "Not Before:"
msgstr "Not Before:"
+#: src/admin/CvdEnrollmentForm.js:99
+msgid "Not Enrolled"
+msgstr "Not Enrolled"
+
#: src/summaries/SummaryGroup.js:26
msgid "Not Implemented"
msgstr "Not Implemented"
@@ -3422,11 +3534,11 @@ msgstr "Not Implemented"
#~ msgid "Note:"
#~ msgstr "Note:"
-#: src/admin/AdminDomainModal.js:360
+#: src/admin/AdminDomainModal.js:391
msgid "Note: This could affect results for multiple organizations"
msgstr "Note: This could affect results for multiple organizations"
-#: src/admin/AdminDomainModal.js:358
+#: src/admin/AdminDomainModal.js:389
msgid "Note: This will affect results for {orgCount} organizations"
msgstr "Note: This will affect results for {orgCount} organizations"
@@ -3443,7 +3555,7 @@ msgstr "Notification of Changes"
msgid "November"
msgstr "November"
-#: src/domains/DomainsPage.js:310
+#: src/domains/DomainsPage.js:314
msgid "NXDOMAIN"
msgstr "NXDOMAIN"
@@ -3468,7 +3580,7 @@ msgstr "Obtain the configuration guidance for the appropriate endpoints (e.g., w
msgid "October"
msgstr "October"
-#: src/admin/AuditLogTable.js:172
+#: src/admin/AuditLogTable.js:173
msgid "Old Value:"
msgstr "Old Value:"
@@ -3480,7 +3592,7 @@ msgstr "Once access is given to your department by the TBS Cyber team, they will
msgid "Only <0>TBS Cyber Security0> can remove domains from your organization. Domains are only to be removed from your list when 1) they no longer exist, meaning they are deleted from the DNS returning an error code of NX DOMAIN (domain name does not exist); or 2) if you have identified that they do not belong to your organization."
msgstr "Only <0>TBS Cyber Security0> can remove domains from your organization. Domains are only to be removed from your list when 1) they no longer exist, meaning they are deleted from the DNS returning an error code of NX DOMAIN (domain name does not exist); or 2) if you have identified that they do not belong to your organization."
-#: src/guidance/AdditionalFindings.js:385
+#: src/guidance/AdditionalFindings.js:386
msgid "Open"
msgstr "Open"
@@ -3492,14 +3604,14 @@ msgstr "Open the glossary."
msgid "Options include contacting the <0>SSC WebSSL services team0> and/or using <1>Let's Encrypt1>. For more information, please refer to the guidance on <2>Recommendations for TLS Server Certificates2>."
msgstr "Options include contacting the <0>SSC WebSSL services team0> and/or using <1>Let's Encrypt1>. For more information, please refer to the guidance on <2>Recommendations for TLS Server Certificates2>."
-#: src/admin/AuditLogTable.js:79
-#: src/admin/AuditLogTable.js:127
-#: src/admin/DomainTagsList.js:51
-#: src/admin/TagForm.js:272
+#: src/admin/AuditLogTable.js:80
+#: src/admin/AuditLogTable.js:128
+#: src/admin/DomainTagsList.js:52
+#: src/admin/TagForm.js:273
msgid "Organization"
msgstr "Organization"
-#: src/createOrganization/CreateOrganizationPage.js:53
+#: src/createOrganization/CreateOrganizationPage.js:48
msgid "Organization created"
msgstr "Organization created"
@@ -3507,11 +3619,11 @@ msgstr "Organization created"
msgid "Organization Details"
msgstr "Organization Details"
-#: src/admin/OrganizationInformation.js:162
+#: src/admin/OrganizationInformation.js:163
msgid "Organization Information"
msgstr "Organization Information"
-#: src/admin/AuditLogTable.js:150
+#: src/admin/AuditLogTable.js:151
msgid "Organization is invested in the outside domain"
msgstr "Organization is invested in the outside domain"
@@ -3520,20 +3632,20 @@ msgstr "Organization is invested in the outside domain"
#~ msgid "Organization left successfully"
#~ msgstr "Organization left successfully"
-#: src/admin/OrganizationInformation.js:441
-#: src/organizations/Organizations.js:192
+#: src/admin/OrganizationInformation.js:442
+#: src/organizations/Organizations.js:193
msgid "Organization Name"
msgstr "Organization Name"
-#: src/admin/OrganizationInformation.js:179
+#: src/admin/OrganizationInformation.js:180
msgid "Organization name does not match."
msgstr "Organization name does not match."
-#: src/admin/OrganizationInformation.js:260
+#: src/admin/OrganizationInformation.js:261
msgid "Organization not updated"
msgstr "Organization not updated"
-#: src/admin/AuditLogTable.js:152
+#: src/admin/AuditLogTable.js:153
msgid "Organization owns this domain, but it is outside the allowed scope"
msgstr "Organization owns this domain, but it is outside the allowed scope"
@@ -3543,27 +3655,27 @@ msgstr "Organization owns this domain, but it is outside the allowed scope"
#~ msgid "Organization:"
#~ msgstr "Organization:"
-#: src/admin/AdminPage.js:90
-#: src/admin/AdminPage.js:107
-#: src/admin/UserListModal.js:237
+#: src/admin/AdminPage.js:91
+#: src/admin/AdminPage.js:108
+#: src/admin/UserListModal.js:238
msgid "Organization: "
msgstr "Organization: "
-#: src/guidance/GuidancePage.js:380
+#: src/guidance/GuidancePage.js:378
msgid "Organization(s):"
msgstr "Organization(s):"
-#: src/admin/AdminPage.js:237
-#: src/app/App.js:131
-#: src/app/App.js:292
-#: src/app/FloatingMenu.js:103
+#: src/admin/AdminPage.js:238
+#: src/app/App.js:132
+#: src/app/App.js:293
+#: src/app/FloatingMenu.js:104
#: src/guidance/GuidancePage.js:210
-#: src/organizations/Organizations.js:102
-#: src/organizations/Organizations.js:187
+#: src/organizations/Organizations.js:103
+#: src/organizations/Organizations.js:188
msgid "Organizations"
msgstr "Organizations"
-#: src/admin/AuditLogTable.js:154
+#: src/admin/AuditLogTable.js:155
msgid "Other"
msgstr "Other"
@@ -3586,86 +3698,87 @@ msgstr "our Terms and Conditions on the TBS website"
#~ msgid "OUTSIDE"
#~ msgstr "OUTSIDE"
-#: src/admin/UserListModal.js:264
+#: src/admin/UserListModal.js:265
msgid "OWNER"
msgstr "OWNER"
-#: src/admin/TagForm.js:261
+#: src/admin/TagForm.js:262
msgid "Ownership:"
msgstr "Ownership:"
-#: src/guidance/EmailGuidance.js:236
+#: src/guidance/EmailGuidance.js:235
msgid "p:"
msgstr "p:"
#. placeholder {0}: state.pageIndex + 1
#. placeholder {1}: pageOptions.length
-#: src/components/TrackerTable.js:271
+#: src/components/TrackerTable.js:270
msgid "Page {0} of {1}"
msgstr "Page {0} of {1}"
-#: src/dmarc/DmarcReportPage.js:132
#: src/dmarc/DmarcReportPage.js:133
-#: src/dmarc/DmarcReportSummaryGraph.js:184
-#: src/dmarc/DmarcReportSummaryGraph.js:381
-#: src/domains/DomainListFilters.js:37
+#: src/dmarc/DmarcReportPage.js:134
+#: src/dmarc/DmarcReportSummaryGraph.js:185
+#: src/dmarc/DmarcReportSummaryGraph.js:382
+#: src/domains/DomainListFilters.js:38
msgid "Pass"
msgstr "Pass"
#: src/components/fields/PasswordConfirmation.js:75
#: src/components/fields/PasswordConfirmation.js:111
+#: src/components/fields/PasswordField.js:9
#: src/components/fields/PasswordField.js:29
msgid "Password"
msgstr "Password"
-#: src/auth/ResetPasswordPage.js:20
+#: src/auth/ResetPasswordPage.js:21
#: src/utilities/fieldRequirements.js:18
#: src/utilities/fieldRequirements.js:20
msgid "Password cannot be empty"
msgstr "Password cannot be empty"
-#: src/auth/ResetPasswordPage.js:23
+#: src/auth/ResetPasswordPage.js:24
#: src/utilities/fieldRequirements.js:22
msgid "Password confirmation cannot be empty"
msgstr "Password confirmation cannot be empty"
-#: src/auth/ResetPasswordPage.js:21
+#: src/auth/ResetPasswordPage.js:22
#: src/utilities/fieldRequirements.js:19
msgid "Password must be at least 12 characters long"
msgstr "Password must be at least 12 characters long"
-#: src/auth/ResetPasswordPage.js:42
+#: src/auth/ResetPasswordPage.js:43
msgid "Password Updated"
msgstr "Password Updated"
#: src/components/fields/PasswordConfirmation.js:10
-#: src/components/fields/PasswordField.js:46
-#: src/user/EditableUserPassword.js:91
+#: src/user/EditableUserPassword.js:92
msgid "Password:"
msgstr "Password:"
-#: src/auth/ResetPasswordPage.js:24
+#: src/auth/ResetPasswordPage.js:25
#: src/utilities/fieldRequirements.js:23
msgid "Passwords must match"
msgstr "Passwords must match"
-#: src/guidance/EmailGuidance.js:248
+#: src/guidance/EmailGuidance.js:247
msgid "pct:"
msgstr "pct:"
-#: src/admin/DomainTagsList.js:52
+#: src/admin/CvdEnrollmentForm.js:103
+#: src/admin/DomainTagsList.js:53
msgid "Pending"
msgstr "Pending"
-#: src/admin/UserListModal.js:255
+#: src/admin/UserListModal.js:256
msgid "PENDING"
msgstr "PENDING"
-#: src/summaries/HistoricalSummariesGraph.js:255
+#: src/summaries/HistoricalSummariesGraph.js:256
msgid "Percentage"
msgstr "Percentage"
-#: src/dmarc/DmarcReportSummaryGraph.js:121
+#: src/dmarc/DmarcReportSummaryGraph.js:122
msgid "Percentages"
msgstr "Percentages"
@@ -3685,32 +3798,32 @@ msgstr "Percentages"
#~ msgid "Perform another assessment of the applicable domains and sub-domains to confirm that the configuration has been updated and that HTTPS is enforced in accordance with the ITPIN. Results will appear in the Tracker Dashboard within 24 hours."
#~ msgstr "Perform another assessment of the applicable domains and sub-domains to confirm that the configuration has been updated and that HTTPS is enforced in accordance with the ITPIN. Results will appear in the Tracker Dashboard within 24 hours."
-#: src/guidance/WebTLSResults.js:29
+#: src/guidance/WebTLSResults.js:30
msgid "phase out"
msgstr "phase out"
-#: src/user/EditableUserTFAMethod.js:167
+#: src/user/EditableUserTFAMethod.js:168
msgid "Phone"
msgstr "Phone"
-#: src/utilities/fieldRequirements.js:33
+#: src/utilities/fieldRequirements.js:34
msgid "Phone number field must not be empty"
msgstr "Phone number field must not be empty"
-#: src/utilities/fieldRequirements.js:34
+#: src/utilities/fieldRequirements.js:35
msgid "Phone number must be a valid phone number that is 10-15 digits long"
msgstr "Phone number must be a valid phone number that is 10-15 digits long"
#: src/components/fields/PhoneNumberField.js:12
-#: src/user/EditableUserPhoneNumber.js:259
+#: src/user/EditableUserPhoneNumber.js:260
msgid "Phone Number:"
msgstr "Phone Number:"
-#: src/user/EditableUserTFAMethod.js:130
+#: src/user/EditableUserTFAMethod.js:131
msgid "Phone Validated"
msgstr "Phone Validated"
-#: src/admin/AdminDomainModal.js:316
+#: src/admin/AdminDomainModal.js:347
msgid "Please allow up to 24 hours for summaries to reflect any changes."
msgstr "Please allow up to 24 hours for summaries to reflect any changes."
@@ -3730,7 +3843,7 @@ msgstr "Please contact <0>TBS Cyber Security0> for help."
msgid "Please enter your current password."
msgstr "Please enter your current password."
-#: src/auth/CreateUserPage.js:44
+#: src/auth/CreateUserPage.js:45
msgid "Please enter your one-time code to continue to Tracker."
msgstr "Please enter your one-time code to continue to Tracker."
@@ -3742,7 +3855,7 @@ msgstr "Please enter your two factor code below."
#~ msgid "Please follow the link in order to verify your account and start using Tracker."
#~ msgstr "Please follow the link in order to verify your account and start using Tracker."
-#: src/dmarc/DmarcReportPage.js:245
+#: src/dmarc/DmarcReportPage.js:246
msgid "Pointer to a DKIM public key record in DNS."
msgstr "Pointer to a DKIM public key record in DNS."
@@ -3752,16 +3865,16 @@ msgstr "Pointer to a DKIM public key record in DNS."
#~ msgid "Policy"
#~ msgstr "Policy"
-#: src/guidance/GuidanceTagDetails.js:38
+#: src/guidance/GuidanceTagDetails.js:39
msgid "Policy guidance:"
msgstr "Policy guidance:"
-#: src/guidance/AdditionalFindings.js:377
+#: src/guidance/AdditionalFindings.js:378
msgid "Ports"
msgstr "Ports"
#: src/guidance/GuidanceSummaryCategories.js:34
-#: src/guidance/GuidanceTagDetails.js:19
+#: src/guidance/GuidanceTagDetails.js:20
msgid "Positive"
msgstr "Positive"
@@ -3785,11 +3898,11 @@ msgstr "Positive"
#~ msgid "Prevent this domain from being scanned and being counted in any summaries."
#~ msgstr "Prevent this domain from being scanned and being counted in any summaries."
-#: src/admin/AdminDomainModal.js:338
+#: src/admin/AdminDomainModal.js:369
msgid "Prevent this domain from being visible, scanned, and being counted in any summaries."
msgstr "Prevent this domain from being visible, scanned, and being counted in any summaries."
-#: src/app/TopBanner.js:87
+#: src/app/TopBanner.js:88
msgid "PREVIEW"
msgstr "PREVIEW"
@@ -3797,8 +3910,8 @@ msgstr "PREVIEW"
#~ msgid "Previous"
#~ msgstr "Previous"
-#: src/app/App.js:423
-#: src/app/FloatingMenu.js:219
+#: src/app/App.js:424
+#: src/app/FloatingMenu.js:220
#: src/app/SlideMessage.js:88
#: src/termsConditions/TermsConditionsPage.js:41
msgid "Privacy"
@@ -3821,12 +3934,12 @@ msgstr "Private IP"
#~ msgid "Prod"
#~ msgstr "Prod"
-#: src/organizationDetails/OrganizationDomains.js:248
+#: src/organizationDetails/OrganizationDomains.js:253
msgid "PROD"
msgstr "PROD"
-#: src/user/EditableEmailUpdateOptions.js:110
-#: src/user/EditableEmailUpdateOptions.js:197
+#: src/user/EditableEmailUpdateOptions.js:111
+#: src/user/EditableEmailUpdateOptions.js:198
msgid "Progress Report"
msgstr "Progress Report"
@@ -3834,16 +3947,16 @@ msgstr "Progress Report"
msgid "Protect domains that do not send email - GOV.UK (www.gov.uk)"
msgstr "Protect domains that do not send email - GOV.UK (www.gov.uk)"
-#: src/domains/DomainCard.js:207
-#: src/domains/DomainsPage.js:296
+#: src/domains/DomainCard.js:217
+#: src/domains/DomainsPage.js:300
#: src/domains/FilterList.js:15
-#: src/guidance/WebTLSResults.js:53
-#: src/organizationDetails/OrganizationDomains.js:233
+#: src/guidance/WebTLSResults.js:54
+#: src/organizationDetails/OrganizationDomains.js:238
msgid "Protocols"
msgstr "Protocols"
-#: src/domains/DomainsPage.js:130
-#: src/organizationDetails/OrganizationDomains.js:104
+#: src/domains/DomainsPage.js:132
+#: src/organizationDetails/OrganizationDomains.js:105
msgid "Protocols Status"
msgstr "Protocols Status"
@@ -3861,22 +3974,22 @@ msgstr "Protocols Status"
#: src/createOrganization/CreateOrganizationPage.js:149
#: src/createOrganization/CreateOrganizationPage.js:150
-msgid "Province"
-msgstr "Province"
+#~ msgid "Province"
+#~ msgstr "Province"
-#: src/admin/OrganizationInformation.js:311
+#: src/admin/OrganizationInformation.js:312
msgid "Province (EN)"
msgstr "Province (EN)"
-#: src/admin/OrganizationInformation.js:314
+#: src/admin/OrganizationInformation.js:315
msgid "Province (FR)"
msgstr "Province (FR)"
-#: src/admin/OrganizationInformation.js:376
+#: src/admin/OrganizationInformation.js:377
msgid "Province:"
msgstr "Province:"
-#: src/summaries/HistoricalSummariesGraph.js:202
+#: src/summaries/HistoricalSummariesGraph.js:203
msgid "Range:"
msgstr "Range:"
@@ -3888,7 +4001,7 @@ msgstr "Reach out if you have any questions."
#~ msgid "Reach out to us if you have any questions."
#~ msgstr "Reach out to us if you have any questions."
-#: src/app/App.js:280
+#: src/app/App.js:281
msgid "Read guidance"
msgstr "Read guidance"
@@ -3896,27 +4009,27 @@ msgstr "Read guidance"
msgid "Read Guidance"
msgstr "Read Guidance"
-#: src/admin/AdminDomains.js:516
-#: src/admin/AuditLogTable.js:133
+#: src/admin/AdminDomains.js:519
+#: src/admin/AuditLogTable.js:134
msgid "Reason"
msgstr "Reason"
-#: src/guidance/WebTLSResults.js:302
+#: src/guidance/WebTLSResults.js:303
msgid "Received Chain Contains Anchor Certificate"
msgstr "Received Chain Contains Anchor Certificate"
-#: src/guidance/WebTLSResults.js:313
+#: src/guidance/WebTLSResults.js:314
msgid "Received Chain Has Valid Order"
msgstr "Received Chain Has Valid Order"
-#: src/user/EditableEmailUpdateOptions.js:99
-#: src/user/EditableEmailUpdateOptions.js:176
+#: src/user/EditableEmailUpdateOptions.js:100
+#: src/user/EditableEmailUpdateOptions.js:177
msgid "Recent Activity"
msgstr "Recent Activity"
-#: src/guidance/EmailGuidance.js:134
-#: src/guidance/EmailGuidance.js:180
-#: src/guidance/EmailGuidance.js:230
+#: src/guidance/EmailGuidance.js:133
+#: src/guidance/EmailGuidance.js:179
+#: src/guidance/EmailGuidance.js:229
msgid "Record:"
msgstr "Record:"
@@ -3928,46 +4041,46 @@ msgstr "References:"
msgid "Refresh the web and email scan results for this domain."
msgstr "Refresh the web and email scan results for this domain."
-#: src/auth/CreateUserPage.js:108
+#: src/auth/CreateUserPage.js:109
msgid "Register"
msgstr "Register"
-#: src/domains/ScanDomain.js:128
-#: src/guidance/DmarcPhaseStepper.js:44
+#: src/domains/ScanDomain.js:129
+#: src/guidance/DmarcPhaseStepper.js:45
msgid "Reject all messages from non-mail domains."
msgstr "Reject all messages from non-mail domains."
-#: src/auth/SignInPage.js:134
+#: src/auth/SignInPage.js:135
msgid "Remember me"
msgstr "Remember me"
-#: src/admin/AuditLogTable.js:86
+#: src/admin/AuditLogTable.js:87
msgid "Remove"
msgstr "Remove"
-#: src/admin/AdminDomains.js:496
+#: src/admin/AdminDomains.js:499
msgid "Remove Domain"
msgstr "Remove Domain"
-#: src/admin/OrganizationInformation.js:208
-#: src/admin/OrganizationInformation.js:427
+#: src/admin/OrganizationInformation.js:209
+#: src/admin/OrganizationInformation.js:428
msgid "Remove Organization"
msgstr "Remove Organization"
-#: src/admin/UserListModal.js:217
+#: src/admin/UserListModal.js:218
msgid "Remove User"
msgstr "Remove User"
-#: src/admin/OrganizationInformation.js:98
+#: src/admin/OrganizationInformation.js:99
msgid "Removed Organization"
msgstr "Removed Organization"
-#: src/app/FloatingMenu.js:230
+#: src/app/FloatingMenu.js:231
#: src/app/SlideMessage.js:99
msgid "Report an Issue"
msgstr "Report an Issue"
-#: src/domains/ScanDomain.js:167
+#: src/domains/ScanDomain.js:168
msgid "Request a domain to be scanned:"
msgstr "Request a domain to be scanned:"
@@ -3977,17 +4090,17 @@ msgstr "Request an invite if you are unaffiliated with your organization."
#: src/guidance/GuidancePage.js:168
#: src/organizationDetails/OrganizationDetails.js:120
-#: src/organizations/Organizations.js:133
-#: src/organizations/RequestOrgInviteModal.js:62
+#: src/organizations/Organizations.js:134
+#: src/organizations/RequestOrgInviteModal.js:63
msgid "Request Invite"
msgstr "Request Invite"
-#: src/dmarc/ExportRuaListButton.js:15
-#: src/domains/DomainsPage.js:154
+#: src/dmarc/ExportRuaListButton.js:16
+#: src/domains/DomainsPage.js:156
msgid "Request successfully sent to get all domain statuses - this may take a minute."
msgstr "Request successfully sent to get all domain statuses - this may take a minute."
-#: src/domains/DomainsPage.js:184
+#: src/domains/DomainsPage.js:186
msgid "Request successfully sent to get top 25 report."
msgstr "Request successfully sent to get top 25 report."
@@ -3995,7 +4108,7 @@ msgstr "Request successfully sent to get top 25 report."
msgid "Requested Scan"
msgstr "Requested Scan"
-#: src/domains/SubdomainDiscoveryButton.js:41
+#: src/domains/SubdomainDiscoveryButton.js:42
msgid "Requested subdomain scan"
msgstr "Requested subdomain scan"
@@ -4011,23 +4124,23 @@ msgstr "Requirements: <0>Email Management Services Configuration Requirements0
msgid "Requirements: <0>Web Sites and Services Management Configuration Requirements0>"
msgstr "Requirements: <0>Web Sites and Services Management Configuration Requirements0>"
-#: src/admin/AdminDomainCard.js:12
-#: src/admin/AdminDomainModal.js:305
-#: src/admin/AdminDomains.js:291
-#: src/admin/AdminDomains.js:570
-#: src/domains/DomainCard.js:115
+#: src/admin/AdminDomainCard.js:13
+#: src/admin/AdminDomainModal.js:329
+#: src/admin/AdminDomains.js:296
+#: src/admin/AdminDomains.js:573
+#: src/domains/DomainCard.js:117
#: src/domains/FilterList.js:26
-#: src/organizationDetails/OrganizationDomains.js:128
-#: src/organizationDetails/OrganizationDomains.js:276
+#: src/organizationDetails/OrganizationDomains.js:131
+#: src/organizationDetails/OrganizationDomains.js:281
msgid "Requires Investigation"
msgstr "Requires Investigation"
-#: src/organizationDetails/OrganizationDomains.js:128
+#: src/organizationDetails/OrganizationDomains.js:131
msgid "REQUIRES_INVESTIGATION"
msgstr "REQUIRES_INVESTIGATION"
-#: src/app/App.js:253
-#: src/auth/ResetPasswordPage.js:95
+#: src/app/App.js:254
+#: src/auth/ResetPasswordPage.js:96
msgid "Reset Password"
msgstr "Reset Password"
@@ -4035,20 +4148,20 @@ msgstr "Reset Password"
#~ msgid "Resource"
#~ msgstr "Resource"
-#: src/admin/AuditLogTable.js:73
-#: src/admin/AuditLogTable.js:124
+#: src/admin/AuditLogTable.js:74
+#: src/admin/AuditLogTable.js:125
msgid "Resource Name"
msgstr "Resource Name"
-#: src/admin/AuditLogTable.js:121
+#: src/admin/AuditLogTable.js:122
msgid "Resource Type"
msgstr "Resource Type"
-#: src/admin/AuditLogTable.js:215
+#: src/admin/AuditLogTable.js:216
msgid "Resource:"
msgstr "Resource:"
-#: src/guidance/AdditionalFindings.js:238
+#: src/guidance/AdditionalFindings.js:239
msgid "Response Headers"
msgstr "Response Headers"
@@ -4057,7 +4170,7 @@ msgstr "Response Headers"
#~ msgid "Result:"
#~ msgstr "Result:"
-#: src/domains/ScanDomain.js:311
+#: src/domains/ScanDomain.js:312
msgid "Results for scans of email technologies (DMARC, SPF, DKIM)."
msgstr "Results for scans of email technologies (DMARC, SPF, DKIM)."
@@ -4066,40 +4179,40 @@ msgstr "Results for scans of email technologies (DMARC, SPF, DKIM)."
#~ msgid "Results for scans of web technologies (SSL, HTTPS)."
#~ msgstr "Results for scans of web technologies (SSL, HTTPS)."
-#: src/domains/ScanDomain.js:257
+#: src/domains/ScanDomain.js:258
msgid "Results for scans of web technologies (TLS, HTTPS)."
msgstr "Results for scans of web technologies (TLS, HTTPS)."
-#: src/guidance/WebTLSResults.js:428
+#: src/guidance/WebTLSResults.js:429
msgid "Revoked:"
msgstr "Revoked:"
-#: src/guidance/WebTLSResults.js:236
+#: src/guidance/WebTLSResults.js:237
msgid "ROBOT Vulnerable"
msgstr "ROBOT Vulnerable"
-#: src/organizationDetails/OrganizationAffiliations.js:55
+#: src/organizationDetails/OrganizationAffiliations.js:56
msgid "Role"
msgstr "Role"
-#: src/admin/UserListModal.js:106
+#: src/admin/UserListModal.js:107
msgid "Role updated"
msgstr "Role updated"
-#: src/admin/UserListModal.js:245
+#: src/admin/UserListModal.js:246
msgid "Role:"
msgstr "Role:"
-#: src/domains/ScanDomain.js:133
-#: src/guidance/DmarcPhaseStepper.js:52
+#: src/domains/ScanDomain.js:134
+#: src/guidance/DmarcPhaseStepper.js:53
msgid "Rotate DKIM keys annually."
msgstr "Rotate DKIM keys annually."
-#: src/guidance/WebTLSResults.js:435
+#: src/guidance/WebTLSResults.js:436
msgid "SAN List:"
msgstr "SAN List:"
-#: src/user/EditableUserTFAMethod.js:176
+#: src/user/EditableUserTFAMethod.js:177
msgid "Save"
msgstr "Save"
@@ -4107,32 +4220,32 @@ msgstr "Save"
#~ msgid "Save Language"
#~ msgstr "Save Language"
-#: src/admin/AuditLogTable.js:89
+#: src/admin/AuditLogTable.js:90
msgid "Scan"
msgstr "Scan"
-#: src/domains/ScanDomain.js:180
+#: src/domains/ScanDomain.js:181
msgid "Scan Domain"
msgstr "Scan Domain"
-#: src/domains/ScanDomain.js:54
+#: src/domains/ScanDomain.js:55
msgid "Scan of domain successfully requested"
msgstr "Scan of domain successfully requested"
-#: src/admin/AdminDomains.js:185
-#: src/domains/DomainCard.js:162
-#: src/domains/DomainsPage.js:142
-#: src/guidance/GuidancePage.js:343
-#: src/organizationDetails/OrganizationDomains.js:118
+#: src/admin/AdminDomains.js:187
+#: src/domains/DomainCard.js:164
+#: src/domains/DomainsPage.js:144
+#: src/guidance/GuidancePage.js:341
+#: src/organizationDetails/OrganizationDomains.js:119
msgid "Scan Pending"
msgstr "Scan Pending"
-#: src/domains/DomainsPage.js:317
-#: src/organizationDetails/OrganizationDomains.js:260
+#: src/domains/DomainsPage.js:321
+#: src/organizationDetails/OrganizationDomains.js:265
msgid "SCAN PENDING"
msgstr "SCAN PENDING"
-#: src/domains/ScanDomain.js:53
+#: src/domains/ScanDomain.js:54
msgid "Scan Request"
msgstr "Scan Request"
@@ -4140,30 +4253,30 @@ msgstr "Scan Request"
#~ msgid "Scanner Finding"
#~ msgstr "Scanner Finding"
-#: src/summaries/HistoricalSummariesGraph.js:225
+#: src/summaries/HistoricalSummariesGraph.js:226
msgid "Scope:"
msgstr "Scope:"
-#: src/admin/AdminDomains.js:415
+#: src/admin/AdminDomains.js:418
msgid "Search by Domain URL"
msgstr "Search by Domain URL"
-#: src/admin/AuditLogTable.js:208
+#: src/admin/AuditLogTable.js:209
msgid "Search by initiated by, resource name"
msgstr "Search by initiated by, resource name"
-#: src/dmarc/DmarcReportPage.js:371
+#: src/dmarc/DmarcReportPage.js:372
msgid "Search DKIM Failing Items"
msgstr "Search DKIM Failing Items"
-#: src/dmarc/DmarcReportPage.js:588
+#: src/dmarc/DmarcReportPage.js:589
msgid "Search DMARC Failing Items"
msgstr "Search DMARC Failing Items"
-#: src/dmarc/DmarcByDomainPage.js:200
-#: src/dmarc/DmarcByDomainPage.js:256
-#: src/domains/DomainsPage.js:337
-#: src/organizationDetails/OrganizationDomains.js:295
+#: src/dmarc/DmarcByDomainPage.js:201
+#: src/dmarc/DmarcByDomainPage.js:257
+#: src/domains/DomainsPage.js:341
+#: src/organizationDetails/OrganizationDomains.js:300
msgid "Search for a domain"
msgstr "Search for a domain"
@@ -4175,11 +4288,11 @@ msgstr "Search for a domain"
msgid "Search for a specific domain."
msgstr "Search for a specific domain."
-#: src/admin/SuperAdminUserList.js:363
+#: src/admin/SuperAdminUserList.js:364
msgid "Search for a user (email)"
msgstr "Search for a user (email)"
-#: src/organizationDetails/OrganizationAffiliations.js:100
+#: src/organizationDetails/OrganizationAffiliations.js:101
msgid "Search for a user by email"
msgstr "Search for a user by email"
@@ -4187,7 +4300,7 @@ msgstr "Search for a user by email"
#~ msgid "Search for an activity"
#~ msgstr "Search for an activity"
-#: src/organizations/Organizations.js:223
+#: src/organizations/Organizations.js:224
msgid "Search for an organization"
msgstr "Search for an organization"
@@ -4195,24 +4308,24 @@ msgstr "Search for an organization"
msgid "Search for domains here."
msgstr "Search for domains here."
-#: src/admin/AdminPage.js:130
+#: src/admin/AdminPage.js:131
msgid "Search for your organization to request an invite"
msgstr "Search for your organization to request an invite"
-#: src/dmarc/DmarcReportPage.js:439
+#: src/dmarc/DmarcReportPage.js:440
msgid "Search Fully Aligned Items"
msgstr "Search Fully Aligned Items"
-#: src/dmarc/DmarcReportPage.js:508
+#: src/dmarc/DmarcReportPage.js:509
msgid "Search SPF Failing Items"
msgstr "Search SPF Failing Items"
-#: src/components/ReactTableGlobalFilter.js:36
+#: src/components/ReactTableGlobalFilter.js:37
msgid "Search:"
msgstr "Search:"
-#: src/admin/AdminDomains.js:404
-#: src/admin/UserList.js:153
+#: src/admin/AdminDomains.js:407
+#: src/admin/UserList.js:148
#: src/components/SearchBox.js:46
msgid "Search: "
msgstr "Search: "
@@ -4221,7 +4334,7 @@ msgstr "Search: "
#~ msgid "Sector:"
#~ msgstr "Sector:"
-#: src/guidance/WebConnectionResults.js:69
+#: src/guidance/WebConnectionResults.js:95
msgid "See headers"
msgstr "See headers"
@@ -4229,7 +4342,7 @@ msgstr "See headers"
#~ msgid "Select a reason for adding this outside domain"
#~ msgstr "Select a reason for adding this outside domain"
-#: src/admin/AdminDomains.js:527
+#: src/admin/AdminDomains.js:530
msgid "Select a reason for removing this domain"
msgstr "Select a reason for removing this domain"
@@ -4237,44 +4350,54 @@ msgstr "Select a reason for removing this domain"
#~ msgid "Select a state that best describes the asset in realtion to your organization."
#~ msgstr "Select a state that best describes the asset in realtion to your organization."
-#: src/admin/AdminDomainModal.js:278
+#: src/admin/AdminDomainModal.js:302
msgid "Select a state that best describes the asset in relation to your organization."
msgstr "Select a state that best describes the asset in relation to your organization."
-#: src/admin/DomainUpdateList.js:256
+#: src/admin/DomainUpdateList.js:257
msgid "Select All"
msgstr "Select All"
-#: src/admin/DomainUpdateList.js:284
+#: src/admin/DomainUpdateList.js:285
msgid "Select all {domainCount} domains"
msgstr "Select all {domainCount} domains"
-#: src/admin/AdminPage.js:93
-#: src/admin/AdminPage.js:110
+#: src/admin/AdminPage.js:94
+#: src/admin/AdminPage.js:111
msgid "Select an organization"
msgstr "Select an organization"
-#: src/admin/AdminPage.js:191
+#: src/admin/AdminPage.js:192
msgid "Select an organization to view admin options"
msgstr "Select an organization to view admin options"
-#: src/admin/TagForm.js:265
+#: src/admin/TagForm.js:266
msgid "Select an ownership level"
msgstr "Select an ownership level"
-#: src/auth/LanguageSelect.js:22
+#: src/auth/LanguageSelect.js:23
msgid "Select Preferred Language"
msgstr "Select Preferred Language"
+#: src/admin/CvdEnrollmentForm.js:186
+#: src/admin/CvdEnrollmentForm.js:214
+#: src/admin/CvdEnrollmentForm.js:242
+msgid "Select requirement"
+msgstr "Select requirement"
+
+#: src/admin/CvdEnrollmentForm.js:155
+msgid "Select severity"
+msgstr "Select severity"
+
#: src/userOnboarding/config/tourSteps.js:178
msgid "Select the data period to view."
msgstr "Select the data period to view."
-#: src/utilities/fieldRequirements.js:78
+#: src/utilities/fieldRequirements.js:79
msgid "Selector cannot be empty"
msgstr "Selector cannot be empty"
-#: src/utilities/fieldRequirements.js:82
+#: src/utilities/fieldRequirements.js:83
msgid "Selector must be either a string containing alphanumeric characters and periods, starting and ending with only alphanumeric characters, or an asterisk"
msgstr "Selector must be either a string containing alphanumeric characters and periods, starting and ending with only alphanumeric characters, or an asterisk"
@@ -4286,7 +4409,7 @@ msgstr "Selector must be either a string containing alphanumeric characters and
#~ msgid "Selector must be string ending in '._domainkey'"
#~ msgstr "Selector must be string ending in '._domainkey'"
-#: src/guidance/WebTLSResults.js:425
+#: src/guidance/WebTLSResults.js:426
msgid "Self-signed:"
msgstr "Self-signed:"
@@ -4295,7 +4418,7 @@ msgstr "Self-signed:"
msgid "September"
msgstr "September"
-#: src/guidance/WebTLSResults.js:407
+#: src/guidance/WebTLSResults.js:408
msgid "Serial:"
msgstr "Serial:"
@@ -4303,8 +4426,8 @@ msgstr "Serial:"
msgid "Service Level Agreement"
msgstr "Service Level Agreement"
-#: src/organizations/Organizations.js:94
-#: src/organizations/Organizations.js:195
+#: src/organizations/Organizations.js:95
+#: src/organizations/Organizations.js:196
msgid "Services"
msgstr "Services"
@@ -4312,15 +4435,15 @@ msgstr "Services"
msgid "Services: {domainCount}"
msgstr "Services: {domainCount}"
-#: src/guidance/AdditionalFindings.js:128
+#: src/guidance/AdditionalFindings.js:129
msgid "Severity"
msgstr "Severity"
-#: src/components/TrackerTable.js:296
+#: src/components/TrackerTable.js:295
msgid "Show {pageSize}"
msgstr "Show {pageSize}"
-#: src/admin/AdminDomains.js:331
+#: src/admin/AdminDomains.js:336
msgid "Show Domain List"
msgstr "Show Domain List"
@@ -4329,7 +4452,7 @@ msgstr "Show Domain List"
msgid "Show password"
msgstr "Show password"
-#: src/admin/AdminDomains.js:331
+#: src/admin/AdminDomains.js:336
msgid "Show Update List"
msgstr "Show Update List"
@@ -4338,21 +4461,21 @@ msgstr "Show Update List"
#~ msgid "Showing data for period:"
#~ msgstr "Showing data for period:"
-#: src/dmarc/DmarcByDomainPage.js:230
-#: src/dmarc/DmarcReportPage.js:671
+#: src/dmarc/DmarcByDomainPage.js:231
+#: src/dmarc/DmarcReportPage.js:672
msgid "Showing data for period: "
msgstr "Showing data for period: "
-#: src/guidance/WebTLSResults.js:309
+#: src/guidance/WebTLSResults.js:310
msgid "Shows if all the certificates in the bundle provided by the server were sent in the correct order."
msgstr "Shows if all the certificates in the bundle provided by the server were sent in the correct order."
-#: src/guidance/WebTLSResults.js:298
+#: src/guidance/WebTLSResults.js:299
msgid "Shows if the certificate bundle provided from the server included the root certificate."
msgstr "Shows if the certificate bundle provided from the server included the root certificate."
-#: src/domains/DomainsPage.js:295
-#: src/organizationDetails/OrganizationDomains.js:232
+#: src/domains/DomainsPage.js:299
+#: src/organizationDetails/OrganizationDomains.js:237
msgid "Shows if the domain has a valid SSL certificate."
msgstr "Shows if the domain has a valid SSL certificate."
@@ -4371,83 +4494,83 @@ msgstr "Shows if the domain has a valid SSL certificate."
#~ msgid "Shows if the domain is policy compliant."
#~ msgstr "Shows if the domain is policy compliant."
-#: src/domains/DomainsPage.js:303
-#: src/organizationDetails/OrganizationDomains.js:240
+#: src/domains/DomainsPage.js:307
+#: src/organizationDetails/OrganizationDomains.js:245
msgid "Shows if the domain meets the DomainKeys Identified Mail (DKIM) requirements."
msgstr "Shows if the domain meets the DomainKeys Identified Mail (DKIM) requirements."
-#: src/domains/DomainsPage.js:294
-#: src/organizationDetails/OrganizationDomains.js:231
+#: src/domains/DomainsPage.js:298
+#: src/organizationDetails/OrganizationDomains.js:236
msgid "Shows if the domain meets the HSTS requirements."
msgstr "Shows if the domain meets the HSTS requirements."
-#: src/domains/DomainsPage.js:292
-#: src/organizationDetails/OrganizationDomains.js:229
+#: src/domains/DomainsPage.js:296
+#: src/organizationDetails/OrganizationDomains.js:234
msgid "Shows if the domain meets the Hypertext Transfer Protocol Secure (HTTPS) requirements."
msgstr "Shows if the domain meets the Hypertext Transfer Protocol Secure (HTTPS) requirements."
-#: src/domains/DomainsPage.js:307
-#: src/organizationDetails/OrganizationDomains.js:244
+#: src/domains/DomainsPage.js:311
+#: src/organizationDetails/OrganizationDomains.js:249
msgid "Shows if the domain meets the Message Authentication, Reporting, and Conformance (DMARC) requirements."
msgstr "Shows if the domain meets the Message Authentication, Reporting, and Conformance (DMARC) requirements."
-#: src/domains/DomainsPage.js:300
-#: src/organizationDetails/OrganizationDomains.js:237
+#: src/domains/DomainsPage.js:304
+#: src/organizationDetails/OrganizationDomains.js:242
msgid "Shows if the domain meets the Sender Policy Framework (SPF) requirements."
msgstr "Shows if the domain meets the Sender Policy Framework (SPF) requirements."
-#: src/domains/DomainsPage.js:296
-#: src/organizationDetails/OrganizationDomains.js:233
+#: src/domains/DomainsPage.js:300
+#: src/organizationDetails/OrganizationDomains.js:238
msgid "Shows if the domain uses acceptable protocols."
msgstr "Shows if the domain uses acceptable protocols."
-#: src/domains/DomainsPage.js:297
-#: src/organizationDetails/OrganizationDomains.js:234
+#: src/domains/DomainsPage.js:301
+#: src/organizationDetails/OrganizationDomains.js:239
msgid "Shows if the domain uses only ciphers that are strong or acceptable."
msgstr "Shows if the domain uses only ciphers that are strong or acceptable."
-#: src/domains/DomainsPage.js:298
-#: src/organizationDetails/OrganizationDomains.js:235
+#: src/domains/DomainsPage.js:302
+#: src/organizationDetails/OrganizationDomains.js:240
msgid "Shows if the domain uses only curves that are strong or acceptable."
msgstr "Shows if the domain uses only curves that are strong or acceptable."
-#: src/guidance/WebTLSResults.js:267
+#: src/guidance/WebTLSResults.js:268
msgid "Shows if the hostname on the server certificate matches the the hostname from the HTTP request."
msgstr "Shows if the hostname on the server certificate matches the the hostname from the HTTP request."
-#: src/guidance/WebConnectionResults.js:200
+#: src/guidance/WebConnectionResults.js:205
msgid "Shows if the HSTS (HTTP Strict Transport Security) header is present."
msgstr "Shows if the HSTS (HTTP Strict Transport Security) header is present."
-#: src/guidance/WebConnectionResults.js:227
+#: src/guidance/WebConnectionResults.js:223
msgid "Shows if the HSTS header includes the includeSubdomains directive."
msgstr "Shows if the HSTS header includes the includeSubdomains directive."
-#: src/guidance/WebConnectionResults.js:218
+#: src/guidance/WebConnectionResults.js:217
msgid "Shows if the HSTS header includes the preload directive."
msgstr "Shows if the HSTS header includes the preload directive."
-#: src/guidance/WebConnectionResults.js:124
+#: src/guidance/WebConnectionResults.js:139
msgid "Shows if the HTTP connection is live."
msgstr "Shows if the HTTP connection is live."
-#: src/guidance/WebConnectionResults.js:134
+#: src/guidance/WebConnectionResults.js:145
msgid "Shows if the HTTP endpoint upgrades to HTTPS upgrade immediately, eventually (after the first redirect), or never."
msgstr "Shows if the HTTP endpoint upgrades to HTTPS upgrade immediately, eventually (after the first redirect), or never."
-#: src/guidance/WebConnectionResults.js:170
+#: src/guidance/WebConnectionResults.js:179
msgid "Shows if the HTTPS connection is live."
msgstr "Shows if the HTTPS connection is live."
-#: src/guidance/WebConnectionResults.js:180
+#: src/guidance/WebConnectionResults.js:185
msgid "Shows if the HTTPS endpoint downgrades to unsecured HTTP immediately, eventually, or never."
msgstr "Shows if the HTTPS endpoint downgrades to unsecured HTTP immediately, eventually, or never."
-#: src/guidance/WebTLSResults.js:278
+#: src/guidance/WebTLSResults.js:279
msgid "Shows if the leaf certificate includes the \"OCSP Must-Staple\" extension."
msgstr "Shows if the leaf certificate includes the \"OCSP Must-Staple\" extension."
-#: src/guidance/WebTLSResults.js:288
+#: src/guidance/WebTLSResults.js:289
msgid "Shows if the leaf certificate is an Extended Validation Certificate."
msgstr "Shows if the leaf certificate is an Extended Validation Certificate."
@@ -4455,35 +4578,35 @@ msgstr "Shows if the leaf certificate is an Extended Validation Certificate."
#~ msgid "Shows if the received certificate chain contains Entrust as the CA."
#~ msgstr "Shows if the received certificate chain contains Entrust as the CA."
-#: src/guidance/WebTLSResults.js:320
+#: src/guidance/WebTLSResults.js:321
msgid "Shows if the received certificates are free from the use of the deprecated SHA-1 algorithm."
msgstr "Shows if the received certificates are free from the use of the deprecated SHA-1 algorithm."
-#: src/guidance/WebTLSResults.js:331
+#: src/guidance/WebTLSResults.js:332
msgid "Shows if the received certificates are not relying on a distrusted Symantec root certificate."
msgstr "Shows if the received certificates are not relying on a distrusted Symantec root certificate."
-#: src/guidance/WebTLSResults.js:207
+#: src/guidance/WebTLSResults.js:208
msgid "Shows if the server was found to be vulnerable to the Heartbleed vulnerability."
msgstr "Shows if the server was found to be vulnerable to the Heartbleed vulnerability."
-#: src/guidance/WebTLSResults.js:220
+#: src/guidance/WebTLSResults.js:221
msgid "Shows if the server was found to be vulnerable to the ROBOT vulnerability."
msgstr "Shows if the server was found to be vulnerable to the ROBOT vulnerability."
-#: src/guidance/WebConnectionResults.js:209
+#: src/guidance/WebConnectionResults.js:211
msgid "Shows the duration of time, in seconds, that the HSTS header is valid."
msgstr "Shows the duration of time, in seconds, that the HSTS header is valid."
-#: src/organizations/Organizations.js:195
+#: src/organizations/Organizations.js:196
msgid "Shows the number of domains that the organization is in control of."
msgstr "Shows the number of domains that the organization is in control of."
-#: src/organizations/Organizations.js:202
+#: src/organizations/Organizations.js:203
msgid "Shows the percentage of domains which have a valid DMARC policy configuration."
msgstr "Shows the percentage of domains which have a valid DMARC policy configuration."
-#: src/organizations/Organizations.js:198
+#: src/organizations/Organizations.js:199
msgid "Shows the percentage of domains which have HTTPS configured and upgrade HTTP connections to HTTPS"
msgstr "Shows the percentage of domains which have HTTPS configured and upgrade HTTP connections to HTTPS"
@@ -4491,7 +4614,7 @@ msgstr "Shows the percentage of domains which have HTTPS configured and upgrade
#~ msgid "Shows the percentage of domains which have HTTPS configured and upgrade HTTP connections to HTTPS (ITPIN 6.1.1)"
#~ msgstr "Shows the percentage of domains which have HTTPS configured and upgrade HTTP connections to HTTPS (ITPIN 6.1.1)"
-#: src/dmarc/DmarcByDomainPage.js:316
+#: src/dmarc/DmarcByDomainPage.js:317
msgid "Shows the percentage of emails from the domain that fail both SPF and DKIM requirements."
msgstr "Shows the percentage of emails from the domain that fail both SPF and DKIM requirements."
@@ -4499,7 +4622,7 @@ msgstr "Shows the percentage of emails from the domain that fail both SPF and DK
#~ msgid "Shows the percentage of emails from the domain that fail both SPF and DKIM requirments."
#~ msgstr "Shows the percentage of emails from the domain that fail both SPF and DKIM requirments."
-#: src/dmarc/DmarcByDomainPage.js:312
+#: src/dmarc/DmarcByDomainPage.js:313
msgid "Shows the percentage of emails from the domain that fail DKIM requirements, but pass SPF requirements."
msgstr "Shows the percentage of emails from the domain that fail DKIM requirements, but pass SPF requirements."
@@ -4507,7 +4630,7 @@ msgstr "Shows the percentage of emails from the domain that fail DKIM requiremen
#~ msgid "Shows the percentage of emails from the domain that fail DKIM requirments, but pass SPF requirments."
#~ msgstr "Shows the percentage of emails from the domain that fail DKIM requirments, but pass SPF requirments."
-#: src/dmarc/DmarcByDomainPage.js:308
+#: src/dmarc/DmarcByDomainPage.js:309
msgid "Shows the percentage of emails from the domain that fail SPF requirements, but pass DKIM requirements."
msgstr "Shows the percentage of emails from the domain that fail SPF requirements, but pass DKIM requirements."
@@ -4515,7 +4638,7 @@ msgstr "Shows the percentage of emails from the domain that fail SPF requirement
#~ msgid "Shows the percentage of emails from the domain that fail SPF requirments, but pass DKIM requirments."
#~ msgstr "Shows the percentage of emails from the domain that fail SPF requirments, but pass DKIM requirments."
-#: src/dmarc/DmarcByDomainPage.js:304
+#: src/dmarc/DmarcByDomainPage.js:305
msgid "Shows the percentage of emails from the domain that have passed both SPF and DKIM requirements."
msgstr "Shows the percentage of emails from the domain that have passed both SPF and DKIM requirements."
@@ -4523,7 +4646,7 @@ msgstr "Shows the percentage of emails from the domain that have passed both SPF
#~ msgid "Shows the percentage of emails from the domain that have passed both SPF and DKIM requirments."
#~ msgstr "Shows the percentage of emails from the domain that have passed both SPF and DKIM requirments."
-#: src/dmarc/DmarcByDomainPage.js:300
+#: src/dmarc/DmarcByDomainPage.js:301
msgid "Shows the total number of emails that have been sent by this domain during the selected time range."
msgstr "Shows the total number of emails that have been sent by this domain during the selected time range."
@@ -4531,10 +4654,10 @@ msgstr "Shows the total number of emails that have been sent by this domain duri
#~ msgid "Siganture Hash:"
#~ msgstr "Siganture Hash:"
-#: src/app/FloatingMenu.js:197
-#: src/app/TopBanner.js:105
-#: src/app/TopBanner.js:137
-#: src/auth/SignInPage.js:146
+#: src/app/FloatingMenu.js:198
+#: src/app/TopBanner.js:106
+#: src/app/TopBanner.js:138
+#: src/auth/SignInPage.js:147
msgid "Sign In"
msgstr "Sign In"
@@ -4542,34 +4665,34 @@ msgstr "Sign In"
#~ msgid "Sign in with your username and password."
#~ msgstr "Sign in with your username and password."
-#: src/auth/SignInPage.js:58
-#: src/auth/TwoFactorAuthenticatePage.js:54
+#: src/auth/SignInPage.js:59
+#: src/auth/TwoFactorAuthenticatePage.js:55
msgid "Sign In."
msgstr "Sign In."
-#: src/app/FloatingMenu.js:192
-#: src/app/TopBanner.js:124
+#: src/app/FloatingMenu.js:193
+#: src/app/TopBanner.js:125
msgid "Sign Out"
msgstr "Sign Out"
-#: src/app/FloatingMenu.js:48
-#: src/app/TopBanner.js:42
+#: src/app/FloatingMenu.js:49
+#: src/app/TopBanner.js:43
msgid "Sign Out."
msgstr "Sign Out."
-#: src/guidance/WebTLSResults.js:393
+#: src/guidance/WebTLSResults.js:394
msgid "Signature Hash:"
msgstr "Signature Hash:"
-#: src/userOnboarding/components/TourComponent.js:108
+#: src/userOnboarding/components/TourComponent.js:109
msgid "Skip"
msgstr "Skip"
-#: src/app/App.js:108
+#: src/app/App.js:109
msgid "Skip to main content"
msgstr "Skip to main content"
-#: src/admin/OrganizationInformation.js:357
+#: src/admin/OrganizationInformation.js:358
msgid "Slug:"
msgstr "Slug:"
@@ -4581,34 +4704,34 @@ msgstr "Slug:"
msgid "Sort by: "
msgstr "Sort by: "
-#: src/dmarc/DmarcReportPage.js:172
+#: src/dmarc/DmarcReportPage.js:173
msgid "Source IP Address"
msgstr "Source IP Address"
-#: src/guidance/EmailGuidance.js:242
+#: src/guidance/EmailGuidance.js:241
msgid "sp:"
msgstr "sp:"
-#: src/domains/DomainsPage.js:300
-#: src/organizationDetails/OrganizationDomains.js:237
+#: src/domains/DomainsPage.js:304
+#: src/organizationDetails/OrganizationDomains.js:242
msgid "SPF"
msgstr "SPF"
-#: src/dmarc/DmarcReportPage.js:210
+#: src/dmarc/DmarcReportPage.js:211
msgid "SPF Aligned"
msgstr "SPF Aligned"
-#: src/dmarc/DmarcReportPage.js:197
+#: src/dmarc/DmarcReportPage.js:198
msgid "SPF Domains"
msgstr "SPF Domains"
-#: src/dmarc/DmarcReportPage.js:467
+#: src/dmarc/DmarcReportPage.js:468
msgid "SPF Failure Table"
msgstr "SPF Failure Table"
-#: src/dmarc/DmarcReportPage.js:475
-#: src/dmarc/DmarcReportPage.js:505
-#: src/dmarc/DmarcReportPage.js:629
+#: src/dmarc/DmarcReportPage.js:476
+#: src/dmarc/DmarcReportPage.js:506
+#: src/dmarc/DmarcReportPage.js:630
msgid "SPF Failures by IP Address"
msgstr "SPF Failures by IP Address"
@@ -4620,12 +4743,12 @@ msgstr "SPF Failures by IP Address"
msgid "SPF record is deployed and valid"
msgstr "SPF record is deployed and valid"
-#: src/dmarc/DmarcReportPage.js:214
+#: src/dmarc/DmarcReportPage.js:215
msgid "SPF Results"
msgstr "SPF Results"
-#: src/domains/DomainsPage.js:131
-#: src/organizationDetails/OrganizationDomains.js:105
+#: src/domains/DomainsPage.js:133
+#: src/organizationDetails/OrganizationDomains.js:106
msgid "SPF Status"
msgstr "SPF Status"
@@ -4633,21 +4756,21 @@ msgstr "SPF Status"
msgid "SPF Summary"
msgstr "SPF Summary"
-#: src/admin/AdminDomains.js:187
-#: src/domains/DomainCard.js:192
-#: src/domains/DomainsPage.js:143
-#: src/domains/DomainsPage.js:318
-#: src/organizationDetails/OrganizationDomains.js:120
-#: src/organizationDetails/OrganizationDomains.js:261
+#: src/admin/AdminDomains.js:189
+#: src/domains/DomainCard.js:194
+#: src/domains/DomainsPage.js:145
+#: src/domains/DomainsPage.js:322
+#: src/organizationDetails/OrganizationDomains.js:121
+#: src/organizationDetails/OrganizationDomains.js:266
msgid "SPIN Top 25"
msgstr "SPIN Top 25"
-#: src/guidance/AdditionalFindings.js:102
+#: src/guidance/AdditionalFindings.js:103
msgid "SPIN Top 25 Vulnerabilities"
msgstr "SPIN Top 25 Vulnerabilities"
-#: src/domains/DomainsPage.js:318
-#: src/organizationDetails/OrganizationDomains.js:261
+#: src/domains/DomainsPage.js:322
+#: src/organizationDetails/OrganizationDomains.js:266
msgid "SPIN Top 25 vulnerability detected in additional findings."
msgstr "SPIN Top 25 vulnerability detected in additional findings."
@@ -4673,7 +4796,7 @@ msgstr "SPIN Top 25 vulnerability detected in additional findings."
#~ msgid "Staging"
#~ msgstr "Staging"
-#: src/organizationDetails/OrganizationDomains.js:249
+#: src/organizationDetails/OrganizationDomains.js:254
msgid "STAGING"
msgstr "STAGING"
@@ -4685,7 +4808,7 @@ msgstr "Start Tour"
#~ msgid "State: {lastPortState}"
#~ msgstr "State: {lastPortState}"
-#: src/guidance/AdditionalFindings.js:394
+#: src/guidance/AdditionalFindings.js:395
msgid "State: {lastPortStateTranslated}"
msgstr "State: {lastPortStateTranslated}"
@@ -4693,7 +4816,7 @@ msgstr "State: {lastPortStateTranslated}"
#~ msgid "Static IP Address: <0>52.138.13.280>"
#~ msgstr "Static IP Address: <0>52.138.13.280>"
-#: src/domains/DomainListFilters.js:102
+#: src/domains/DomainListFilters.js:103
msgid "Status"
msgstr "Status"
@@ -4701,11 +4824,11 @@ msgstr "Status"
#~ msgid "Status or tag"
#~ msgstr "Status or tag"
-#: src/domains/DomainListFilters.js:134
+#: src/domains/DomainListFilters.js:135
msgid "Status Value"
msgstr "Status Value"
-#: src/guidance/WebConnectionResults.js:61
+#: src/guidance/WebConnectionResults.js:83
msgid "Status:"
msgstr "Status:"
@@ -4713,19 +4836,19 @@ msgstr "Status:"
#~ msgid "Status/Tag"
#~ msgstr "Status/Tag"
-#: src/admin/AdminDomains.js:266
+#: src/admin/AdminDomains.js:271
msgid "Status/Tag/State"
msgstr "Status/Tag/State"
-#: src/guidance/CveIgnorer.js:116
+#: src/guidance/CveIgnorer.js:117
msgid "Stop Ignoring CVE"
msgstr "Stop Ignoring CVE"
-#: src/guidance/CveIgnorer.js:79
+#: src/guidance/CveIgnorer.js:80
msgid "Stopped ignoring CVE"
msgstr "Stopped ignoring CVE"
-#: src/guidance/WebTLSResults.js:31
+#: src/guidance/WebTLSResults.js:32
msgid "strong"
msgstr "strong"
@@ -4741,12 +4864,12 @@ msgstr "strong"
#~ msgid "Strong Curves:"
#~ msgstr "Strong Curves:"
-#: src/guidance/WebTLSResults.js:404
+#: src/guidance/WebTLSResults.js:405
msgid "Subject:"
msgstr "Subject:"
-#: src/auth/ForgotPasswordPage.js:83
-#: src/auth/TwoFactorAuthenticatePage.js:120
+#: src/auth/ForgotPasswordPage.js:84
+#: src/auth/TwoFactorAuthenticatePage.js:121
msgid "Submit"
msgstr "Submit"
@@ -4756,18 +4879,18 @@ msgstr "Submit bug reports and feature requests through our <0>GitHub page0>."
#. placeholder {0}: ignoreCve.result.domain
#. placeholder {1}: ignoreCve.result.ignoredCves && JSON.stringify(ignoreCve.result.ignoredCves)
-#: src/guidance/CveIgnorer.js:32
+#: src/guidance/CveIgnorer.js:33
msgid "Successfully ignored CVE for domain {0}. New ignored CVEs: \"{1}\"."
msgstr "Successfully ignored CVE for domain {0}. New ignored CVEs: \"{1}\"."
#. placeholder {0}: removeUserFromOrg.result.user.userName
-#: src/admin/UserListModal.js:153
+#: src/admin/UserListModal.js:154
msgid "Successfully removed user {0}."
msgstr "Successfully removed user {0}."
#. placeholder {0}: unignoreCve.result.domain
#. placeholder {1}: unignoreCve.result.ignoredCves && JSON.stringify(unignoreCve.result.ignoredCves)
-#: src/guidance/CveIgnorer.js:81
+#: src/guidance/CveIgnorer.js:82
msgid "Successfully stopped ignoring CVE for domain \"{0}\". New ignored CVEs: \"{1}\"."
msgstr "Successfully stopped ignoring CVE for domain \"{0}\". New ignored CVEs: \"{1}\"."
@@ -4787,11 +4910,11 @@ msgstr "Summary"
#~ msgid "Summary Tier:"
#~ msgstr "Summary Tier:"
-#: src/admin/AdminPage.js:229
+#: src/admin/AdminPage.js:230
msgid "Super Admin Menu:"
msgstr "Super Admin Menu:"
-#: src/admin/UserListModal.js:268
+#: src/admin/UserListModal.js:269
msgid "SUPER_ADMIN"
msgstr "SUPER_ADMIN"
@@ -4799,7 +4922,7 @@ msgstr "SUPER_ADMIN"
#~ msgid "Supports ECDH Key Exchange:"
#~ msgstr "Supports ECDH Key Exchange:"
-#: src/app/TopBanner.js:63
+#: src/app/TopBanner.js:64
msgid "Symbol of the Government of Canada"
msgstr "Symbol of the Government of Canada"
@@ -4807,37 +4930,37 @@ msgstr "Symbol of the Government of Canada"
msgid "System-designated tags appear here."
msgstr "System-designated tags appear here."
-#: src/admin/AdminDomains.js:237
-#: src/admin/AuditLogTable.js:80
-#: src/domains/DomainListFilters.js:105
+#: src/admin/AdminDomains.js:242
+#: src/admin/AuditLogTable.js:81
+#: src/domains/DomainListFilters.js:106
msgid "Tag"
msgstr "Tag"
-#: src/admin/DomainUpdateList.js:313
+#: src/admin/DomainUpdateList.js:314
msgid "Tag Assets"
msgstr "Tag Assets"
-#: src/admin/TagForm.js:83
+#: src/admin/TagForm.js:84
msgid "Tag created"
msgstr "Tag created"
-#: src/admin/TagForm.js:157
+#: src/admin/TagForm.js:158
msgid "Tag not updated"
msgstr "Tag not updated"
-#: src/admin/TagForm.js:38
+#: src/admin/TagForm.js:39
msgid "Tag updated"
msgstr "Tag updated"
-#: src/organizationDetails/OrganizationDomains.js:248
+#: src/organizationDetails/OrganizationDomains.js:253
msgid "Tag used to show domains as a production environment."
msgstr "Tag used to show domains as a production environment."
-#: src/organizationDetails/OrganizationDomains.js:249
+#: src/organizationDetails/OrganizationDomains.js:254
msgid "Tag used to show domains as a staging environment."
msgstr "Tag used to show domains as a staging environment."
-#: src/organizationDetails/OrganizationDomains.js:250
+#: src/organizationDetails/OrganizationDomains.js:255
msgid "Tag used to show domains as a test environment."
msgstr "Tag used to show domains as a test environment."
@@ -4845,25 +4968,25 @@ msgstr "Tag used to show domains as a test environment."
#~ msgid "Tag used to show domains as hidden from affecting the organization summary scores."
#~ msgstr "Tag used to show domains as hidden from affecting the organization summary scores."
-#: src/organizationDetails/OrganizationDomains.js:247
+#: src/organizationDetails/OrganizationDomains.js:252
msgid "Tag used to show domains as new to the system."
msgstr "Tag used to show domains as new to the system."
-#: src/organizationDetails/OrganizationDomains.js:251
+#: src/organizationDetails/OrganizationDomains.js:256
msgid "Tag used to show domains as web-hosting."
msgstr "Tag used to show domains as web-hosting."
-#: src/domains/DomainsPage.js:314
-#: src/organizationDetails/OrganizationDomains.js:257
+#: src/domains/DomainsPage.js:318
+#: src/organizationDetails/OrganizationDomains.js:262
msgid "Tag used to show domains have a wildcard resolver as a sibling."
msgstr "Tag used to show domains have a wildcard resolver as a sibling."
-#: src/domains/DomainsPage.js:316
-#: src/organizationDetails/OrganizationDomains.js:259
+#: src/domains/DomainsPage.js:320
+#: src/organizationDetails/OrganizationDomains.js:264
msgid "Tag used to show domains resolve to a wildcard entry."
msgstr "Tag used to show domains resolve to a wildcard entry."
-#: src/organizationDetails/OrganizationDomains.js:252
+#: src/organizationDetails/OrganizationDomains.js:257
msgid "Tag used to show domains that are not active."
msgstr "Tag used to show domains that are not active."
@@ -4871,13 +4994,13 @@ msgstr "Tag used to show domains that are not active."
#~ msgid "Tag used to show domains that are out of the organization's scope."
#~ msgstr "Tag used to show domains that are out of the organization's scope."
-#: src/domains/DomainsPage.js:311
-#: src/organizationDetails/OrganizationDomains.js:254
+#: src/domains/DomainsPage.js:315
+#: src/organizationDetails/OrganizationDomains.js:259
msgid "Tag used to show domains that are possibly blocked by a firewall."
msgstr "Tag used to show domains that are possibly blocked by a firewall."
-#: src/domains/DomainsPage.js:317
-#: src/organizationDetails/OrganizationDomains.js:260
+#: src/domains/DomainsPage.js:321
+#: src/organizationDetails/OrganizationDomains.js:265
msgid "Tag used to show domains that have a pending web scan."
msgstr "Tag used to show domains that have a pending web scan."
@@ -4885,8 +5008,8 @@ msgstr "Tag used to show domains that have a pending web scan."
#~ msgid "Tag used to show domains that have an Entrust certificate."
#~ msgstr "Tag used to show domains that have an Entrust certificate."
-#: src/domains/DomainsPage.js:310
-#: src/organizationDetails/OrganizationDomains.js:253
+#: src/domains/DomainsPage.js:314
+#: src/organizationDetails/OrganizationDomains.js:258
msgid "Tag used to show domains that have an rcode status of NXDOMAIN"
msgstr "Tag used to show domains that have an rcode status of NXDOMAIN"
@@ -4915,7 +5038,7 @@ msgstr "TBS be identified as the source; and"
msgid "TBS reserves the right to refuse service, and may reject your application for an account, or cancel an existing account, for any reason, at our sole discretion."
msgstr "TBS reserves the right to refuse service, and may reject your application for an account, or cancel an existing account, for any reason, at our sole discretion."
-#: src/guidance/GuidanceTagDetails.js:57
+#: src/guidance/GuidanceTagDetails.js:58
msgid "Technical implementation guidance:"
msgstr "Technical implementation guidance:"
@@ -4923,13 +5046,13 @@ msgstr "Technical implementation guidance:"
msgid "Termination"
msgstr "Termination"
-#: src/app/App.js:427
-#: src/app/FloatingMenu.js:225
+#: src/app/App.js:428
+#: src/app/FloatingMenu.js:226
#: src/app/SlideMessage.js:92
msgid "Terms & conditions"
msgstr "Terms & conditions"
-#: src/app/App.js:262
+#: src/app/App.js:263
msgid "Terms & Conditions"
msgstr "Terms & Conditions"
@@ -4946,11 +5069,11 @@ msgstr "Terms of Use"
#~ msgid "Test"
#~ msgstr "Test"
-#: src/organizationDetails/OrganizationDomains.js:250
+#: src/organizationDetails/OrganizationDomains.js:255
msgid "TEST"
msgstr "TEST"
-#: src/admin/AdminDomains.js:551
+#: src/admin/AdminDomains.js:554
msgid "The \"Asset State\" describes how the domain relates to your organization. These states are used by Tracker to give you a more accurate summary of your attack surface."
msgstr "The \"Asset State\" describes how the domain relates to your organization. These states are used by Tracker to give you a more accurate summary of your attack surface."
@@ -4962,7 +5085,7 @@ msgstr "The <0>\"Getting Started\" guide and FAQ section0> will help you to un
#~ msgid "The <0>Tracker0> platform"
#~ msgstr "The <0>Tracker0> platform"
-#: src/dmarc/DmarcReportPage.js:261
+#: src/dmarc/DmarcReportPage.js:262
msgid "The address/domain used in the \"From\" field."
msgstr "The address/domain used in the \"From\" field."
@@ -4978,7 +5101,7 @@ msgstr "The advice, guidance or services provided to you by TBS will be provided
msgid "The asset state shows the domain's relation to your organization. Only \"approved\" assets are counted in summaries."
msgstr "The asset state shows the domain's relation to your organization. Only \"approved\" assets are counted in summaries."
-#: src/dmarc/DmarcReportPage.js:285
+#: src/dmarc/DmarcReportPage.js:286
msgid "The DMARC enforcement action that the receiver took, either none, quarantine, or reject."
msgstr "The DMARC enforcement action that the receiver took, either none, quarantine, or reject."
@@ -4987,21 +5110,21 @@ msgstr "The DMARC enforcement action that the receiver took, either none, quaran
#~ msgid "The DMARC Summaries data has not been updated since December 2024. We are working to refresh this information. Please note that any displayed data may not reflect current email security status."
#~ msgstr "The DMARC Summaries data has not been updated since December 2024. We are working to refresh this information. Please note that any displayed data may not reflect current email security status."
-#: src/dmarc/DmarcByDomainPage.js:297
-#: src/domains/DomainsPage.js:288
-#: src/organizationDetails/OrganizationDomains.js:225
+#: src/dmarc/DmarcByDomainPage.js:298
+#: src/domains/DomainsPage.js:292
+#: src/organizationDetails/OrganizationDomains.js:230
msgid "The domain address."
msgstr "The domain address."
-#: src/dmarc/DmarcReportPage.js:241
+#: src/dmarc/DmarcReportPage.js:242
msgid "The domains used for DKIM validation."
msgstr "The domains used for DKIM validation."
-#: src/guidance/WebTLSResults.js:61
+#: src/guidance/WebTLSResults.js:62
msgid "The following ciphers are from known weak protocols and must be disabled:"
msgstr "The following ciphers are from known weak protocols and must be disabled:"
-#: src/dmarc/DmarcReportPage.js:617
+#: src/dmarc/DmarcReportPage.js:618
msgid "The following data may have recently changed."
msgstr "The following data may have recently changed."
@@ -5013,7 +5136,7 @@ msgstr "The Government of Canada’s (GC) <0>Directive on Service and Digital0
msgid "The graphics displayed on the Tracker website may not be used, in whole or in part, in connection with any business, products or service, or otherwise used, in a manner that is likely to lead to the belief that such business product, service or other use, has received the Government of Canada’s approval and may not be copied, reproduced, imitated, or used, in whole or in part, without the prior written permission of tbs."
msgstr "The graphics displayed on the Tracker website may not be used, in whole or in part, in connection with any business, products or service, or otherwise used, in a manner that is likely to lead to the belief that such business product, service or other use, has received the Government of Canada’s approval and may not be copied, reproduced, imitated, or used, in whole or in part, without the prior written permission of tbs."
-#: src/dmarc/DmarcReportPage.js:233
+#: src/dmarc/DmarcReportPage.js:234
msgid "The IP address of sending server."
msgstr "The IP address of sending server."
@@ -5021,7 +5144,7 @@ msgstr "The IP address of sending server."
msgid "The material available on this web site is subject to the"
msgstr "The material available on this web site is subject to the"
-#: src/app/NotificationBanner.js:39
+#: src/app/NotificationBanner.js:40
msgid "The message has been dismissed and will not be shown again."
msgstr "The message has been dismissed and will not be shown again."
@@ -5045,11 +5168,11 @@ msgstr "The process of detecting DKIM selectors is not immediate. It may take mo
msgid "The reproduction is not represented as an official version of the materials reproduced, nor as having been made, in affiliation with or under the direction of TBS."
msgstr "The reproduction is not represented as an official version of the materials reproduced, nor as having been made, in affiliation with or under the direction of TBS."
-#: src/dmarc/DmarcReportPage.js:273
+#: src/dmarc/DmarcReportPage.js:274
msgid "The results of DKIM verification of the message. Can be pass, fail, neutral, soft-fail, temp-error, or perm-error."
msgstr "The results of DKIM verification of the message. Can be pass, fail, neutral, soft-fail, temp-error, or perm-error."
-#: src/dmarc/DmarcReportPage.js:281
+#: src/dmarc/DmarcReportPage.js:282
msgid "The results of DKIM verification of the message. Can be pass, fail, neutral, temp-error, or perm-error."
msgstr "The results of DKIM verification of the message. Can be pass, fail, neutral, temp-error, or perm-error."
@@ -5065,11 +5188,11 @@ msgstr "The selected endpoint is a private IP address. Tracker does not perform
msgid "The summary cards show two metrics that Tracker scans:"
msgstr "The summary cards show two metrics that Tracker scans:"
-#: src/dmarc/DmarcReportPage.js:249
+#: src/dmarc/DmarcReportPage.js:250
msgid "The Total Messages from this sender."
msgstr "The Total Messages from this sender."
-#: src/admin/UserListModal.js:107
+#: src/admin/UserListModal.js:108
msgid "The user's role has been successfully updated"
msgstr "The user's role has been successfully updated"
@@ -5077,7 +5200,7 @@ msgstr "The user's role has been successfully updated"
#~ msgid "There is a gap in historical DMARC data between December 20, 2024 and January 21, 2025 due to a service disruption. This does not affect current DMARC reporting, and all data before and after this period remains complete and accurate."
#~ msgstr "There is a gap in historical DMARC data between December 20, 2024 and January 21, 2025 due to a service disruption. This does not affect current DMARC reporting, and all data before and after this period remains complete and accurate."
-#: src/guidance/AdditionalFindings.js:86
+#: src/guidance/AdditionalFindings.js:87
msgid "These findings are imported from Microsoft's <0>External Attack Surface Management <1/>0> tool. <2>Automated updates to these findings occur daily.2>"
msgstr "These findings are imported from Microsoft's <0>External Attack Surface Management <1/>0> tool. <2>Automated updates to these findings occur daily.2>"
@@ -5098,11 +5221,11 @@ msgid "These terms and conditions shall be governed by and interpreted under the
msgstr "These terms and conditions shall be governed by and interpreted under the laws of Canada, without regard for any choice of law rules. The courts of Canada shall have exclusive jurisdiction over all matters arising in relation to these terms and conditions."
#. placeholder {0}: editUserRole.displayName
-#: src/admin/SuperAdminUserList.js:407
+#: src/admin/SuperAdminUserList.js:408
msgid "This action CANNOT be reversed, are you sure you wish to to close the account {0}?"
msgstr "This action CANNOT be reversed, are you sure you wish to to close the account {0}?"
-#: src/user/UserPage.js:202
+#: src/user/UserPage.js:203
msgid "This action CANNOT be reversed, are you sure you wish to to close the account {displayName}?"
msgstr "This action CANNOT be reversed, are you sure you wish to to close the account {displayName}?"
@@ -5118,17 +5241,17 @@ msgstr "This could be due to improper configuration, or could be the result of a
#~ msgid "this domain"
#~ msgstr "this domain"
-#: src/admin/AdminDomains.js:533
-#: src/admin/AuditLogTable.js:148
+#: src/admin/AdminDomains.js:536
+#: src/admin/AuditLogTable.js:149
msgid "This domain does not belong to this organization"
msgstr "This domain does not belong to this organization"
-#: src/admin/AdminDomains.js:530
-#: src/admin/AuditLogTable.js:146
+#: src/admin/AdminDomains.js:533
+#: src/admin/AuditLogTable.js:147
msgid "This domain no longer exists"
msgstr "This domain no longer exists"
-#: src/createOrganization/CreateOrganizationPage.js:24
+#: src/createOrganization/CreateOrganizationPage.js:25
#: src/utilities/fieldRequirements.js:6
msgid "This field cannot be empty"
msgstr "This field cannot be empty"
@@ -5141,7 +5264,7 @@ msgstr "This field cannot be empty"
msgid "This filter will show only domains affiliated with your account."
msgstr "This filter will show only domains affiliated with your account."
-#: src/app/TopBanner.js:95
+#: src/app/TopBanner.js:96
msgid "This is a new service, we are constantly improving."
msgstr "This is a new service, we are constantly improving."
@@ -5183,12 +5306,12 @@ msgstr "This tab displays a list of your favourited domains."
msgid "This tab displays the HTTPS and DMARC summaries for your favourited domains."
msgstr "This tab displays the HTTPS and DMARC summaries for your favourited domains."
-#: src/admin/SuperAdminUserList.js:176
+#: src/admin/SuperAdminUserList.js:177
msgid "This user is not affiliated with any organizations"
msgstr "This user is not affiliated with any organizations"
#. placeholder {0}: selectAllGlobal ? domainCount : selectedIds.size
-#: src/admin/DomainUpdateList.js:352
+#: src/admin/DomainUpdateList.js:353
msgid "This will update {0} domain(s)."
msgstr "This will update {0} domain(s)."
@@ -5196,7 +5319,7 @@ msgstr "This will update {0} domain(s)."
#~ msgid "Tier 1"
#~ msgstr "Tier 1"
-#: src/summaries/HistoricalSummariesGraph.js:272
+#: src/summaries/HistoricalSummariesGraph.js:273
#: src/summaries/TieredSummaries.js:19
msgid "Tier 1: Minimum Requirements"
msgstr "Tier 1: Minimum Requirements"
@@ -5205,7 +5328,7 @@ msgstr "Tier 1: Minimum Requirements"
#~ msgid "Tier 2"
#~ msgstr "Tier 2"
-#: src/summaries/HistoricalSummariesGraph.js:275
+#: src/summaries/HistoricalSummariesGraph.js:276
#: src/summaries/TieredSummaries.js:30
msgid "Tier 2: Improved Posture"
msgstr "Tier 2: Improved Posture"
@@ -5214,16 +5337,16 @@ msgstr "Tier 2: Improved Posture"
#~ msgid "Tier 3"
#~ msgstr "Tier 3"
-#: src/summaries/HistoricalSummariesGraph.js:278
+#: src/summaries/HistoricalSummariesGraph.js:279
#: src/summaries/TieredSummaries.js:47
msgid "Tier 3: Compliance"
msgstr "Tier 3: Compliance"
-#: src/admin/AuditLogTable.js:71
+#: src/admin/AuditLogTable.js:72
msgid "Time Generated"
msgstr "Time Generated"
-#: src/admin/AuditLogTable.js:112
+#: src/admin/AuditLogTable.js:113
msgid "Time Generated (UTC)"
msgstr "Time Generated (UTC)"
@@ -5235,7 +5358,7 @@ msgstr "Time Generated (UTC)"
#~ msgid "TLS"
#~ msgstr "TLS"
-#: src/guidance/WebTLSResults.js:194
+#: src/guidance/WebTLSResults.js:195
msgid "TLS Results"
msgstr "TLS Results"
@@ -5252,7 +5375,7 @@ msgstr "TLS scan for domain \"{0}\" has completed."
msgid "TLS Summary"
msgstr "TLS Summary"
-#: src/app/App.js:88
+#: src/app/App.js:89
msgid "To enable full app functionality and maximize your account's security, <0>please verify your account0>."
msgstr "To enable full app functionality and maximize your account's security, <0>please verify your account0>."
@@ -5264,7 +5387,7 @@ msgstr "To ensure accurate scanning results, configure your firewall and DDoS (D
#~ msgid "To ensure accurate scanning results, update your firewall and DDOS protection settings to allow traffic from:"
#~ msgstr "To ensure accurate scanning results, update your firewall and DDOS protection settings to allow traffic from:"
-#: src/app/App.js:58
+#: src/app/App.js:59
msgid "To maximize your account's security, <0>please activate a multi-factor authentication option0>."
msgstr "To maximize your account's security, <0>please activate a multi-factor authentication option0>."
@@ -5272,7 +5395,7 @@ msgstr "To maximize your account's security, <0>please activate a multi-factor a
#~ msgid "To receive DKIM scan results and guidance, you must add the DKIM selectors used for each domain. Organization administrators can add selectors in the “Admin Profile” by clicking the edit button of the domain for which they wish to add the selector. Common selectors to keep an for are “selector1”, and “selector2”."
#~ msgstr "To receive DKIM scan results and guidance, you must add the DKIM selectors used for each domain. Organization administrators can add selectors in the “Admin Profile” by clicking the edit button of the domain for which they wish to add the selector. Common selectors to keep an for are “selector1”, and “selector2”."
-#: src/app/App.js:73
+#: src/app/App.js:74
msgid "To view detailed scan results and other functionality, <0>please affiliate with an organization0>."
msgstr "To view detailed scan results and other functionality, <0>please affiliate with an organization0>."
@@ -5281,14 +5404,14 @@ msgstr "To view detailed scan results and other functionality, <0>please affilia
#~ msgid "Top 25 vulnerability detected in additional findings."
#~ msgstr "Top 25 vulnerability detected in additional findings."
-#: src/dmarc/DmarcByDomainPage.js:129
-#: src/dmarc/DmarcByDomainPage.js:299
-#: src/dmarc/DmarcReportPage.js:190
-#: src/dmarc/DmarcReportSummaryGraph.js:120
+#: src/dmarc/DmarcByDomainPage.js:130
+#: src/dmarc/DmarcByDomainPage.js:300
+#: src/dmarc/DmarcReportPage.js:191
+#: src/dmarc/DmarcReportSummaryGraph.js:121
msgid "Total Messages"
msgstr "Total Messages"
-#: src/summaries/HistoricalSummariesGraph.js:282
+#: src/summaries/HistoricalSummariesGraph.js:283
msgid "Total Negative Findings"
msgstr "Total Negative Findings"
@@ -5301,8 +5424,8 @@ msgstr "Total Negative Findings"
msgid "Track Digital Security"
msgstr "Track Digital Security"
-#: src/admin/SuperAdminUserList.js:88
-#: src/user/UserPage.js:63
+#: src/admin/SuperAdminUserList.js:89
+#: src/user/UserPage.js:64
msgid "Tracker account has been successfully closed."
msgstr "Tracker account has been successfully closed."
@@ -5338,15 +5461,15 @@ msgstr "Tracker GitHub"
msgid "Tracker HSTS and HTTPS results display incorrectly when a domain has a non-compliant WWW subdomain. Check your WWW subdomain if your results appear incorrect. For example, the results for www.canada.ca in the Tracker platform are included in the results for canada.ca. Work is in progress to separate the results."
msgstr "Tracker HSTS and HTTPS results display incorrectly when a domain has a non-compliant WWW subdomain. Check your WWW subdomain if your results appear incorrect. For example, the results for www.canada.ca in the Tracker platform are included in the results for canada.ca. Work is in progress to separate the results."
-#: src/app/TopBanner.js:72
+#: src/app/TopBanner.js:73
msgid "Tracker logo outline"
msgstr "Tracker logo outline"
-#: src/app/TopBanner.js:75
+#: src/app/TopBanner.js:76
msgid "Tracker logo text"
msgstr "Tracker logo text"
-#: src/app/App.js:190
+#: src/app/App.js:191
msgid "Tracker now automatically manages your DKIM selectors."
msgstr "Tracker now automatically manages your DKIM selectors."
@@ -5362,36 +5485,36 @@ msgstr "Tracker:"
msgid "Trademarks Act"
msgstr "Trademarks Act"
-#: src/auth/TwoFactorAuthenticatePage.js:111
+#: src/auth/TwoFactorAuthenticatePage.js:112
msgid "Two Factor Authentication"
msgstr "Two Factor Authentication"
-#: src/user/EditableUserTFAMethod.js:92
+#: src/user/EditableUserTFAMethod.js:93
msgid "Two-Factor Authentication:"
msgstr "Two-Factor Authentication:"
-#: src/admin/UserListModal.js:96
+#: src/admin/UserListModal.js:97
msgid "Unable to change user role, please try again."
msgstr "Unable to change user role, please try again."
-#: src/admin/SuperAdminUserList.js:97
-#: src/user/UserPage.js:73
+#: src/admin/SuperAdminUserList.js:98
+#: src/user/UserPage.js:74
msgid "Unable to close the account."
msgstr "Unable to close the account."
-#: src/admin/SuperAdminUserList.js:76
+#: src/admin/SuperAdminUserList.js:77
msgid "Unable to close this account."
msgstr "Unable to close this account."
-#: src/userOnboarding/components/TourComponent.js:48
+#: src/userOnboarding/components/TourComponent.js:49
msgid "Unable to complete the tour."
msgstr "Unable to complete the tour."
-#: src/auth/CreateUserPage.js:52
+#: src/auth/CreateUserPage.js:53
msgid "Unable to create account, please try again."
msgstr "Unable to create account, please try again."
-#: src/admin/AdminDomainModal.js:70
+#: src/admin/AdminDomainModal.js:89
msgid "Unable to create new domain."
msgstr "Unable to create new domain."
@@ -5400,27 +5523,27 @@ msgstr "Unable to create new domain."
#~ msgid "Unable to create new global tag."
#~ msgstr "Unable to create new global tag."
-#: src/createOrganization/CreateOrganizationPage.js:63
+#: src/createOrganization/CreateOrganizationPage.js:58
msgid "Unable to create new organization."
msgstr "Unable to create new organization."
-#: src/admin/TagForm.js:93
+#: src/admin/TagForm.js:94
msgid "Unable to create new tag."
msgstr "Unable to create new tag."
-#: src/auth/CreateUserPage.js:28
+#: src/auth/CreateUserPage.js:29
msgid "Unable to create your account, please try again."
msgstr "Unable to create your account, please try again."
-#: src/app/NotificationBanner.js:51
+#: src/app/NotificationBanner.js:52
msgid "Unable to dismiss the message."
msgstr "Unable to dismiss the message."
-#: src/guidance/CveIgnorer.js:43
+#: src/guidance/CveIgnorer.js:44
msgid "Unable to ignore CVE."
msgstr "Unable to ignore CVE."
-#: src/admin/UserListModal.js:71
+#: src/admin/UserListModal.js:72
msgid "Unable to invite user."
msgstr "Unable to invite user."
@@ -5429,28 +5552,28 @@ msgstr "Unable to invite user."
#~ msgid "Unable to leave organization."
#~ msgstr "Unable to leave organization."
-#: src/admin/AdminDomains.js:153
+#: src/admin/AdminDomains.js:155
msgid "Unable to remove domain."
msgstr "Unable to remove domain."
-#: src/admin/OrganizationInformation.js:75
+#: src/admin/OrganizationInformation.js:76
msgid "Unable to remove this organization."
msgstr "Unable to remove this organization."
-#: src/admin/UserListModal.js:161
+#: src/admin/UserListModal.js:162
msgid "Unable to remove user."
msgstr "Unable to remove user."
-#: src/organizations/RequestOrgInviteModal.js:26
-#: src/organizations/RequestOrgInviteModal.js:46
+#: src/organizations/RequestOrgInviteModal.js:27
+#: src/organizations/RequestOrgInviteModal.js:47
msgid "Unable to request invite, please try again."
msgstr "Unable to request invite, please try again."
-#: src/domains/ScanDomain.js:44
+#: src/domains/ScanDomain.js:45
msgid "Unable to request scan, please try again."
msgstr "Unable to request scan, please try again."
-#: src/auth/ResetPasswordPage.js:51
+#: src/auth/ResetPasswordPage.js:52
msgid "Unable to reset your password, please try again."
msgstr "Unable to reset your password, please try again."
@@ -5462,7 +5585,7 @@ msgstr "Unable to reset your password, please try again."
msgid "Unable to retrieve scan data for {domain}."
msgstr "Unable to retrieve scan data for {domain}."
-#: src/auth/ForgotPasswordPage.js:26
+#: src/auth/ForgotPasswordPage.js:27
msgid "Unable to send password reset link to email."
msgstr "Unable to send password reset link to email."
@@ -5470,47 +5593,47 @@ msgstr "Unable to send password reset link to email."
#~ msgid "Unable to send verification email"
#~ msgstr "Unable to send verification email"
-#: src/auth/SignInPage.js:34
-#: src/auth/SignInPage.js:76
-#: src/auth/TwoFactorAuthenticatePage.js:29
-#: src/auth/TwoFactorAuthenticatePage.js:65
+#: src/auth/SignInPage.js:35
+#: src/auth/SignInPage.js:77
+#: src/auth/TwoFactorAuthenticatePage.js:30
+#: src/auth/TwoFactorAuthenticatePage.js:66
msgid "Unable to sign in to your account, please try again."
msgstr "Unable to sign in to your account, please try again."
-#: src/guidance/CveIgnorer.js:92
+#: src/guidance/CveIgnorer.js:93
msgid "Unable to stop ignoring CVE."
msgstr "Unable to stop ignoring CVE."
-#: src/admin/AdminDomainModal.js:118
+#: src/admin/AdminDomainModal.js:135
msgid "Unable to update domain."
msgstr "Unable to update domain."
-#: src/admin/DomainUpdateList.js:79
-#: src/admin/DomainUpdateList.js:126
+#: src/admin/DomainUpdateList.js:80
+#: src/admin/DomainUpdateList.js:127
msgid "Unable to update domains."
msgstr "Unable to update domains."
-#: src/auth/ResetPasswordPage.js:31
+#: src/auth/ResetPasswordPage.js:32
msgid "Unable to update password"
msgstr "Unable to update password"
-#: src/admin/TagForm.js:47
+#: src/admin/TagForm.js:48
msgid "Unable to update tag."
msgstr "Unable to update tag."
-#: src/admin/OrganizationInformation.js:138
+#: src/admin/OrganizationInformation.js:139
msgid "Unable to update this organization."
msgstr "Unable to update this organization."
-#: src/user/EditableUserDisplayName.js:63
+#: src/user/EditableUserDisplayName.js:64
msgid "Unable to update to your display name, please try again."
msgstr "Unable to update to your display name, please try again."
-#: src/user/EditableEmailUpdateOptions.js:63
+#: src/user/EditableEmailUpdateOptions.js:64
msgid "Unable to update to your Email Updates status, please try again."
msgstr "Unable to update to your Email Updates status, please try again."
-#: src/user/InsideUserSwitch.js:45
+#: src/user/InsideUserSwitch.js:46
msgid "Unable to update to your inside user status, please try again."
msgstr "Unable to update to your inside user status, please try again."
@@ -5522,7 +5645,7 @@ msgstr "Unable to update to your inside user status, please try again."
#~ msgid "Unable to update to your preferred language, please try again."
#~ msgstr "Unable to update to your preferred language, please try again."
-#: src/user/EditableUserTFAMethod.js:67
+#: src/user/EditableUserTFAMethod.js:68
msgid "Unable to update to your TFA send method, please try again."
msgstr "Unable to update to your TFA send method, please try again."
@@ -5530,27 +5653,27 @@ msgstr "Unable to update to your TFA send method, please try again."
#~ msgid "Unable to update to your username, please try again."
#~ msgstr "Unable to update to your username, please try again."
-#: src/admin/UserListModal.js:116
+#: src/admin/UserListModal.js:117
msgid "Unable to update user role."
msgstr "Unable to update user role."
-#: src/user/EditableUserEmail.js:59
+#: src/user/EditableUserEmail.js:60
msgid "Unable to update your email address, please try again."
msgstr "Unable to update your email address, please try again."
-#: src/user/EditableUserPassword.js:66
+#: src/user/EditableUserPassword.js:67
msgid "Unable to update your password, please try again."
msgstr "Unable to update your password, please try again."
-#: src/user/EditableUserPhoneNumber.js:58
+#: src/user/EditableUserPhoneNumber.js:59
msgid "Unable to update your phone number, please try again."
msgstr "Unable to update your phone number, please try again."
-#: src/user/EditableUserPhoneNumber.js:109
+#: src/user/EditableUserPhoneNumber.js:110
msgid "Unable to verify your phone number, please try again."
msgstr "Unable to verify your phone number, please try again."
-#: src/organizations/Organizations.js:160
+#: src/organizations/Organizations.js:161
msgid "Unclaimed"
msgstr "Unclaimed"
@@ -5558,16 +5681,16 @@ msgstr "Unclaimed"
msgid "Understanding Scan Metrics:"
msgstr "Understanding Scan Metrics:"
-#: src/guidance/IgnoredCves.js:61
+#: src/guidance/IgnoredCves.js:62
msgid "Undetected Ignored CVEs:"
msgstr "Undetected Ignored CVEs:"
-#: src/domains/DomainCard.js:88
+#: src/domains/DomainCard.js:90
msgid "Unfavourited Domain"
msgstr "Unfavourited Domain"
-#: src/guidance/WebTLSResults.js:216
-#: src/guidance/WebTLSResults.js:239
+#: src/guidance/WebTLSResults.js:217
+#: src/guidance/WebTLSResults.js:240
msgid "Unknown"
msgstr "Unknown"
@@ -5575,39 +5698,39 @@ msgstr "Unknown"
msgid "Unscanned"
msgstr "Unscanned"
-#: src/admin/AuditLogTable.js:85
+#: src/admin/AuditLogTable.js:86
msgid "Update"
msgstr "Update"
-#: src/admin/OrganizationInformation.js:129
+#: src/admin/OrganizationInformation.js:130
msgid "Updated Organization"
msgstr "Updated Organization"
-#: src/admin/AuditLogTable.js:130
+#: src/admin/AuditLogTable.js:131
msgid "Updated Properties"
msgstr "Updated Properties"
-#: src/guidance/DmarcPhaseStepper.js:42
+#: src/guidance/DmarcPhaseStepper.js:43
msgid "Upgrade DMARC policy to quarantine (gradually increment enforcement from 25% to 100%;"
msgstr "Upgrade DMARC policy to quarantine (gradually increment enforcement from 25% to 100%;"
-#: src/domains/ScanDomain.js:126
+#: src/domains/ScanDomain.js:127
msgid "Upgrade DMARC policy to quarantine (gradually increment enforcement from 25% to 100%);"
msgstr "Upgrade DMARC policy to quarantine (gradually increment enforcement from 25% to 100%);"
-#: src/guidance/DmarcPhaseStepper.js:43
+#: src/guidance/DmarcPhaseStepper.js:44
msgid "Upgrade DMARC policy to reject (gradually increment enforcement from 25% to 100%); and"
msgstr "Upgrade DMARC policy to reject (gradually increment enforcement from 25% to 100%); and"
-#: src/domains/ScanDomain.js:127
+#: src/domains/ScanDomain.js:128
msgid "Upgrade DMARC policy to reject (gradually increment enforcement from 25%to 100%); and"
msgstr "Upgrade DMARC policy to reject (gradually increment enforcement from 25%to 100%); and"
-#: src/guidance/WebConnectionResults.js:153
+#: src/guidance/WebConnectionResults.js:161
msgid "URL:"
msgstr "URL:"
-#: src/guidance/WebConnectionResults.js:237
+#: src/guidance/WebConnectionResults.js:233
msgid "URL: "
msgstr "URL: "
@@ -5635,11 +5758,11 @@ msgstr "Use this search box to find an organization."
#~ msgid "Use Tracker to monitor the domains and sub-domains of your organization."
#~ msgstr "Use Tracker to monitor the domains and sub-domains of your organization."
-#: src/admin/AuditLogTable.js:78
+#: src/admin/AuditLogTable.js:79
msgid "User"
msgstr "User"
-#: src/admin/UserListModal.js:258
+#: src/admin/UserListModal.js:259
msgid "USER"
msgstr "USER"
@@ -5651,12 +5774,12 @@ msgstr "USER"
#~ msgid "user email"
#~ msgstr "user email"
-#: src/admin/UserList.js:163
+#: src/admin/UserList.js:158
msgid "User email"
msgstr "User email"
-#: src/admin/SuperAdminUserList.js:418
-#: src/user/UserPage.js:210
+#: src/admin/SuperAdminUserList.js:419
+#: src/user/UserPage.js:211
msgid "User Email"
msgstr "User Email"
@@ -5664,16 +5787,16 @@ msgstr "User Email"
msgid "User email does not match"
msgstr "User email does not match"
-#: src/admin/UserListModal.js:61
+#: src/admin/UserListModal.js:62
msgid "User invited"
msgstr "User invited"
-#: src/admin/SuperAdminUserList.js:153
+#: src/admin/SuperAdminUserList.js:154
#: src/admin/UserList.js:79
msgid "User List"
msgstr "User List"
-#: src/admin/UserListModal.js:152
+#: src/admin/UserListModal.js:153
msgid "User removed."
msgstr "User removed."
@@ -5685,11 +5808,11 @@ msgstr "User-designated tags appear here."
#~ msgid "User:"
#~ msgstr "User:"
-#: src/admin/UserListModal.js:229
+#: src/admin/UserListModal.js:230
msgid "User: "
msgstr "User: "
-#: src/admin/AdminPage.js:238
+#: src/admin/AdminPage.js:239
#: src/admin/AdminPanel.js:26
#: src/organizationDetails/OrganizationDetails.js:150
msgid "Users"
@@ -5699,30 +5822,35 @@ msgstr "Users"
msgid "Users exercise due diligence in ensuring the accuracy of the materials reproduced;"
msgstr "Users exercise due diligence in ensuring the accuracy of the materials reproduced;"
-#: src/admin/AdminDomains.js:234
-#: src/domains/DomainListFilters.js:161
+#: src/admin/AdminDomains.js:239
+#: src/domains/DomainListFilters.js:162
msgid "Value"
msgstr "Value"
-#: src/utilities/fieldRequirements.js:29
+#: src/utilities/fieldRequirements.js:31
+msgid "Verification code must be exactly 6 digits long"
+msgstr "Verification code must be exactly 6 digits long"
+
+#: src/utilities/fieldRequirements.js:30
msgid "Verification code must only contains numbers"
msgstr "Verification code must only contains numbers"
-#: src/admin/SuperAdminUserList.js:146
-#: src/admin/SuperAdminUserList.js:307
-#: src/organizations/Organizations.js:95
+#: src/admin/SuperAdminUserList.js:147
+#: src/admin/SuperAdminUserList.js:308
+#: src/createOrganization/CreateOrganizationPage.js:148
+#: src/organizations/Organizations.js:96
msgid "Verified"
msgstr "Verified"
-#: src/guidance/WebTLSResults.js:335
+#: src/guidance/WebTLSResults.js:336
msgid "Verified Chain Free of Legacy Symantec Anchor"
msgstr "Verified Chain Free of Legacy Symantec Anchor"
-#: src/guidance/WebTLSResults.js:324
+#: src/guidance/WebTLSResults.js:325
msgid "Verified Chain Free of SHA1 Signature"
msgstr "Verified Chain Free of SHA1 Signature"
-#: src/user/EditableUserPhoneNumber.js:224
+#: src/user/EditableUserPhoneNumber.js:225
msgid "Verify"
msgstr "Verify"
@@ -5730,7 +5858,7 @@ msgstr "Verify"
#~ msgid "Verify Account"
#~ msgstr "Verify Account"
-#: src/dmarc/DmarcReportSummaryGraph.js:108
+#: src/dmarc/DmarcReportSummaryGraph.js:109
msgid "Vertical View"
msgstr "Vertical View"
@@ -5758,7 +5886,7 @@ msgstr "View high-level details for each domain."
msgid "View information for each domain."
msgstr "View information for each domain."
-#: src/domains/DomainCard.js:233
+#: src/domains/DomainCard.js:243
msgid "View Results"
msgstr "View Results"
@@ -5766,7 +5894,7 @@ msgstr "View Results"
msgid "View summaries of your organization's web and email security compliance."
msgstr "View summaries of your organization's web and email security compliance."
-#: src/admin/TagForm.js:213
+#: src/admin/TagForm.js:214
msgid "Visible"
msgstr "Visible"
@@ -5774,7 +5902,7 @@ msgstr "Visible"
#~ msgid "Volume of messages spoofing {domainSlug} (reject + quarantine + none):"
#~ msgstr "Volume of messages spoofing {domainSlug} (reject + quarantine + none):"
-#: src/dmarc/DmarcReportPage.js:641
+#: src/dmarc/DmarcReportPage.js:642
msgid "Volume of messages spoofing domain (reject + quarantine + none):"
msgstr "Volume of messages spoofing domain (reject + quarantine + none):"
@@ -5794,8 +5922,8 @@ msgstr "Volume of messages spoofing domain (reject + quarantine + none):"
#~ msgid "Warnings"
#~ msgstr "Warnings"
-#: src/guidance/EmailGuidance.js:314
-#: src/guidance/EmailGuidance.js:391
+#: src/guidance/EmailGuidance.js:313
+#: src/guidance/EmailGuidance.js:363
msgid "Warnings:"
msgstr "Warnings:"
@@ -5807,7 +5935,7 @@ msgstr "We reserve the right to make changes to our website layout and content,
msgid "We reserve the right to modify or terminate our services for any reason, without notice, at any time."
msgstr "We reserve the right to modify or terminate our services for any reason, without notice, at any time."
-#: src/dmarc/DmarcReportPage.js:620
+#: src/dmarc/DmarcReportPage.js:621
msgid "We've made enhancements to our DMARC data tables to provide a more accurate view of the information."
msgstr "We've made enhancements to our DMARC data tables to provide a more accurate view of the information."
@@ -5823,7 +5951,7 @@ msgstr "We've sent an SMS to your registered phone number with an authentication
msgid "We've sent you an email with an authentication code to sign into Tracker."
msgstr "We've sent you an email with an authentication code to sign into Tracker."
-#: src/guidance/WebTLSResults.js:28
+#: src/guidance/WebTLSResults.js:29
msgid "weak"
msgstr "weak"
@@ -5839,23 +5967,23 @@ msgstr "weak"
#~ msgid "Weak Curves:"
#~ msgstr "Weak Curves:"
-#: src/summaries/HistoricalSummariesGraph.js:101
+#: src/summaries/HistoricalSummariesGraph.js:102
msgid "Web"
msgstr "Web"
-#: src/organizationDetails/OrganizationDomains.js:251
+#: src/organizationDetails/OrganizationDomains.js:256
msgid "WEB"
msgstr "WEB"
-#: src/domains/DomainCard.js:201
+#: src/domains/DomainCard.js:211
msgid "Web (HTTPS/TLS)"
msgstr "Web (HTTPS/TLS)"
-#: src/guidance/AdditionalFindings.js:330
+#: src/guidance/AdditionalFindings.js:331
msgid "Web Components"
msgstr "Web Components"
-#: src/summaries/HistoricalSummariesGraph.js:96
+#: src/summaries/HistoricalSummariesGraph.js:97
msgid "Web Connections"
msgstr "Web Connections"
@@ -5863,12 +5991,12 @@ msgstr "Web Connections"
msgid "Web Connections Summary"
msgstr "Web Connections Summary"
-#: src/domains/ScanDomain.js:242
-#: src/guidance/GuidancePage.js:290
+#: src/domains/ScanDomain.js:243
+#: src/guidance/GuidancePage.js:289
msgid "Web Guidance"
msgstr "Web Guidance"
-#: src/domains/ScanDomain.js:254
+#: src/domains/ScanDomain.js:255
msgid "Web Scan Results"
msgstr "Web Scan Results"
@@ -5900,7 +6028,7 @@ msgstr "Web-hosting"
msgid "Welcome to the Admin Profile page!"
msgstr "Welcome to the Admin Profile page!"
-#: src/auth/CreateUserPage.js:113
+#: src/auth/CreateUserPage.js:114
msgid "Welcome to Tracker, please enter your details."
msgstr "Welcome to Tracker, please enter your details."
@@ -5912,8 +6040,8 @@ msgstr "Welcome to your personal view of Tracker. Moderate the security posture
#~ msgid "Welcome, you are successfully signed in to your new account!"
#~ msgstr "Welcome, you are successfully signed in to your new account!"
-#: src/auth/SignInPage.js:59
-#: src/auth/TwoFactorAuthenticatePage.js:55
+#: src/auth/SignInPage.js:60
+#: src/auth/TwoFactorAuthenticatePage.js:56
msgid "Welcome, you are successfully signed in!"
msgstr "Welcome, you are successfully signed in!"
@@ -5957,7 +6085,7 @@ msgstr "Why does the guidance page not show the domain’s DKIM selectors even t
msgid "Wiki"
msgstr "Wiki"
-#: src/domains/DomainsPage.js:140
+#: src/domains/DomainsPage.js:142
msgid "Wildcard"
msgstr "Wildcard"
@@ -5966,28 +6094,28 @@ msgstr "Wildcard"
#~ msgid "WILDCARD"
#~ msgstr "WILDCARD"
-#: src/admin/AdminDomains.js:184
-#: src/domains/DomainCard.js:157
-#: src/domains/DomainsPage.js:141
-#: src/guidance/GuidancePage.js:349
-#: src/organizationDetails/OrganizationDomains.js:117
+#: src/admin/AdminDomains.js:186
+#: src/domains/DomainCard.js:159
+#: src/domains/DomainsPage.js:143
+#: src/guidance/GuidancePage.js:347
+#: src/organizationDetails/OrganizationDomains.js:118
msgid "Wildcard Entry"
msgstr "Wildcard Entry"
-#: src/domains/DomainsPage.js:316
-#: src/organizationDetails/OrganizationDomains.js:259
+#: src/domains/DomainsPage.js:320
+#: src/organizationDetails/OrganizationDomains.js:264
msgid "WILDCARD ENTRY"
msgstr "WILDCARD ENTRY"
-#: src/admin/AdminDomains.js:183
-#: src/domains/DomainCard.js:157
-#: src/guidance/GuidancePage.js:349
-#: src/organizationDetails/OrganizationDomains.js:116
+#: src/admin/AdminDomains.js:185
+#: src/domains/DomainCard.js:159
+#: src/guidance/GuidancePage.js:347
+#: src/organizationDetails/OrganizationDomains.js:117
msgid "Wildcard Sibling"
msgstr "Wildcard Sibling"
-#: src/domains/DomainsPage.js:313
-#: src/organizationDetails/OrganizationDomains.js:256
+#: src/domains/DomainsPage.js:317
+#: src/organizationDetails/OrganizationDomains.js:261
msgid "WILDCARD SIBLING"
msgstr "WILDCARD SIBLING"
@@ -5995,35 +6123,35 @@ msgstr "WILDCARD SIBLING"
#~ msgid "Wildcard*"
#~ msgstr "Wildcard*"
-#: src/organizations/RequestOrgInviteModal.js:66
+#: src/organizations/RequestOrgInviteModal.js:67
msgid "Would you like to request an invite to {orgName}?"
msgstr "Would you like to request an invite to {orgName}?"
-#: src/summaries/HistoricalSummariesGraph.js:212
+#: src/summaries/HistoricalSummariesGraph.js:213
msgid "Year to Date"
msgstr "Year to Date"
-#: src/guidance/WebConnectionResults.js:130
-#: src/guidance/WebConnectionResults.js:176
-#: src/guidance/WebConnectionResults.js:206
-#: src/guidance/WebConnectionResults.js:224
-#: src/guidance/WebConnectionResults.js:233
-#: src/guidance/WebTLSResults.js:216
-#: src/guidance/WebTLSResults.js:274
-#: src/guidance/WebTLSResults.js:285
-#: src/guidance/WebTLSResults.js:294
-#: src/guidance/WebTLSResults.js:305
-#: src/guidance/WebTLSResults.js:316
-#: src/guidance/WebTLSResults.js:327
-#: src/guidance/WebTLSResults.js:338
-#: src/guidance/WebTLSResults.js:416
-#: src/guidance/WebTLSResults.js:425
-#: src/guidance/WebTLSResults.js:428
-#: src/guidance/WebTLSResults.js:447
+#: src/guidance/WebConnectionResults.js:142
+#: src/guidance/WebConnectionResults.js:182
+#: src/guidance/WebConnectionResults.js:208
+#: src/guidance/WebConnectionResults.js:220
+#: src/guidance/WebConnectionResults.js:226
+#: src/guidance/WebTLSResults.js:217
+#: src/guidance/WebTLSResults.js:275
+#: src/guidance/WebTLSResults.js:286
+#: src/guidance/WebTLSResults.js:295
+#: src/guidance/WebTLSResults.js:306
+#: src/guidance/WebTLSResults.js:317
+#: src/guidance/WebTLSResults.js:328
+#: src/guidance/WebTLSResults.js:339
+#: src/guidance/WebTLSResults.js:417
+#: src/guidance/WebTLSResults.js:426
+#: src/guidance/WebTLSResults.js:429
+#: src/guidance/WebTLSResults.js:448
msgid "Yes"
msgstr "Yes"
-#: src/admin/DomainUpdateList.js:360
+#: src/admin/DomainUpdateList.js:361
msgid "Yes, Apply"
msgstr "Yes, Apply"
@@ -6047,7 +6175,7 @@ msgstr "You agree to use our website, products and services only for lawful purp
#~ msgid "You are current visiting a staging environment, used for testing purposes only. This is <0>not the live production site.0><1/>Visit the production site at <2>https://tracker.canada.ca2> (GC network only)."
#~ msgstr "You are current visiting a staging environment, used for testing purposes only. This is <0>not the live production site.0><1/>Visit the production site at <2>https://tracker.canada.ca2> (GC network only)."
-#: src/app/App.js:171
+#: src/app/App.js:172
msgid "You are currently visiting a staging environment, used for testing purposes only. This is <0>not the live production site.0><1/>Visit the production site at <2>https://tracker.canada.ca2> (GC network only)."
msgstr "You are currently visiting a staging environment, used for testing purposes only. This is <0>not the live production site.0><1/>Visit the production site at <2>https://tracker.canada.ca2> (GC network only)."
@@ -6063,7 +6191,7 @@ msgstr "You are currently visiting a staging environment, used for testing purpo
#~ msgid "You can search for an organization here"
#~ msgstr "You can search for an organization here"
-#: src/admin/AdminPage.js:126
+#: src/admin/AdminPage.js:127
msgid "You currently have no admin affiliations."
msgstr "You currently have no admin affiliations."
@@ -6071,12 +6199,12 @@ msgstr "You currently have no admin affiliations."
msgid "You have successfully added {domainName} to myTracker."
msgstr "You have successfully added {domainName} to myTracker."
-#: src/domains/DomainCard.js:63
+#: src/domains/DomainCard.js:65
msgid "You have successfully added {url} to myTracker."
msgstr "You have successfully added {url} to myTracker."
-#: src/app/FloatingMenu.js:49
-#: src/app/TopBanner.js:43
+#: src/app/FloatingMenu.js:50
+#: src/app/TopBanner.js:44
msgid "You have successfully been signed out."
msgstr "You have successfully been signed out."
@@ -6086,11 +6214,11 @@ msgstr "You have successfully been signed out."
#~ msgstr "You have successfully left {orgSlug}"
#. placeholder {0}: data.removeOrganization.result.organization.name
-#: src/admin/OrganizationInformation.js:99
+#: src/admin/OrganizationInformation.js:100
msgid "You have successfully removed {0}."
msgstr "You have successfully removed {0}."
-#: src/domains/DomainCard.js:89
+#: src/domains/DomainCard.js:91
msgid "You have successfully removed {url} from myTracker."
msgstr "You have successfully removed {url} from myTracker."
@@ -6098,20 +6226,20 @@ msgstr "You have successfully removed {url} from myTracker."
msgid "You have successfully requested a scan."
msgstr "You have successfully requested a scan."
-#: src/domains/SubdomainDiscoveryButton.js:42
+#: src/domains/SubdomainDiscoveryButton.js:43
msgid "You have successfully requested subdomain discovery."
msgstr "You have successfully requested subdomain discovery."
#. placeholder {0}: updateOrganization.result.name
-#: src/admin/OrganizationInformation.js:130
+#: src/admin/OrganizationInformation.js:131
msgid "You have successfully updated {0}."
msgstr "You have successfully updated {0}."
-#: src/user/EditableUserDisplayName.js:52
+#: src/user/EditableUserDisplayName.js:53
msgid "You have successfully updated your display name."
msgstr "You have successfully updated your display name."
-#: src/user/EditableEmailUpdateOptions.js:51
+#: src/user/EditableEmailUpdateOptions.js:52
msgid "You have successfully updated your email update preference."
msgstr "You have successfully updated your email update preference."
@@ -6119,7 +6247,7 @@ msgstr "You have successfully updated your email update preference."
#~ msgid "You have successfully updated your email."
#~ msgstr "You have successfully updated your email."
-#: src/user/InsideUserSwitch.js:31
+#: src/user/InsideUserSwitch.js:32
msgid "You have successfully updated your inside user preference."
msgstr "You have successfully updated your inside user preference."
@@ -6127,11 +6255,11 @@ msgstr "You have successfully updated your inside user preference."
#~ msgid "You have successfully updated your insider preference."
#~ msgstr "You have successfully updated your insider preference."
-#: src/user/EditableUserPassword.js:55
+#: src/user/EditableUserPassword.js:56
msgid "You have successfully updated your password."
msgstr "You have successfully updated your password."
-#: src/user/EditableUserPhoneNumber.js:97
+#: src/user/EditableUserPhoneNumber.js:98
msgid "You have successfully updated your phone number."
msgstr "You have successfully updated your phone number."
@@ -6139,11 +6267,11 @@ msgstr "You have successfully updated your phone number."
#~ msgid "You have successfully updated your preferred language."
#~ msgstr "You have successfully updated your preferred language."
-#: src/user/EditableUserTFAMethod.js:53
+#: src/user/EditableUserTFAMethod.js:54
msgid "You have successfully updated your TFA send method."
msgstr "You have successfully updated your TFA send method."
-#: src/auth/ResetPasswordPage.js:43
+#: src/auth/ResetPasswordPage.js:44
msgid "You may now sign in with your new password"
msgstr "You may now sign in with your new password"
@@ -6151,7 +6279,7 @@ msgstr "You may now sign in with your new password"
msgid "You will need a Tracker account to use certain products and services. You are responsible for maintaining the confidentiality of your account, password and for restricting access to your account. You also agree to accept responsibility for all activities that occur under your account or password. TBS accepts no liability for any loss or damage arising from your failure to maintain the security of your account or password."
msgstr "You will need a Tracker account to use certain products and services. You are responsible for maintaining the confidentiality of your account, password and for restricting access to your account. You also agree to accept responsibility for all activities that occur under your account or password. TBS accepts no liability for any loss or damage arising from your failure to maintain the security of your account or password."
-#: src/app/App.js:364
+#: src/app/App.js:365
msgid "Your Account"
msgstr "Your Account"
@@ -6163,7 +6291,7 @@ msgstr "Your account email could not be verified at this time. Please try again.
msgid "Your account email was successfully verified"
msgstr "Your account email was successfully verified"
-#: src/auth/CreateUserPage.js:77
+#: src/auth/CreateUserPage.js:78
msgid "Your account will automatically be linked to the organization that invited you."
msgstr "Your account will automatically be linked to the organization that invited you."
@@ -6171,7 +6299,7 @@ msgstr "Your account will automatically be linked to the organization that invit
msgid "Your account will be fully activated the next time you log in"
msgstr "Your account will be fully activated the next time you log in"
-#: src/organizations/RequestOrgInviteModal.js:37
+#: src/organizations/RequestOrgInviteModal.js:38
msgid "Your request has been sent to the organization administrators."
msgstr "Your request has been sent to the organization administrators."
diff --git a/frontend/src/locales/fr.po b/frontend/src/locales/fr.po
index 70b335378d..fbc585cd1a 100644
--- a/frontend/src/locales/fr.po
+++ b/frontend/src/locales/fr.po
@@ -22,7 +22,7 @@ msgid ". Personal information will not be disclosed by Treasury Board Secretaria
msgstr ". Les renseignements personnels ne seront pas divulgués par le Secrétariat du Conseil du Trésor du Canada (SCT), sauf en conformité avec les dispositions du"
#. placeholder {0}: guidanceTag?.count
-#: src/guidance/GuidanceTagDetails.js:88
+#: src/guidance/GuidanceTagDetails.js:89
msgid "{0} Findings"
msgstr "{0} Constatations"
@@ -31,27 +31,27 @@ msgstr "{0} Constatations"
#~ msgstr "{0} sélectionné"
#. placeholder {0}: selectedIds.size
-#: src/admin/DomainUpdateList.js:303
+#: src/admin/DomainUpdateList.js:304
msgid "{0} selected in total"
msgstr "{0} sélectionné au total"
#. placeholder {0}: createDomain.result.domain
-#: src/admin/AdminDomainModal.js:62
+#: src/admin/AdminDomainModal.js:81
msgid "{0} was added to {orgSlug}"
msgstr "{0} a été ajouté à {orgSlug}"
#. placeholder {0}: createTag.result.tagId
-#: src/admin/TagForm.js:84
+#: src/admin/TagForm.js:85
msgid "{0} was added to tag list."
msgstr "{0} a été ajouté à la liste des balises."
#. placeholder {0}: createOrganization.result.name
-#: src/createOrganization/CreateOrganizationPage.js:54
+#: src/createOrganization/CreateOrganizationPage.js:49
msgid "{0} was created"
msgstr "{0} a été créée"
#. placeholder {0}: updateTag.result.tagId
-#: src/admin/TagForm.js:39
+#: src/admin/TagForm.js:40
msgid "{0} was successfully updated."
msgstr "{0} a été mis à jour avec succès."
@@ -63,16 +63,15 @@ msgstr "{buttonLabel}"
msgid "{count} records..."
msgstr "{count} enregistrements..."
-#: src/dmarc/DmarcReportPage.js:116
+#: src/dmarc/DmarcReportPage.js:117
msgid "{domainSlug} does not support aggregate data"
msgstr "{domainSlug} ne supporte pas les données agrégées"
-#. placeholder {0}: updateDomain.result.domain
-#: src/admin/AdminDomainModal.js:109
-msgid "{editingDomainUrl} from {orgSlug} successfully updated to {0}"
-msgstr "{editingDomainUrl} de {orgSlug} mis à jour avec succès à {0}"
+#: src/admin/AdminDomainModal.js:127
+msgid "{editingDomainUrl} from {orgSlug} successfully updated."
+msgstr "{editingDomainUrl} de {orgSlug} mis à jour avec succès"
-#: src/components/InfoPanel.js:45
+#: src/components/InfoPanel.js:46
msgid "{info}"
msgstr "{info}"
@@ -80,11 +79,11 @@ msgstr "{info}"
#~ msgid "{label}"
#~ msgstr "{label}"
-#: src/admin/DomainUpdateList.js:279
+#: src/admin/DomainUpdateList.js:280
msgid "{selectedOnPage} selected on this page."
msgstr "{selectedOnPage} sélectionné sur cette page."
-#: src/components/InfoPanel.js:42
+#: src/components/InfoPanel.js:43
msgid "{title}"
msgstr "{title}"
@@ -96,22 +95,46 @@ msgstr "{title} - Suivi"
msgid "{totalRecords} total item(s)"
msgstr "{totalRecords} total artículo(s)"
-#: src/domains/DomainsPage.js:382
+#: src/domains/DomainsPage.js:386
msgid "<0><1>Search Tip: Wildcard <2>%2>1>0><3>Use <4>%4> to broaden your search:3><5><6><7>Start with <8>%8>7>: Search <9><10>%example.gc.ca10>9> to find subdomains like <11>\"sub.example.gc.ca.\"11>6><12><13>End with <14>%14>13>: Search <15><16>example%16> 15>to find domains like <17>\"example.gc.ca\"17> or <18>\"example.canada.ca.\"18>12><19><20>Use both20>: Search <21><22>%example%22> 21>to find anything containing \"example\", like<23>\"sub.example.gc.ca\"23> or <24>\"example.canada.ca.\"24>19>5><25>This helps you quickly locate related domains and subdomains.25>"
msgstr "<0><1>Conseil de recherche : Caractère générique <2>%2>1>0><3>Utilisez <4>%4> pour élargir votre recherche:3><5><6><7>Démarrez avec <8>%8>7> : Recherchez <9><10>%exemple.gc. ca10>9> pour trouver des sous-domaines comme <11>\"sub.exemple.gc.ca.\"11>6><12><13>Finissez avec <14>%14>13> : Recherchez <15><16>exemple%16> 15>pour trouver des domaines comme <17>\"exemple. gc.ca\"17> ou <18>\"exemple.canada.ca.\"18>12><19><20>Utiliser les deux20> : Recherche <21><22>%exemple%22> 21>pour trouver tout ce qui contient \"exemple\", comme<23>\" sub.exemple.gc.ca\"23> ou <24>\"exemple.canada.ca.\"24>19>5><25>Cela vous aide à localiser rapidement les domaines et sous-domaines apparentés.25>"
+#: src/admin/CvdEnrollmentForm.js:43
+#~ msgid "<0>1. What is Coordinated Vulnerability Disclosure (CVD)?0><1/>A structured process that allows security researchers to report vulnerabilities safely and responsibly. It ensures findings are received, validated, and addressed in an organized way, helping departments fix issues before they can be exploited."
+#~ msgstr "1. Qu’est-ce que la divulgation coordonnée des vulnérabilités (DCV)?0><1/>Un processus structuré qui permet aux chercheurs en sécurité de signaler les vulnérabilités de manière sûre et responsable. Il veille à ce que les constatations soient reçues, validées et traitées de manière organisée, ce qui aide les ministères à régler les problèmes avant qu’ils ne puissent être exploités."
+
+#: src/admin/CvdEnrollmentForm.js:47
+msgid "<0>1. What is Coordinated Vulnerability Disclosure (CVD)?0><1/>A structured process that allows security researchers to report vulnerabilities safely and responsibly. It ensures findings are received, validated, and addressed in an organized way, helping organizations fix issues before they can be exploited."
+msgstr "<0>1. Qu’est-ce que la divulgation coordonnée des vulnérabilités (DCV)?0><1/>Un processus structuré qui permet aux chercheurs en sécurité de signaler les vulnérabilités de manière sûre et responsable. Il veille à ce que les constatations soient reçues, validées et traitées de manière organisée, ce qui aide les ministères à régler les problèmes avant qu’ils ne puissent être exploités."
+
+#: src/admin/CvdEnrollmentForm.js:52
+#~ msgid "<0>2. Why enroll your domains?0><1/>Enrolling your internet‑facing assets ensures researchers can report real vulnerabilities directly to the Government of Canada through an approved and safe channel. This improves early detection, reduces security risk, and strengthens your department’s ability to respond quickly and consistently."
+#~ msgstr "<0>2. Pourquoi inscrire vos domaines?0><1/>L’inscription de vos ressources accessibles sur Internet garantit que les chercheurs peuvent signaler les vulnérabilités réelles directement au gouvernement du Canada par un canal approuvé et sûr. Cela améliore la détection précoce, réduit les risques pour la sécurité et renforce la capacité de votre ministère à réagir rapidement et uniformément."
+
+#: src/admin/CvdEnrollmentForm.js:56
+msgid "<0>2. Why enroll your domains?0><1/>Enrolling your internet‑facing assets ensures researchers can report real vulnerabilities directly to the Government of Canada through an approved and safe channel. This improves early detection, reduces security risk, and strengthens your organization’s ability to respond quickly and consistently."
+msgstr "<0>2. Pourquoi inscrire vos domaines?0><1/>L’inscription de vos ressources accessibles sur Internet garantit que les chercheurs peuvent signaler les vulnérabilités réelles directement au gouvernement du Canada par un canal approuvé et sûr. Cela améliore la détection précoce, réduit les risques pour la sécurité et renforce la capacité de votre ministère à réagir rapidement et uniformément."
+
+#: src/admin/CvdEnrollmentForm.js:63
+#~ msgid "<0>3. Which domains should you enroll?0><1/>Enroll any public, internet‑facing domains or subdomains your department owns—especially production systems that deliver services or expose application functionality. Test or pre‑launch environments may be excluded unless they are publicly accessible."
+#~ msgstr "<0>3. Quels domaines devriez-vous inscrire?0><1/>Inscrivez tous les domaines ou sous-domaines publics accessibles sur Internet appartenant à votre service, en particulier les systèmes de production qui fournissent des services ou exposent les fonctionnalités des applications. Les environnements d’essai ou de prélancement peuvent être exclus, sauf s’ils sont accessibles au public."
+
+#: src/admin/CvdEnrollmentForm.js:67
+msgid "<0>3. Which domains should you enroll?0><1/>Enroll any public, internet‑facing domains or subdomains your organization owns—especially production systems that deliver services or expose application functionality. Test or pre‑launch environments may be excluded unless they are publicly accessible."
+msgstr "<0>3. Quels domaines devriez-vous inscrire?0><1/>Inscrivez tous les domaines ou sous-domaines publics accessibles sur Internet appartenant à votre service, en particulier les systèmes de production qui fournissent des services ou exposent les fonctionnalités des applications. Les environnements d’essai ou de prélancement peuvent être exclus, sauf s’ils sont accessibles au public."
+
#: src/app/ReadGuidancePage.js:586
msgid "<0>Application Availability0>: This cloud-based web application is to be 95% fully operational from 8:00 AM to 4:00 PM Eastern time on regular business days."
msgstr "<0>Disponibilité de l'application0>: Cette application Web en nuage doit être opérationnelle à 95 % de 8 h à 16 h (heure de l'Est) pendant les jours ouvrables réguliers."
-#: src/user/EditableUserPhoneNumber.js:169
+#: src/user/EditableUserPhoneNumber.js:170
msgid "<0>Current Phone Number:0> {detailValue}"
msgstr "<0>Numéro de téléphone actuel:0> {detailValue}"
#. placeholder {0}: mxRecords.error
#. placeholder {0}: nsRecords.error
-#: src/guidance/EmailGuidance.js:334
-#: src/guidance/EmailGuidance.js:407
+#: src/guidance/EmailGuidance.js:333
+#: src/guidance/EmailGuidance.js:379
msgid "<0>Error:0> {0}"
msgstr "<0>Erreur:0> {0}"
@@ -123,20 +146,20 @@ msgstr "<0>Suivre les indications de la section 2.4 de la <1>ITSP.40.065 v1.11
msgid "<0>Help Desk0>: All enquiries submitted via generic mailboxes <1>tracker@tbs-sct.gc.ca1> will be responded to within 10 business days."
msgstr "<0>Service d'assistance0> : Toutes les demandes soumises via les boîtes aux lettres génériques <1>suivi@tbs-sct.gc.ca1> recevront une réponse dans un délai de 10 jours ouvrables."
-#: src/guidance/EmailGuidance.js:294
-#: src/guidance/EmailGuidance.js:381
+#: src/guidance/EmailGuidance.js:293
+#: src/guidance/EmailGuidance.js:353
msgid "<0>Hostname:0> {hostname}"
msgstr "<0>Nom d'hôte:0> {hostname}"
#. placeholder {0}: addresses.join(', ')
-#: src/guidance/EmailGuidance.js:299
+#: src/guidance/EmailGuidance.js:298
msgid "<0>IPs:0> {0}"
msgstr "<0>IPs:0> {0}"
#. placeholder {0}: formatTimestamp(timestamp)
#. placeholder {0}: formatTimestamp(webTimestamp)
-#: src/guidance/AdditionalFindings.js:80
-#: src/guidance/EmailGuidance.js:114
+#: src/guidance/AdditionalFindings.js:81
+#: src/guidance/EmailGuidance.js:113
#: src/guidance/GuidancePage.js:263
#: src/guidance/WebGuidance.js:175
msgid "<0>Last Scanned:0> {0}"
@@ -146,11 +169,11 @@ msgstr "<0>Dernière numérisation:0> {0}"
#~ msgid "<0>Note: 0>Domains from outside the GC scope may not be scanned right away"
#~ msgstr "<0>Note : 0>Les domaines situés en dehors du champ d'application du GC peuvent ne pas être analysés immédiatement."
-#: src/admin/TagForm.js:129
+#: src/admin/TagForm.js:130
msgid "<0>Note:0> Tags must not include data that would reclassify the asset above <1>Unclassified, Low Integrity, Low Availability (ULL)1>"
msgstr "<0>Note:0> Les étiquettes ne doivent pas inclure de données qui reclasseraient le bien au-dessus de <1>\tNon classifié, intégrité faible, disponibilité faible (NID)1>."
-#: src/guidance/EmailGuidance.js:304
+#: src/guidance/EmailGuidance.js:303
msgid "<0>Preference:0> {preference}"
msgstr "<0>Préférence:0> {préférence}"
@@ -178,11 +201,11 @@ msgstr "1. Évaluez"
msgid "2. Deploy"
msgstr "2. Déployer"
-#: src/guidance/AdditionalFindings.js:197
+#: src/guidance/AdditionalFindings.js:198
msgid "2.1 Robust web application frameworks are used to aid in developing secure web applications."
msgstr "2.1 Des cadres d’application Web robustes sont utilisés pour faciliter le développement d’applications Web sécurisées."
-#: src/guidance/AdditionalFindings.js:244
+#: src/guidance/AdditionalFindings.js:245
msgid "2.4 Web applications implement Content-Security-Policy, HSTS and X-Frame-Options response headers."
msgstr "2.4 Les applications Web mettent en œuvre les mécanismes Content Security Policy et HSTS ainsi que l’en-tête de réponse X-Frame-Options."
@@ -190,11 +213,11 @@ msgstr "2.4 Les applications Web mettent en œuvre les mécanismes Content Secur
msgid "3. Enforce"
msgstr "3. Appliquer"
-#: src/guidance/AdditionalFindings.js:272
+#: src/guidance/AdditionalFindings.js:273
msgid "3.1.2 Use a denial-of-service mitigation service"
msgstr "3.1.2 utilisent un service d’atténuation des dénis de service;"
-#: src/guidance/AdditionalFindings.js:303
+#: src/guidance/AdditionalFindings.js:304
msgid "3.1.3 Use GC-approved content delivery networks (CDN) that cache websites and protects access to the origin server."
msgstr "3.1.3 utilisent des réseaux de diffusion de contenu approuvés par le GC qui stockent temporairement les sites Web et protègent l’accès au serveur d’origine."
@@ -222,7 +245,7 @@ msgstr "404 - Page non trouvée"
msgid "A DNS request for this service has resulted in the following error code:"
msgstr "Une requête DNS pour ce service a donné lieu au code d'erreur suivant :"
-#: src/admin/AdminDomains.js:507
+#: src/admin/AdminDomains.js:510
msgid "A domain may only be removed for one of the reasons below. For a domain to no longer exist, it must be removed from the DNS. If you need to remove this domain for a different reason, please contact TBS Cyber Security."
msgstr "Un domaine ne peut être supprimé que pour l'une des raisons ci-dessous. Pour qu'un domaine n'existe plus, il doit être supprimé du DNS. Si vous devez supprimer ce domaine pour une autre raison, veuillez contacter TBS Cyber Security."
@@ -230,11 +253,11 @@ msgstr "Un domaine ne peut être supprimé que pour l'une des raisons ci-dessous
msgid "A minimum DMARC policy of “p=none” with at least one address defined as a recipient of aggregate reports"
msgstr "Une politique DMARC minimale de \"p=none\" avec au moins une adresse définie comme destinataire des rapports agrégés."
-#: src/dmarc/DmarcByDomainPage.js:319
+#: src/dmarc/DmarcByDomainPage.js:320
msgid "A more detailed breakdown of each domain can be found by clicking on its address in the first column."
msgstr "Une ventilation plus détaillée de chaque domaine peut être trouvée en cliquant sur son adresse dans la première colonne."
-#: src/user/EditableUserEmail.js:50
+#: src/user/EditableUserEmail.js:51
msgid "A verification email has been sent to your new email address. Please verify your email address to complete the change."
msgstr "Un courriel de vérification a été envoyé à votre nouvelle adresse électronique. Veuillez vérifier votre adresse électronique pour terminer le changement."
@@ -242,7 +265,11 @@ msgstr "Un courriel de vérification a été envoyé à votre nouvelle adresse
#~ msgid "A verification link has been sent to your email account"
#~ msgstr "Un lien de vérification a été envoyé à votre compte de messagerie."
-#: src/guidance/WebTLSResults.js:30
+#: src/admin/CvdEnrollmentForm.js:43
+msgid "About Coordinated Vulnerability Disclosure (CVD)"
+msgstr "À propos de la divulgation coordonnée des vulnérabilités (DCV)"
+
+#: src/guidance/WebTLSResults.js:31
msgid "acceptable"
msgstr "acceptable"
@@ -266,52 +293,52 @@ msgstr "Loi sur l'accès à l'information."
msgid "Account"
msgstr "Compte"
-#: src/admin/SuperAdminUserList.js:87
-#: src/user/UserPage.js:62
+#: src/admin/SuperAdminUserList.js:88
+#: src/user/UserPage.js:63
msgid "Account Closed Successfully"
msgstr "Compte clôturé avec succès"
-#: src/auth/CreateUserPage.js:43
+#: src/auth/CreateUserPage.js:44
msgid "Account created."
msgstr "Compte créé"
-#: src/app/App.js:152
-#: src/app/FloatingMenu.js:177
-#: src/user/UserPage.js:111
+#: src/app/App.js:153
+#: src/app/FloatingMenu.js:178
+#: src/user/UserPage.js:112
msgid "Account Settings"
msgstr "Paramètres du compte"
-#: src/createOrganization/CreateOrganizationPage.js:143
-#: src/createOrganization/CreateOrganizationPage.js:144
-#: src/organizations/Organizations.js:93
+#: src/createOrganization/CreateOrganizationPage.js:118
+#: src/createOrganization/CreateOrganizationPage.js:119
+#: src/organizations/Organizations.js:94
msgid "Acronym"
msgstr "Acronyme"
-#: src/admin/OrganizationInformation.js:461
+#: src/admin/OrganizationInformation.js:462
msgid "Acronym (EN)"
msgstr "Acronyme (EN)"
-#: src/admin/OrganizationInformation.js:464
+#: src/admin/OrganizationInformation.js:465
msgid "Acronym (FR)"
msgstr "Acronyme (FR)"
-#: src/admin/OrganizationInformation.js:363
+#: src/admin/OrganizationInformation.js:364
msgid "Acronym:"
msgstr "Acronyme:"
-#: src/utilities/fieldRequirements.js:36
+#: src/utilities/fieldRequirements.js:37
msgid "Acronyms can only use upper case letters and underscores"
msgstr "Les acronymes ne peuvent utiliser que des lettres majuscules et des caractères de soulignement."
-#: src/utilities/fieldRequirements.js:37
+#: src/utilities/fieldRequirements.js:38
msgid "Acronyms must be at most 50 characters"
msgstr "Les acronymes doivent comporter au maximum 50 caractères."
-#: src/admin/AuditLogTable.js:118
+#: src/admin/AuditLogTable.js:119
msgid "Action"
msgstr "Action"
-#: src/admin/AuditLogTable.js:247
+#: src/admin/AuditLogTable.js:248
msgid "Action:"
msgstr "Action :"
@@ -319,36 +346,40 @@ msgstr "Action :"
msgid "Activity"
msgstr "Activité"
-#: src/admin/AuditLogTable.js:84
+#: src/admin/AuditLogTable.js:85
msgid "Add"
msgstr "Ajouter"
-#: src/admin/AdminDomains.js:425
+#: src/admin/CvdEnrollmentForm.js:137
+msgid "Add details about the enrollment (optional)"
+msgstr "Ajouter des détails concernant l'inscription (facultatif)"
+
+#: src/admin/AdminDomains.js:428
msgid "Add Domain"
msgstr "Ajouter un domaine"
-#: src/admin/AdminDomainModal.js:234
+#: src/admin/AdminDomainModal.js:258
msgid "Add Domain Details"
msgstr "Ajouter les détails du domaine"
-#: src/admin/DomainTagsList.js:140
+#: src/admin/DomainTagsList.js:141
msgid "Add Tag"
msgstr "Ajouter un tag"
-#: src/admin/UserListModal.js:219
+#: src/admin/UserListModal.js:220
msgid "Add User"
msgstr "Ajouter un utilisateur"
-#: src/guidance/AdditionalFindings.js:45
-#: src/guidance/GuidancePage.js:296
+#: src/guidance/AdditionalFindings.js:46
+#: src/guidance/GuidancePage.js:295
msgid "Additional Findings"
msgstr "Constatations supplémentaires"
-#: src/app/App.js:314
+#: src/app/App.js:315
msgid "Admin"
msgstr "Administrateur"
-#: src/admin/UserListModal.js:261
+#: src/admin/UserListModal.js:262
msgid "ADMIN"
msgstr "ADMIN"
@@ -360,15 +391,15 @@ msgstr "ADMIN"
#~ msgid "Admin accounts must activate a multi-factor authentication option, <0>please activate MFA0>."
#~ msgstr "Les comptes administrateurs doivent activer une option d'authentification multifactorielle, <0>s'il vous plaît activer MFA0>."
-#: src/user/UserPage.js:135
+#: src/user/UserPage.js:136
msgid "Admin accounts must activate a multi-factor authentication option."
msgstr "Les comptes administrateurs doivent activer une option d'authentification multifactorielle."
-#: src/app/FloatingMenu.js:179
+#: src/app/FloatingMenu.js:180
msgid "Admin Portal"
msgstr "Portail Admin"
-#: src/app/App.js:160
+#: src/app/App.js:161
msgid "Admin Profile"
msgstr "Profil de l'administrateur"
@@ -376,7 +407,7 @@ msgstr "Profil de l'administrateur"
msgid "Admins of an organization can add domains to their list."
msgstr "Les administrateurs d'une organisation peuvent ajouter des domaines à leur liste."
-#: src/guidance/AdditionalFindings.js:134
+#: src/guidance/AdditionalFindings.js:135
msgid "Affected Components"
msgstr "Composants concernés"
@@ -384,7 +415,7 @@ msgstr "Composants concernés"
#~ msgid "Affected Components:"
#~ msgstr "Composants concernés :"
-#: src/admin/SuperAdminUserList.js:322
+#: src/admin/SuperAdminUserList.js:323
msgid "Affiliations:"
msgstr "Affiliations :"
@@ -393,52 +424,52 @@ msgstr "Affiliations :"
#~ msgstr "Tous les domaines {0} de cette page sont sélectionnés."
#. placeholder {0}: domains.length
-#: src/admin/DomainUpdateList.js:277
+#: src/admin/DomainUpdateList.js:278
msgid "All {0} domains on this page are selected."
msgstr "Tous les domaines {0} de cette page sont sélectionnés."
-#: src/admin/DomainUpdateList.js:293
+#: src/admin/DomainUpdateList.js:294
msgid "All {domainCount} domains are selected. Updates will apply to all filtered domains, not just this page."
msgstr "Tous les {domainCount} domaines sont sélectionnés. Les mises à jour s'appliqueront à tous les domaines filtrés, pas seulement à cette page."
-#: src/admin/DomainUpdateList.js:308
+#: src/admin/DomainUpdateList.js:309
msgid "All {domainCount} selected"
msgstr "Tous les {domainCount} sélectionnés"
-#: src/summaries/HistoricalSummariesGraph.js:217
+#: src/summaries/HistoricalSummariesGraph.js:218
msgid "All Time"
msgstr "Tout le temps"
-#: src/auth/CreateUserPage.js:154
+#: src/auth/CreateUserPage.js:155
msgid "Already have an account? <0>Log in0>"
msgstr "Vous avez déjà un compte ? <0>Connecter0>"
-#: src/admin/AdminDomains.js:556
-#: src/organizationDetails/OrganizationDomains.js:262
+#: src/admin/AdminDomains.js:559
+#: src/organizationDetails/OrganizationDomains.js:267
msgid "An asset confirmed to belong to the organization."
msgstr "Se confirma que un activo pertenece a la organización."
-#: src/admin/AdminDomains.js:559
-#: src/organizationDetails/OrganizationDomains.js:265
+#: src/admin/AdminDomains.js:562
+#: src/organizationDetails/OrganizationDomains.js:270
msgid "An asset that is owned by a third party and supports the operation of organization-owned assets."
msgstr "Activo propiedad de un tercero que sirve de apoyo al funcionamiento de los activos propiedad de la organización."
-#: src/admin/AdminDomains.js:563
-#: src/organizationDetails/OrganizationDomains.js:269
+#: src/admin/AdminDomains.js:566
+#: src/organizationDetails/OrganizationDomains.js:274
msgid "An asset that is relevant to the organization but is not a direct part of the attack surface."
msgstr "Un activo que es relevante para la organización pero que no forma parte directamente de la superficie de ataque."
-#: src/admin/AdminDomains.js:567
-#: src/organizationDetails/OrganizationDomains.js:273
+#: src/admin/AdminDomains.js:570
+#: src/organizationDetails/OrganizationDomains.js:278
msgid "An asset that is suspected to belong to the organization but has not been confirmed."
msgstr "Activo que se sospecha que pertenece a la organización pero que no se ha confirmado."
-#: src/admin/AdminDomains.js:571
-#: src/organizationDetails/OrganizationDomains.js:277
+#: src/admin/AdminDomains.js:574
+#: src/organizationDetails/OrganizationDomains.js:282
msgid "An asset that requires further investigation to determine its relationship to the organization."
msgstr "Un activo que requiere más investigación para determinar su relación con la organización."
-#: src/auth/ForgotPasswordPage.js:37
+#: src/auth/ForgotPasswordPage.js:38
msgid "An email was sent with a link to reset your password"
msgstr "Un courriel a été envoyé avec un lien pour réinitialiser votre mot de passe"
@@ -459,34 +490,34 @@ msgstr "Une erreur s'est produite."
#~ msgid "An error occured when you attempted to sign out"
#~ msgstr "Une erreur s'est produite lorsque vous avez tenté de vous déconnecter."
-#: src/userOnboarding/components/TourComponent.js:32
+#: src/userOnboarding/components/TourComponent.js:33
msgid "An error occurred when completing the tour."
msgstr "Une erreur s'est produite lors de la réalisation de la visite."
-#: src/app/NotificationBanner.js:27
+#: src/app/NotificationBanner.js:28
msgid "An error occurred when dismissing the message."
msgstr "Une erreur s'est produite lors de la fermeture du message."
-#: src/admin/SuperAdminUserList.js:195
+#: src/admin/SuperAdminUserList.js:196
msgid "An error occurred when fetching this organization's information"
msgstr "Une erreur s'est produite lors de la recherche des informations relatives à cette organisation."
-#: src/domains/DomainsPage.js:64
-#: src/domains/DomainsPage.js:80
+#: src/domains/DomainsPage.js:65
+#: src/domains/DomainsPage.js:81
msgid "An error occurred when you attempted to download all domain statuses."
msgstr "Une erreur s'est produite lorsque vous avez tenté de télécharger tous les statuts de domaine."
-#: src/app/FloatingMenu.js:38
-#: src/app/TopBanner.js:32
+#: src/app/FloatingMenu.js:39
+#: src/app/TopBanner.js:33
msgid "An error occurred when you attempted to sign out"
msgstr "Une erreur s'est produite lorsque vous avez tenté de vous déconnecter"
-#: src/domains/DomainCard.js:52
+#: src/domains/DomainCard.js:54
#: src/guidance/GuidancePage.js:108
msgid "An error occurred while favouriting a domain."
msgstr "Une erreur s'est produite lors de la mise en favori d'un domaine."
-#: src/admin/OrganizationInformation.js:62
+#: src/admin/OrganizationInformation.js:63
msgid "An error occurred while removing this organization."
msgstr "Une erreur s'est produite lors de la suppression de cette organisation."
@@ -494,31 +525,31 @@ msgstr "Une erreur s'est produite lors de la suppression de cette organisation."
msgid "An error occurred while requesting a scan."
msgstr "Une erreur s'est produite lors de la demande d'un scan."
-#: src/domains/SubdomainDiscoveryButton.js:30
+#: src/domains/SubdomainDiscoveryButton.js:31
msgid "An error occurred while requesting subdomain discovery."
msgstr "Une erreur s'est produite lors de la demande de découverte du sous-domaine."
-#: src/domains/DomainCard.js:78
+#: src/domains/DomainCard.js:80
msgid "An error occurred while unfavouriting a domain."
msgstr "Une erreur s'est produite lors du dé-favorisage d'un domaine."
-#: src/admin/OrganizationInformation.js:118
+#: src/admin/OrganizationInformation.js:119
msgid "An error occurred while updating this organization."
msgstr "Une erreur s'est produite lors de la mise à jour de cette organisation."
-#: src/user/EditableUserDisplayName.js:40
+#: src/user/EditableUserDisplayName.js:41
msgid "An error occurred while updating your display name."
msgstr "Une erreur s'est produite lors de la mise à jour de votre nom d'affichage."
-#: src/user/EditableUserEmail.js:38
+#: src/user/EditableUserEmail.js:39
msgid "An error occurred while updating your email address."
msgstr "Une erreur s'est produite lors de la mise à jour de votre adresse électronique."
-#: src/user/EditableEmailUpdateOptions.js:39
+#: src/user/EditableEmailUpdateOptions.js:40
msgid "An error occurred while updating your email update preference."
msgstr "Une erreur s'est produite lors de la mise à jour de vos préférences de mise à jour du courrier électronique."
-#: src/user/InsideUserSwitch.js:19
+#: src/user/InsideUserSwitch.js:20
msgid "An error occurred while updating your inside user preference."
msgstr "Une erreur s'est produite lors de la mise à jour de vos préférences d'utilisateur interne."
@@ -530,36 +561,36 @@ msgstr "Une erreur s'est produite lors de la mise à jour de vos préférences d
#~ msgid "An error occurred while updating your language."
#~ msgstr "Une erreur s'est produite lors de la mise à jour de votre langue."
-#: src/user/EditableUserPassword.js:40
+#: src/user/EditableUserPassword.js:41
msgid "An error occurred while updating your password."
msgstr "Une erreur s'est produite lors de la mise à jour de votre mot de passe."
-#: src/user/EditableUserPhoneNumber.js:45
+#: src/user/EditableUserPhoneNumber.js:46
msgid "An error occurred while updating your phone number."
msgstr "Une erreur s'est produite lors de la mise à jour de votre numéro de téléphone."
-#: src/user/EditableUserTFAMethod.js:41
+#: src/user/EditableUserTFAMethod.js:42
msgid "An error occurred while updating your TFA send method."
msgstr "Une erreur s'est produite lors de la mise à jour de votre méthode d'envoi de TFA."
-#: src/user/EditableUserPhoneNumber.js:85
+#: src/user/EditableUserPhoneNumber.js:86
msgid "An error occurred while verifying your phone number."
msgstr "Une erreur s'est produite lors de la mise à jour de votre numéro de téléphone."
-#: src/admin/AdminDomainModal.js:49
-#: src/admin/AdminDomainModal.js:95
-#: src/admin/AdminDomains.js:132
-#: src/admin/DomainUpdateList.js:56
-#: src/admin/DomainUpdateList.js:103
-#: src/admin/TagForm.js:27
-#: src/admin/TagForm.js:72
-#: src/admin/UserListModal.js:50
-#: src/admin/UserListModal.js:140
-#: src/auth/TwoFactorAuthenticatePage.js:28
-#: src/createOrganization/CreateOrganizationPage.js:42
-#: src/guidance/CveIgnorer.js:19
-#: src/guidance/CveIgnorer.js:68
-#: src/user/UserPage.js:51
+#: src/admin/AdminDomainModal.js:68
+#: src/admin/AdminDomainModal.js:114
+#: src/admin/AdminDomains.js:134
+#: src/admin/DomainUpdateList.js:57
+#: src/admin/DomainUpdateList.js:104
+#: src/admin/TagForm.js:28
+#: src/admin/TagForm.js:73
+#: src/admin/UserListModal.js:51
+#: src/admin/UserListModal.js:141
+#: src/auth/TwoFactorAuthenticatePage.js:29
+#: src/createOrganization/CreateOrganizationPage.js:37
+#: src/guidance/CveIgnorer.js:20
+#: src/guidance/CveIgnorer.js:69
+#: src/user/UserPage.js:52
msgid "An error occurred."
msgstr "Une erreur s'est produite."
@@ -583,9 +614,9 @@ msgstr "Tous les produits ou services connexes qui vous sont fournis par le SCT
#~ msgid "Application Portfolio Management (APM) systems; and"
#~ msgstr "les systèmes de gestion du portefeuille d’applications (GPA);"
-#: src/admin/AdminDomains.js:301
-#: src/admin/DomainUpdateList.js:337
-#: src/domains/DomainListFilters.js:169
+#: src/admin/AdminDomains.js:306
+#: src/admin/DomainUpdateList.js:338
+#: src/domains/DomainListFilters.js:170
msgid "Apply"
msgstr "Appliquer"
@@ -597,22 +628,22 @@ msgstr "Appliquer des filtres pour affiner la liste des organisations."
msgid "Apply filters to refine your domain search results."
msgstr "Appliquez des filtres pour affiner les résultats de votre recherche de domaine."
-#: src/admin/DomainUpdateList.js:320
+#: src/admin/DomainUpdateList.js:321
msgid "Apply Tags"
msgstr "Appliquer les balises"
-#: src/admin/AdminDomainCard.js:8
-#: src/admin/AdminDomainModal.js:293
-#: src/admin/AdminDomains.js:279
-#: src/admin/AdminDomains.js:556
-#: src/domains/DomainCard.js:111
+#: src/admin/AdminDomainCard.js:9
+#: src/admin/AdminDomainModal.js:317
+#: src/admin/AdminDomains.js:284
+#: src/admin/AdminDomains.js:559
+#: src/domains/DomainCard.js:113
#: src/domains/FilterList.js:22
-#: src/organizationDetails/OrganizationDomains.js:124
-#: src/organizationDetails/OrganizationDomains.js:262
+#: src/organizationDetails/OrganizationDomains.js:127
+#: src/organizationDetails/OrganizationDomains.js:267
msgid "Approved"
msgstr "Approuvé"
-#: src/organizationDetails/OrganizationDomains.js:124
+#: src/organizationDetails/OrganizationDomains.js:127
msgid "APPROVED"
msgstr "APPROUVÉE"
@@ -621,35 +652,35 @@ msgstr "APPROUVÉE"
msgid "April"
msgstr "Avril"
-#: src/admin/AdminDomainModal.js:352
+#: src/admin/AdminDomainModal.js:383
msgid "Archive domain"
msgstr "Archiver ce domaine"
-#: src/admin/AdminDomains.js:186
-#: src/domains/DomainCard.js:147
-#: src/domains/DomainsPage.js:139
-#: src/organizationDetails/OrganizationDomains.js:119
+#: src/admin/AdminDomains.js:188
+#: src/domains/DomainCard.js:149
+#: src/domains/DomainsPage.js:141
+#: src/organizationDetails/OrganizationDomains.js:120
msgid "Archived"
msgstr "Archivé"
-#: src/admin/AdminDomainCard.js:48
+#: src/admin/AdminDomainCard.js:57
msgid "ARCHIVED"
msgstr "ARCHIVES"
-#: src/admin/DomainUpdateList.js:355
+#: src/admin/DomainUpdateList.js:356
msgid "Are you sure you want to apply these tag changes?"
msgstr "Êtes-vous sûr de vouloir appliquer ces modifications aux balises ?"
-#: src/guidance/CveIgnorer.js:124
+#: src/guidance/CveIgnorer.js:125
msgid "Are you sure you want to ignore this CVE?"
msgstr "Êtes-vous sûr de vouloir ignorer ce CVE ?"
#. placeholder {0}: org.name
-#: src/admin/OrganizationInformation.js:432
+#: src/admin/OrganizationInformation.js:433
msgid "Are you sure you want to permanently remove the organization \"{0}\"?"
msgstr "Êtes-vous sûr de vouloir supprimer définitivement l'organisation \"{0}\" ?"
-#: src/guidance/CveIgnorer.js:122
+#: src/guidance/CveIgnorer.js:123
msgid "Are you sure you want to stop ignoring this CVE?"
msgstr "Êtes-vous sûr de vouloir cesser d'ignorer ce CVE ?"
@@ -661,33 +692,33 @@ msgstr "Êtes-vous sûr de vouloir cesser d'ignorer ce CVE ?"
#~ msgid "Are you sure you wish to leave {orgName}? You will have to be invited back in to access it."
#~ msgstr "Êtes-vous sûr de vouloir quitter {orgName}? Vous devrez être réinvité pour y accéder."
-#: src/admin/DomainUpdateList.js:348
+#: src/admin/DomainUpdateList.js:349
msgid "Are you sure?"
msgstr "Tu es sûr ?"
-#: src/domains/DomainListFilters.js:45
+#: src/domains/DomainListFilters.js:46
#: src/domains/FilterList.js:30
-#: src/guidance/DmarcPhaseStepper.js:22
+#: src/guidance/DmarcPhaseStepper.js:23
msgid "Assess"
msgstr "Évaluer"
-#: src/domains/ScanDomain.js:115
-#: src/guidance/DmarcPhaseStepper.js:25
+#: src/domains/ScanDomain.js:116
+#: src/guidance/DmarcPhaseStepper.js:26
msgid "Assess current state;"
msgstr "Évaluer l’état actuel."
-#: src/admin/AdminDomainModal.js:281
-#: src/admin/AdminDomains.js:240
-#: src/domains/DomainListFilters.js:109
+#: src/admin/AdminDomainModal.js:305
+#: src/admin/AdminDomains.js:245
+#: src/domains/DomainListFilters.js:110
msgid "Asset State"
msgstr "État des actifs"
-#: src/admin/AdminDomains.js:550
+#: src/admin/AdminDomains.js:553
msgid "Asset States"
msgstr "Estados del activo"
-#: src/admin/AdminPage.js:239
-#: src/admin/AuditLogTable.js:96
+#: src/admin/AdminPage.js:240
+#: src/admin/AuditLogTable.js:97
msgid "Audit Logs"
msgstr "Journaux d'audit"
@@ -696,14 +727,18 @@ msgstr "Journaux d'audit"
msgid "August"
msgstr "Août"
-#: src/app/App.js:235
+#: src/app/App.js:236
msgid "Authenticate"
msgstr "Authentifier"
-#: src/auth/ForgotPasswordPage.js:87
-#: src/createOrganization/CreateOrganizationPage.js:158
-#: src/guidance/CveIgnorer.js:129
-#: src/userOnboarding/components/TourComponent.js:106
+#: src/admin/CvdEnrollmentForm.js:231
+msgid "Availability Requirement"
+msgstr "Exigence de disponibilité"
+
+#: src/auth/ForgotPasswordPage.js:88
+#: src/createOrganization/CreateOrganizationPage.js:127
+#: src/guidance/CveIgnorer.js:130
+#: src/userOnboarding/components/TourComponent.js:107
msgid "Back"
msgstr "Retour"
@@ -719,24 +754,24 @@ msgstr "Retour"
msgid "Below are steps on how government organizations can leverage the Tracker platform:"
msgstr "Voici la façon dont les organisations gouvernementales peuvent tirer parti de la plateforme Suivi:"
-#: src/app/TopBanner.js:84
+#: src/app/TopBanner.js:85
msgid "BETA"
msgstr "BETA"
-#: src/admin/OrganizationInformation.js:295
+#: src/admin/OrganizationInformation.js:296
msgid "Blank fields will not be included when updating the organization."
msgstr "Les champs vides ne seront pas pris en compte lors de la mise à jour de l'organisation."
-#: src/admin/AdminDomains.js:182
-#: src/domains/DomainCard.js:152
-#: src/domains/DomainsPage.js:138
+#: src/admin/AdminDomains.js:184
+#: src/domains/DomainCard.js:154
+#: src/domains/DomainsPage.js:140
#: src/guidance/WebGuidance.js:108
-#: src/organizationDetails/OrganizationDomains.js:115
+#: src/organizationDetails/OrganizationDomains.js:116
msgid "Blocked"
msgstr "Bloqué"
-#: src/domains/DomainsPage.js:311
-#: src/organizationDetails/OrganizationDomains.js:254
+#: src/domains/DomainsPage.js:315
+#: src/organizationDetails/OrganizationDomains.js:259
msgid "BLOCKED"
msgstr "BLOQUÉ"
@@ -768,25 +803,25 @@ msgstr "Les Canadiens comptent sur le gouvernement du Canada pour fournir des se
msgid "Canadians rely on the Government of Canada to provide secure digital services. The Policy on Service and Digital guides government online services to adopt good security practices for practices outlined in the <0>email<1/>0> and <2>web<3/>2> services. Track how government sites are becoming more secure."
msgstr "Les Canadiens comptent sur le gouvernement du Canada pour fournir des services numériques sécurisés. La politique sur les services et le numérique guide les services en ligne du gouvernement pour qu'ils adoptent de bonnes pratiques de sécurité pour les services <0>email<1/>0> et <2>web<3/>2>. Suivez l'évolution de la sécurité des sites gouvernementaux."
-#: src/admin/DomainUpdateList.js:363
-#: src/admin/SuperAdminUserList.js:423
-#: src/components/ExportButton.js:93
-#: src/user/UserPage.js:215
+#: src/admin/DomainUpdateList.js:364
+#: src/admin/SuperAdminUserList.js:424
+#: src/components/ExportButton.js:94
+#: src/user/UserPage.js:216
msgid "Cancel"
msgstr "Annuler"
-#: src/admin/AdminDomainCard.js:11
-#: src/admin/AdminDomainModal.js:302
-#: src/admin/AdminDomains.js:288
-#: src/admin/AdminDomains.js:566
-#: src/domains/DomainCard.js:114
+#: src/admin/AdminDomainCard.js:12
+#: src/admin/AdminDomainModal.js:326
+#: src/admin/AdminDomains.js:293
+#: src/admin/AdminDomains.js:569
+#: src/domains/DomainCard.js:116
#: src/domains/FilterList.js:25
-#: src/organizationDetails/OrganizationDomains.js:127
-#: src/organizationDetails/OrganizationDomains.js:272
+#: src/organizationDetails/OrganizationDomains.js:130
+#: src/organizationDetails/OrganizationDomains.js:277
msgid "Candidate"
msgstr "Candidat"
-#: src/organizationDetails/OrganizationDomains.js:127
+#: src/organizationDetails/OrganizationDomains.js:130
msgid "CANDIDATE"
msgstr "CANDIDAT"
@@ -802,11 +837,11 @@ msgstr "CCC a mis à jour sa <0>liste de suites de chiffrement TLS et de courbes
#~ msgid "CCS Injection Vulnerability:"
#~ msgstr "Vulnérabilité d'injection de CCS:"
-#: src/guidance/WebTLSResults.js:251
+#: src/guidance/WebTLSResults.js:252
msgid "Certificate Chain"
msgstr "Chaîne de certificats"
-#: src/guidance/WebTLSResults.js:259
+#: src/guidance/WebTLSResults.js:260
msgid "Certificate chain info could not be found during the scan."
msgstr "Les informations sur la chaîne de certificats n'ont pas pu être trouvées pendant l'analyse."
@@ -814,31 +849,31 @@ msgstr "Les informations sur la chaîne de certificats n'ont pas pu être trouv
msgid "Certificate is valid and configured to use strong protocols, ciphers, and curves"
msgstr "Le certificat est valide et configuré pour utiliser des protocoles, des chiffrements et des courbes robustes."
-#: src/domains/DomainCard.js:206
-#: src/domains/DomainsPage.js:295
-#: src/organizationDetails/OrganizationDomains.js:232
+#: src/domains/DomainCard.js:216
+#: src/domains/DomainsPage.js:299
+#: src/organizationDetails/OrganizationDomains.js:237
msgid "Certificates"
msgstr "Certificats"
-#: src/domains/DomainsPage.js:127
-#: src/organizationDetails/OrganizationDomains.js:101
+#: src/domains/DomainsPage.js:129
+#: src/organizationDetails/OrganizationDomains.js:102
msgid "Certificates Status"
msgstr "Statut des certificats"
-#: src/guidance/WebTLSResults.js:458
+#: src/guidance/WebTLSResults.js:459
msgid "Certification Paths"
msgstr "Voies de certification"
-#: src/auth/ResetPasswordPage.js:109
-#: src/user/EditableUserPassword.js:153
+#: src/auth/ResetPasswordPage.js:110
+#: src/user/EditableUserPassword.js:154
msgid "Change Password"
msgstr "Changer le mot de passe"
-#: src/user/EditableUserTFAMethod.js:52
+#: src/user/EditableUserTFAMethod.js:53
msgid "Changed TFA Send Method"
msgstr "Changement de la méthode d'envoi des TFA"
-#: src/user/EditableUserDisplayName.js:51
+#: src/user/EditableUserDisplayName.js:52
msgid "Changed User Display Name"
msgstr "Changement du nom d'affichage de l'utilisateur"
@@ -850,15 +885,15 @@ msgstr "Changement du nom d'affichage de l'utilisateur"
#~ msgid "Changed User Language"
#~ msgstr "Changement de la langue de l'utilisateur"
-#: src/user/EditableUserPassword.js:54
+#: src/user/EditableUserPassword.js:55
msgid "Changed User Password"
msgstr "Modification du mot de passe de l'utilisateur"
-#: src/user/EditableUserPhoneNumber.js:96
+#: src/user/EditableUserPhoneNumber.js:97
msgid "Changed User Phone Number"
msgstr "Changement du numéro de téléphone de l'utilisateur"
-#: src/domains/ScanDomain.js:276
+#: src/domains/ScanDomain.js:277
msgid "Changes Required for ITPIN Compliance"
msgstr "Changements requis pour la mise en conformité ITPIN"
@@ -867,8 +902,8 @@ msgstr "Changements requis pour la mise en conformité ITPIN"
#~ msgstr "Changements requis pour la conformité aux exigences de configuration de la gestion des sites et services Web."
#: src/guidance/EmailGuidance.js:344
-msgid "Changes:"
-msgstr "Changements :"
+#~ msgid "Changes:"
+#~ msgstr "Changements :"
#: src/userOnboarding/config/tourSteps.js:183
#~ msgid "Check if your organization is already included in our monitored list. If not, you can create a free account to access an overview of your organization's digital footprint and potential vulnerabilities."
@@ -886,40 +921,40 @@ msgstr "Vérifiez si votre organisation est déjà incluse. Si ce n'est pas le c
#~ msgid "Choose the period of data to view"
#~ msgstr "Choisissez la période de données à visualiser"
-#: src/guidance/WebTLSResults.js:96
+#: src/guidance/WebTLSResults.js:97
msgid "Cipher Suites"
msgstr "Suites de chiffrement"
-#: src/domains/DomainCard.js:208
-#: src/domains/DomainsPage.js:297
-#: src/organizationDetails/OrganizationDomains.js:234
+#: src/domains/DomainCard.js:218
+#: src/domains/DomainsPage.js:301
+#: src/organizationDetails/OrganizationDomains.js:239
msgid "Ciphers"
msgstr "Ciphers"
-#: src/domains/DomainsPage.js:128
-#: src/organizationDetails/OrganizationDomains.js:102
+#: src/domains/DomainsPage.js:130
+#: src/organizationDetails/OrganizationDomains.js:103
msgid "Ciphers Status"
msgstr "État du chiffrement"
#: src/createOrganization/CreateOrganizationPage.js:146
#: src/createOrganization/CreateOrganizationPage.js:147
-msgid "City"
-msgstr "Ville"
+#~ msgid "City"
+#~ msgstr "Ville"
-#: src/admin/OrganizationInformation.js:317
+#: src/admin/OrganizationInformation.js:318
msgid "City (EN)"
msgstr "Ville (EN)"
-#: src/admin/OrganizationInformation.js:320
+#: src/admin/OrganizationInformation.js:321
msgid "City (FR)"
msgstr "Ville (FR)"
-#: src/admin/OrganizationInformation.js:370
+#: src/admin/OrganizationInformation.js:371
msgid "City:"
msgstr "Ville:"
-#: src/admin/OrganizationInformation.js:330
-#: src/admin/TagForm.js:225
+#: src/admin/OrganizationInformation.js:331
+#: src/admin/TagForm.js:226
msgid "Clear"
msgstr "Dégager"
@@ -935,7 +970,7 @@ msgstr "Cliquez pour plus d'informations sur les statuts, les étiquettes et les
msgid "Click for guidance on getting started with Tracker and frequently asked questions."
msgstr "Cliquez pour obtenir des conseils sur la façon de démarrer avec Tracker et les questions les plus fréquentes."
-#: src/admin/AdminPage.js:141
+#: src/admin/AdminPage.js:142
msgid "Click here."
msgstr "Cliquez ici."
@@ -943,34 +978,34 @@ msgstr "Cliquez ici."
msgid "Click to view detailed scan results and guidance."
msgstr "Cliquez pour voir les résultats détaillés de l'examen et les conseils."
-#: src/admin/OrganizationInformation.js:339
-#: src/admin/TagForm.js:243
-#: src/app/FloatingMenu.js:267
+#: src/admin/OrganizationInformation.js:340
+#: src/admin/TagForm.js:244
+#: src/app/FloatingMenu.js:268
msgid "Close"
msgstr "Fermer"
-#: src/admin/SuperAdminUserList.js:337
-#: src/admin/SuperAdminUserList.js:403
-#: src/user/UserPage.js:171
-#: src/user/UserPage.js:198
+#: src/admin/SuperAdminUserList.js:338
+#: src/admin/SuperAdminUserList.js:404
+#: src/user/UserPage.js:172
+#: src/user/UserPage.js:199
msgid "Close Account"
msgstr "Fermer le compte"
-#: src/guidance/EmailGuidance.js:273
+#: src/guidance/EmailGuidance.js:272
msgid "CNAME:"
msgstr "CNAME:"
-#: src/utilities/fieldRequirements.js:30
+#: src/utilities/fieldRequirements.js:29
msgid "Code field must not be empty"
msgstr "Le champ de code ne doit pas être vide"
-#: src/domains/ScanDomain.js:117
-#: src/guidance/DmarcPhaseStepper.js:27
+#: src/domains/ScanDomain.js:118
+#: src/guidance/DmarcPhaseStepper.js:28
msgid "Collect and analyze DMARC reports."
msgstr "Recueillir et analyser les rapports DMARC."
-#: src/admin/AdminDomains.js:250
-#: src/domains/DomainListFilters.js:146
+#: src/admin/AdminDomains.js:255
+#: src/domains/DomainListFilters.js:147
msgid "Comparison"
msgstr "Comparaison"
@@ -978,10 +1013,14 @@ msgstr "Comparaison"
msgid "Compliant"
msgstr "Conforme"
-#: src/guidance/AdditionalFindings.js:131
+#: src/guidance/AdditionalFindings.js:132
msgid "Confidence Level"
msgstr "Niveau de confiance"
+#: src/admin/CvdEnrollmentForm.js:175
+msgid "Confidentiality Requirement"
+msgstr "Exigence de confidentialité"
+
#: src/summaries/TierThreeSummaries.js:18
msgid "Configuration requirements for email services completely met"
msgstr "Les exigences de configuration pour les services de courrier électronique sont entièrement satisfaites"
@@ -990,27 +1029,27 @@ msgstr "Les exigences de configuration pour les services de courrier électroniq
msgid "Configuration requirements for web sites and services completely met"
msgstr "Les exigences de configuration des sites et services web sont entièrement satisfaites"
-#: src/admin/AdminDomainModal.js:323
-#: src/admin/AdminDomains.js:542
-#: src/admin/OrganizationInformation.js:347
-#: src/admin/OrganizationInformation.js:445
-#: src/admin/SuperAdminUserList.js:427
-#: src/admin/TagForm.js:246
-#: src/admin/UserListModal.js:277
-#: src/domains/SubdomainDiscoveryButton.js:92
-#: src/guidance/CveIgnorer.js:157
-#: src/organizations/RequestOrgInviteModal.js:75
-#: src/user/EditableEmailUpdateOptions.js:226
-#: src/user/EditableUserDisplayName.js:168
-#: src/user/EditableUserEmail.js:136
-#: src/user/EditableUserPassword.js:182
-#: src/user/EditableUserPhoneNumber.js:186
-#: src/user/EditableUserPhoneNumber.js:244
-#: src/user/UserPage.js:219
+#: src/admin/AdminDomainModal.js:354
+#: src/admin/AdminDomains.js:545
+#: src/admin/OrganizationInformation.js:348
+#: src/admin/OrganizationInformation.js:446
+#: src/admin/SuperAdminUserList.js:428
+#: src/admin/TagForm.js:247
+#: src/admin/UserListModal.js:278
+#: src/domains/SubdomainDiscoveryButton.js:93
+#: src/guidance/CveIgnorer.js:158
+#: src/organizations/RequestOrgInviteModal.js:76
+#: src/user/EditableEmailUpdateOptions.js:227
+#: src/user/EditableUserDisplayName.js:169
+#: src/user/EditableUserEmail.js:137
+#: src/user/EditableUserPassword.js:183
+#: src/user/EditableUserPhoneNumber.js:187
+#: src/user/EditableUserPhoneNumber.js:245
+#: src/user/UserPage.js:220
msgid "Confirm"
msgstr "Confirmer"
-#: src/user/EditableUserPassword.js:170
+#: src/user/EditableUserPassword.js:171
msgid "Confirm New Password:"
msgstr "Confirmer le nouveau mot de passe:"
@@ -1018,7 +1057,7 @@ msgstr "Confirmer le nouveau mot de passe:"
msgid "Confirm Password:"
msgstr "Confirmez le mot de passe:"
-#: src/admin/AdminDomains.js:502
+#: src/admin/AdminDomains.js:505
msgid "Confirm removal of domain:"
msgstr "Confirmer la suppression du domaine:"
@@ -1026,11 +1065,11 @@ msgstr "Confirmer la suppression du domaine:"
#~ msgid "Confirm removal of user:"
#~ msgstr "Confirmer le retrait de l'utilisateur:"
-#: src/domains/SubdomainDiscoveryButton.js:71
+#: src/domains/SubdomainDiscoveryButton.js:72
msgid "Confirm subdomain discovery for <0>{domainUrl}0>:"
msgstr "Confirmer la découverte du sous-domaine pour <0>{domainUrl}0> :"
-#: src/guidance/WebConnectionResults.js:103
+#: src/guidance/WebConnectionResults.js:117
msgid "Connection Results"
msgstr "Résultats de la connexion"
@@ -1038,7 +1077,7 @@ msgstr "Résultats de la connexion"
msgid "Consider prioritizing websites and web services that exchange Protected data."
msgstr "Envisagez de donner la priorité aux sites web et aux services web qui échangent des données protégées."
-#: src/app/FloatingMenu.js:238
+#: src/app/FloatingMenu.js:239
msgid "Contact"
msgstr "Contact"
@@ -1050,14 +1089,15 @@ msgstr "Contacter l'équipe Suivi"
msgid "contact us"
msgstr "contactez-nous"
-#: src/app/App.js:271
-#: src/app/App.js:431
+#: src/admin/CvdEnrollmentForm.js:84
+#: src/app/App.js:272
+#: src/app/App.js:432
#: src/app/ContactUsPage.js:52
#: src/app/SlideMessage.js:103
msgid "Contact Us"
msgstr "Nous contacter"
-#: src/guidance/AdditionalFindings.js:297
+#: src/guidance/AdditionalFindings.js:298
msgid "Content Delivery Network"
msgstr "Réseau de diffusion de contenu"
@@ -1069,29 +1109,29 @@ msgstr "Continuer"
msgid "Copyright Act"
msgstr "Loi sur le droit d'auteur"
-#: src/domains/ScanDomain.js:132
-#: src/guidance/DmarcPhaseStepper.js:51
+#: src/domains/ScanDomain.js:133
+#: src/guidance/DmarcPhaseStepper.js:52
msgid "Correct misconfigurations and update records as required; and"
msgstr "Corriger les erreurs de configuration et mettre à jour les enregistrements, au besoin."
#: src/createOrganization/CreateOrganizationPage.js:152
#: src/createOrganization/CreateOrganizationPage.js:153
-msgid "Country"
-msgstr "Pays"
+#~ msgid "Country"
+#~ msgstr "Pays"
-#: src/admin/OrganizationInformation.js:305
+#: src/admin/OrganizationInformation.js:306
msgid "Country (EN)"
msgstr "Pays (EN)"
-#: src/admin/OrganizationInformation.js:308
+#: src/admin/OrganizationInformation.js:309
msgid "Country (FR)"
msgstr "Pays (FR)"
-#: src/admin/OrganizationInformation.js:383
+#: src/admin/OrganizationInformation.js:384
msgid "Country:"
msgstr "Pays:"
-#: src/admin/AuditLogTable.js:83
+#: src/admin/AuditLogTable.js:84
msgid "Create"
msgstr "Créer"
@@ -1099,14 +1139,14 @@ msgstr "Créer"
msgid "Create a free account to gain visibility into your organization's digital footprint and access a dynamic inventory of your web infrastructure."
msgstr "Créez un compte gratuit pour avoir une visibilité sur l'empreinte numérique de votre organisation et accéder à un inventaire dynamique de votre infrastructure web."
-#: src/app/FloatingMenu.js:200
-#: src/app/TopBanner.js:110
-#: src/app/TopBanner.js:148
-#: src/auth/CreateUserPage.js:150
+#: src/app/FloatingMenu.js:201
+#: src/app/TopBanner.js:111
+#: src/app/TopBanner.js:149
+#: src/auth/CreateUserPage.js:151
msgid "Create Account"
msgstr "Créer un compte"
-#: src/app/App.js:223
+#: src/app/App.js:224
msgid "Create an Account"
msgstr "Créer un compte"
@@ -1114,13 +1154,13 @@ msgstr "Créer un compte"
#~ msgid "Create an account by entering an email and password."
#~ msgstr "Créez un compte en entrant un courriel et un mot de passe."
-#: src/createOrganization/CreateOrganizationPage.js:127
+#: src/createOrganization/CreateOrganizationPage.js:110
msgid "Create an organization"
msgstr "Créer une organisation"
-#: src/admin/AdminPage.js:168
-#: src/app/App.js:393
-#: src/createOrganization/CreateOrganizationPage.js:162
+#: src/admin/AdminPage.js:169
+#: src/app/App.js:394
+#: src/createOrganization/CreateOrganizationPage.js:131
msgid "Create Organization"
msgstr "Créer une organisation"
@@ -1128,20 +1168,21 @@ msgstr "Créer une organisation"
#~ msgid "Create your free account to unlock visibility into your organization's digital footprint. Upon signing up, you'll gain access to a dynamic inventory of web infrastructure under your management."
#~ msgstr "Créez votre compte gratuit pour bénéficier d'une visibilité sur l'empreinte numérique de votre organisation. En vous inscrivant, vous aurez accès à un inventaire dynamique de l'infrastructure web dont vous avez la charge."
-#: src/guidance/AdditionalFindings.js:33
-#: src/guidance/IgnoredCves.js:8
+#: src/admin/CvdEnrollmentForm.js:167
+#: src/guidance/AdditionalFindings.js:34
+#: src/guidance/IgnoredCves.js:9
msgid "Critical"
msgstr "Critique"
-#: src/user/EditableUserDisplayName.js:148
+#: src/user/EditableUserDisplayName.js:149
msgid "Current Display Name:"
msgstr "Nom de l'affichage actuel:"
-#: src/user/EditableUserEmail.js:125
+#: src/user/EditableUserEmail.js:126
msgid "Current Email:"
msgstr "Courriel actuel:"
-#: src/user/EditableUserPassword.js:160
+#: src/user/EditableUserPassword.js:161
msgid "Current Password:"
msgstr "Mot de passe actuel:"
@@ -1149,32 +1190,56 @@ msgstr "Mot de passe actuel:"
#~ msgid "Current Phone Number:"
#~ msgstr "Numéro de téléphone actuel:"
-#: src/admin/DomainUpdateList.js:264
+#: src/admin/DomainUpdateList.js:265
msgid "Current Tags"
msgstr "Balises actuelles"
-#: src/domains/DomainCard.js:209
-#: src/domains/DomainsPage.js:298
+#: src/domains/DomainCard.js:219
+#: src/domains/DomainsPage.js:302
#: src/domains/FilterList.js:14
-#: src/guidance/WebTLSResults.js:146
-#: src/organizationDetails/OrganizationDomains.js:235
+#: src/guidance/WebTLSResults.js:147
+#: src/organizationDetails/OrganizationDomains.js:240
msgid "Curves"
msgstr "Courbes"
-#: src/domains/DomainsPage.js:129
-#: src/organizationDetails/OrganizationDomains.js:103
+#: src/domains/DomainsPage.js:131
+#: src/organizationDetails/OrganizationDomains.js:104
msgid "Curves Status"
msgstr "État des courbes"
+#. placeholder {0}: cvdEnrollment.status
+#: src/admin/AdminDomainCard.js:45
+#: src/domains/DomainCard.js:202
+msgid "CVD {0}"
+msgstr "DCV {0}"
+
+#: src/admin/AdminDomains.js:192
+#: src/organizationDetails/OrganizationDomains.js:123
+msgid "CVD Denied"
+msgstr "Rejet de la demande de DCV"
+
+#: src/admin/AdminDomains.js:190
+#: src/organizationDetails/OrganizationDomains.js:122
+msgid "CVD Enrolled"
+msgstr "DCV inscrit"
+
+#: src/admin/CvdEnrollmentForm.js:32
+msgid "CVD Enrollment Status"
+msgstr "Statut d'inscription au DCV"
+
+#: src/admin/AdminDomains.js:191
+msgid "CVD Pending"
+msgstr "En attente de DCV"
+
#: src/organizationDetails/OrganizationDomains.js:101
#~ msgid "CVE Detected"
#~ msgstr "CVE détecté"
-#: src/guidance/AdditionalFindings.js:125
+#: src/guidance/AdditionalFindings.js:126
msgid "CVE ID"
msgstr "ID CVE"
-#: src/guidance/CveIgnorer.js:30
+#: src/guidance/CveIgnorer.js:31
msgid "CVE ignored"
msgstr "CVE ignoré"
@@ -1182,21 +1247,25 @@ msgstr "CVE ignoré"
msgid "Data Handling"
msgstr "Traitement des données"
+#: src/guidance/SecurityTxt.js:12
+msgid "Data not available for this service. Try rescanning or come back later."
+msgstr "Données non disponibles pour ce service. Essayez de relancer la recherche ou revenez plus tard."
+
#: src/termsConditions/TermsConditionsPage.js:114
msgid "Data Security and Use"
msgstr "Sécurité et utilisation des données"
-#: src/dmarc/DmarcReportSummaryGraph.js:114
-#: src/summaries/HistoricalSummariesGraph.js:244
+#: src/dmarc/DmarcReportSummaryGraph.js:115
+#: src/summaries/HistoricalSummariesGraph.js:245
msgid "Data:"
msgstr "Données:"
-#: src/guidance/AdditionalFindings.js:266
+#: src/guidance/AdditionalFindings.js:267
msgid "DDOS Protection"
msgstr "Protection DDOS"
-#: src/user/EditableEmailUpdateOptions.js:121
-#: src/user/EditableEmailUpdateOptions.js:218
+#: src/user/EditableEmailUpdateOptions.js:122
+#: src/user/EditableEmailUpdateOptions.js:219
msgid "Decay Detection"
msgstr "Détection de dégradation"
@@ -1205,67 +1274,75 @@ msgstr "Détection de dégradation"
msgid "December"
msgstr "Décembre"
-#: src/guidance/EmailGuidance.js:146
+#: src/guidance/EmailGuidance.js:145
msgid "Default:"
msgstr "Par défaut :"
-#: src/admin/AuditLogTable.js:87
+#: src/admin/AuditLogTable.js:88
msgid "Delete"
msgstr "Supprimer"
+#: src/admin/CvdEnrollmentForm.js:112
+msgid "Denied"
+msgstr "Refusé"
+
#: src/app/ReadGuidancePage.js:63
#~ msgid "Departmental business units"
#~ msgstr "Unités opérationnelles départementales"
-#: src/admin/AdminDomainCard.js:9
-#: src/admin/AdminDomainModal.js:296
-#: src/admin/AdminDomains.js:282
-#: src/admin/AdminDomains.js:558
-#: src/domains/DomainCard.js:112
+#: src/admin/AdminDomainCard.js:10
+#: src/admin/AdminDomainModal.js:320
+#: src/admin/AdminDomains.js:287
+#: src/admin/AdminDomains.js:561
+#: src/domains/DomainCard.js:114
#: src/domains/FilterList.js:23
-#: src/organizationDetails/OrganizationDomains.js:125
-#: src/organizationDetails/OrganizationDomains.js:264
+#: src/organizationDetails/OrganizationDomains.js:128
+#: src/organizationDetails/OrganizationDomains.js:269
msgid "Dependency"
msgstr "Dépendance"
-#: src/organizationDetails/OrganizationDomains.js:125
+#: src/organizationDetails/OrganizationDomains.js:128
msgid "DEPENDENCY"
msgstr "DÉPENDANCE"
-#: src/domains/DomainListFilters.js:46
+#: src/domains/DomainListFilters.js:47
#: src/domains/FilterList.js:31
-#: src/guidance/DmarcPhaseStepper.js:31
+#: src/guidance/DmarcPhaseStepper.js:32
msgid "Deploy"
msgstr "Déployer"
-#: src/domains/ScanDomain.js:122
-#: src/guidance/DmarcPhaseStepper.js:35
+#: src/domains/ScanDomain.js:123
+#: src/guidance/DmarcPhaseStepper.js:36
msgid "Deploy DKIM records and keys for all domains and senders; and"
msgstr "Déployer les enregistrements DKIM et les clés pour tous les domaines et expéditeurs."
-#: src/domains/ScanDomain.js:116
-#: src/guidance/DmarcPhaseStepper.js:26
+#: src/domains/ScanDomain.js:117
+#: src/guidance/DmarcPhaseStepper.js:27
msgid "Deploy initial DMARC records with policy of none; and"
msgstr "Déployer les enregistrements DMARC initiaux en utilisant la stratégie Aucune (None)"
-#: src/domains/ScanDomain.js:121
-#: src/guidance/DmarcPhaseStepper.js:34
+#: src/domains/ScanDomain.js:122
+#: src/guidance/DmarcPhaseStepper.js:35
msgid "Deploy SPF records for all domains;"
msgstr "Déployer les enregistrements SPF pour tous les domaines."
-#: src/admin/TagForm.js:196
+#: src/admin/CvdEnrollmentForm.js:124
+msgid "Description"
+msgstr "Description"
+
+#: src/admin/TagForm.js:197
msgid "Description (EN)"
msgstr "Description (EN)"
-#: src/admin/TagForm.js:199
+#: src/admin/TagForm.js:200
msgid "Description (FR)"
msgstr "Description (FR)"
-#: src/dmarc/DmarcReportPage.js:265
+#: src/dmarc/DmarcReportPage.js:266
msgid "Details for a given guidance tag can be found on the wiki, see below."
msgstr "Les détails d'une balise d'orientation donnée peuvent être trouvés sur le wiki, voir ci-dessous."
-#: src/guidance/IgnoredCves.js:17
+#: src/guidance/IgnoredCves.js:18
msgid "Detected Ignored CVEs:"
msgstr "CVEs ignorés détectés :"
@@ -1281,11 +1358,11 @@ msgstr "Élaborer un calendrier de mesures prioritaires pour remédier à toute
#~ msgid "Develop a prioritized schedule to address any failings. Consider prioritizing websites and web services that exchange Protected data."
#~ msgstr "Élaborer un calendrier de priorités pour corriger tout échec. Envisager de donner la priorité aux sites Web et aux services Web qui échangent des données protégées."
-#: src/domains/SubdomainDiscoveryButton.js:65
+#: src/domains/SubdomainDiscoveryButton.js:66
msgid "Discover Subdomains"
msgstr "Découvrir les sous-domaines"
-#: src/admin/SuperAdminUserList.js:145
+#: src/admin/SuperAdminUserList.js:146
#: src/components/fields/DisplayNameField.js:14
msgid "Display Name"
msgstr "Nom d'affichage"
@@ -1295,38 +1372,38 @@ msgid "Display name cannot be empty"
msgstr "Le nom d'affichage ne peut pas être vide"
#: src/components/fields/DisplayNameField.js:12
-#: src/user/EditableUserDisplayName.js:88
+#: src/user/EditableUserDisplayName.js:89
msgid "Display Name:"
msgstr "Nom d'affichage:"
-#: src/organizations/Organizations.js:193
+#: src/organizations/Organizations.js:194
msgid "Displays the Name of the organization, its acronym, and a blue check mark if it is a verified organization."
msgstr "Affiche le nom de l'organisation, son acronyme et une coche bleue s'il s'agit d'une organisation vérifiée."
-#: src/dmarc/DmarcReportPage.js:226
+#: src/dmarc/DmarcReportPage.js:227
msgid "Disposition"
msgstr "Disposition"
-#: src/domains/DomainsPage.js:302
-#: src/organizationDetails/OrganizationDomains.js:239
+#: src/domains/DomainsPage.js:306
+#: src/organizationDetails/OrganizationDomains.js:244
msgid "DKIM"
msgstr "DKIM"
-#: src/dmarc/DmarcReportPage.js:218
+#: src/dmarc/DmarcReportPage.js:219
msgid "DKIM Aligned"
msgstr "DKIM Aligné"
-#: src/dmarc/DmarcReportPage.js:182
+#: src/dmarc/DmarcReportPage.js:183
msgid "DKIM Domains"
msgstr "Domaines DKIM"
-#: src/dmarc/DmarcReportPage.js:326
+#: src/dmarc/DmarcReportPage.js:327
msgid "DKIM Failure Table"
msgstr "Tableau des échecs DKIM"
-#: src/dmarc/DmarcReportPage.js:334
-#: src/dmarc/DmarcReportPage.js:368
-#: src/dmarc/DmarcReportPage.js:628
+#: src/dmarc/DmarcReportPage.js:335
+#: src/dmarc/DmarcReportPage.js:369
+#: src/dmarc/DmarcReportPage.js:629
msgid "DKIM Failures by IP Address"
msgstr "Défaillances DKIM par adresse IP"
@@ -1338,7 +1415,7 @@ msgstr "L'enregistrement DKIM et les clés sont déployés et valides"
#~ msgid "DKIM record could not be found for this selector."
#~ msgstr "Un enregistrement DKIM n'a pas pu être trouvé pour ce sélecteur."
-#: src/dmarc/DmarcReportPage.js:222
+#: src/dmarc/DmarcReportPage.js:223
msgid "DKIM Results"
msgstr "Résultats DKIM"
@@ -1346,7 +1423,7 @@ msgstr "Résultats DKIM"
#~ msgid "DKIM Selector"
#~ msgstr "Sélecteur DKIM"
-#: src/dmarc/DmarcReportPage.js:186
+#: src/dmarc/DmarcReportPage.js:187
msgid "DKIM Selectors"
msgstr "Sélecteurs DKIM"
@@ -1354,8 +1431,8 @@ msgstr "Sélecteurs DKIM"
#~ msgid "DKIM Selectors:"
#~ msgstr "Sélecteurs DKIM:"
-#: src/domains/DomainsPage.js:132
-#: src/organizationDetails/OrganizationDomains.js:106
+#: src/domains/DomainsPage.js:134
+#: src/organizationDetails/OrganizationDomains.js:107
msgid "DKIM Status"
msgstr "Statut DKIM"
@@ -1363,12 +1440,12 @@ msgstr "Statut DKIM"
msgid "DKIM Summary"
msgstr "Résumé DKIM"
-#: src/domains/DomainsPage.js:306
-#: src/organizationDetails/OrganizationDomains.js:243
+#: src/domains/DomainsPage.js:310
+#: src/organizationDetails/OrganizationDomains.js:248
msgid "DMARC"
msgstr "DMARC"
-#: src/organizations/Organizations.js:201
+#: src/organizations/Organizations.js:202
msgid "DMARC Configuration"
msgstr "Configuration de DMARC"
@@ -1380,26 +1457,26 @@ msgstr "Résumé de la configuration DMARC"
msgid "DMARC Configured"
msgstr "DMARC configuré"
-#: src/dmarc/DmarcReportPage.js:541
+#: src/dmarc/DmarcReportPage.js:542
msgid "DMARC Failure Table"
msgstr "Tableau des échecs de la DMARC"
-#: src/dmarc/DmarcReportPage.js:549
-#: src/dmarc/DmarcReportPage.js:585
-#: src/dmarc/DmarcReportPage.js:630
+#: src/dmarc/DmarcReportPage.js:550
+#: src/dmarc/DmarcReportPage.js:586
+#: src/dmarc/DmarcReportPage.js:631
msgid "DMARC Failures by IP Address"
msgstr "Défaillances du DMARC par adresse IP"
#. placeholder {0}: mergedScan.scan.dmarc.dmarcPhase ? mergedScan.scan.dmarc.dmarcPhase.toUpperCase() : 'UNKNOWN'
-#: src/domains/ScanDomain.js:322
+#: src/domains/ScanDomain.js:323
msgid "DMARC Implementation Phase: {0}"
msgstr "Phase de mise en œuvre de DMARC: {0}"
-#: src/guidance/DmarcPhaseStepper.js:74
+#: src/guidance/DmarcPhaseStepper.js:75
msgid "DMARC Implementation Phase: {currentPhase}"
msgstr "Phase de mise en œuvre de DMARC: {currentPhase}"
-#: src/domains/DomainListFilters.js:113
+#: src/domains/DomainListFilters.js:114
msgid "DMARC Phase"
msgstr "Phase DMARC"
@@ -1427,26 +1504,26 @@ msgstr "Politique DMARC de mise en quarantaine ou de rejet, et rejet de tous les
#~ msgid "DMARC record could not be found during the scan."
#~ msgstr "L'enregistrement DMARC n'a pas pu être trouvé pendant le scan."
-#: src/dmarc/DmarcReportPage.js:94
-#: src/domains/DomainCard.js:244
-#: src/guidance/GuidancePage.js:373
+#: src/dmarc/DmarcReportPage.js:95
+#: src/domains/DomainCard.js:254
+#: src/guidance/GuidancePage.js:371
msgid "DMARC Report"
msgstr "Rapport DMARC "
-#: src/dmarc/DmarcReportPage.js:40
+#: src/dmarc/DmarcReportPage.js:41
msgid "DMARC Report for {domainSlug}"
msgstr "Rapport DMARC pour {domainSlug}"
-#: src/domains/DomainsPage.js:133
-#: src/organizationDetails/OrganizationDomains.js:107
+#: src/domains/DomainsPage.js:135
+#: src/organizationDetails/OrganizationDomains.js:108
msgid "DMARC Status"
msgstr "Statut DMARC"
-#: src/app/App.js:141
-#: src/app/App.js:355
-#: src/app/FloatingMenu.js:131
-#: src/dmarc/DmarcByDomainPage.js:168
-#: src/dmarc/DmarcByDomainPage.js:226
+#: src/app/App.js:142
+#: src/app/App.js:356
+#: src/app/FloatingMenu.js:132
+#: src/dmarc/DmarcByDomainPage.js:169
+#: src/dmarc/DmarcByDomainPage.js:227
msgid "DMARC Summaries"
msgstr "Résumés DMARC"
@@ -1454,11 +1531,11 @@ msgstr "Résumés DMARC"
msgid "DMARC Summary"
msgstr "Résumé DMARC"
-#: src/dmarc/DmarcReportPage.js:195
+#: src/dmarc/DmarcReportPage.js:196
msgid "DNS Host"
msgstr "Hôte DNS"
-#: src/guidance/EmailGuidance.js:53
+#: src/guidance/EmailGuidance.js:52
msgid "DNS Result Summary"
msgstr "Résumé des résultats du DNS"
@@ -1471,35 +1548,35 @@ msgstr "Scan DNS terminé"
msgid "DNS scan for domain \"{0}\" has completed."
msgstr "Le scan DNS du domaine \"{0}\" est terminé."
-#: src/admin/AdminDomains.js:256
-#: src/domains/DomainListFilters.js:152
+#: src/admin/AdminDomains.js:261
+#: src/domains/DomainListFilters.js:153
msgid "DOES NOT EQUAL"
msgstr "N'EST PAS ÉGAL"
-#: src/admin/AuditLogTable.js:77
-#: src/admin/DomainUpdateList.js:261
-#: src/dmarc/DmarcByDomainPage.js:111
-#: src/dmarc/DmarcByDomainPage.js:297
-#: src/domains/DomainsPage.js:288
-#: src/domains/DomainsPage.js:336
-#: src/organizationDetails/OrganizationDomains.js:225
-#: src/organizationDetails/OrganizationDomains.js:294
+#: src/admin/AuditLogTable.js:78
+#: src/admin/DomainUpdateList.js:262
+#: src/dmarc/DmarcByDomainPage.js:112
+#: src/dmarc/DmarcByDomainPage.js:298
+#: src/domains/DomainsPage.js:292
+#: src/domains/DomainsPage.js:340
+#: src/organizationDetails/OrganizationDomains.js:230
+#: src/organizationDetails/OrganizationDomains.js:299
msgid "Domain"
msgstr "Domaine"
-#: src/admin/AdminDomainModal.js:61
+#: src/admin/AdminDomainModal.js:80
msgid "Domain added"
msgstr "Domaine ajouté"
-#: src/summaries/HistoricalSummariesGraph.js:258
+#: src/summaries/HistoricalSummariesGraph.js:259
msgid "Domain count"
msgstr "Compte de domaine"
-#: src/dmarc/DmarcReportPage.js:237
+#: src/dmarc/DmarcReportPage.js:238
msgid "Domain from Simple Mail Transfer Protocol (SMTP) banner message."
msgstr "Domaine du message de bannière du protocole de transfert de courrier simple (PTCS)."
-#: src/admin/AdminDomains.js:192
+#: src/admin/AdminDomains.js:197
msgid "Domain List"
msgstr "Liste des domaines"
@@ -1507,47 +1584,47 @@ msgstr "Liste des domaines"
msgid "Domain Name System (DNS) Services Management Configuration Requirements - Canada.ca"
msgstr "Exigences de configuration pour la gestion des sites Web et des services"
-#: src/admin/AdminDomains.js:144
+#: src/admin/AdminDomains.js:146
msgid "Domain removed"
msgstr "Domaine supprimé"
-#: src/admin/AdminDomains.js:145
+#: src/admin/AdminDomains.js:147
msgid "Domain removed from {orgSlug}"
msgstr "Domaine supprimé de {orgSlug}"
-#: src/admin/AdminPage.js:240
+#: src/admin/AdminPage.js:241
msgid "Domain Tags"
msgstr "Tags du domaine"
-#: src/admin/AdminDomainModal.js:107
+#: src/admin/AdminDomainModal.js:126
msgid "Domain updated"
msgstr "Domaine mis à jour"
-#: src/admin/AdminDomains.js:414
-#: src/components/fields/DomainField.js:38
+#: src/admin/AdminDomains.js:417
+#: src/components/fields/DomainField.js:10
msgid "Domain URL"
msgstr "URL du domaine"
-#: src/utilities/fieldRequirements.js:31
+#: src/utilities/fieldRequirements.js:32
msgid "Domain url field must not be empty"
msgstr "Le champ de l'url du domaine ne doit pas être vide"
-#: src/components/fields/DomainField.js:37
+#: src/components/fields/DomainField.js:9
msgid "Domain URL:"
msgstr "URL du domaine:"
-#: src/domains/ScanDomain.js:211
+#: src/domains/ScanDomain.js:212
msgid "Domain:"
msgstr "Domaine:"
#: src/admin/AdminPanel.js:23
-#: src/app/App.js:134
-#: src/app/App.js:325
-#: src/app/FloatingMenu.js:116
-#: src/domains/DomainsPage.js:216
-#: src/domains/DomainsPage.js:282
+#: src/app/App.js:135
+#: src/app/App.js:326
+#: src/app/FloatingMenu.js:117
+#: src/domains/DomainsPage.js:218
+#: src/domains/DomainsPage.js:286
#: src/organizationDetails/OrganizationDetails.js:146
-#: src/organizationDetails/OrganizationDomains.js:140
+#: src/organizationDetails/OrganizationDomains.js:143
#: src/summaries/Doughnut.js:53
#: src/summaries/Doughnut.js:74
#: src/summaries/RadialBarChart.js:153
@@ -1559,7 +1636,7 @@ msgstr "Domaines"
msgid "Domains are only to be removed from your list when 1) they no longer exist, meaning they are deleted from the DNS returning an error code of NXDOMAIN (domain name does not exist); or 2) if you have identified that they do not belong to your organization."
msgstr "Les domaines ne peuvent être supprimés de votre liste que 1) s'ils n'existent plus, c'est-à-dire s'ils sont supprimés du DNS et renvoient un code d'erreur NXDOMAIN (le nom de domaine n'existe pas) ; ou 2) si vous avez constaté qu'ils n'appartiennent pas à votre organisation."
-#: src/domains/SubdomainDiscoveryButton.js:76
+#: src/domains/SubdomainDiscoveryButton.js:77
msgid "Domains found through this method will be automatically added to <0>{orgSlug}0> and tagged as \"NEW\". Would you like to proceed?"
msgstr "Les domaines trouvés grâce à cette méthode seront automatiquement ajoutés à <0>{orgSlug}0> et étiquetés comme \"NEW\". Souhaitez-vous poursuivre ?"
@@ -1567,24 +1644,24 @@ msgstr "Les domaines trouvés grâce à cette méthode seront automatiquement aj
#~ msgid "domains information"
#~ msgstr "Informations sur les domaines"
-#: src/admin/DomainUpdateList.js:70
-#: src/admin/DomainUpdateList.js:117
+#: src/admin/DomainUpdateList.js:71
+#: src/admin/DomainUpdateList.js:118
msgid "Domains updated."
msgstr "Domaines mis à jour."
-#: src/dmarc/DmarcReportPage.js:257
+#: src/dmarc/DmarcReportPage.js:258
msgid "Domains used for SPF validation."
msgstr "Domaines utilisés pour la validation SPF."
-#: src/auth/SignInPage.js:150
+#: src/auth/SignInPage.js:151
msgid "Don't have an account? <0>Sign up0>"
msgstr "Vous n'avez pas de compte ? <0>S'inscrire0>"
-#: src/app/NotificationBanner.js:125
+#: src/app/NotificationBanner.js:126
msgid "Don't show again"
msgstr "Ne plus montrer"
-#: src/components/ExportButton.js:101
+#: src/components/ExportButton.js:102
msgid "Download"
msgstr "Télécharger"
@@ -1592,62 +1669,62 @@ msgstr "Télécharger"
msgid "Each organization’s domain list should include every internet-facing service. It is the responsibility of organization admins to manage the current list and identify new domains to add."
msgstr "La liste des domaines de chaque organisation doit inclure tous les services en contact avec l'internet. Il incombe aux administrateurs de l'organisation de gérer la liste actuelle et d'identifier les nouveaux domaines à ajouter."
-#: src/user/EditableEmailUpdateOptions.js:128
-#: src/user/EditableUserDisplayName.js:109
-#: src/user/EditableUserEmail.js:91
-#: src/user/EditableUserPassword.js:112
-#: src/user/EditableUserPhoneNumber.js:284
+#: src/user/EditableEmailUpdateOptions.js:129
+#: src/user/EditableUserDisplayName.js:110
+#: src/user/EditableUserEmail.js:92
+#: src/user/EditableUserPassword.js:113
+#: src/user/EditableUserPhoneNumber.js:285
msgid "Edit"
msgstr "Edit"
-#: src/user/EditableUserDisplayName.js:142
+#: src/user/EditableUserDisplayName.js:143
msgid "Edit Display Name"
msgstr "Modifier le nom d'affichage"
-#: src/admin/AdminDomainModal.js:234
+#: src/admin/AdminDomainModal.js:258
msgid "Edit Domain Details"
msgstr "Modifier les détails d'un domaine"
-#: src/user/EditableUserEmail.js:119
+#: src/user/EditableUserEmail.js:120
msgid "Edit Email"
msgstr "Modifier l'e-mail"
-#: src/user/EditableEmailUpdateOptions.js:153
+#: src/user/EditableEmailUpdateOptions.js:154
msgid "Edit Email Update Preferences"
msgstr "Modifier les préférences de mise à jour des courriels"
-#: src/admin/OrganizationInformation.js:218
+#: src/admin/OrganizationInformation.js:219
msgid "Edit Organization"
msgstr "Organisation d'édition"
-#: src/user/EditableUserPhoneNumber.js:159
+#: src/user/EditableUserPhoneNumber.js:160
msgid "Edit Phone Number"
msgstr "Modifier le numéro de téléphone"
-#: src/admin/UserListModal.js:215
+#: src/admin/UserListModal.js:216
msgid "Edit User"
msgstr "Modifier l'utilisateur"
-#: src/admin/SuperAdminUserList.js:144
+#: src/admin/SuperAdminUserList.js:145
#: src/components/fields/EmailField.js:15
-#: src/domains/DomainCard.js:214
-#: src/organizationDetails/OrganizationAffiliations.js:56
-#: src/user/EditableUserTFAMethod.js:166
+#: src/domains/DomainCard.js:224
+#: src/organizationDetails/OrganizationAffiliations.js:57
+#: src/user/EditableUserTFAMethod.js:167
msgid "Email"
msgstr "Courriel"
-#: src/auth/ForgotPasswordPage.js:18
+#: src/auth/ForgotPasswordPage.js:19
#: src/utilities/fieldRequirements.js:11
#: src/utilities/fieldRequirements.js:14
msgid "Email cannot be empty"
msgstr "Le courriel ne peut être vide"
-#: src/domains/ScanDomain.js:245
-#: src/guidance/GuidancePage.js:293
+#: src/domains/ScanDomain.js:246
+#: src/guidance/GuidancePage.js:292
msgid "Email Guidance"
msgstr "Conseils par courriel"
-#: src/admin/UserListModal.js:62
+#: src/admin/UserListModal.js:63
msgid "Email invitation sent"
msgstr "Envoi d'une invitation par courriel"
@@ -1655,7 +1732,7 @@ msgstr "Envoi d'une invitation par courriel"
msgid "Email Management Services Configuration Requirements - Canada.ca"
msgstr "Exigences en matière de configuration des services de gestion des courriels"
-#: src/domains/ScanDomain.js:308
+#: src/domains/ScanDomain.js:309
msgid "Email Scan Results"
msgstr "Résultats de l'analyse des courriels"
@@ -1663,7 +1740,7 @@ msgstr "Résultats de l'analyse des courriels"
msgid "Email Security:"
msgstr "Sécurité du courrier électronique :"
-#: src/auth/ForgotPasswordPage.js:36
+#: src/auth/ForgotPasswordPage.js:37
msgid "Email Sent"
msgstr "Courriel envoyé"
@@ -1675,7 +1752,7 @@ msgstr "Courriel envoyé"
msgid "Email Summary"
msgstr "Résumé de l'e-mail"
-#: src/user/EditableEmailUpdateOptions.js:87
+#: src/user/EditableEmailUpdateOptions.js:88
msgid "Email Update Preferences:"
msgstr "Préférences de mise à jour du courrier électronique :"
@@ -1683,19 +1760,19 @@ msgstr "Préférences de mise à jour du courrier électronique :"
#~ msgid "Email Updates"
#~ msgstr "Mises à jour par courriel"
-#: src/user/EditableEmailUpdateOptions.js:50
+#: src/user/EditableEmailUpdateOptions.js:51
msgid "Email Updates status changed"
msgstr "Changement de statut des mises à jour par courrier électronique"
-#: src/user/EditableUserTFAMethod.js:111
+#: src/user/EditableUserTFAMethod.js:112
msgid "Email Validated"
msgstr "Courriel validé"
-#: src/app/App.js:382
+#: src/app/App.js:383
msgid "Email Verification"
msgstr "Vérification de l'e-mail"
-#: src/user/EditableUserEmail.js:49
+#: src/user/EditableUserEmail.js:50
msgid "Email Verification Sent"
msgstr "Envoi d'un courriel de vérification"
@@ -1704,7 +1781,7 @@ msgstr "Envoi d'un courriel de vérification"
#~ msgstr "d'hébergement d'emails"
#: src/components/fields/EmailField.js:12
-#: src/user/EditableUserEmail.js:83
+#: src/user/EditableUserEmail.js:84
msgid "Email:"
msgstr "Courrier électronique:"
@@ -1716,9 +1793,9 @@ msgstr "Résumé du point d'aboutissement"
msgid "Endpoint:"
msgstr "Point d'aboutissement :"
-#: src/domains/DomainListFilters.js:47
+#: src/domains/DomainListFilters.js:48
#: src/domains/FilterList.js:32
-#: src/guidance/DmarcPhaseStepper.js:40
+#: src/guidance/DmarcPhaseStepper.js:41
msgid "Enforce"
msgstr "Mettre en application"
@@ -1734,30 +1811,31 @@ msgstr "Mettre en application"
#~ msgid "Engage departmental IT planning groups for implementation as appropriate."
#~ msgstr "Engager les groupes de planification informatique des départements pour la mise en œuvre, le cas échéant."
-#: src/createOrganization/CreateOrganizationPage.js:140
-#: src/createOrganization/CreateOrganizationPage.js:143
-#: src/createOrganization/CreateOrganizationPage.js:146
-#: src/createOrganization/CreateOrganizationPage.js:149
-#: src/createOrganization/CreateOrganizationPage.js:152
+#: src/createOrganization/CreateOrganizationPage.js:115
+#: src/createOrganization/CreateOrganizationPage.js:118
msgid "English"
msgstr "Anglais"
+#: src/admin/CvdEnrollmentForm.js:109
+msgid "Enrolled"
+msgstr "Inscrit"
+
#. placeholder {0}: editUserRole.userName
#. placeholder {0}: org.name
-#: src/admin/OrganizationInformation.js:438
-#: src/admin/SuperAdminUserList.js:413
+#: src/admin/OrganizationInformation.js:439
+#: src/admin/SuperAdminUserList.js:414
msgid "Enter \"{0}\" below to confirm removal. This field is case-sensitive."
msgstr "Entrez \"{0}\" ci-dessous pour confirmer la suppression. Ce champ est sensible à la casse."
-#: src/user/UserPage.js:207
+#: src/user/UserPage.js:208
msgid "Enter \"{userName}\" below to confirm removal. This field is case-sensitive."
msgstr "Entrez \"{userName}\" ci-dessous pour confirmer la suppression. Ce champ est sensible à la casse."
-#: src/user/EditableUserPassword.js:165
+#: src/user/EditableUserPassword.js:166
msgid "Enter and confirm your new password below:"
msgstr "Entrez et confirmez votre nouveau mot de passe ci-dessous:"
-#: src/auth/ResetPasswordPage.js:100
+#: src/auth/ResetPasswordPage.js:101
msgid "Enter and confirm your new password."
msgstr "Entrez et confirmez votre nouveau mot de passe."
@@ -1765,7 +1843,7 @@ msgstr "Entrez et confirmez votre nouveau mot de passe."
#~ msgid "Enter two factor code"
#~ msgstr "Entrez le code à deux facteurs"
-#: src/auth/ForgotPasswordPage.js:67
+#: src/auth/ForgotPasswordPage.js:68
msgid "Enter your user account's verified email address and we will send you a password reset link."
msgstr "Saisissez l'adresse électronique vérifiée de votre compte d'utilisateur et nous vous enverrons un lien pour réinitialiser votre mot de passe."
@@ -1792,16 +1870,16 @@ msgstr "Saisissez l'adresse électronique vérifiée de votre compte d'utilisate
#~ msgid "Entrust Certificates issued after October 31, 2024 <0>will be distrusted0> in Chrome 127 and later versions. Immediate action is required to maintain user access. Failure to act may result in security warnings or access issues for Chromes users."
#~ msgstr "Les certificats Entrust émis après le 31 octobre 2024 <0>ne seront pas fiables0> dans Chrome 127 et les versions ultérieures. Une action immédiate est nécessaire pour maintenir l'accès des utilisateurs. L'absence d'action peut entraîner des avertissements de sécurité ou des problèmes d'accès pour les utilisateurs de Chrome."
-#: src/dmarc/DmarcReportPage.js:177
+#: src/dmarc/DmarcReportPage.js:178
msgid "Envelope From"
msgstr "Enveloppe De"
-#: src/admin/AdminDomains.js:253
-#: src/domains/DomainListFilters.js:149
+#: src/admin/AdminDomains.js:258
+#: src/domains/DomainListFilters.js:150
msgid "EQUALS"
msgstr "ÉGAUX"
-#: src/dmarc/DmarcReportPage.js:103
+#: src/dmarc/DmarcReportPage.js:104
msgid "Error while retrieving DMARC data for {domainSlug}. <0/>This could be due to insufficient user privileges or the domain does not exist in the system."
msgstr "Erreur lors de la récupération des données DMARC pour {domainSlug}. This could be due to insufficient user privileges or the Domain does not exist in the system. You can request access to an Organization below to view the Domain results"
#~ msgstr "Erreur lors de la récupération des données d'analyse pour {domainName}. <0/>Cela peut être dû à des privilèges d'utilisateur insuffisants ou au fait que le domaine n'existe pas dans le système. Vous pouvez demander l'accès à une organisation ci-dessous pour voir les résultats du domaine."
-#: src/guidance/WebConnectionResults.js:147
-#: src/guidance/WebConnectionResults.js:196
+#: src/guidance/WebConnectionResults.js:153
+#: src/guidance/WebConnectionResults.js:201
msgid "Eventually"
msgstr "Éventuellement"
-#: src/guidance/WebTLSResults.js:416
+#: src/guidance/WebTLSResults.js:417
msgid "Expired:"
msgstr "Expiré :"
-#: src/admin/AuditLogTable.js:88
+#: src/admin/AuditLogTable.js:89
msgid "Export"
msgstr "Exporter"
-#: src/dmarc/ExportRuaListButton.js:58
+#: src/dmarc/ExportRuaListButton.js:59
msgid "Export RUA List"
msgstr "Exporter la liste des RUA"
-#: src/domains/DomainsPage.js:208
+#: src/domains/DomainsPage.js:210
msgid "Export SPIN Top 25"
msgstr "Exporter les AMOPS 25 principales"
-#: src/components/ExportButton.js:21
+#: src/components/ExportButton.js:22
msgid "Export to CSV"
msgstr "Exportation vers CSV"
-#: src/admin/OrganizationInformation.js:473
+#: src/admin/OrganizationInformation.js:474
+#: src/createOrganization/CreateOrganizationPage.js:121
msgid "External ID"
msgstr "Identificación externa"
-#: src/admin/OrganizationInformation.js:390
+#: src/admin/OrganizationInformation.js:391
msgid "External ID:"
msgstr "Identificación externa :"
-#: src/dmarc/DmarcReportPage.js:141
#: src/dmarc/DmarcReportPage.js:142
-#: src/dmarc/DmarcReportSummaryGraph.js:184
-#: src/dmarc/DmarcReportSummaryGraph.js:381
-#: src/domains/DomainListFilters.js:39
+#: src/dmarc/DmarcReportPage.js:143
+#: src/dmarc/DmarcReportSummaryGraph.js:185
+#: src/dmarc/DmarcReportSummaryGraph.js:382
+#: src/domains/DomainListFilters.js:40
msgid "Fail"
msgstr "Échec"
-#: src/dmarc/DmarcReportPage.js:135
#: src/dmarc/DmarcReportPage.js:136
-#: src/dmarc/DmarcReportSummaryGraph.js:184
-#: src/dmarc/DmarcReportSummaryGraph.js:381
+#: src/dmarc/DmarcReportPage.js:137
+#: src/dmarc/DmarcReportSummaryGraph.js:185
+#: src/dmarc/DmarcReportSummaryGraph.js:382
msgid "Fail DKIM"
msgstr "Échec DKIM"
-#: src/dmarc/DmarcByDomainPage.js:143
-#: src/dmarc/DmarcByDomainPage.js:311
+#: src/dmarc/DmarcByDomainPage.js:144
+#: src/dmarc/DmarcByDomainPage.js:312
msgid "Fail DKIM %"
msgstr "Échec DKIM %"
-#: src/dmarc/DmarcReportPage.js:138
#: src/dmarc/DmarcReportPage.js:139
-#: src/dmarc/DmarcReportSummaryGraph.js:184
-#: src/dmarc/DmarcReportSummaryGraph.js:381
+#: src/dmarc/DmarcReportPage.js:140
+#: src/dmarc/DmarcReportSummaryGraph.js:185
+#: src/dmarc/DmarcReportSummaryGraph.js:382
msgid "Fail SPF"
msgstr "Échec du SPF"
-#: src/dmarc/DmarcByDomainPage.js:150
-#: src/dmarc/DmarcByDomainPage.js:307
+#: src/dmarc/DmarcByDomainPage.js:151
+#: src/dmarc/DmarcByDomainPage.js:308
msgid "Fail SPF %"
msgstr "Échec du SPF %"
-#: src/dmarc/DmarcReportPage.js:635
+#: src/dmarc/DmarcReportPage.js:636
msgid "Fake email domain blocks (reject + quarantine):"
msgstr "Blocs de domaines de faux e-mails (rejet + quarantaine) :"
@@ -1886,12 +1965,12 @@ msgstr "Blocs de domaines de faux e-mails (rejet + quarantaine) :"
#~ msgid "FAQ"
#~ msgstr "FAQ"
-#: src/domains/DomainCard.js:62
+#: src/domains/DomainCard.js:64
#: src/guidance/GuidancePage.js:118
msgid "Favourited Domain"
msgstr "Domaine favori"
-#: src/user/InsideUserSwitch.js:87
+#: src/user/InsideUserSwitch.js:88
msgid "Feature Preview"
msgstr "Aperçu des fonctionnalités"
@@ -1900,7 +1979,7 @@ msgstr "Aperçu des fonctionnalités"
msgid "February"
msgstr "Février"
-#: src/components/ExportButton.js:84
+#: src/components/ExportButton.js:85
msgid "File name:"
msgstr "Nom du fichier :"
@@ -1908,7 +1987,7 @@ msgstr "Nom du fichier :"
msgid "Filter list to affiliated resources only."
msgstr "Filtrer la liste aux ressources affiliées uniquement."
-#: src/organizations/Organizations.js:234
+#: src/organizations/Organizations.js:235
msgid "Filter list to verified organizations only."
msgstr "Filtrer la liste aux seules organisations vérifiées."
@@ -1928,7 +2007,7 @@ msgstr "Filtrer la liste pour n'afficher que les organisations vérifiées."
msgid "Filter the list to show your affiliated organizations."
msgstr "Filtrez la liste pour afficher vos organisations affiliées."
-#: src/guidance/AdditionalFindings.js:387
+#: src/guidance/AdditionalFindings.js:388
msgid "Filtered"
msgstr "Filtré"
@@ -1936,11 +2015,11 @@ msgstr "Filtré"
#~ msgid "Filters"
#~ msgstr "Filtres"
-#: src/admin/AdminDomains.js:221
-#: src/dmarc/DmarcByDomainPage.js:270
-#: src/domains/DomainsPage.js:345
-#: src/organizationDetails/OrganizationDomains.js:304
-#: src/organizations/Organizations.js:232
+#: src/admin/AdminDomains.js:226
+#: src/dmarc/DmarcByDomainPage.js:271
+#: src/domains/DomainsPage.js:349
+#: src/organizationDetails/OrganizationDomains.js:309
+#: src/organizations/Organizations.js:233
msgid "Filters:"
msgstr "Filtres :"
@@ -1948,18 +2027,18 @@ msgstr "Filtres :"
msgid "Find domains that potentially belong to your organization."
msgstr "Trouvez des domaines qui pourraient appartenir à votre organisation."
-#: src/userOnboarding/components/TourComponent.js:109
+#: src/userOnboarding/components/TourComponent.js:110
msgid "Finish"
msgstr "Terminer"
#. placeholder {0}: formatTimestamp(webComponentFirstSeen)
#. placeholder {0}: formatTimestamp(ddosProtectionComponent.webComponentFirstSeen)
#. placeholder {0}: formatTimestamp(cdnComponent.webComponentFirstSeen)
-#: src/guidance/AdditionalFindings.js:216
-#: src/guidance/AdditionalFindings.js:280
-#: src/guidance/AdditionalFindings.js:313
-#: src/guidance/AdditionalFindings.js:355
-#: src/guidance/AdditionalFindings.js:397
+#: src/guidance/AdditionalFindings.js:217
+#: src/guidance/AdditionalFindings.js:281
+#: src/guidance/AdditionalFindings.js:314
+#: src/guidance/AdditionalFindings.js:356
+#: src/guidance/AdditionalFindings.js:398
msgid "First Seen: {0}"
msgstr "Première vue : {0}"
@@ -1983,19 +2062,19 @@ msgstr "Pour plus de détails concernant les termes relatifs à la vie privée,
#~ msgid "For in-depth implementation guidance:"
#~ msgstr "Pour des conseils approfondis sur la mise en œuvre:"
-#: src/guidance/DmarcPhaseStepper.js:103
+#: src/guidance/DmarcPhaseStepper.js:104
msgid "For more detailed steps, please see the <0>CCCS implementation guidance0>."
msgstr "Pour plus de détails, veuillez consulter le <0>directives de mise en œuvre du CCC0>."
-#: src/user/EditableEmailUpdateOptions.js:160
+#: src/user/EditableEmailUpdateOptions.js:161
msgid "For organization admins interested in receiving email updates on new activity in their organizations."
msgstr "Pour les administrateurs d'organisations qui souhaitent recevoir des mises à jour par courrier électronique sur les nouvelles activités de leur organisation."
-#: src/user/EditableEmailUpdateOptions.js:202
+#: src/user/EditableEmailUpdateOptions.js:203
msgid "For organization admins interested in receiving email updates on new changes to their organization's compliance statuses."
msgstr "Pour les administrateurs d’organisation qui souhaitent recevoir des mises à jour par courriel sur les nouveaux changements apportés aux statuts de conformité de leur organisation."
-#: src/user/EditableEmailUpdateOptions.js:181
+#: src/user/EditableEmailUpdateOptions.js:182
msgid "For organization admins interested in receiving monthly email updates how their organization is progressing to 100% compliance."
msgstr "Pour les administrateurs d'organisations qui souhaitent recevoir des mises à jour mensuelles par courrier électronique sur la progression de leur organisation vers une conformité à 100 %."
@@ -2007,28 +2086,25 @@ msgstr "Pour toute question ou problème lié aux données d'analyse, à la list
#~ msgid "For technical implementation guidance:"
#~ msgstr "Pour des conseils de mise en œuvre technique:"
-#: src/user/InsideUserSwitch.js:69
+#: src/user/InsideUserSwitch.js:70
msgid "For users interested in using new features that are still in progress."
msgstr "Pour les utilisateurs intéressés par l'utilisation de nouvelles fonctionnalités qui sont encore en cours de développement."
-#: src/app/App.js:244
-#: src/auth/ForgotPasswordPage.js:62
+#: src/app/App.js:245
+#: src/auth/ForgotPasswordPage.js:63
msgid "Forgot Password"
msgstr "Mot de passe oublié"
-#: src/auth/SignInPage.js:140
+#: src/auth/SignInPage.js:141
msgid "Forgot your password?"
msgstr "Oublié votre mot de passe?"
-#: src/guidance/AdditionalFindings.js:191
+#: src/guidance/AdditionalFindings.js:192
msgid "Frameworks"
msgstr "Cadres"
-#: src/createOrganization/CreateOrganizationPage.js:141
-#: src/createOrganization/CreateOrganizationPage.js:144
-#: src/createOrganization/CreateOrganizationPage.js:147
-#: src/createOrganization/CreateOrganizationPage.js:150
-#: src/createOrganization/CreateOrganizationPage.js:153
+#: src/createOrganization/CreateOrganizationPage.js:116
+#: src/createOrganization/CreateOrganizationPage.js:119
msgid "French"
msgstr "Français"
@@ -2036,27 +2112,27 @@ msgstr "Français"
msgid "Frequently Asked Questions"
msgstr "Foire aux questions"
-#: src/dmarc/DmarcByDomainPage.js:157
-#: src/dmarc/DmarcByDomainPage.js:315
+#: src/dmarc/DmarcByDomainPage.js:158
+#: src/dmarc/DmarcByDomainPage.js:316
msgid "Full Fail %"
msgstr "Échec total %"
-#: src/dmarc/DmarcByDomainPage.js:136
-#: src/dmarc/DmarcByDomainPage.js:303
+#: src/dmarc/DmarcByDomainPage.js:137
+#: src/dmarc/DmarcByDomainPage.js:304
msgid "Full Pass %"
msgstr "Passage complet %"
-#: src/dmarc/DmarcReportPage.js:407
-#: src/dmarc/DmarcReportPage.js:436
-#: src/dmarc/DmarcReportPage.js:627
+#: src/dmarc/DmarcReportPage.js:408
+#: src/dmarc/DmarcReportPage.js:437
+#: src/dmarc/DmarcReportPage.js:628
msgid "Fully Aligned by IP Address"
msgstr "Entièrement aligné par adresse IP"
-#: src/dmarc/DmarcReportPage.js:399
+#: src/dmarc/DmarcReportPage.js:400
msgid "Fully Aligned Table"
msgstr "Tableau entièrement aligné"
-#: src/organizations/Organizations.js:205
+#: src/organizations/Organizations.js:206
msgid "Further details for each organization can be found by clicking on its row."
msgstr "Vous trouverez de plus amples informations sur chaque organisation en cliquant sur sa ligne."
@@ -2068,8 +2144,8 @@ msgstr "Vous trouverez de plus amples informations sur chaque organisation en cl
msgid "Getting an Account:"
msgstr "Ouverture d'un compte :"
-#: src/dmarc/ExportRuaListButton.js:14
-#: src/domains/DomainsPage.js:153
+#: src/dmarc/ExportRuaListButton.js:15
+#: src/domains/DomainsPage.js:155
msgid "Getting domain statuses"
msgstr "Obtenir les statuts des domaines"
@@ -2081,21 +2157,21 @@ msgstr "Pour commencer"
#~ msgid "Getting Started Using Tracker"
#~ msgstr "Premiers pas dans l'utilisation de Suivi"
-#: src/domains/DomainsPage.js:183
+#: src/domains/DomainsPage.js:185
msgid "Getting top 25 report"
msgstr "Obtenir un rapport sur les 25 principales"
-#: src/admin/DomainTagsList.js:50
-#: src/admin/TagForm.js:268
-#: src/summaries/HistoricalSummariesGraph.js:238
+#: src/admin/DomainTagsList.js:51
+#: src/admin/TagForm.js:269
+#: src/summaries/HistoricalSummariesGraph.js:239
msgid "Global"
msgstr "Mondial"
-#: src/components/InfoPanel.js:19
+#: src/components/InfoPanel.js:20
msgid "Glossary"
msgstr "Glossaire"
-#: src/components/TrackerTable.js:255
+#: src/components/TrackerTable.js:254
msgid "Go to page:"
msgstr "Aller à la page"
@@ -2107,13 +2183,13 @@ msgstr "Aller à la page"
msgid "Government of Canada Employees"
msgstr "Employés du gouvernement du Canada"
-#: src/dmarc/DmarcReportSummaryGraph.js:101
+#: src/dmarc/DmarcReportSummaryGraph.js:102
msgid "Graph direction:"
msgstr "Direction du graphique :"
-#: src/app/App.js:435
-#: src/dmarc/DmarcReportPage.js:206
-#: src/dmarc/DmarcReportPage.js:660
+#: src/app/App.js:436
+#: src/dmarc/DmarcReportPage.js:207
+#: src/dmarc/DmarcReportPage.js:661
msgid "Guidance"
msgstr "Orientation"
@@ -2130,11 +2206,11 @@ msgstr "Résultats de l'orientation"
#~ msgid "Guidance:"
#~ msgstr "Orientation:"
-#: src/guidance/WebTLSResults.js:431
+#: src/guidance/WebTLSResults.js:432
msgid "Hash Algorithm:"
msgstr "Algorithme de hachage :"
-#: src/dmarc/DmarcReportPage.js:201
+#: src/dmarc/DmarcReportPage.js:202
msgid "Header From"
msgstr "En-tête De"
@@ -2142,7 +2218,7 @@ msgstr "En-tête De"
#~ msgid "Heartbleed Vulnerability:"
#~ msgstr "Vulnérabilité Heartbleed:"
-#: src/guidance/WebTLSResults.js:212
+#: src/guidance/WebTLSResults.js:213
msgid "Heartbleed Vulnerable"
msgstr "Vulnérabilité Heartbleed"
@@ -2166,7 +2242,7 @@ msgstr "Vulnérabilité Heartbleed"
#~ msgid "Here you can filter the list of organizations to only show verified organizations"
#~ msgstr "Vous pouvez filtrer la liste des organisations pour n'afficher que les organisations vérifiées."
-#: src/admin/AdminPage.js:133
+#: src/admin/AdminPage.js:134
msgid "here."
msgstr "ici."
@@ -2190,31 +2266,35 @@ msgstr "ici."
msgid "Hide password"
msgstr "Cacher le mot de passe"
-#: src/guidance/AdditionalFindings.js:33
-#: src/guidance/IgnoredCves.js:8
+#: src/admin/CvdEnrollmentForm.js:164
+#: src/admin/CvdEnrollmentForm.js:195
+#: src/admin/CvdEnrollmentForm.js:223
+#: src/admin/CvdEnrollmentForm.js:251
+#: src/guidance/AdditionalFindings.js:34
+#: src/guidance/IgnoredCves.js:9
msgid "High"
msgstr "Haut"
-#: src/app/App.js:114
-#: src/app/App.js:213
-#: src/app/FloatingMenu.js:175
+#: src/app/App.js:115
+#: src/app/App.js:214
+#: src/app/FloatingMenu.js:176
msgid "Home"
msgstr "Accueil"
-#: src/dmarc/DmarcReportSummaryGraph.js:109
+#: src/dmarc/DmarcReportSummaryGraph.js:110
msgid "Horizontal View"
msgstr "Vue horizontale"
-#: src/dmarc/DmarcReportPage.js:253
+#: src/dmarc/DmarcReportPage.js:254
msgid "Host from reverse DNS of source IP address."
msgstr "Hôte du DNS inversé de l'adresse IP source."
-#: src/guidance/WebTLSResults.js:271
+#: src/guidance/WebTLSResults.js:272
msgid "Hostname Matches"
msgstr "Correspondance des noms d'hôtes"
#. placeholder {0}: badHostname ? t`No` : t`Yes`
-#: src/guidance/WebTLSResults.js:447
+#: src/guidance/WebTLSResults.js:448
msgid "Hostname Matches: {0}"
msgstr "Le nom d'hôte correspond : {0}"
@@ -2226,9 +2306,9 @@ msgstr "Le nom d'hôte correspond : {0}"
msgid "How can I edit my domain list?"
msgstr "Comment puis-je modifier ma liste de domaines?"
-#: src/domains/DomainCard.js:205
-#: src/domains/DomainsPage.js:294
-#: src/organizationDetails/OrganizationDomains.js:231
+#: src/domains/DomainCard.js:215
+#: src/domains/DomainsPage.js:298
+#: src/organizationDetails/OrganizationDomains.js:236
msgid "HSTS"
msgstr "HSTS"
@@ -2236,24 +2316,24 @@ msgstr "HSTS"
#~ msgid "HSTS Age:"
#~ msgstr "Âge du HSTS:"
-#: src/guidance/WebConnectionResults.js:230
+#: src/guidance/WebConnectionResults.js:225
msgid "HSTS Includes Subdomains"
msgstr "HSTS inclut les sous-domaines"
-#: src/guidance/WebConnectionResults.js:212
+#: src/guidance/WebConnectionResults.js:213
msgid "HSTS Max Age"
msgstr "HSTS Âge maximum"
-#: src/guidance/WebConnectionResults.js:203
+#: src/guidance/WebConnectionResults.js:207
msgid "HSTS Parsed"
msgstr "HSTS analysé"
-#: src/guidance/WebConnectionResults.js:221
+#: src/guidance/WebConnectionResults.js:219
msgid "HSTS Preloaded"
msgstr "HSTS préchargé"
-#: src/domains/DomainsPage.js:126
-#: src/organizationDetails/OrganizationDomains.js:100
+#: src/domains/DomainsPage.js:128
+#: src/organizationDetails/OrganizationDomains.js:101
msgid "HSTS Status"
msgstr "Statut HSTS"
@@ -2261,25 +2341,25 @@ msgstr "Statut HSTS"
#~ msgid "HSTS Status:"
#~ msgstr "Statut HSTS:"
-#: src/guidance/WebConnectionResults.js:117
+#: src/guidance/WebConnectionResults.js:131
msgid "HTTP (80) Chain"
msgstr "Chaîne HTTP (80)"
-#: src/guidance/WebConnectionResults.js:127
+#: src/guidance/WebConnectionResults.js:141
msgid "HTTP Live"
msgstr "HTTP Live"
-#: src/guidance/WebConnectionResults.js:138
+#: src/guidance/WebConnectionResults.js:147
msgid "HTTP Upgrades"
msgstr "Mises à jour HTTP"
-#: src/domains/DomainCard.js:204
-#: src/domains/DomainsPage.js:291
-#: src/organizationDetails/OrganizationDomains.js:228
+#: src/domains/DomainCard.js:214
+#: src/domains/DomainsPage.js:295
+#: src/organizationDetails/OrganizationDomains.js:233
msgid "HTTPS"
msgstr "HTTPS"
-#: src/guidance/WebConnectionResults.js:163
+#: src/guidance/WebConnectionResults.js:171
msgid "HTTPS (443) Chain"
msgstr "Chaîne HTTPS (443)"
@@ -2292,11 +2372,11 @@ msgid "HTTPS Configuration Summary"
msgstr "Résumé de la configuration HTTPS"
#: src/organizations/OrganizationCard.js:94
-#: src/organizations/Organizations.js:197
+#: src/organizations/Organizations.js:198
msgid "HTTPS Configured"
msgstr "HTTPS configuré"
-#: src/guidance/WebConnectionResults.js:192
+#: src/guidance/WebConnectionResults.js:197
msgid "HTTPS Downgrades"
msgstr "Déclassements HTTPS"
@@ -2312,7 +2392,7 @@ msgstr "HTTPS est configuré et les connexions HTTP sont redirigées vers HTTPS.
msgid "HTTPS is configured, HTTP redirects, and HSTS is enabled"
msgstr "HTTPS est configuré, les redirections HTTP et HSTS sont activés."
-#: src/guidance/WebConnectionResults.js:173
+#: src/guidance/WebConnectionResults.js:181
msgid "HTTPS Live"
msgstr "HTTPS Live"
@@ -2325,8 +2405,8 @@ msgstr "Scan HTTPS terminé"
msgid "HTTPS scan for domain \"{0}\" has completed."
msgstr "L'analyse HTTPS du domaine \"{0}\" est terminée."
-#: src/domains/DomainsPage.js:125
-#: src/organizationDetails/OrganizationDomains.js:99
+#: src/domains/DomainsPage.js:127
+#: src/organizationDetails/OrganizationDomains.js:100
msgid "HTTPS Status"
msgstr "Statut HTTPS"
@@ -2334,17 +2414,17 @@ msgstr "Statut HTTPS"
#~ msgid "https://https-everywhere.canada.ca/en/help/"
#~ msgstr "https://https-everywhere.canada.ca/en/help/"
-#: src/auth/CreateUserPage.js:130
+#: src/auth/CreateUserPage.js:131
msgid "I agree to all <0>Terms, Privacy Policy & Code of Conduct Guidelines <1/>0>"
msgstr "J'accepte toutes les <0>Conditions générales, la politique de confidentialité et les directives du code de conduite<1/>0>."
-#: src/domains/ScanDomain.js:120
-#: src/guidance/DmarcPhaseStepper.js:33
+#: src/domains/ScanDomain.js:121
+#: src/guidance/DmarcPhaseStepper.js:34
msgid "Identify all authorized senders;"
msgstr "Déterminer tous les expéditeurs autorisés."
-#: src/domains/ScanDomain.js:114
-#: src/guidance/DmarcPhaseStepper.js:24
+#: src/domains/ScanDomain.js:115
+#: src/guidance/DmarcPhaseStepper.js:25
msgid "Identify all domains and subdomains used to send mail;"
msgstr "Déterminer tous les domaines et sous-domaines utilisés pour envoyer des courriels."
@@ -2376,7 +2456,7 @@ msgstr "Si, à tout moment, vous ou vos représentants souhaitez ajuster ou annu
#~ msgid "If at any time you or your representatives wish to adjust or cancel these services, please contact us at"
#~ msgstr "Si, à tout moment, vous ou vos représentants souhaitez adapter ou annuler ces services, veuillez nous contacter à l'adresse suivante"
-#: src/user/EditableUserPhoneNumber.js:165
+#: src/user/EditableUserPhoneNumber.js:166
msgid "If available, please use a managed device provided by your organization."
msgstr "Si disponible, veuillez utiliser un dispositif géré fourni par votre organisation."
@@ -2400,15 +2480,15 @@ msgstr "Si vous pensez que cela a été causé par un problème avec Tracker, ve
msgid "If your organization has no affiliated users within Tracker, contact the <0>TBS Cyber Security0> to assist in onboarding."
msgstr "Si votre organisation n'a pas d'utilisateurs affiliés à Suivi, contactez l’<0>équipe responsable de la cybersécurité du SCT0> pour vous aider à l'intégrer."
-#: src/guidance/CveIgnorer.js:116
+#: src/guidance/CveIgnorer.js:117
msgid "Ignore CVE"
msgstr "Ignorer le CVE"
-#: src/admin/AdminDomainModal.js:382
+#: src/admin/AdminDomainModal.js:413
msgid "Ignore RUA"
msgstr "Ignorer la RUA"
-#: src/guidance/AdditionalFindings.js:137
+#: src/guidance/AdditionalFindings.js:138
msgid "Ignored"
msgstr "Ignoré"
@@ -2416,8 +2496,8 @@ msgstr "Ignoré"
#~ msgid "Ignored CVEs:"
#~ msgstr "CVE ignorés :"
-#: src/guidance/WebConnectionResults.js:145
-#: src/guidance/WebConnectionResults.js:196
+#: src/guidance/WebConnectionResults.js:151
+#: src/guidance/WebConnectionResults.js:199
msgid "Immediately"
msgstr "Immédiatement"
@@ -2450,14 +2530,14 @@ msgstr "Mis en œuvre"
#~ msgid "Important Notice:"
#~ msgstr "Avis important :"
-#: src/guidance/AdditionalFindings.js:116
+#: src/guidance/AdditionalFindings.js:117
msgid "Improving GC Cyber Security Health SPIN"
msgstr "Renforcement de la cybersécurité au gouvernement du Canada AMOPS"
#~ msgid "Inactive"
#~ msgstr "Inactif"
-#: src/organizationDetails/OrganizationDomains.js:252
+#: src/organizationDetails/OrganizationDomains.js:257
msgid "INACTIVE"
msgstr "INACTIF"
@@ -2468,36 +2548,36 @@ msgstr "INACTIF"
#~ msgid "Include hidden domains in summaries."
#~ msgstr "Inclure les domaines cachés dans les résumés."
-#: src/auth/TwoFactorAuthenticatePage.js:76
+#: src/auth/TwoFactorAuthenticatePage.js:77
msgid "Incorrect authenticate.result typename."
msgstr "Incorrect authenticate.result typename."
-#: src/admin/SuperAdminUserList.js:107
-#: src/user/UserPage.js:83
+#: src/admin/SuperAdminUserList.js:108
+#: src/user/UserPage.js:84
msgid "Incorrect closeAccount.result typename."
msgstr "Incorrect closeAccount.result typename."
-#: src/admin/AdminDomainModal.js:80
+#: src/admin/AdminDomainModal.js:99
msgid "Incorrect createDomain.result typename."
msgstr "Incorrect createDomain.result typename."
-#: src/createOrganization/CreateOrganizationPage.js:73
+#: src/createOrganization/CreateOrganizationPage.js:68
msgid "Incorrect createOrganization.result typename."
msgstr "createOrganization.result incorrecte typename."
-#: src/app/NotificationBanner.js:60
+#: src/app/NotificationBanner.js:61
msgid "Incorrect dismiss method received."
msgstr "Méthode de renvoi incorrecte reçue."
-#: src/app/NotificationBanner.js:61
+#: src/app/NotificationBanner.js:62
msgid "Incorrect dismissMessage.result typename."
msgstr "Type de message dismissMessage.result incorrect."
-#: src/guidance/CveIgnorer.js:53
+#: src/guidance/CveIgnorer.js:54
msgid "Incorrect ignoreCve.result typename."
msgstr "Incorrect ignoreCve.result typename."
-#: src/admin/UserListModal.js:81
+#: src/admin/UserListModal.js:82
msgid "Incorrect inviteUserToOrg.result typename."
msgstr "Incorrect inviteUserToOrg.result typename."
@@ -2506,101 +2586,101 @@ msgstr "Incorrect inviteUserToOrg.result typename."
#~ msgid "Incorrect leaveOrganization.result typename."
#~ msgstr "Incorrect leaveOrganization.result typename."
-#: src/admin/AdminDomains.js:163
+#: src/admin/AdminDomains.js:165
msgid "Incorrect removeDomain.result typename."
msgstr "Incorrect removeDomain.result typename."
-#: src/admin/OrganizationInformation.js:85
+#: src/admin/OrganizationInformation.js:86
msgid "Incorrect removeOrganization.result typename."
msgstr "Incorrect removeOrganization.result typename."
-#: src/auth/ResetPasswordPage.js:61
+#: src/auth/ResetPasswordPage.js:62
msgid "Incorrect resetPassword.result typename."
msgstr "Incorrect resetPassword.result typename."
-#: src/admin/AdminDomainModal.js:79
-#: src/admin/AdminDomainModal.js:127
-#: src/admin/AdminDomains.js:162
-#: src/admin/DomainUpdateList.js:88
-#: src/admin/DomainUpdateList.js:135
-#: src/admin/SuperAdminUserList.js:106
-#: src/admin/TagForm.js:56
-#: src/admin/TagForm.js:102
-#: src/admin/UserListModal.js:80
-#: src/admin/UserListModal.js:125
-#: src/auth/CreateUserPage.js:61
-#: src/auth/ResetPasswordPage.js:60
-#: src/auth/SignInPage.js:85
-#: src/auth/TwoFactorAuthenticatePage.js:75
-#: src/createOrganization/CreateOrganizationPage.js:72
-#: src/guidance/CveIgnorer.js:52
-#: src/guidance/CveIgnorer.js:101
-#: src/user/EditableUserDisplayName.js:72
-#: src/user/EditableUserEmail.js:68
-#: src/user/EditableUserPassword.js:75
-#: src/user/EditableUserPhoneNumber.js:67
-#: src/user/EditableUserPhoneNumber.js:118
-#: src/user/EditableUserTFAMethod.js:76
-#: src/user/UserPage.js:82
+#: src/admin/AdminDomainModal.js:98
+#: src/admin/AdminDomainModal.js:144
+#: src/admin/AdminDomains.js:164
+#: src/admin/DomainUpdateList.js:89
+#: src/admin/DomainUpdateList.js:136
+#: src/admin/SuperAdminUserList.js:107
+#: src/admin/TagForm.js:57
+#: src/admin/TagForm.js:103
+#: src/admin/UserListModal.js:81
+#: src/admin/UserListModal.js:126
+#: src/auth/CreateUserPage.js:62
+#: src/auth/ResetPasswordPage.js:61
+#: src/auth/SignInPage.js:86
+#: src/auth/TwoFactorAuthenticatePage.js:76
+#: src/createOrganization/CreateOrganizationPage.js:67
+#: src/guidance/CveIgnorer.js:53
+#: src/guidance/CveIgnorer.js:102
+#: src/user/EditableUserDisplayName.js:73
+#: src/user/EditableUserEmail.js:69
+#: src/user/EditableUserPassword.js:76
+#: src/user/EditableUserPhoneNumber.js:68
+#: src/user/EditableUserPhoneNumber.js:119
+#: src/user/EditableUserTFAMethod.js:77
+#: src/user/UserPage.js:83
msgid "Incorrect send method received."
msgstr "Méthode d'envoi incorrecte reçue."
-#: src/user/EditableUserPhoneNumber.js:68
+#: src/user/EditableUserPhoneNumber.js:69
msgid "Incorrect setPhoneNumber.result typename."
msgstr "Incorrect setPhoneNumber.result typename."
-#: src/auth/SignInPage.js:86
+#: src/auth/SignInPage.js:87
msgid "Incorrect signIn.result typename."
msgstr "Nom d'utilisateur incorrect signIn.result."
-#: src/auth/CreateUserPage.js:62
+#: src/auth/CreateUserPage.js:63
msgid "Incorrect signUp.result typename."
msgstr "Incorrect signUp.result typename."
-#: src/admin/OrganizationInformation.js:84
-#: src/admin/OrganizationInformation.js:147
+#: src/admin/OrganizationInformation.js:85
+#: src/admin/OrganizationInformation.js:148
msgid "Incorrect typename received."
msgstr "Incorrect typename received."
-#: src/guidance/CveIgnorer.js:102
+#: src/guidance/CveIgnorer.js:103
msgid "Incorrect unignoreCve.result typename."
msgstr "Incorrect unignoreCve.result typename."
-#: src/user/EditableEmailUpdateOptions.js:72
-#: src/user/InsideUserSwitch.js:54
+#: src/user/EditableEmailUpdateOptions.js:73
+#: src/user/InsideUserSwitch.js:55
msgid "Incorrect update method received."
msgstr "Méthode de mise à jour incorrecte reçue."
-#: src/admin/AdminDomainModal.js:128
+#: src/admin/AdminDomainModal.js:145
msgid "Incorrect updateDomain.result typename."
msgstr "Incorrect updateDomain.result typename."
-#: src/admin/DomainUpdateList.js:89
-#: src/admin/DomainUpdateList.js:136
+#: src/admin/DomainUpdateList.js:90
+#: src/admin/DomainUpdateList.js:137
msgid "Incorrect updateDomainsByDomainIds.result typename."
msgstr "Incorrect updateDomainsByDomainIds.result typename."
-#: src/admin/OrganizationInformation.js:148
+#: src/admin/OrganizationInformation.js:149
msgid "Incorrect updateOrganization.result typename."
msgstr "Incorrect updateOrganization.result typename."
-#: src/user/EditableUserPassword.js:76
+#: src/user/EditableUserPassword.js:77
msgid "Incorrect updateUserPassword.result typename."
msgstr "Incorrect updateUserPassword.result typename."
-#: src/user/EditableEmailUpdateOptions.js:73
-#: src/user/EditableUserDisplayName.js:73
-#: src/user/EditableUserEmail.js:69
-#: src/user/EditableUserTFAMethod.js:77
-#: src/user/InsideUserSwitch.js:55
+#: src/user/EditableEmailUpdateOptions.js:74
+#: src/user/EditableUserDisplayName.js:74
+#: src/user/EditableUserEmail.js:70
+#: src/user/EditableUserTFAMethod.js:78
+#: src/user/InsideUserSwitch.js:56
msgid "Incorrect updateUserProfile.result typename."
msgstr "Incorrect updateUserProfile.result typename."
-#: src/admin/UserListModal.js:126
+#: src/admin/UserListModal.js:127
msgid "Incorrect updateUserRole.result typename."
msgstr "Incorrect updateUserRole.result typename."
-#: src/user/EditableUserPhoneNumber.js:119
+#: src/user/EditableUserPhoneNumber.js:120
msgid "Incorrect verifyPhoneNumber.result typename."
msgstr "Une erreur s'est produite lors de la vérification de votre numéro de téléphone."
@@ -2620,7 +2700,7 @@ msgstr "Les personnes d'un groupe ministériel de technologie de l'information p
#~ msgid "Individuals with questions about the accuracy of their domain’s compliance data may contact the TBS Cyber Security mailbox."
#~ msgstr "Les personnes ayant des questions sur l'exactitude des données de conformité de leur domaine peuvent contacter la boîte aux lettres de la cybersécurité du SCT."
-#: src/domains/DomainListFilters.js:38
+#: src/domains/DomainListFilters.js:39
msgid "Info"
msgstr "Info"
@@ -2633,25 +2713,25 @@ msgid "Information shared with TBS, or acquired via systems hosted by TBS, may b
msgstr "Les renseignements partagés avec le SCT ou acquis par l'entremise de systèmes hébergés par le SCT peuvent faire l'objet d'une divulgation publique en vertu de la Loi sur la protection des renseignements personnels."
#: src/guidance/GuidanceSummaryCategories.js:28
-#: src/guidance/GuidanceTagDetails.js:20
+#: src/guidance/GuidanceTagDetails.js:21
msgid "Informative"
msgstr "Informatif"
-#: src/guidance/GuidanceTagDetails.js:102
+#: src/guidance/GuidanceTagDetails.js:103
msgid "Informative tags highlight relevant configuration details, but are not addressed within policy requirements and have no impact on scoring."
msgstr "Les balises informatives mettent en évidence des détails de configuration pertinents, mais ne sont pas traitées dans le cadre des exigences de la politique et n'ont aucun impact sur la notation."
-#: src/admin/AuditLogTable.js:72
-#: src/admin/AuditLogTable.js:115
+#: src/admin/AuditLogTable.js:73
+#: src/admin/AuditLogTable.js:116
msgid "Initiated By"
msgstr "Initiée par"
-#: src/admin/SuperAdminUserList.js:147
-#: src/admin/SuperAdminUserList.js:317
+#: src/admin/SuperAdminUserList.js:148
+#: src/admin/SuperAdminUserList.js:318
msgid "Inside User"
msgstr "Utilisateur interne"
-#: src/user/InsideUserSwitch.js:30
+#: src/user/InsideUserSwitch.js:31
msgid "Inside user status changed"
msgstr "Changement du statut d'utilisateur interne"
@@ -2664,6 +2744,10 @@ msgstr "Changement du statut d'utilisateur interne"
#~ msgid "Insider status changed"
#~ msgstr "Changement de statut d'initié"
+#: src/admin/CvdEnrollmentForm.js:203
+msgid "Integrity Requirement"
+msgstr "Exigence d'intégrité"
+
#: src/termsConditions/TermsConditionsPage.js:132
msgid "Intellectual Property, Copyright and Trademarks"
msgstr "Propriété intellectuelle, droits d'auteur et marques de commerce"
@@ -2680,32 +2764,32 @@ msgstr "Propriété intellectuelle, droits d'auteur et marques de commerce"
msgid "Internet-facing"
msgstr "orientés vers l'Internet"
-#: src/auth/ForgotPasswordPage.js:19
+#: src/auth/ForgotPasswordPage.js:20
#: src/utilities/fieldRequirements.js:12
msgid "Invalid email"
msgstr "Courriel non valide"
-#: src/organizations/RequestOrgInviteModal.js:36
+#: src/organizations/RequestOrgInviteModal.js:37
msgid "Invite Requested"
msgstr "Invitation demandée"
-#: src/admin/UserList.js:169
+#: src/admin/UserList.js:164
msgid "Invite User"
msgstr "Inviter l'utilisateur"
-#: src/dmarc/DmarcReportPage.js:277
+#: src/dmarc/DmarcReportPage.js:278
msgid "Is DKIM aligned. Can be true or false."
msgstr "Est aligné sur la norme DKIM. Peut être vrai ou faux."
-#: src/dmarc/DmarcReportPage.js:269
+#: src/dmarc/DmarcReportPage.js:270
msgid "Is SPF aligned. Can be true or false."
msgstr "Est aligné sur le SPF. Peut être vrai ou faux."
-#: src/admin/AdminPage.js:138
+#: src/admin/AdminPage.js:139
msgid "Is your organization not using Tracker yet?"
msgstr "Votre organisation n'utilise pas encore Tracker ?"
-#: src/guidance/WebTLSResults.js:419
+#: src/guidance/WebTLSResults.js:420
msgid "Issuer:"
msgstr "Émetteur :"
@@ -2725,7 +2809,7 @@ msgstr "On recommande aux partenaires de Services partagés Canada (SPC) de comm
msgid "Items per page:"
msgstr "Objets par page:"
-#: src/components/TrackerTable.js:283
+#: src/components/TrackerTable.js:282
msgid "Items per page: "
msgstr "Objets par page: "
@@ -2735,7 +2819,7 @@ msgstr "Objets par page: "
#~ msgid "ITPIN"
#~ msgstr "ITPIN"
-#: src/domains/ScanDomain.js:269
+#: src/domains/ScanDomain.js:270
msgid "ITPIN Compliant"
msgstr "Conforme à l'ITPIN"
@@ -2763,31 +2847,31 @@ msgstr "Juin"
msgid "Jurisdiction"
msgstr "Compétence"
-#: src/guidance/EmailGuidance.js:192
+#: src/guidance/EmailGuidance.js:191
msgid "Key length:"
msgstr "Longueur des clés :"
-#: src/guidance/EmailGuidance.js:186
+#: src/guidance/EmailGuidance.js:185
msgid "Key type:"
msgstr "Type de clé :"
-#: src/dmarc/DmarcReportSummaryGraph.js:68
+#: src/dmarc/DmarcReportSummaryGraph.js:69
msgid "L-30-D"
msgstr "30-D-J"
-#: src/admin/TagForm.js:190
+#: src/admin/TagForm.js:191
msgid "Label (EN)"
msgstr "Label (EN)"
-#: src/admin/TagForm.js:193
+#: src/admin/TagForm.js:194
msgid "Label (FR)"
msgstr "Label (FR)"
-#: src/auth/LanguageSelect.js:18
+#: src/auth/LanguageSelect.js:19
msgid "Language:"
msgstr "La langue:"
-#: src/summaries/HistoricalSummariesGraph.js:206
+#: src/summaries/HistoricalSummariesGraph.js:207
msgid "Last 30 Days"
msgstr "Les 30 derniers jours"
@@ -2795,7 +2879,7 @@ msgstr "Les 30 derniers jours"
msgid "Last 30 Days of Data"
msgstr "Données des 30 derniers jours"
-#: src/summaries/HistoricalSummariesGraph.js:209
+#: src/summaries/HistoricalSummariesGraph.js:210
msgid "Last 365 Days"
msgstr "Les 365 derniers jours"
@@ -2811,19 +2895,19 @@ msgstr "Les 365 derniers jours"
#. placeholder {0}: formatTimestamp(webComponentLastSeen)
#. placeholder {0}: formatTimestamp(ddosProtectionComponent.webComponentLastSeen)
#. placeholder {0}: formatTimestamp(cdnComponent.webComponentLastSeen)
-#: src/guidance/AdditionalFindings.js:219
-#: src/guidance/AdditionalFindings.js:283
-#: src/guidance/AdditionalFindings.js:316
-#: src/guidance/AdditionalFindings.js:358
-#: src/guidance/AdditionalFindings.js:400
+#: src/guidance/AdditionalFindings.js:220
+#: src/guidance/AdditionalFindings.js:284
+#: src/guidance/AdditionalFindings.js:317
+#: src/guidance/AdditionalFindings.js:359
+#: src/guidance/AdditionalFindings.js:401
msgid "Last Seen: {0}"
msgstr "Dernière visite : {0}"
-#: src/guidance/EmailGuidance.js:288
+#: src/guidance/EmailGuidance.js:287
msgid "Latest Scan:"
msgstr "Dernière analyse :"
-#: src/guidance/WebTLSResults.js:291
+#: src/guidance/WebTLSResults.js:292
msgid "Leaf Certificate is EV"
msgstr "Le certificat Leaf est EV"
@@ -2834,7 +2918,7 @@ msgstr "Le certificat Leaf est EV"
#~ msgid "Leave Organization"
#~ msgstr "Organisation des congés"
-#: src/auth/CreateUserPage.js:116
+#: src/auth/CreateUserPage.js:117
msgid "Let's get you set up so you can verify your account information and begin using Tracker."
msgstr "Nous allons vous configurer pour que vous puissiez vérifier les informations de votre compte et commencer à utiliser Suivi."
@@ -2854,36 +2938,40 @@ msgstr "Liste des balises d'orientation"
msgid "Loading {children}..."
msgstr "Chargement {children}..."
-#: src/dmarc/DmarcByDomainPage.js:242
+#: src/dmarc/DmarcByDomainPage.js:243
msgid "Loading Data..."
msgstr "Chargement des données..."
-#: src/summaries/HistoricalSummariesGraph.js:235
+#: src/summaries/HistoricalSummariesGraph.js:236
msgid "Local"
msgstr "Local"
-#: src/auth/SignInPage.js:117
+#: src/auth/SignInPage.js:118
msgid "Login"
msgstr "Connexion"
-#: src/auth/SignInPage.js:122
+#: src/auth/SignInPage.js:123
msgid "Login to your account"
msgstr "Connectez-vous à votre compte"
-#: src/guidance/EmailGuidance.js:140
+#: src/guidance/EmailGuidance.js:139
msgid "Lookups:"
msgstr "Les recherches :"
-#: src/guidance/AdditionalFindings.js:33
-#: src/guidance/IgnoredCves.js:8
+#: src/admin/CvdEnrollmentForm.js:158
+#: src/admin/CvdEnrollmentForm.js:192
+#: src/admin/CvdEnrollmentForm.js:220
+#: src/admin/CvdEnrollmentForm.js:248
+#: src/guidance/AdditionalFindings.js:34
+#: src/guidance/IgnoredCves.js:9
msgid "Low"
msgstr "Faible"
-#: src/summaries/HistoricalSummariesGraph.js:102
+#: src/summaries/HistoricalSummariesGraph.js:103
msgid "Mail"
msgstr "Courrier"
-#: src/guidance/EmailGuidance.js:283
+#: src/guidance/EmailGuidance.js:282
msgid "Mail Servers (MX)"
msgstr "Serveurs de messagerie (MX)"
@@ -2891,9 +2979,9 @@ msgstr "Serveurs de messagerie (MX)"
msgid "Mail-sending"
msgstr "envoi de courrier"
-#: src/domains/DomainListFilters.js:48
+#: src/domains/DomainListFilters.js:49
#: src/domains/FilterList.js:33
-#: src/guidance/DmarcPhaseStepper.js:48
+#: src/guidance/DmarcPhaseStepper.js:49
msgid "Maintain"
msgstr "Maintenir"
@@ -2901,7 +2989,7 @@ msgstr "Maintenir"
msgid "Managing Your Domains:"
msgstr "Gérer vos domaines :"
-#: src/app/App.js:193
+#: src/app/App.js:194
msgid "Manual management of DKIM selectors is discontinued. DKIM selectors will automatically be added when setting <0>rua=mailto:dmarc@cyber.gc.ca0> in your DMARC record. <1>Learn more1>."
msgstr "La gestion manuelle des sélecteurs DKIM est supprimée. Les sélecteurs DKIM seront automatiquement ajoutés lorsque vous définissez <0>rua=mailto:dmarc@cyber.gc.ca0> dans votre enregistrement DMARC. <1>En savoir plus1>."
@@ -2914,18 +3002,23 @@ msgstr "Mars"
msgid "Mark domains as \"Favourite\" to save them to your \"myTracker\" page."
msgstr "Marquez les domaines comme « favoris » pour les enregistrer sur votre page « myTracker »."
+#: src/admin/CvdEnrollmentForm.js:144
+msgid "Max Severity"
+msgstr "Gravité maximale"
+
#: src/components/MonthSelect.js:27
#: src/utilities/months.js:8
msgid "May"
msgstr "Mai"
-#: src/guidance/AdditionalFindings.js:33
-#: src/guidance/IgnoredCves.js:8
+#: src/admin/CvdEnrollmentForm.js:161
+#: src/guidance/AdditionalFindings.js:34
+#: src/guidance/IgnoredCves.js:9
msgid "Medium"
msgstr "Moyen"
-#: src/app/FloatingMenu.js:146
-#: src/app/FloatingMenu.js:169
+#: src/app/FloatingMenu.js:147
+#: src/app/FloatingMenu.js:170
msgid "Menu"
msgstr "Menu"
@@ -2933,11 +3026,11 @@ msgstr "Menu"
#~ msgid "Menu:"
#~ msgstr "Menu :"
-#: src/app/NotificationBanner.js:38
+#: src/app/NotificationBanner.js:39
msgid "Message dismissed successfully"
msgstr "Message rejeté avec succès"
-#: src/summaries/HistoricalSummariesGraph.js:262
+#: src/summaries/HistoricalSummariesGraph.js:263
msgid "Metrics:"
msgstr "Indicateurs :"
@@ -2945,32 +3038,32 @@ msgstr "Indicateurs :"
msgid "Monitor changes in your organization's security compliance over time."
msgstr "Surveillez l'évolution de la conformité de votre organisation en matière de sécurité au fil du temps."
-#: src/domains/ScanDomain.js:123
-#: src/guidance/DmarcPhaseStepper.js:36
+#: src/domains/ScanDomain.js:124
+#: src/guidance/DmarcPhaseStepper.js:37
msgid "Monitor DMARC reports and correct misconfigurations."
msgstr "Surveiller les rapports DMARC et corriger les erreurs de configuration."
-#: src/domains/ScanDomain.js:131
-#: src/guidance/DmarcPhaseStepper.js:50
+#: src/domains/ScanDomain.js:132
+#: src/guidance/DmarcPhaseStepper.js:51
msgid "Monitor DMARC reports;"
msgstr "Surveiller les rapports DMARC."
-#: src/admin/AdminDomainCard.js:10
-#: src/admin/AdminDomainModal.js:299
-#: src/admin/AdminDomains.js:285
-#: src/admin/AdminDomains.js:562
-#: src/domains/DomainCard.js:113
+#: src/admin/AdminDomainCard.js:11
+#: src/admin/AdminDomainModal.js:323
+#: src/admin/AdminDomains.js:290
+#: src/admin/AdminDomains.js:565
+#: src/domains/DomainCard.js:115
#: src/domains/FilterList.js:24
-#: src/organizationDetails/OrganizationDomains.js:126
-#: src/organizationDetails/OrganizationDomains.js:268
+#: src/organizationDetails/OrganizationDomains.js:129
+#: src/organizationDetails/OrganizationDomains.js:273
msgid "Monitor Only"
msgstr "Moniteur uniquement"
-#: src/organizationDetails/OrganizationDomains.js:126
+#: src/organizationDetails/OrganizationDomains.js:129
msgid "MONITOR_ONLY"
msgstr "MONITOR_ONLY"
-#: src/guidance/WebTLSResults.js:397
+#: src/guidance/WebTLSResults.js:398
msgid "More details"
msgstr "Plus de détails"
@@ -2978,6 +3071,10 @@ msgstr "Plus de détails"
#~ msgid "More info"
#~ msgstr "Plus d'informations"
+#: src/admin/CvdEnrollmentForm.js:36
+msgid "More Info"
+msgstr "Plus d'informations"
+
#: src/summaries/AggregatedGuidanceSummary.js:44
msgid "Most Common Negative Findings"
msgstr "Résultats négatifs les plus fréquents"
@@ -2986,11 +3083,11 @@ msgstr "Résultats négatifs les plus fréquents"
msgid "Mozilla SSL Configuration Generator"
msgstr "Générateur de configuration SSL de Mozilla"
-#: src/auth/CreateUserPage.js:140
+#: src/auth/CreateUserPage.js:141
msgid "Multifactor authentication (MFA) is active by default and used to verify account email"
msgstr "L'authentification multifactorielle (MFA) est active par défaut et utilisée pour vérifier l'adresse électronique du compte."
-#: src/guidance/WebTLSResults.js:282
+#: src/guidance/WebTLSResults.js:283
msgid "Must Staple"
msgstr "Agrafe obligatoire"
@@ -2998,50 +3095,50 @@ msgstr "Agrafe obligatoire"
msgid "My domain does not send emails, how can I get my domain's DMARC, DKIM, and SPF compliance checks to pass?"
msgstr "Mon domaine n'envoie pas d'e-mails, comment puis-je faire passer les contrôles de conformité DMARC, DKIM et SPF de mon domaine ?"
-#: src/app/App.js:148
-#: src/app/App.js:373
+#: src/app/App.js:149
+#: src/app/App.js:374
#: src/user/MyTrackerPage.js:34
#: src/user/MyTrackerPage.js:61
msgid "myTracker"
msgstr "monSuivi"
-#: src/createOrganization/CreateOrganizationPage.js:140
-#: src/createOrganization/CreateOrganizationPage.js:141
-#: src/organizationDetails/OrganizationAffiliations.js:57
-#: src/organizations/Organizations.js:92
+#: src/createOrganization/CreateOrganizationPage.js:115
+#: src/createOrganization/CreateOrganizationPage.js:116
+#: src/organizationDetails/OrganizationAffiliations.js:58
+#: src/organizations/Organizations.js:93
msgid "Name"
msgstr "Nom"
-#: src/admin/OrganizationInformation.js:299
+#: src/admin/OrganizationInformation.js:300
msgid "Name (EN)"
msgstr "Nom (EN)"
-#: src/admin/OrganizationInformation.js:302
+#: src/admin/OrganizationInformation.js:303
msgid "Name (FR)"
msgstr "Nom (FR)"
-#: src/guidance/EmailGuidance.js:373
+#: src/guidance/EmailGuidance.js:345
msgid "Name Servers (NS)"
msgstr "Serveurs de noms (NS)"
-#: src/admin/AuditLogTable.js:169
+#: src/admin/AuditLogTable.js:170
msgid "Name:"
msgstr "Nom:"
-#: src/guidance/WebTLSResults.js:401
+#: src/guidance/WebTLSResults.js:402
msgid "Names:"
msgstr "Noms :"
#: src/guidance/GuidanceSummaryCategories.js:22
-#: src/guidance/GuidanceTagDetails.js:21
+#: src/guidance/GuidanceTagDetails.js:22
msgid "Negative"
msgstr "Négatif"
-#: src/domains/DomainListFilters.js:117
+#: src/domains/DomainListFilters.js:118
msgid "Negative Finding"
msgstr "Constat négatif"
-#: src/summaries/HistoricalSummariesGraph.js:103
+#: src/summaries/HistoricalSummariesGraph.js:104
msgid "Negative Findings"
msgstr "Constatations négatives"
@@ -3057,39 +3154,39 @@ msgstr "Constatations négatives"
#~ msgid "Neutral tags highlight relevant configuration details, but are not addressed within policy requirements and have no impact on scoring."
#~ msgstr "Les balises neutres mettent en évidence les détails pertinents de la configuration, mais ne sont pas traitées dans le cadre des exigences de la politique et n'ont aucun impact sur la notation."
-#: src/guidance/WebConnectionResults.js:148
-#: src/guidance/WebConnectionResults.js:196
+#: src/guidance/WebConnectionResults.js:154
+#: src/guidance/WebConnectionResults.js:202
msgid "Never"
msgstr "Jamais"
#~ msgid "New"
#~ msgstr "Nouveau"
-#: src/organizationDetails/OrganizationDomains.js:247
+#: src/organizationDetails/OrganizationDomains.js:252
msgid "NEW"
msgstr "NOUVEAU"
-#: src/user/EditableUserDisplayName.js:155
+#: src/user/EditableUserDisplayName.js:156
msgid "New Display Name:"
msgstr "Nouveau nom d'affichage:"
-#: src/admin/AdminDomainModal.js:240
+#: src/admin/AdminDomainModal.js:264
msgid "New Domain URL"
msgstr "Nouvelle URL de domaine"
-#: src/admin/AdminDomainModal.js:240
+#: src/admin/AdminDomainModal.js:264
msgid "New Domain URL:"
msgstr "Nouvelle URL de domaine:"
-#: src/user/EditableUserEmail.js:130
+#: src/user/EditableUserEmail.js:131
msgid "New Email Address:"
msgstr "Nouvelle adresse électronique:"
-#: src/user/EditableUserPassword.js:169
+#: src/user/EditableUserPassword.js:170
msgid "New Password:"
msgstr "Nouveau mot de passe:"
-#: src/user/EditableUserPhoneNumber.js:175
+#: src/user/EditableUserPhoneNumber.js:176
msgid "New Phone Number:"
msgstr "Nouveau numéro de téléphone:"
@@ -3097,100 +3194,100 @@ msgstr "Nouveau numéro de téléphone:"
msgid "New Recommended TLS Ciphers"
msgstr "Nouveaux codes TLS recommandés"
-#: src/admin/AuditLogTable.js:175
+#: src/admin/AuditLogTable.js:176
msgid "New Value:"
msgstr "Nouvelle valeur :"
-#: src/userOnboarding/components/TourComponent.js:107
+#: src/userOnboarding/components/TourComponent.js:108
msgid "Next"
msgstr "Suivant"
-#: src/guidance/DmarcPhaseStepper.js:93
+#: src/guidance/DmarcPhaseStepper.js:94
msgid "Next Steps:"
msgstr "Prochaines étapes :"
-#: src/guidance/WebConnectionResults.js:130
-#: src/guidance/WebConnectionResults.js:176
-#: src/guidance/WebConnectionResults.js:206
-#: src/guidance/WebConnectionResults.js:224
-#: src/guidance/WebConnectionResults.js:233
-#: src/guidance/WebTLSResults.js:216
-#: src/guidance/WebTLSResults.js:274
-#: src/guidance/WebTLSResults.js:285
-#: src/guidance/WebTLSResults.js:294
-#: src/guidance/WebTLSResults.js:305
-#: src/guidance/WebTLSResults.js:316
-#: src/guidance/WebTLSResults.js:327
-#: src/guidance/WebTLSResults.js:338
-#: src/guidance/WebTLSResults.js:416
-#: src/guidance/WebTLSResults.js:425
-#: src/guidance/WebTLSResults.js:428
-#: src/guidance/WebTLSResults.js:447
+#: src/guidance/WebConnectionResults.js:142
+#: src/guidance/WebConnectionResults.js:182
+#: src/guidance/WebConnectionResults.js:208
+#: src/guidance/WebConnectionResults.js:220
+#: src/guidance/WebConnectionResults.js:226
+#: src/guidance/WebTLSResults.js:217
+#: src/guidance/WebTLSResults.js:275
+#: src/guidance/WebTLSResults.js:286
+#: src/guidance/WebTLSResults.js:295
+#: src/guidance/WebTLSResults.js:306
+#: src/guidance/WebTLSResults.js:317
+#: src/guidance/WebTLSResults.js:328
+#: src/guidance/WebTLSResults.js:339
+#: src/guidance/WebTLSResults.js:417
+#: src/guidance/WebTLSResults.js:426
+#: src/guidance/WebTLSResults.js:429
+#: src/guidance/WebTLSResults.js:448
msgid "No"
msgstr "Non"
-#: src/admin/AuditLogTable.js:102
+#: src/admin/AuditLogTable.js:103
msgid "No activity logs"
msgstr "Aucun journal d'activité"
-#: src/guidance/AdditionalFindings.js:58
+#: src/guidance/AdditionalFindings.js:59
msgid "No additional findings available at this time."
msgstr "Aucune autre conclusion n'est disponible pour l'instant."
-#: src/guidance/AdditionalFindings.js:368
+#: src/guidance/AdditionalFindings.js:369
msgid "No additional web components found"
msgstr "Aucun autre composant web n'a été trouvé"
-#: src/guidance/AdditionalFindings.js:321
+#: src/guidance/AdditionalFindings.js:322
msgid "No CDN found"
msgstr "Pas de RDC trouvé"
-#: src/user/EditableUserPhoneNumber.js:273
+#: src/user/EditableUserPhoneNumber.js:274
msgid "No current phone number"
msgstr "Pas de numéro de téléphone actuel"
-#: src/dmarc/DmarcReportPage.js:387
+#: src/dmarc/DmarcReportPage.js:388
msgid "No data for the DKIM Failures by IP Address table"
msgstr "Aucune donnée pour le tableau des défaillances DKIM par adresse IP"
-#: src/dmarc/DmarcReportPage.js:604
+#: src/dmarc/DmarcReportPage.js:605
msgid "No data for the DMARC Failures by IP Address table"
msgstr "Pas de données pour le tableau des défaillances DMARC par adresse IP"
-#: src/dmarc/DmarcReportPage.js:166
+#: src/dmarc/DmarcReportPage.js:167
msgid "No data for the DMARC yearly report graph"
msgstr "Pas de données pour le graphique du rapport annuel de la DMARC"
-#: src/dmarc/DmarcReportPage.js:455
+#: src/dmarc/DmarcReportPage.js:456
msgid "No data for the Fully Aligned by IP Address table"
msgstr "Pas de données pour le tableau Entièrement aligné par adresse IP"
-#: src/dmarc/DmarcReportPage.js:524
+#: src/dmarc/DmarcReportPage.js:525
msgid "No data for the SPF Failures by IP Address table"
msgstr "Aucune donnée pour le tableau des défaillances du SPF par adresse IP"
-#: src/dmarc/ExportRuaListButton.js:27
-#: src/dmarc/ExportRuaListButton.js:34
-#: src/domains/DomainsPage.js:163
-#: src/domains/DomainsPage.js:171
-#: src/domains/DomainsPage.js:193
-#: src/domains/DomainsPage.js:201
+#: src/dmarc/ExportRuaListButton.js:28
+#: src/dmarc/ExportRuaListButton.js:35
+#: src/domains/DomainsPage.js:165
+#: src/domains/DomainsPage.js:173
+#: src/domains/DomainsPage.js:195
+#: src/domains/DomainsPage.js:203
msgid "No data found"
msgstr "Aucune donnée trouvée"
-#: src/domains/DomainsPage.js:164
+#: src/domains/DomainsPage.js:166
msgid "No data found when retrieving all domain statuses."
msgstr "Aucune donnée n'a été trouvée lors de la récupération de tous les statuts de domaine."
-#: src/domains/DomainsPage.js:194
+#: src/domains/DomainsPage.js:196
msgid "No data found when retrieving top 25 report."
msgstr "Aucune donnée n'a été trouvée lors de l'extraction du rapport sur les 25 principales."
-#: src/dmarc/ExportRuaListButton.js:28
+#: src/dmarc/ExportRuaListButton.js:29
msgid "No data was found to export."
msgstr "Aucune donnée n'a été trouvée pour l'exportation."
-#: src/guidance/AdditionalFindings.js:288
+#: src/guidance/AdditionalFindings.js:289
msgid "No DDOS Protection found"
msgstr "Aucune protection DDOS trouvée"
@@ -3198,7 +3295,7 @@ msgstr "Aucune protection DDOS trouvée"
#~ msgid "No DKIM selectors are currently attached to this domain. Please contact an admin of an affiliated organization to add selectors."
#~ msgstr "Aucun sélecteur DKIM n'est actuellement associé à ce domaine. Veuillez contacter un administrateur d'une organisation affiliée pour ajouter des sélecteurs."
-#: src/guidance/DmarcPhaseStepper.js:66
+#: src/guidance/DmarcPhaseStepper.js:67
msgid "No DMARC Implementation Phase"
msgstr "Aucune phase de mise en œuvre DMARC"
@@ -3206,13 +3303,13 @@ msgstr "Aucune phase de mise en œuvre DMARC"
#~ msgid "No DMARC phase information available for this organization."
#~ msgstr "Aucune information sur la phase DMARC n'est disponible pour cette organisation."
-#: src/admin/AdminDomainList.js:28
-#: src/domains/DomainsPage.js:232
-#: src/organizationDetails/OrganizationDomains.js:160
+#: src/admin/AdminDomainList.js:24
+#: src/domains/DomainsPage.js:234
+#: src/organizationDetails/OrganizationDomains.js:163
msgid "No Domains"
msgstr "Aucun domaine"
-#: src/guidance/AdditionalFindings.js:229
+#: src/guidance/AdditionalFindings.js:230
msgid "No frameworks found"
msgstr "Aucun cadre trouvé"
@@ -3232,11 +3329,11 @@ msgstr "Aucun conseil trouvé pour cette catégorie"
msgid "No IP addresses were available to scan for this service. Please check your DNS configuration or contact us for assistance."
msgstr "Aucune adresse IP n'était disponible pour analyser ce service. Veuillez vérifier votre configuration DNS ou nous contacter pour obtenir de l'aide."
-#: src/guidance/WebTLSResults.js:79
+#: src/guidance/WebTLSResults.js:80
msgid "No known weak protocols used."
msgstr "Aucun protocole faible connu n'a été utilisé."
-#: src/guidance/EmailGuidance.js:319
+#: src/guidance/EmailGuidance.js:318
msgid "No MX records found. Is the domain parked?"
msgstr "Aucun enregistrement MX n'a été trouvé. Le domaine est-il parqué ?"
@@ -3248,7 +3345,7 @@ msgstr "Aucun enregistrement MX n'a été trouvé. Le domaine est-il parqué ?"
msgid "No negative findings to show. "
msgstr "Aucun résultat négatif à signaler."
-#: src/organizations/Organizations.js:111
+#: src/organizations/Organizations.js:112
msgid "No Organizations"
msgstr "Aucune organisation"
@@ -3256,7 +3353,11 @@ msgstr "Aucune organisation"
msgid "No Organizations found for this domain."
msgstr "Aucune organisation trouvée pour ce domaine."
-#: src/guidance/AdditionalFindings.js:257
+#: src/guidance/SecurityTxt.js:21
+msgid "No record was found for this service."
+msgstr "Aucun enregistrement n'a été trouvé pour ce service."
+
+#: src/guidance/AdditionalFindings.js:258
msgid "No response headers found"
msgstr "Aucun en-tête de réponse n'a été trouvé"
@@ -3272,25 +3373,25 @@ msgstr "Aucune donnée d'analyse pour cette organisation."
msgid "No scan data is currently available for this service. You may request a scan using the refresh button, or wait up to 24 hours for data to refresh."
msgstr "Aucune donnée de balayage n'est actuellement disponible pour ce service. Vous pouvez demander un scan en utilisant le bouton d'actualisation, ou attendre jusqu'à 24 heures pour que les données soient actualisées."
-#: src/admin/DomainTagsList.js:59
+#: src/admin/DomainTagsList.js:60
msgid "No Tags"
msgstr "Pas de balises"
-#: src/guidance/AdditionalFindings.js:181
+#: src/guidance/AdditionalFindings.js:182
msgid "No Top 25 Vulnerabilites Detected"
msgstr "Aucune des 25 principales vulnérabilités détectées"
-#: src/admin/SuperAdminUserList.js:157
+#: src/admin/SuperAdminUserList.js:158
#: src/admin/UserList.js:83
msgid "No users"
msgstr "Aucun utilisateur"
-#: src/organizationDetails/OrganizationAffiliations.js:69
+#: src/organizationDetails/OrganizationAffiliations.js:70
msgid "No Users"
msgstr "Pas d'utilisateurs"
-#: src/admin/OrganizationInformation.js:261
-#: src/admin/TagForm.js:158
+#: src/admin/OrganizationInformation.js:262
+#: src/admin/TagForm.js:159
msgid "No values were supplied when attempting to update organization details."
msgstr "Aucune valeur n'a été fournie lors de la tentative de mise à jour des détails de l'organisation."
@@ -3298,30 +3399,37 @@ msgstr "Aucune valeur n'a été fournie lors de la tentative de mise à jour des
msgid "Non-compliant"
msgstr "Non conforme"
-#: src/admin/OrganizationInformation.js:392
-#: src/guidance/EmailGuidance.js:275
-#: src/guidance/IgnoredCves.js:22
-#: src/guidance/IgnoredCves.js:66
-#: src/user/EditableUserTFAMethod.js:164
+#: src/admin/CvdEnrollmentForm.js:189
+#: src/admin/CvdEnrollmentForm.js:217
+#: src/admin/CvdEnrollmentForm.js:245
+#: src/admin/OrganizationInformation.js:393
+#: src/guidance/EmailGuidance.js:274
+#: src/guidance/IgnoredCves.js:23
+#: src/guidance/IgnoredCves.js:67
+#: src/user/EditableUserTFAMethod.js:165
msgid "None"
msgstr "Aucun"
-#: src/guidance/WebTLSResults.js:388
-#: src/guidance/WebTLSResults.js:413
+#: src/guidance/WebTLSResults.js:389
+#: src/guidance/WebTLSResults.js:414
msgid "Not After:"
msgstr "Pas après :"
-#: src/guidance/WebConnectionResults.js:143
-#: src/guidance/WebConnectionResults.js:215
-#: src/guidance/WebConnectionResults.js:224
-#: src/guidance/WebConnectionResults.js:233
+#: src/guidance/WebConnectionResults.js:149
+#: src/guidance/WebConnectionResults.js:214
+#: src/guidance/WebConnectionResults.js:220
+#: src/guidance/WebConnectionResults.js:226
msgid "Not available"
msgstr "Non disponible"
-#: src/guidance/WebTLSResults.js:410
+#: src/guidance/WebTLSResults.js:411
msgid "Not Before:"
msgstr "Pas avant :"
+#: src/admin/CvdEnrollmentForm.js:99
+msgid "Not Enrolled"
+msgstr "Non inscrit"
+
#: src/summaries/SummaryGroup.js:26
msgid "Not Implemented"
msgstr "Non mis en œuvre"
@@ -3333,11 +3441,11 @@ msgstr "Non mis en œuvre"
#~ msgid "Note:"
#~ msgstr "Avis important :"
-#: src/admin/AdminDomainModal.js:360
+#: src/admin/AdminDomainModal.js:391
msgid "Note: This could affect results for multiple organizations"
msgstr "Note : Cela pourrait affecter les résultats de plusieurs organisations"
-#: src/admin/AdminDomainModal.js:358
+#: src/admin/AdminDomainModal.js:389
msgid "Note: This will affect results for {orgCount} organizations"
msgstr "Note : Ceci affectera les résultats pour les organisations {orgCount}."
@@ -3354,7 +3462,7 @@ msgstr "Notification des changements"
msgid "November"
msgstr "Novembre"
-#: src/domains/DomainsPage.js:310
+#: src/domains/DomainsPage.js:314
msgid "NXDOMAIN"
msgstr "NXDOMAIN"
@@ -3379,7 +3487,7 @@ msgstr "Obtenir une orientation en matière de configuration pour les points ter
msgid "October"
msgstr "Octobre"
-#: src/admin/AuditLogTable.js:172
+#: src/admin/AuditLogTable.js:173
msgid "Old Value:"
msgstr "Ancienne valeur :"
@@ -3391,7 +3499,7 @@ msgstr "Une fois que l’équipe responsable de la cybersécurité du SCT a donn
msgid "Only <0>TBS Cyber Security0> can remove domains from your organization. Domains are only to be removed from your list when 1) they no longer exist, meaning they are deleted from the DNS returning an error code of NX DOMAIN (domain name does not exist); or 2) if you have identified that they do not belong to your organization."
msgstr "Seul l’<0>équipe responsable de la cybersécurité du SCT0> peut supprimer des domaines de votre organisation. Les domaines ne peuvent être supprimés de votre liste que 1) s'ils n'existent plus, c'est-à-dire s'ils sont supprimés du DNS et renvoient un code d'erreur NX DOMAIN (le nom de domaine n'existe pas) ; ou 2) si vous avez constaté qu'ils n'appartiennent pas à votre organisation."
-#: src/guidance/AdditionalFindings.js:385
+#: src/guidance/AdditionalFindings.js:386
msgid "Open"
msgstr "Ouvrir"
@@ -3403,14 +3511,14 @@ msgstr "Ouvrir le glossaire."
msgid "Options include contacting the <0>SSC WebSSL services team0> and/or using <1>Let's Encrypt1>. For more information, please refer to the guidance on <2>Recommendations for TLS Server Certificates2>."
msgstr "Vous pouvez notamment communiquer avec l’<0>équipe responsable des services WebSSL de SPC0> ou utiliser <1>Let’sEncrypt1>. Pour en apprendre davantage, veuillez vous reporter aux <2>Recommandations pour les certificats de serveur TLS2>."
-#: src/admin/AuditLogTable.js:79
-#: src/admin/AuditLogTable.js:127
-#: src/admin/DomainTagsList.js:51
-#: src/admin/TagForm.js:272
+#: src/admin/AuditLogTable.js:80
+#: src/admin/AuditLogTable.js:128
+#: src/admin/DomainTagsList.js:52
+#: src/admin/TagForm.js:273
msgid "Organization"
msgstr "Organisation"
-#: src/createOrganization/CreateOrganizationPage.js:53
+#: src/createOrganization/CreateOrganizationPage.js:48
msgid "Organization created"
msgstr "Organisation créée"
@@ -3418,11 +3526,11 @@ msgstr "Organisation créée"
msgid "Organization Details"
msgstr "Détails de l'organisation"
-#: src/admin/OrganizationInformation.js:162
+#: src/admin/OrganizationInformation.js:163
msgid "Organization Information"
msgstr "Informations sur l'organisation"
-#: src/admin/AuditLogTable.js:150
+#: src/admin/AuditLogTable.js:151
msgid "Organization is invested in the outside domain"
msgstr "L'organisation est investie dans le domaine extérieur"
@@ -3431,20 +3539,20 @@ msgstr "L'organisation est investie dans le domaine extérieur"
#~ msgid "Organization left successfully"
#~ msgstr "L'organisation est partie avec succès"
-#: src/admin/OrganizationInformation.js:441
-#: src/organizations/Organizations.js:192
+#: src/admin/OrganizationInformation.js:442
+#: src/organizations/Organizations.js:193
msgid "Organization Name"
msgstr "Nom de l'organisation"
-#: src/admin/OrganizationInformation.js:179
+#: src/admin/OrganizationInformation.js:180
msgid "Organization name does not match."
msgstr "Le nom de l'organisation ne correspond pas."
-#: src/admin/OrganizationInformation.js:260
+#: src/admin/OrganizationInformation.js:261
msgid "Organization not updated"
msgstr "Organisation non mise à jour"
-#: src/admin/AuditLogTable.js:152
+#: src/admin/AuditLogTable.js:153
msgid "Organization owns this domain, but it is outside the allowed scope"
msgstr "L'organisation possède ce domaine, mais il est en dehors du champ d'application autorisé"
@@ -3454,27 +3562,27 @@ msgstr "L'organisation possède ce domaine, mais il est en dehors du champ d'app
#~ msgid "Organization:"
#~ msgstr "Organisation:"
-#: src/admin/AdminPage.js:90
-#: src/admin/AdminPage.js:107
-#: src/admin/UserListModal.js:237
+#: src/admin/AdminPage.js:91
+#: src/admin/AdminPage.js:108
+#: src/admin/UserListModal.js:238
msgid "Organization: "
msgstr "Organisation : "
-#: src/guidance/GuidancePage.js:380
+#: src/guidance/GuidancePage.js:378
msgid "Organization(s):"
msgstr "Organisation(s) :"
-#: src/admin/AdminPage.js:237
-#: src/app/App.js:131
-#: src/app/App.js:292
-#: src/app/FloatingMenu.js:103
+#: src/admin/AdminPage.js:238
+#: src/app/App.js:132
+#: src/app/App.js:293
+#: src/app/FloatingMenu.js:104
#: src/guidance/GuidancePage.js:210
-#: src/organizations/Organizations.js:102
-#: src/organizations/Organizations.js:187
+#: src/organizations/Organizations.js:103
+#: src/organizations/Organizations.js:188
msgid "Organizations"
msgstr "Organisations"
-#: src/admin/AuditLogTable.js:154
+#: src/admin/AuditLogTable.js:155
msgid "Other"
msgstr "Autres"
@@ -3497,86 +3605,87 @@ msgstr "nos conditions générales sur le site Web du SCT"
#~ msgid "OUTSIDE"
#~ msgstr "EXTÉRIEUR"
-#: src/admin/UserListModal.js:264
+#: src/admin/UserListModal.js:265
msgid "OWNER"
msgstr "PROPRIÉTAIRE"
-#: src/admin/TagForm.js:261
+#: src/admin/TagForm.js:262
msgid "Ownership:"
msgstr "Propriété :"
-#: src/guidance/EmailGuidance.js:236
+#: src/guidance/EmailGuidance.js:235
msgid "p:"
msgstr "p:"
#. placeholder {0}: state.pageIndex + 1
#. placeholder {1}: pageOptions.length
-#: src/components/TrackerTable.js:271
+#: src/components/TrackerTable.js:270
msgid "Page {0} of {1}"
msgstr "Page {0} de {1}"
-#: src/dmarc/DmarcReportPage.js:132
#: src/dmarc/DmarcReportPage.js:133
-#: src/dmarc/DmarcReportSummaryGraph.js:184
-#: src/dmarc/DmarcReportSummaryGraph.js:381
-#: src/domains/DomainListFilters.js:37
+#: src/dmarc/DmarcReportPage.js:134
+#: src/dmarc/DmarcReportSummaryGraph.js:185
+#: src/dmarc/DmarcReportSummaryGraph.js:382
+#: src/domains/DomainListFilters.js:38
msgid "Pass"
msgstr "Passez"
#: src/components/fields/PasswordConfirmation.js:75
#: src/components/fields/PasswordConfirmation.js:111
+#: src/components/fields/PasswordField.js:9
#: src/components/fields/PasswordField.js:29
msgid "Password"
msgstr "Mot de passe"
-#: src/auth/ResetPasswordPage.js:20
+#: src/auth/ResetPasswordPage.js:21
#: src/utilities/fieldRequirements.js:18
#: src/utilities/fieldRequirements.js:20
msgid "Password cannot be empty"
msgstr "Le mot de passe ne peut pas être vide"
-#: src/auth/ResetPasswordPage.js:23
+#: src/auth/ResetPasswordPage.js:24
#: src/utilities/fieldRequirements.js:22
msgid "Password confirmation cannot be empty"
msgstr "La confirmation du mot de passe ne peut pas être vide"
-#: src/auth/ResetPasswordPage.js:21
+#: src/auth/ResetPasswordPage.js:22
#: src/utilities/fieldRequirements.js:19
msgid "Password must be at least 12 characters long"
msgstr "Le mot de passe doit comporter au moins 12 caractères"
-#: src/auth/ResetPasswordPage.js:42
+#: src/auth/ResetPasswordPage.js:43
msgid "Password Updated"
msgstr "Mot de passe mis à jour"
#: src/components/fields/PasswordConfirmation.js:10
-#: src/components/fields/PasswordField.js:46
-#: src/user/EditableUserPassword.js:91
+#: src/user/EditableUserPassword.js:92
msgid "Password:"
msgstr "Mot de passe:"
-#: src/auth/ResetPasswordPage.js:24
+#: src/auth/ResetPasswordPage.js:25
#: src/utilities/fieldRequirements.js:23
msgid "Passwords must match"
msgstr "Les mots de passe doivent correspondre"
-#: src/guidance/EmailGuidance.js:248
+#: src/guidance/EmailGuidance.js:247
msgid "pct:"
msgstr "pct:"
-#: src/admin/DomainTagsList.js:52
+#: src/admin/CvdEnrollmentForm.js:103
+#: src/admin/DomainTagsList.js:53
msgid "Pending"
msgstr "En attente"
-#: src/admin/UserListModal.js:255
+#: src/admin/UserListModal.js:256
msgid "PENDING"
msgstr "EN ATTENTE"
-#: src/summaries/HistoricalSummariesGraph.js:255
+#: src/summaries/HistoricalSummariesGraph.js:256
msgid "Percentage"
msgstr "Pourcentage"
-#: src/dmarc/DmarcReportSummaryGraph.js:121
+#: src/dmarc/DmarcReportSummaryGraph.js:122
msgid "Percentages"
msgstr "Pourcentages"
@@ -3596,32 +3705,32 @@ msgstr "Pourcentages"
#~ msgid "Perform another assessment of the applicable domains and sub-domains to confirm that the configuration has been updated and that HTTPS is enforced in accordance with the ITPIN. Results will appear in the Tracker Dashboard within 24 hours."
#~ msgstr "Effectuez une autre évaluation des domaines et sous-domaines applicables pour confirmer que la configuration a été mise à jour et que HTTPS est appliqué conformément à l'ITPIN. Les résultats apparaîtront dans le tableau de bord du traqueur dans les 24 heures."
-#: src/guidance/WebTLSResults.js:29
+#: src/guidance/WebTLSResults.js:30
msgid "phase out"
msgstr "abandonnées"
-#: src/user/EditableUserTFAMethod.js:167
+#: src/user/EditableUserTFAMethod.js:168
msgid "Phone"
msgstr "Téléphone"
-#: src/utilities/fieldRequirements.js:33
+#: src/utilities/fieldRequirements.js:34
msgid "Phone number field must not be empty"
msgstr "Le champ du numéro de téléphone ne doit pas être vide"
-#: src/utilities/fieldRequirements.js:34
+#: src/utilities/fieldRequirements.js:35
msgid "Phone number must be a valid phone number that is 10-15 digits long"
msgstr "Le numéro de téléphone doit être un numéro de téléphone valide de 10 à 15 chiffres."
#: src/components/fields/PhoneNumberField.js:12
-#: src/user/EditableUserPhoneNumber.js:259
+#: src/user/EditableUserPhoneNumber.js:260
msgid "Phone Number:"
msgstr "Numéro de téléphone:"
-#: src/user/EditableUserTFAMethod.js:130
+#: src/user/EditableUserTFAMethod.js:131
msgid "Phone Validated"
msgstr "Téléphone validé"
-#: src/admin/AdminDomainModal.js:316
+#: src/admin/AdminDomainModal.js:347
msgid "Please allow up to 24 hours for summaries to reflect any changes."
msgstr "Veuillez prévoir jusqu'à 24 heures pour que les résumés reflètent les changements éventuels."
@@ -3641,7 +3750,7 @@ msgstr "Veuillez communiquer avec l’<0>équipe responsable de la cybersécurit
msgid "Please enter your current password."
msgstr "Veuillez entrer votre mot de passe actuel."
-#: src/auth/CreateUserPage.js:44
+#: src/auth/CreateUserPage.js:45
msgid "Please enter your one-time code to continue to Tracker."
msgstr "Veuillez saisir votre code à usage unique pour continuer à Tracker."
@@ -3653,7 +3762,7 @@ msgstr "Veuillez entrer votre code à deux facteurs ci-dessous."
#~ msgid "Please follow the link in order to verify your account and start using Tracker."
#~ msgstr "Veuillez suivre le lien afin de vérifier votre compte et commencer à utiliser Suivi."
-#: src/dmarc/DmarcReportPage.js:245
+#: src/dmarc/DmarcReportPage.js:246
msgid "Pointer to a DKIM public key record in DNS."
msgstr "Pointeur vers un enregistrement de clé publique DKIM dans le DNS."
@@ -3663,16 +3772,16 @@ msgstr "Pointeur vers un enregistrement de clé publique DKIM dans le DNS."
#~ msgid "Policy"
#~ msgstr "Politique"
-#: src/guidance/GuidanceTagDetails.js:38
+#: src/guidance/GuidanceTagDetails.js:39
msgid "Policy guidance:"
msgstr "Orientation politique :"
-#: src/guidance/AdditionalFindings.js:377
+#: src/guidance/AdditionalFindings.js:378
msgid "Ports"
msgstr "Ports"
#: src/guidance/GuidanceSummaryCategories.js:34
-#: src/guidance/GuidanceTagDetails.js:19
+#: src/guidance/GuidanceTagDetails.js:20
msgid "Positive"
msgstr "Positif"
@@ -3696,11 +3805,11 @@ msgstr "Positif"
#~ msgid "Prevent this domain from being scanned and being counted in any summaries."
#~ msgstr "Empêchez ce domaine d'être scanné et d'être compté dans les résumés."
-#: src/admin/AdminDomainModal.js:338
+#: src/admin/AdminDomainModal.js:369
msgid "Prevent this domain from being visible, scanned, and being counted in any summaries."
msgstr "Empêchez ce domaine d'être visible, d'être scanné et d'être compté dans les résumés."
-#: src/app/TopBanner.js:87
+#: src/app/TopBanner.js:88
msgid "PREVIEW"
msgstr "PREVIEW"
@@ -3708,8 +3817,8 @@ msgstr "PREVIEW"
#~ msgid "Previous"
#~ msgstr "Précédent"
-#: src/app/App.js:423
-#: src/app/FloatingMenu.js:219
+#: src/app/App.js:424
+#: src/app/FloatingMenu.js:220
#: src/app/SlideMessage.js:88
#: src/termsConditions/TermsConditionsPage.js:41
msgid "Privacy"
@@ -3730,12 +3839,12 @@ msgstr "IP privé"
#~ msgid "Prod"
#~ msgstr "Prod"
-#: src/organizationDetails/OrganizationDomains.js:248
+#: src/organizationDetails/OrganizationDomains.js:253
msgid "PROD"
msgstr "PROD"
-#: src/user/EditableEmailUpdateOptions.js:110
-#: src/user/EditableEmailUpdateOptions.js:197
+#: src/user/EditableEmailUpdateOptions.js:111
+#: src/user/EditableEmailUpdateOptions.js:198
msgid "Progress Report"
msgstr "Rapport d'avancement"
@@ -3743,16 +3852,16 @@ msgstr "Rapport d'avancement"
msgid "Protect domains that do not send email - GOV.UK (www.gov.uk)"
msgstr "Protéger les domaines qui n'envoient pas de courrier électronique - GOV.UK (www.gov.uk)"
-#: src/domains/DomainCard.js:207
-#: src/domains/DomainsPage.js:296
+#: src/domains/DomainCard.js:217
+#: src/domains/DomainsPage.js:300
#: src/domains/FilterList.js:15
-#: src/guidance/WebTLSResults.js:53
-#: src/organizationDetails/OrganizationDomains.js:233
+#: src/guidance/WebTLSResults.js:54
+#: src/organizationDetails/OrganizationDomains.js:238
msgid "Protocols"
msgstr "Protocoles"
-#: src/domains/DomainsPage.js:130
-#: src/organizationDetails/OrganizationDomains.js:104
+#: src/domains/DomainsPage.js:132
+#: src/organizationDetails/OrganizationDomains.js:105
msgid "Protocols Status"
msgstr "Statut des protocoles"
@@ -3766,22 +3875,22 @@ msgstr "Statut des protocoles"
#: src/createOrganization/CreateOrganizationPage.js:149
#: src/createOrganization/CreateOrganizationPage.js:150
-msgid "Province"
-msgstr "Province"
+#~ msgid "Province"
+#~ msgstr "Province"
-#: src/admin/OrganizationInformation.js:311
+#: src/admin/OrganizationInformation.js:312
msgid "Province (EN)"
msgstr "Province (EN)"
-#: src/admin/OrganizationInformation.js:314
+#: src/admin/OrganizationInformation.js:315
msgid "Province (FR)"
msgstr "Province (FR)"
-#: src/admin/OrganizationInformation.js:376
+#: src/admin/OrganizationInformation.js:377
msgid "Province:"
msgstr "Province:"
-#: src/summaries/HistoricalSummariesGraph.js:202
+#: src/summaries/HistoricalSummariesGraph.js:203
msgid "Range:"
msgstr "Gamme :"
@@ -3793,7 +3902,7 @@ msgstr "N'hésitez pas à nous contacter si vous avez des questions."
#~ msgid "Reach out to us if you have any questions."
#~ msgstr "N'hésitez pas à nous contacter si vous avez des questions."
-#: src/app/App.js:280
+#: src/app/App.js:281
msgid "Read guidance"
msgstr "Conseils de lecture"
@@ -3801,27 +3910,27 @@ msgstr "Conseils de lecture"
msgid "Read Guidance"
msgstr "Conseils de lecture"
-#: src/admin/AdminDomains.js:516
-#: src/admin/AuditLogTable.js:133
+#: src/admin/AdminDomains.js:519
+#: src/admin/AuditLogTable.js:134
msgid "Reason"
msgstr "Raison"
-#: src/guidance/WebTLSResults.js:302
+#: src/guidance/WebTLSResults.js:303
msgid "Received Chain Contains Anchor Certificate"
msgstr "La chaîne reçue contient le certificat d'ancrage"
-#: src/guidance/WebTLSResults.js:313
+#: src/guidance/WebTLSResults.js:314
msgid "Received Chain Has Valid Order"
msgstr "La chaîne reçue a un ordre valide"
-#: src/user/EditableEmailUpdateOptions.js:99
-#: src/user/EditableEmailUpdateOptions.js:176
+#: src/user/EditableEmailUpdateOptions.js:100
+#: src/user/EditableEmailUpdateOptions.js:177
msgid "Recent Activity"
msgstr "Activité récente"
-#: src/guidance/EmailGuidance.js:134
-#: src/guidance/EmailGuidance.js:180
-#: src/guidance/EmailGuidance.js:230
+#: src/guidance/EmailGuidance.js:133
+#: src/guidance/EmailGuidance.js:179
+#: src/guidance/EmailGuidance.js:229
msgid "Record:"
msgstr "Record :"
@@ -3833,46 +3942,46 @@ msgstr "Références :"
msgid "Refresh the web and email scan results for this domain."
msgstr "Actualiser les résultats de l'analyse du Web et du courrier électronique pour ce domaine."
-#: src/auth/CreateUserPage.js:108
+#: src/auth/CreateUserPage.js:109
msgid "Register"
msgstr "Registre"
-#: src/domains/ScanDomain.js:128
-#: src/guidance/DmarcPhaseStepper.js:44
+#: src/domains/ScanDomain.js:129
+#: src/guidance/DmarcPhaseStepper.js:45
msgid "Reject all messages from non-mail domains."
msgstr "Rejeter tous les messages provenant de domaines autres que les domaines de courrier."
-#: src/auth/SignInPage.js:134
+#: src/auth/SignInPage.js:135
msgid "Remember me"
msgstr "Rappelle-toi de moi"
-#: src/admin/AuditLogTable.js:86
+#: src/admin/AuditLogTable.js:87
msgid "Remove"
msgstr "Retirer"
-#: src/admin/AdminDomains.js:496
+#: src/admin/AdminDomains.js:499
msgid "Remove Domain"
msgstr "Supprimer un domaine"
-#: src/admin/OrganizationInformation.js:208
-#: src/admin/OrganizationInformation.js:427
+#: src/admin/OrganizationInformation.js:209
+#: src/admin/OrganizationInformation.js:428
msgid "Remove Organization"
msgstr "Supprimer l'organisation"
-#: src/admin/UserListModal.js:217
+#: src/admin/UserListModal.js:218
msgid "Remove User"
msgstr "Supprimer l'utilisateur"
-#: src/admin/OrganizationInformation.js:98
+#: src/admin/OrganizationInformation.js:99
msgid "Removed Organization"
msgstr "Organisation supprimée"
-#: src/app/FloatingMenu.js:230
+#: src/app/FloatingMenu.js:231
#: src/app/SlideMessage.js:99
msgid "Report an Issue"
msgstr "Signaler un problème"
-#: src/domains/ScanDomain.js:167
+#: src/domains/ScanDomain.js:168
msgid "Request a domain to be scanned:"
msgstr "Demander qu'un domaine soit scanné:"
@@ -3882,17 +3991,17 @@ msgstr "Demandez une invitation si vous n'êtes pas affilié à votre organisati
#: src/guidance/GuidancePage.js:168
#: src/organizationDetails/OrganizationDetails.js:120
-#: src/organizations/Organizations.js:133
-#: src/organizations/RequestOrgInviteModal.js:62
+#: src/organizations/Organizations.js:134
+#: src/organizations/RequestOrgInviteModal.js:63
msgid "Request Invite"
msgstr "Demande d'invitation"
-#: src/dmarc/ExportRuaListButton.js:15
-#: src/domains/DomainsPage.js:154
+#: src/dmarc/ExportRuaListButton.js:16
+#: src/domains/DomainsPage.js:156
msgid "Request successfully sent to get all domain statuses - this may take a minute."
msgstr "La requête a été envoyée avec succès pour obtenir les statuts de tous les domaines - cela peut prendre une minute."
-#: src/domains/DomainsPage.js:184
+#: src/domains/DomainsPage.js:186
msgid "Request successfully sent to get top 25 report."
msgstr "Demande envoyée avec succès pour obtenir le rapport sur le 25 principales."
@@ -3900,7 +4009,7 @@ msgstr "Demande envoyée avec succès pour obtenir le rapport sur le 25 principa
msgid "Requested Scan"
msgstr "Numérisation demandée"
-#: src/domains/SubdomainDiscoveryButton.js:41
+#: src/domains/SubdomainDiscoveryButton.js:42
msgid "Requested subdomain scan"
msgstr "Analyse du sous-domaine demandé"
@@ -3916,23 +4025,23 @@ msgstr "Exigences : <0>Configuration requise pour les services de gestion du cou
msgid "Requirements: <0>Web Sites and Services Management Configuration Requirements0>"
msgstr "Exigences : <0>Exigences de configuration de la gestion des sites et services web0>"
-#: src/admin/AdminDomainCard.js:12
-#: src/admin/AdminDomainModal.js:305
-#: src/admin/AdminDomains.js:291
-#: src/admin/AdminDomains.js:570
-#: src/domains/DomainCard.js:115
+#: src/admin/AdminDomainCard.js:13
+#: src/admin/AdminDomainModal.js:329
+#: src/admin/AdminDomains.js:296
+#: src/admin/AdminDomains.js:573
+#: src/domains/DomainCard.js:117
#: src/domains/FilterList.js:26
-#: src/organizationDetails/OrganizationDomains.js:128
-#: src/organizationDetails/OrganizationDomains.js:276
+#: src/organizationDetails/OrganizationDomains.js:131
+#: src/organizationDetails/OrganizationDomains.js:281
msgid "Requires Investigation"
msgstr "Nécessité d'une enquête"
-#: src/organizationDetails/OrganizationDomains.js:128
+#: src/organizationDetails/OrganizationDomains.js:131
msgid "REQUIRES_INVESTIGATION"
msgstr "DEMANDE_ENQUÊTE"
-#: src/app/App.js:253
-#: src/auth/ResetPasswordPage.js:95
+#: src/app/App.js:254
+#: src/auth/ResetPasswordPage.js:96
msgid "Reset Password"
msgstr "Réinitialiser le mot de passe"
@@ -3940,20 +4049,20 @@ msgstr "Réinitialiser le mot de passe"
#~ msgid "Resource"
#~ msgstr "Ressources"
-#: src/admin/AuditLogTable.js:73
-#: src/admin/AuditLogTable.js:124
+#: src/admin/AuditLogTable.js:74
+#: src/admin/AuditLogTable.js:125
msgid "Resource Name"
msgstr "Nom de la ressource"
-#: src/admin/AuditLogTable.js:121
+#: src/admin/AuditLogTable.js:122
msgid "Resource Type"
msgstr "Type de ressource"
-#: src/admin/AuditLogTable.js:215
+#: src/admin/AuditLogTable.js:216
msgid "Resource:"
msgstr "Ressource :"
-#: src/guidance/AdditionalFindings.js:238
+#: src/guidance/AdditionalFindings.js:239
msgid "Response Headers"
msgstr "En-têtes de réponse"
@@ -3962,7 +4071,7 @@ msgstr "En-têtes de réponse"
#~ msgid "Result:"
#~ msgstr "Résultat"
-#: src/domains/ScanDomain.js:311
+#: src/domains/ScanDomain.js:312
msgid "Results for scans of email technologies (DMARC, SPF, DKIM)."
msgstr "Résultats des analyses des technologies du courrier électronique (DMARC, SPF, DKIM)."
@@ -3971,40 +4080,40 @@ msgstr "Résultats des analyses des technologies du courrier électronique (DMAR
#~ msgid "Results for scans of web technologies (SSL, HTTPS)."
#~ msgstr "Résultats des analyses des technologies du web (SSL, HTTPS)."
-#: src/domains/ScanDomain.js:257
+#: src/domains/ScanDomain.js:258
msgid "Results for scans of web technologies (TLS, HTTPS)."
msgstr "Résultats pour les analyses des technologies web (TLS, HTTPS)."
-#: src/guidance/WebTLSResults.js:428
+#: src/guidance/WebTLSResults.js:429
msgid "Revoked:"
msgstr "Révoqué :"
-#: src/guidance/WebTLSResults.js:236
+#: src/guidance/WebTLSResults.js:237
msgid "ROBOT Vulnerable"
msgstr "ROBOT Vulnérable"
-#: src/organizationDetails/OrganizationAffiliations.js:55
+#: src/organizationDetails/OrganizationAffiliations.js:56
msgid "Role"
msgstr "Rôle"
-#: src/admin/UserListModal.js:106
+#: src/admin/UserListModal.js:107
msgid "Role updated"
msgstr "Rôle mis à jour"
-#: src/admin/UserListModal.js:245
+#: src/admin/UserListModal.js:246
msgid "Role:"
msgstr "Fonction:"
-#: src/domains/ScanDomain.js:133
-#: src/guidance/DmarcPhaseStepper.js:52
+#: src/domains/ScanDomain.js:134
+#: src/guidance/DmarcPhaseStepper.js:53
msgid "Rotate DKIM keys annually."
msgstr "Effectuer la rotation des clés DKIM annuellement."
-#: src/guidance/WebTLSResults.js:435
+#: src/guidance/WebTLSResults.js:436
msgid "SAN List:"
msgstr "Liste des SAN :"
-#: src/user/EditableUserTFAMethod.js:176
+#: src/user/EditableUserTFAMethod.js:177
msgid "Save"
msgstr "Sauvez"
@@ -4012,32 +4121,32 @@ msgstr "Sauvez"
#~ msgid "Save Language"
#~ msgstr "Sauvegarder la langue"
-#: src/admin/AuditLogTable.js:89
+#: src/admin/AuditLogTable.js:90
msgid "Scan"
msgstr "Scanner"
-#: src/domains/ScanDomain.js:180
+#: src/domains/ScanDomain.js:181
msgid "Scan Domain"
msgstr "Domaine de balayage"
-#: src/domains/ScanDomain.js:54
+#: src/domains/ScanDomain.js:55
msgid "Scan of domain successfully requested"
msgstr "Scan du domaine demandé avec succès"
-#: src/admin/AdminDomains.js:185
-#: src/domains/DomainCard.js:162
-#: src/domains/DomainsPage.js:142
-#: src/guidance/GuidancePage.js:343
-#: src/organizationDetails/OrganizationDomains.js:118
+#: src/admin/AdminDomains.js:187
+#: src/domains/DomainCard.js:164
+#: src/domains/DomainsPage.js:144
+#: src/guidance/GuidancePage.js:341
+#: src/organizationDetails/OrganizationDomains.js:119
msgid "Scan Pending"
msgstr "Scan en attente"
-#: src/domains/DomainsPage.js:317
-#: src/organizationDetails/OrganizationDomains.js:260
+#: src/domains/DomainsPage.js:321
+#: src/organizationDetails/OrganizationDomains.js:265
msgid "SCAN PENDING"
msgstr "SCAN EN ATTENTE"
-#: src/domains/ScanDomain.js:53
+#: src/domains/ScanDomain.js:54
msgid "Scan Request"
msgstr "Demande de numérisation"
@@ -4045,30 +4154,30 @@ msgstr "Demande de numérisation"
#~ msgid "Scanner Finding"
#~ msgstr "Recherche de scanner"
-#: src/summaries/HistoricalSummariesGraph.js:225
+#: src/summaries/HistoricalSummariesGraph.js:226
msgid "Scope:"
msgstr "Portée :"
-#: src/admin/AdminDomains.js:415
+#: src/admin/AdminDomains.js:418
msgid "Search by Domain URL"
msgstr "Recherche par URL de domaine"
-#: src/admin/AuditLogTable.js:208
+#: src/admin/AuditLogTable.js:209
msgid "Search by initiated by, resource name"
msgstr "Recherche par initié par, nom de la ressource"
-#: src/dmarc/DmarcReportPage.js:371
+#: src/dmarc/DmarcReportPage.js:372
msgid "Search DKIM Failing Items"
msgstr "Rechercher les éléments en échec de DKIM"
-#: src/dmarc/DmarcReportPage.js:588
+#: src/dmarc/DmarcReportPage.js:589
msgid "Search DMARC Failing Items"
msgstr "Recherche d'éléments défaillants DMARC"
-#: src/dmarc/DmarcByDomainPage.js:200
-#: src/dmarc/DmarcByDomainPage.js:256
-#: src/domains/DomainsPage.js:337
-#: src/organizationDetails/OrganizationDomains.js:295
+#: src/dmarc/DmarcByDomainPage.js:201
+#: src/dmarc/DmarcByDomainPage.js:257
+#: src/domains/DomainsPage.js:341
+#: src/organizationDetails/OrganizationDomains.js:300
msgid "Search for a domain"
msgstr "Rechercher un domaine"
@@ -4080,11 +4189,11 @@ msgstr "Rechercher un domaine"
msgid "Search for a specific domain."
msgstr "Recherche d'un domaine spécifique."
-#: src/admin/SuperAdminUserList.js:363
+#: src/admin/SuperAdminUserList.js:364
msgid "Search for a user (email)"
msgstr "Recherche d'un utilisateur (email)"
-#: src/organizationDetails/OrganizationAffiliations.js:100
+#: src/organizationDetails/OrganizationAffiliations.js:101
msgid "Search for a user by email"
msgstr "Recherche d'un utilisateur par courriel"
@@ -4092,7 +4201,7 @@ msgstr "Recherche d'un utilisateur par courriel"
#~ msgid "Search for an activity"
#~ msgstr "Recherche d'une activité"
-#: src/organizations/Organizations.js:223
+#: src/organizations/Organizations.js:224
msgid "Search for an organization"
msgstr "Rechercher une organisation"
@@ -4100,24 +4209,24 @@ msgstr "Rechercher une organisation"
msgid "Search for domains here."
msgstr "Recherchez des domaines ici."
-#: src/admin/AdminPage.js:130
+#: src/admin/AdminPage.js:131
msgid "Search for your organization to request an invite"
msgstr "Recherchez votre organisation pour demander une invitation"
-#: src/dmarc/DmarcReportPage.js:439
+#: src/dmarc/DmarcReportPage.js:440
msgid "Search Fully Aligned Items"
msgstr "Recherche d'éléments entièrement alignés"
-#: src/dmarc/DmarcReportPage.js:508
+#: src/dmarc/DmarcReportPage.js:509
msgid "Search SPF Failing Items"
msgstr "Rechercher les éléments défaillants du SPF"
-#: src/components/ReactTableGlobalFilter.js:36
+#: src/components/ReactTableGlobalFilter.js:37
msgid "Search:"
msgstr "Recherche:"
-#: src/admin/AdminDomains.js:404
-#: src/admin/UserList.js:153
+#: src/admin/AdminDomains.js:407
+#: src/admin/UserList.js:148
#: src/components/SearchBox.js:46
msgid "Search: "
msgstr "Recherche: "
@@ -4126,7 +4235,7 @@ msgstr "Recherche: "
#~ msgid "Sector:"
#~ msgstr "Secteur:"
-#: src/guidance/WebConnectionResults.js:69
+#: src/guidance/WebConnectionResults.js:95
msgid "See headers"
msgstr "Voir les en-têtes"
@@ -4134,48 +4243,58 @@ msgstr "Voir les en-têtes"
#~ msgid "Select a reason for adding this outside domain"
#~ msgstr "Sélectionnez une raison pour l'ajout de ce domaine extérieur"
-#: src/admin/AdminDomains.js:527
+#: src/admin/AdminDomains.js:530
msgid "Select a reason for removing this domain"
msgstr "Sélectionnez une raison pour la suppression de ce domaine"
-#: src/admin/AdminDomainModal.js:278
+#: src/admin/AdminDomainModal.js:302
msgid "Select a state that best describes the asset in relation to your organization."
msgstr "Sélectionnez l'état qui décrit le mieux l'actif par rapport à votre organisation."
-#: src/admin/DomainUpdateList.js:256
+#: src/admin/DomainUpdateList.js:257
msgid "Select All"
msgstr "Tout sélectionner"
-#: src/admin/DomainUpdateList.js:284
+#: src/admin/DomainUpdateList.js:285
msgid "Select all {domainCount} domains"
msgstr "Sélectionner tous les {domainCount} domaines"
-#: src/admin/AdminPage.js:93
-#: src/admin/AdminPage.js:110
+#: src/admin/AdminPage.js:94
+#: src/admin/AdminPage.js:111
msgid "Select an organization"
msgstr "Sélectionnez une organisation"
-#: src/admin/AdminPage.js:191
+#: src/admin/AdminPage.js:192
msgid "Select an organization to view admin options"
msgstr "Sélectionnez une organisation pour voir les options d'administration"
-#: src/admin/TagForm.js:265
+#: src/admin/TagForm.js:266
msgid "Select an ownership level"
msgstr "Sélectionner un niveau de propriété"
-#: src/auth/LanguageSelect.js:22
+#: src/auth/LanguageSelect.js:23
msgid "Select Preferred Language"
msgstr "Sélectionnez votre langue préférée"
+#: src/admin/CvdEnrollmentForm.js:186
+#: src/admin/CvdEnrollmentForm.js:214
+#: src/admin/CvdEnrollmentForm.js:242
+msgid "Select requirement"
+msgstr "Sélectionner une exigence"
+
+#: src/admin/CvdEnrollmentForm.js:155
+msgid "Select severity"
+msgstr "Sélectionner la gravité"
+
#: src/userOnboarding/config/tourSteps.js:178
msgid "Select the data period to view."
msgstr "Sélectionnez la période de données à visualiser."
-#: src/utilities/fieldRequirements.js:78
+#: src/utilities/fieldRequirements.js:79
msgid "Selector cannot be empty"
msgstr "Le sélecteur ne peut pas être vide"
-#: src/utilities/fieldRequirements.js:82
+#: src/utilities/fieldRequirements.js:83
msgid "Selector must be either a string containing alphanumeric characters and periods, starting and ending with only alphanumeric characters, or an asterisk"
msgstr "Le sélecteur doit être soit une chaîne contenant des caractères alphanumériques et des points, commençant et se terminant uniquement par des caractères alphanumériques, soit un astérisque"
@@ -4187,7 +4306,7 @@ msgstr "Le sélecteur doit être soit une chaîne contenant des caractères alph
#~ msgid "Selector must be string ending in '._domainkey'"
#~ msgstr "Le sélecteur doit être une chaîne se terminant par '._domainkey'"
-#: src/guidance/WebTLSResults.js:425
+#: src/guidance/WebTLSResults.js:426
msgid "Self-signed:"
msgstr "Auto-signé :"
@@ -4196,7 +4315,7 @@ msgstr "Auto-signé :"
msgid "September"
msgstr "Septembre"
-#: src/guidance/WebTLSResults.js:407
+#: src/guidance/WebTLSResults.js:408
msgid "Serial:"
msgstr "En série :"
@@ -4204,8 +4323,8 @@ msgstr "En série :"
msgid "Service Level Agreement"
msgstr "Accord sur le niveau de service"
-#: src/organizations/Organizations.js:94
-#: src/organizations/Organizations.js:195
+#: src/organizations/Organizations.js:95
+#: src/organizations/Organizations.js:196
msgid "Services"
msgstr "Services"
@@ -4213,15 +4332,15 @@ msgstr "Services"
msgid "Services: {domainCount}"
msgstr "Services: {domainCount}"
-#: src/guidance/AdditionalFindings.js:128
+#: src/guidance/AdditionalFindings.js:129
msgid "Severity"
msgstr "Sévérité"
-#: src/components/TrackerTable.js:296
+#: src/components/TrackerTable.js:295
msgid "Show {pageSize}"
msgstr "Voir {pageSize}"
-#: src/admin/AdminDomains.js:331
+#: src/admin/AdminDomains.js:336
msgid "Show Domain List"
msgstr "Afficher la liste des domaines"
@@ -4230,7 +4349,7 @@ msgstr "Afficher la liste des domaines"
msgid "Show password"
msgstr "Afficher le mot de passe"
-#: src/admin/AdminDomains.js:331
+#: src/admin/AdminDomains.js:336
msgid "Show Update List"
msgstr "Afficher la liste des mises à jour"
@@ -4239,21 +4358,21 @@ msgstr "Afficher la liste des mises à jour"
#~ msgid "Showing data for period:"
#~ msgstr "Affichage des données pour la période:"
-#: src/dmarc/DmarcByDomainPage.js:230
-#: src/dmarc/DmarcReportPage.js:671
+#: src/dmarc/DmarcByDomainPage.js:231
+#: src/dmarc/DmarcReportPage.js:672
msgid "Showing data for period: "
msgstr "Affichage des données pour la période: "
-#: src/guidance/WebTLSResults.js:309
+#: src/guidance/WebTLSResults.js:310
msgid "Shows if all the certificates in the bundle provided by the server were sent in the correct order."
msgstr "Indique si tous les certificats du paquet fourni par le serveur ont été envoyés dans le bon ordre."
-#: src/guidance/WebTLSResults.js:298
+#: src/guidance/WebTLSResults.js:299
msgid "Shows if the certificate bundle provided from the server included the root certificate."
msgstr "Indique si le paquet de certificats fourni par le serveur comprend le certificat racine."
-#: src/domains/DomainsPage.js:295
-#: src/organizationDetails/OrganizationDomains.js:232
+#: src/domains/DomainsPage.js:299
+#: src/organizationDetails/OrganizationDomains.js:237
msgid "Shows if the domain has a valid SSL certificate."
msgstr "Indique si le domaine dispose d'un certificat SSL valide."
@@ -4272,13 +4391,13 @@ msgstr "Indique si le domaine dispose d'un certificat SSL valide."
#~ msgid "Shows if the domain is policy compliant."
#~ msgstr "Indique si le domaine est conforme à la politique."
-#: src/domains/DomainsPage.js:303
-#: src/organizationDetails/OrganizationDomains.js:240
+#: src/domains/DomainsPage.js:307
+#: src/organizationDetails/OrganizationDomains.js:245
msgid "Shows if the domain meets the DomainKeys Identified Mail (DKIM) requirements."
msgstr "Indique si le domaine répond aux exigences de DomainKeys Identified Mail (DKIM)."
-#: src/domains/DomainsPage.js:294
-#: src/organizationDetails/OrganizationDomains.js:231
+#: src/domains/DomainsPage.js:298
+#: src/organizationDetails/OrganizationDomains.js:236
msgid "Shows if the domain meets the HSTS requirements."
msgstr "Indique si le domaine répond aux exigences du HSTS."
@@ -4288,73 +4407,73 @@ msgstr "Indique si le domaine répond aux exigences du HSTS."
#~ msgid "Shows if the domain meets the Hypertext Transfer ol Secure (HTTPS) requirements."
#~ msgstr "Indique si le domaine répond aux exigences de Hypertext Transfer ol Secure (HTTPS)."
-#: src/domains/DomainsPage.js:292
-#: src/organizationDetails/OrganizationDomains.js:229
+#: src/domains/DomainsPage.js:296
+#: src/organizationDetails/OrganizationDomains.js:234
msgid "Shows if the domain meets the Hypertext Transfer Protocol Secure (HTTPS) requirements."
msgstr "Indique si le domaine répond aux exigences du protocole de transfert hypertexte sécurisé (HTTPS)."
-#: src/domains/DomainsPage.js:307
-#: src/organizationDetails/OrganizationDomains.js:244
+#: src/domains/DomainsPage.js:311
+#: src/organizationDetails/OrganizationDomains.js:249
msgid "Shows if the domain meets the Message Authentication, Reporting, and Conformance (DMARC) requirements."
msgstr "Indique si le domaine répond aux exigences de Message Authentication, Reporting, and Conformance (DMARC)."
-#: src/domains/DomainsPage.js:300
-#: src/organizationDetails/OrganizationDomains.js:237
+#: src/domains/DomainsPage.js:304
+#: src/organizationDetails/OrganizationDomains.js:242
msgid "Shows if the domain meets the Sender Policy Framework (SPF) requirements."
msgstr "Indique si le domaine répond aux exigences du Sender Policy Framework (SPF)."
-#: src/domains/DomainsPage.js:296
-#: src/organizationDetails/OrganizationDomains.js:233
+#: src/domains/DomainsPage.js:300
+#: src/organizationDetails/OrganizationDomains.js:238
msgid "Shows if the domain uses acceptable protocols."
msgstr "Indique si le domaine utilise des protocoles acceptables."
-#: src/domains/DomainsPage.js:297
-#: src/organizationDetails/OrganizationDomains.js:234
+#: src/domains/DomainsPage.js:301
+#: src/organizationDetails/OrganizationDomains.js:239
msgid "Shows if the domain uses only ciphers that are strong or acceptable."
msgstr "Indique si le domaine utilise uniquement des ciphers forts ou acceptables."
-#: src/domains/DomainsPage.js:298
-#: src/organizationDetails/OrganizationDomains.js:235
+#: src/domains/DomainsPage.js:302
+#: src/organizationDetails/OrganizationDomains.js:240
msgid "Shows if the domain uses only curves that are strong or acceptable."
msgstr "Indique si le domaine utilise uniquement des courbes fortes ou acceptables"
-#: src/guidance/WebTLSResults.js:267
+#: src/guidance/WebTLSResults.js:268
msgid "Shows if the hostname on the server certificate matches the the hostname from the HTTP request."
msgstr "Indique si le nom d'hôte figurant sur le certificat du serveur correspond au nom d'hôte figurant dans la requête HTTP."
-#: src/guidance/WebConnectionResults.js:200
+#: src/guidance/WebConnectionResults.js:205
msgid "Shows if the HSTS (HTTP Strict Transport Security) header is present."
msgstr "Indique si l'en-tête HSTS (HTTP Strict Transport Security) est présent."
-#: src/guidance/WebConnectionResults.js:227
+#: src/guidance/WebConnectionResults.js:223
msgid "Shows if the HSTS header includes the includeSubdomains directive."
msgstr "Indique si l'en-tête HSTS inclut la directive includeSubdomains."
-#: src/guidance/WebConnectionResults.js:218
+#: src/guidance/WebConnectionResults.js:217
msgid "Shows if the HSTS header includes the preload directive."
msgstr "Indique si l'en-tête HSTS inclut la directive preload."
-#: src/guidance/WebConnectionResults.js:124
+#: src/guidance/WebConnectionResults.js:139
msgid "Shows if the HTTP connection is live."
msgstr "Indique si la connexion HTTP est active."
-#: src/guidance/WebConnectionResults.js:134
+#: src/guidance/WebConnectionResults.js:145
msgid "Shows if the HTTP endpoint upgrades to HTTPS upgrade immediately, eventually (after the first redirect), or never."
msgstr "Indique si le point d'extrémité HTTP passe à la mise à niveau HTTPS immédiatement, éventuellement (après la première redirection) ou jamais."
-#: src/guidance/WebConnectionResults.js:170
+#: src/guidance/WebConnectionResults.js:179
msgid "Shows if the HTTPS connection is live."
msgstr "Indique si la connexion HTTPS est active."
-#: src/guidance/WebConnectionResults.js:180
+#: src/guidance/WebConnectionResults.js:185
msgid "Shows if the HTTPS endpoint downgrades to unsecured HTTP immediately, eventually, or never."
msgstr "Indique si le point de terminaison HTTPS passe en HTTP non sécurisé immédiatement, éventuellement ou jamais."
-#: src/guidance/WebTLSResults.js:278
+#: src/guidance/WebTLSResults.js:279
msgid "Shows if the leaf certificate includes the \"OCSP Must-Staple\" extension."
msgstr "Indique si le certificat feuille comprend l'extension \"OCSP Must-Staple\"."
-#: src/guidance/WebTLSResults.js:288
+#: src/guidance/WebTLSResults.js:289
msgid "Shows if the leaf certificate is an Extended Validation Certificate."
msgstr "Indique si le certificat de la feuille est un certificat de validation étendue."
@@ -4362,35 +4481,35 @@ msgstr "Indique si le certificat de la feuille est un certificat de validation
#~ msgid "Shows if the received certificate chain contains Entrust as the CA."
#~ msgstr "Indique si la chaîne de certificats reçue contient Entrust en tant qu'autorité de certification."
-#: src/guidance/WebTLSResults.js:320
+#: src/guidance/WebTLSResults.js:321
msgid "Shows if the received certificates are free from the use of the deprecated SHA-1 algorithm."
msgstr "Indique si les certificats reçus sont exempts de l'utilisation de l'algorithme SHA-1 déprécié."
-#: src/guidance/WebTLSResults.js:331
+#: src/guidance/WebTLSResults.js:332
msgid "Shows if the received certificates are not relying on a distrusted Symantec root certificate."
msgstr "Indique si les certificats reçus ne reposent pas sur un certificat racine Symantec douteux."
-#: src/guidance/WebTLSResults.js:207
+#: src/guidance/WebTLSResults.js:208
msgid "Shows if the server was found to be vulnerable to the Heartbleed vulnerability."
msgstr "Indique si le serveur s'est avéré vulnérable à la faille Heartbleed."
-#: src/guidance/WebTLSResults.js:220
+#: src/guidance/WebTLSResults.js:221
msgid "Shows if the server was found to be vulnerable to the ROBOT vulnerability."
msgstr "Indique si le serveur a été jugé vulnérable à la vulnérabilité ROBOT."
-#: src/guidance/WebConnectionResults.js:209
+#: src/guidance/WebConnectionResults.js:211
msgid "Shows the duration of time, in seconds, that the HSTS header is valid."
msgstr "Indique la durée, en secondes, pendant laquelle l'en-tête HSTS est valide."
-#: src/organizations/Organizations.js:195
+#: src/organizations/Organizations.js:196
msgid "Shows the number of domains that the organization is in control of."
msgstr "Indique le nombre de domaines dont l'organisation a le contrôle."
-#: src/organizations/Organizations.js:202
+#: src/organizations/Organizations.js:203
msgid "Shows the percentage of domains which have a valid DMARC policy configuration."
msgstr "Indique le pourcentage de domaines qui ont une configuration de politique DMARC valide."
-#: src/organizations/Organizations.js:198
+#: src/organizations/Organizations.js:199
msgid "Shows the percentage of domains which have HTTPS configured and upgrade HTTP connections to HTTPS"
msgstr "Indique le pourcentage de domaines qui ont configuré HTTPS et qui mettent à niveau les connexions HTTP vers HTTPS."
@@ -4398,7 +4517,7 @@ msgstr "Indique le pourcentage de domaines qui ont configuré HTTPS et qui mette
#~ msgid "Shows the percentage of domains which have HTTPS configured and upgrade HTTP connections to HTTPS (ITPIN 6.1.1)"
#~ msgstr "Indique le pourcentage de domaines qui ont configuré HTTPS et qui mettent à niveau les connexions HTTP vers HTTPS (ITPIN 6.1.1)."
-#: src/dmarc/DmarcByDomainPage.js:316
+#: src/dmarc/DmarcByDomainPage.js:317
msgid "Shows the percentage of emails from the domain that fail both SPF and DKIM requirements."
msgstr "Indique le pourcentage de courriels provenant du domaine qui ne satisfont pas aux exigences SPF et DKIM."
@@ -4406,7 +4525,7 @@ msgstr "Indique le pourcentage de courriels provenant du domaine qui ne satisfon
#~ msgid "Shows the percentage of emails from the domain that fail both SPF and DKIM requirments."
#~ msgstr "Indique le pourcentage d'e-mails du domaine qui ne répondent pas aux exigences SPF et DKIM."
-#: src/dmarc/DmarcByDomainPage.js:312
+#: src/dmarc/DmarcByDomainPage.js:313
msgid "Shows the percentage of emails from the domain that fail DKIM requirements, but pass SPF requirements."
msgstr "Indique le pourcentage de courriels provenant du domaine qui ne répondent pas aux exigences DKIM, mais qui répondent aux exigences SPF."
@@ -4414,7 +4533,7 @@ msgstr "Indique le pourcentage de courriels provenant du domaine qui ne réponde
#~ msgid "Shows the percentage of emails from the domain that fail DKIM requirments, but pass SPF requirments."
#~ msgstr "Indique le pourcentage d'e-mails du domaine qui ne répondent pas aux exigences DKIM, mais qui répondent aux exigences SPF."
-#: src/dmarc/DmarcByDomainPage.js:308
+#: src/dmarc/DmarcByDomainPage.js:309
msgid "Shows the percentage of emails from the domain that fail SPF requirements, but pass DKIM requirements."
msgstr "Indique le pourcentage de courriels provenant du domaine qui ne répondent pas aux exigences SPF, mais qui répondent aux exigences DKIM."
@@ -4422,7 +4541,7 @@ msgstr "Indique le pourcentage de courriels provenant du domaine qui ne réponde
#~ msgid "Shows the percentage of emails from the domain that fail SPF requirments, but pass DKIM requirments."
#~ msgstr "Indique le pourcentage d'e-mails du domaine qui ne répondent pas aux exigences SPF, mais qui répondent aux exigences DKIM."
-#: src/dmarc/DmarcByDomainPage.js:304
+#: src/dmarc/DmarcByDomainPage.js:305
msgid "Shows the percentage of emails from the domain that have passed both SPF and DKIM requirements."
msgstr "Indique le pourcentage de courriels provenant du domaine qui ont satisfait aux exigences SPF et DKIM."
@@ -4430,7 +4549,7 @@ msgstr "Indique le pourcentage de courriels provenant du domaine qui ont satisfa
#~ msgid "Shows the percentage of emails from the domain that have passed both SPF and DKIM requirments."
#~ msgstr "Indique le pourcentage d'e-mails du domaine qui ont passé les exigences SPF et DKIM."
-#: src/dmarc/DmarcByDomainPage.js:300
+#: src/dmarc/DmarcByDomainPage.js:301
msgid "Shows the total number of emails that have been sent by this domain during the selected time range."
msgstr "Indique le nombre total d'e-mails qui ont été envoyés par ce domaine pendant la période sélectionnée."
@@ -4438,10 +4557,10 @@ msgstr "Indique le nombre total d'e-mails qui ont été envoyés par ce domaine
#~ msgid "Siganture Hash:"
#~ msgstr "Siganture Hash :"
-#: src/app/FloatingMenu.js:197
-#: src/app/TopBanner.js:105
-#: src/app/TopBanner.js:137
-#: src/auth/SignInPage.js:146
+#: src/app/FloatingMenu.js:198
+#: src/app/TopBanner.js:106
+#: src/app/TopBanner.js:138
+#: src/auth/SignInPage.js:147
msgid "Sign In"
msgstr "Se connecter"
@@ -4449,34 +4568,34 @@ msgstr "Se connecter"
#~ msgid "Sign in with your username and password."
#~ msgstr "Connectez-vous avec votre nom d'utilisateur et votre mot de passe."
-#: src/auth/SignInPage.js:58
-#: src/auth/TwoFactorAuthenticatePage.js:54
+#: src/auth/SignInPage.js:59
+#: src/auth/TwoFactorAuthenticatePage.js:55
msgid "Sign In."
msgstr "Se connecter."
-#: src/app/FloatingMenu.js:192
-#: src/app/TopBanner.js:124
+#: src/app/FloatingMenu.js:193
+#: src/app/TopBanner.js:125
msgid "Sign Out"
msgstr "Déconnexion"
-#: src/app/FloatingMenu.js:48
-#: src/app/TopBanner.js:42
+#: src/app/FloatingMenu.js:49
+#: src/app/TopBanner.js:43
msgid "Sign Out."
msgstr "Déconnexion."
-#: src/guidance/WebTLSResults.js:393
+#: src/guidance/WebTLSResults.js:394
msgid "Signature Hash:"
msgstr "Signature Hash :"
-#: src/userOnboarding/components/TourComponent.js:108
+#: src/userOnboarding/components/TourComponent.js:109
msgid "Skip"
msgstr "Sauter"
-#: src/app/App.js:108
+#: src/app/App.js:109
msgid "Skip to main content"
msgstr "Passer au contenu principal"
-#: src/admin/OrganizationInformation.js:357
+#: src/admin/OrganizationInformation.js:358
msgid "Slug:"
msgstr "Slug:"
@@ -4488,34 +4607,34 @@ msgstr "Slug:"
msgid "Sort by: "
msgstr "Trier par: "
-#: src/dmarc/DmarcReportPage.js:172
+#: src/dmarc/DmarcReportPage.js:173
msgid "Source IP Address"
msgstr "Adresse IP source"
-#: src/guidance/EmailGuidance.js:242
+#: src/guidance/EmailGuidance.js:241
msgid "sp:"
msgstr "sp:"
-#: src/domains/DomainsPage.js:300
-#: src/organizationDetails/OrganizationDomains.js:237
+#: src/domains/DomainsPage.js:304
+#: src/organizationDetails/OrganizationDomains.js:242
msgid "SPF"
msgstr "SPF"
-#: src/dmarc/DmarcReportPage.js:210
+#: src/dmarc/DmarcReportPage.js:211
msgid "SPF Aligned"
msgstr "Alignement du SPF"
-#: src/dmarc/DmarcReportPage.js:197
+#: src/dmarc/DmarcReportPage.js:198
msgid "SPF Domains"
msgstr "Domaine SPF"
-#: src/dmarc/DmarcReportPage.js:467
+#: src/dmarc/DmarcReportPage.js:468
msgid "SPF Failure Table"
msgstr "Tableau des échecs du SPF"
-#: src/dmarc/DmarcReportPage.js:475
-#: src/dmarc/DmarcReportPage.js:505
-#: src/dmarc/DmarcReportPage.js:629
+#: src/dmarc/DmarcReportPage.js:476
+#: src/dmarc/DmarcReportPage.js:506
+#: src/dmarc/DmarcReportPage.js:630
msgid "SPF Failures by IP Address"
msgstr "Défaillances du SPF par adresse IP"
@@ -4527,12 +4646,12 @@ msgstr "Défaillances du SPF par adresse IP"
msgid "SPF record is deployed and valid"
msgstr "L'enregistrement SPF est déployé et valide"
-#: src/dmarc/DmarcReportPage.js:214
+#: src/dmarc/DmarcReportPage.js:215
msgid "SPF Results"
msgstr "Résultats du SPF"
-#: src/domains/DomainsPage.js:131
-#: src/organizationDetails/OrganizationDomains.js:105
+#: src/domains/DomainsPage.js:133
+#: src/organizationDetails/OrganizationDomains.js:106
msgid "SPF Status"
msgstr "Statut SPF"
@@ -4540,21 +4659,21 @@ msgstr "Statut SPF"
msgid "SPF Summary"
msgstr "Résumé du SPF"
-#: src/admin/AdminDomains.js:187
-#: src/domains/DomainCard.js:192
-#: src/domains/DomainsPage.js:143
-#: src/domains/DomainsPage.js:318
-#: src/organizationDetails/OrganizationDomains.js:120
-#: src/organizationDetails/OrganizationDomains.js:261
+#: src/admin/AdminDomains.js:189
+#: src/domains/DomainCard.js:194
+#: src/domains/DomainsPage.js:145
+#: src/domains/DomainsPage.js:322
+#: src/organizationDetails/OrganizationDomains.js:121
+#: src/organizationDetails/OrganizationDomains.js:266
msgid "SPIN Top 25"
msgstr "AMOPS 25 principales"
-#: src/guidance/AdditionalFindings.js:102
+#: src/guidance/AdditionalFindings.js:103
msgid "SPIN Top 25 Vulnerabilities"
msgstr "AMOPS 25 principales vulnérabilités"
-#: src/domains/DomainsPage.js:318
-#: src/organizationDetails/OrganizationDomains.js:261
+#: src/domains/DomainsPage.js:322
+#: src/organizationDetails/OrganizationDomains.js:266
msgid "SPIN Top 25 vulnerability detected in additional findings."
msgstr "La vulnérabilité AMOPS 25 principales a été détectée dans d'autres résultats."
@@ -4578,7 +4697,7 @@ msgstr "La vulnérabilité AMOPS 25 principales a été détectée dans d'autres
#~ msgid "Staging"
#~ msgstr "Dév"
-#: src/organizationDetails/OrganizationDomains.js:249
+#: src/organizationDetails/OrganizationDomains.js:254
msgid "STAGING"
msgstr "DÉV"
@@ -4590,7 +4709,7 @@ msgstr "Début de la visite"
#~ msgid "State: {lastPortState}"
#~ msgstr "État : {lastPortState}"
-#: src/guidance/AdditionalFindings.js:394
+#: src/guidance/AdditionalFindings.js:395
msgid "State: {lastPortStateTranslated}"
msgstr "État : {lastPortStateTranslated}"
@@ -4598,7 +4717,7 @@ msgstr "État : {lastPortStateTranslated}"
#~ msgid "Static IP Address: <0>52.138.13.280>"
#~ msgstr "Adresse IP statique : <0>52.138.13.280>"
-#: src/domains/DomainListFilters.js:102
+#: src/domains/DomainListFilters.js:103
msgid "Status"
msgstr "Statut"
@@ -4606,11 +4725,11 @@ msgstr "Statut"
#~ msgid "Status or tag"
#~ msgstr "Statut ou étiquette"
-#: src/domains/DomainListFilters.js:134
+#: src/domains/DomainListFilters.js:135
msgid "Status Value"
msgstr "Valeur du statut"
-#: src/guidance/WebConnectionResults.js:61
+#: src/guidance/WebConnectionResults.js:83
msgid "Status:"
msgstr "Statut :"
@@ -4618,19 +4737,19 @@ msgstr "Statut :"
#~ msgid "Status/Tag"
#~ msgstr "Statut/étiquette"
-#: src/admin/AdminDomains.js:266
+#: src/admin/AdminDomains.js:271
msgid "Status/Tag/State"
msgstr "Statut/étiquette/état"
-#: src/guidance/CveIgnorer.js:116
+#: src/guidance/CveIgnorer.js:117
msgid "Stop Ignoring CVE"
msgstr "Cessez d'ignorer CVE"
-#: src/guidance/CveIgnorer.js:79
+#: src/guidance/CveIgnorer.js:80
msgid "Stopped ignoring CVE"
msgstr "Cesser d'ignorer CVE"
-#: src/guidance/WebTLSResults.js:31
+#: src/guidance/WebTLSResults.js:32
msgid "strong"
msgstr "fort"
@@ -4642,12 +4761,12 @@ msgstr "fort"
#~ msgid "Strong Curves:"
#~ msgstr "Courbes fortes:"
-#: src/guidance/WebTLSResults.js:404
+#: src/guidance/WebTLSResults.js:405
msgid "Subject:"
msgstr "Sujet :"
-#: src/auth/ForgotPasswordPage.js:83
-#: src/auth/TwoFactorAuthenticatePage.js:120
+#: src/auth/ForgotPasswordPage.js:84
+#: src/auth/TwoFactorAuthenticatePage.js:121
msgid "Submit"
msgstr "Soumettre"
@@ -4657,18 +4776,18 @@ msgstr "Soumettez des rapports de bogues et des demandes de fonctionnalités via
#. placeholder {0}: ignoreCve.result.domain
#. placeholder {1}: ignoreCve.result.ignoredCves && JSON.stringify(ignoreCve.result.ignoredCves)
-#: src/guidance/CveIgnorer.js:32
+#: src/guidance/CveIgnorer.js:33
msgid "Successfully ignored CVE for domain {0}. New ignored CVEs: \"{1}\"."
msgstr "CVE ignoré avec succès pour le domaine {0}. Nouvelles CVE ignorées : « {1} »."
#. placeholder {0}: removeUserFromOrg.result.user.userName
-#: src/admin/UserListModal.js:153
+#: src/admin/UserListModal.js:154
msgid "Successfully removed user {0}."
msgstr "L'utilisateur {0} a été supprimé."
#. placeholder {0}: unignoreCve.result.domain
#. placeholder {1}: unignoreCve.result.ignoredCves && JSON.stringify(unignoreCve.result.ignoredCves)
-#: src/guidance/CveIgnorer.js:81
+#: src/guidance/CveIgnorer.js:82
msgid "Successfully stopped ignoring CVE for domain \"{0}\". New ignored CVEs: \"{1}\"."
msgstr "Arrêt réussi de l'ignorance des CVE pour le domaine « {0} ». Nouvelles CVE ignorées : « {1} »."
@@ -4688,11 +4807,11 @@ msgstr "Résumé"
#~ msgid "Summary Tier:"
#~ msgstr "Résumé Tier :"
-#: src/admin/AdminPage.js:229
+#: src/admin/AdminPage.js:230
msgid "Super Admin Menu:"
msgstr "Super Admin Menu :"
-#: src/admin/UserListModal.js:268
+#: src/admin/UserListModal.js:269
msgid "SUPER_ADMIN"
msgstr "SUPER_ADMIN"
@@ -4700,7 +4819,7 @@ msgstr "SUPER_ADMIN"
#~ msgid "Supports ECDH Key Exchange:"
#~ msgstr "Supporte l'échange de clés ECDH:"
-#: src/app/TopBanner.js:63
+#: src/app/TopBanner.js:64
msgid "Symbol of the Government of Canada"
msgstr "Symbole du gouvernement du Canada"
@@ -4708,37 +4827,37 @@ msgstr "Symbole du gouvernement du Canada"
msgid "System-designated tags appear here."
msgstr "Les étiquettes désignées par le système apparaissent ici."
-#: src/admin/AdminDomains.js:237
-#: src/admin/AuditLogTable.js:80
-#: src/domains/DomainListFilters.js:105
+#: src/admin/AdminDomains.js:242
+#: src/admin/AuditLogTable.js:81
+#: src/domains/DomainListFilters.js:106
msgid "Tag"
msgstr "Tag"
-#: src/admin/DomainUpdateList.js:313
+#: src/admin/DomainUpdateList.js:314
msgid "Tag Assets"
msgstr "Baliser les actifs"
-#: src/admin/TagForm.js:83
+#: src/admin/TagForm.js:84
msgid "Tag created"
msgstr "Tag créé"
-#: src/admin/TagForm.js:157
+#: src/admin/TagForm.js:158
msgid "Tag not updated"
msgstr "Etiquette non mise à jour"
-#: src/admin/TagForm.js:38
+#: src/admin/TagForm.js:39
msgid "Tag updated"
msgstr "Tag mis à jour"
-#: src/organizationDetails/OrganizationDomains.js:248
+#: src/organizationDetails/OrganizationDomains.js:253
msgid "Tag used to show domains as a production environment."
msgstr "Balise utilisée pour montrer que les domaines sont un environnement de production."
-#: src/organizationDetails/OrganizationDomains.js:249
+#: src/organizationDetails/OrganizationDomains.js:254
msgid "Tag used to show domains as a staging environment."
msgstr "Balise utilisée pour montrer les domaines comme un environnement d'essai."
-#: src/organizationDetails/OrganizationDomains.js:250
+#: src/organizationDetails/OrganizationDomains.js:255
msgid "Tag used to show domains as a test environment."
msgstr "Balise utilisée pour montrer les domaines en tant qu'environnement de test."
@@ -4746,25 +4865,25 @@ msgstr "Balise utilisée pour montrer les domaines en tant qu'environnement de t
#~ msgid "Tag used to show domains as hidden from affecting the organization summary scores."
#~ msgstr "Balise utilisée pour indiquer que les domaines sont cachés et n'affectent pas les notes de synthèse de l'organisation."
-#: src/organizationDetails/OrganizationDomains.js:247
+#: src/organizationDetails/OrganizationDomains.js:252
msgid "Tag used to show domains as new to the system."
msgstr "Étiquette utilisée pour indiquer que les domaines sont nouveaux dans le système."
-#: src/organizationDetails/OrganizationDomains.js:251
+#: src/organizationDetails/OrganizationDomains.js:256
msgid "Tag used to show domains as web-hosting."
msgstr "Balise utilisée pour afficher les domaines en tant qu'hébergement web."
-#: src/domains/DomainsPage.js:314
-#: src/organizationDetails/OrganizationDomains.js:257
+#: src/domains/DomainsPage.js:318
+#: src/organizationDetails/OrganizationDomains.js:262
msgid "Tag used to show domains have a wildcard resolver as a sibling."
msgstr "Balise utilisée pour montrer que les domaines ont un résolveur de caractères génériques comme frère ou sœur."
-#: src/domains/DomainsPage.js:316
-#: src/organizationDetails/OrganizationDomains.js:259
+#: src/domains/DomainsPage.js:320
+#: src/organizationDetails/OrganizationDomains.js:264
msgid "Tag used to show domains resolve to a wildcard entry."
msgstr "Étiquette utilisée pour afficher les domaines résolus par une entrée générique."
-#: src/organizationDetails/OrganizationDomains.js:252
+#: src/organizationDetails/OrganizationDomains.js:257
msgid "Tag used to show domains that are not active."
msgstr "Balise utilisée pour afficher les domaines qui ne sont pas actifs."
@@ -4772,13 +4891,13 @@ msgstr "Balise utilisée pour afficher les domaines qui ne sont pas actifs."
#~ msgid "Tag used to show domains that are out of the organization's scope."
#~ msgstr "Balise utilisée pour indiquer les domaines qui sont hors de la portée de l'organisation."
-#: src/domains/DomainsPage.js:311
-#: src/organizationDetails/OrganizationDomains.js:254
+#: src/domains/DomainsPage.js:315
+#: src/organizationDetails/OrganizationDomains.js:259
msgid "Tag used to show domains that are possibly blocked by a firewall."
msgstr "Balise utilisée pour afficher les domaines susceptibles d'être bloqués par un pare-feu."
-#: src/domains/DomainsPage.js:317
-#: src/organizationDetails/OrganizationDomains.js:260
+#: src/domains/DomainsPage.js:321
+#: src/organizationDetails/OrganizationDomains.js:265
msgid "Tag used to show domains that have a pending web scan."
msgstr "Balise utilisée pour afficher les domaines dont l'analyse web est en cours."
@@ -4786,8 +4905,8 @@ msgstr "Balise utilisée pour afficher les domaines dont l'analyse web est en co
#~ msgid "Tag used to show domains that have an Entrust certificate."
#~ msgstr "Balise utilisée pour afficher les domaines disposant d'un certificat Entrust."
-#: src/domains/DomainsPage.js:310
-#: src/organizationDetails/OrganizationDomains.js:253
+#: src/domains/DomainsPage.js:314
+#: src/organizationDetails/OrganizationDomains.js:258
msgid "Tag used to show domains that have an rcode status of NXDOMAIN"
msgstr "Balise utilisée pour afficher les domaines dont le code rcode est NXDOMAIN"
@@ -4816,7 +4935,7 @@ msgstr "le SCT soit identifié comme la source; et"
msgid "TBS reserves the right to refuse service, and may reject your application for an account, or cancel an existing account, for any reason, at our sole discretion."
msgstr "TBS se réserve le droit de refuser le service, de rejeter votre demande de compte ou d'annuler un compte existant, pour quelque raison que ce soit, à sa seule discrétion."
-#: src/guidance/GuidanceTagDetails.js:57
+#: src/guidance/GuidanceTagDetails.js:58
msgid "Technical implementation guidance:"
msgstr "Conseils techniques de mise en œuvre :"
@@ -4824,13 +4943,13 @@ msgstr "Conseils techniques de mise en œuvre :"
msgid "Termination"
msgstr "Terminaison"
-#: src/app/App.js:427
-#: src/app/FloatingMenu.js:225
+#: src/app/App.js:428
+#: src/app/FloatingMenu.js:226
#: src/app/SlideMessage.js:92
msgid "Terms & conditions"
msgstr "Avis"
-#: src/app/App.js:262
+#: src/app/App.js:263
msgid "Terms & Conditions"
msgstr "Termes et conditions"
@@ -4845,11 +4964,11 @@ msgstr "Conditions d'utilisation"
#~ msgid "Test"
#~ msgstr "Test"
-#: src/organizationDetails/OrganizationDomains.js:250
+#: src/organizationDetails/OrganizationDomains.js:255
msgid "TEST"
msgstr "TEST"
-#: src/admin/AdminDomains.js:551
+#: src/admin/AdminDomains.js:554
msgid "The \"Asset State\" describes how the domain relates to your organization. These states are used by Tracker to give you a more accurate summary of your attack surface."
msgstr "El «Estado del Activo» describe cómo el dominio se relaciona con su organización. Suivi utiliza estos estados para ofrecerle un resumen más preciso de su superficie de ataque."
@@ -4861,7 +4980,7 @@ msgstr "Le guide « Getting Started » et la section FAQ0> vous aideront à co
#~ msgid "The <0>Tracker0> platform"
#~ msgstr "la plateforme <0>Tracker0>;"
-#: src/dmarc/DmarcReportPage.js:261
+#: src/dmarc/DmarcReportPage.js:262
msgid "The address/domain used in the \"From\" field."
msgstr "Adresse/domaine utilisé(e) dans le champ \"From\"."
@@ -4877,7 +4996,7 @@ msgstr "Les avis, conseils ou services qui vous sont fournis par TBS le sont “
msgid "The asset state shows the domain's relation to your organization. Only \"approved\" assets are counted in summaries."
msgstr "L'état du bien montre la relation du domaine avec votre organisation. Seuls les biens approuvés sont pris en compte dans les résumés."
-#: src/dmarc/DmarcReportPage.js:285
+#: src/dmarc/DmarcReportPage.js:286
msgid "The DMARC enforcement action that the receiver took, either none, quarantine, or reject."
msgstr "La mesure d'application de DMARC prise par le destinataire, soit aucune, soit la mise en quarantaine, soit le rejet."
@@ -4886,21 +5005,21 @@ msgstr "La mesure d'application de DMARC prise par le destinataire, soit aucune,
#~ msgid "The DMARC Summaries data has not been updated since December 2024. We are working to refresh this information. Please note that any displayed data may not reflect current email security status."
#~ msgstr "Les données des sommaires DMARC n'ont pas été mises à jour depuis décembre 2024. Nous travaillons à actualiser ces informations. Veuillez noter que les données affichées pourraient ne pas refléter l'état actuel de la sécurité des courriels."
-#: src/dmarc/DmarcByDomainPage.js:297
-#: src/domains/DomainsPage.js:288
-#: src/organizationDetails/OrganizationDomains.js:225
+#: src/dmarc/DmarcByDomainPage.js:298
+#: src/domains/DomainsPage.js:292
+#: src/organizationDetails/OrganizationDomains.js:230
msgid "The domain address."
msgstr "L'adresse du domaine."
-#: src/dmarc/DmarcReportPage.js:241
+#: src/dmarc/DmarcReportPage.js:242
msgid "The domains used for DKIM validation."
msgstr "Les domaines utilisés pour la validation DKIM."
-#: src/guidance/WebTLSResults.js:61
+#: src/guidance/WebTLSResults.js:62
msgid "The following ciphers are from known weak protocols and must be disabled:"
msgstr "Les chiffrements suivants proviennent de protocoles faibles connus et doivent être désactivés :"
-#: src/dmarc/DmarcReportPage.js:617
+#: src/dmarc/DmarcReportPage.js:618
msgid "The following data may have recently changed."
msgstr "Les données suivantes peuvent avoir été modifiées récemment."
@@ -4912,7 +5031,7 @@ msgstr "La <0>Directive sur les services et le numérique0> du gouvernement du
msgid "The graphics displayed on the Tracker website may not be used, in whole or in part, in connection with any business, products or service, or otherwise used, in a manner that is likely to lead to the belief that such business product, service or other use, has received the Government of Canada’s approval and may not be copied, reproduced, imitated, or used, in whole or in part, without the prior written permission of tbs."
msgstr "Les graphiques affichés sur le site Web de Suivi ne peuvent pas être utilisés, en tout ou en partie, en relation avec une entreprise, des produits ou des services, ou autrement utilisés, d'une manière susceptible de faire croire que ce produit d'entreprise, ce service ou cette autre utilisation, a reçu l'approbation du gouvernement du Canada et ne peuvent pas être copiés, reproduits, imités ou utilisés, en tout ou en partie, sans l'autorisation écrite préalable de tbs."
-#: src/dmarc/DmarcReportPage.js:233
+#: src/dmarc/DmarcReportPage.js:234
msgid "The IP address of sending server."
msgstr "L'adresse IP du serveur d'envoi."
@@ -4920,7 +5039,7 @@ msgstr "L'adresse IP du serveur d'envoi."
msgid "The material available on this web site is subject to the"
msgstr "Le matériel disponible sur ce site web est soumis à l'approbation de la Commission européenne."
-#: src/app/NotificationBanner.js:39
+#: src/app/NotificationBanner.js:40
msgid "The message has been dismissed and will not be shown again."
msgstr "Le message a été rejeté et ne sera plus affiché."
@@ -4944,11 +5063,11 @@ msgstr "Le processus de détection des sélecteurs DKIM n'est pas immédiat. Il
msgid "The reproduction is not represented as an official version of the materials reproduced, nor as having been made, in affiliation with or under the direction of TBS."
msgstr "La reproduction n'est pas présentée comme une version officielle des documents reproduits, ni comme ayant été faite en affiliation avec le SCT ou sous sa direction."
-#: src/dmarc/DmarcReportPage.js:273
+#: src/dmarc/DmarcReportPage.js:274
msgid "The results of DKIM verification of the message. Can be pass, fail, neutral, soft-fail, temp-error, or perm-error."
msgstr "Résultats de la vérification DKIM du message. Il peut s'agir d'un succès, d'un échec, d'un résultat neutre, d'un échec léger, d'une erreur temporaire ou d'une erreur permanente."
-#: src/dmarc/DmarcReportPage.js:281
+#: src/dmarc/DmarcReportPage.js:282
msgid "The results of DKIM verification of the message. Can be pass, fail, neutral, temp-error, or perm-error."
msgstr "Résultats de la vérification DKIM du message. Il peut s'agir d'un succès, d'un échec, d'un résultat neutre, d'une erreur temporaire ou d'une erreur permanente."
@@ -4960,18 +5079,18 @@ msgstr "Le point d'extrémité sélectionné est une adresse IP privée. Tracker
msgid "The summary cards show two metrics that Tracker scans:"
msgstr "Les cartes récapitulatives présentent deux mesures que Suivi analyse :"
-#: src/dmarc/DmarcReportPage.js:249
+#: src/dmarc/DmarcReportPage.js:250
msgid "The Total Messages from this sender."
msgstr "Total des messages de cet expéditeur."
-#: src/admin/UserListModal.js:107
+#: src/admin/UserListModal.js:108
msgid "The user's role has been successfully updated"
msgstr "Le rôle de l'utilisateur a été mis à jour avec succès"
#~ msgid "There is a gap in historical DMARC data between December 20, 2024 and January 21, 2025 due to a service disruption. This does not affect current DMARC reporting, and all data before and after this period remains complete and accurate."
#~ msgstr "Il existe une interruption dans les données historiques de DMARC entre le 20 décembre 2024 et le 21 janvier 2025 en raison d'une perturbation de service. Cela n'affecte pas les rapports DMARC actuels, et toutes les données avant et après cette période demeurent complètes et exactes."
-#: src/guidance/AdditionalFindings.js:86
+#: src/guidance/AdditionalFindings.js:87
msgid "These findings are imported from Microsoft's <0>External Attack Surface Management <1/>0> tool. <2>Automated updates to these findings occur daily.2>"
msgstr "Ces résultats sont importés de l'outil <0>External Attack Surface Management <1/>0> de Microsoft. <2>Des mises à jour automatiques de ces résultats sont effectuées quotidiennement.2>"
@@ -4988,11 +5107,11 @@ msgid "These terms and conditions shall be governed by and interpreted under the
msgstr "Les présentes conditions générales sont régies et interprétées en vertu des lois du Canada, sans égard aux règles de droit applicables. Les tribunaux du Canada auront la compétence exclusive sur toutes les questions relatives à ces conditions générales."
#. placeholder {0}: editUserRole.displayName
-#: src/admin/SuperAdminUserList.js:407
+#: src/admin/SuperAdminUserList.js:408
msgid "This action CANNOT be reversed, are you sure you wish to to close the account {0}?"
msgstr "Cette action ne peut être annulée, êtes-vous sûr de vouloir fermer le compte {0} ?"
-#: src/user/UserPage.js:202
+#: src/user/UserPage.js:203
msgid "This action CANNOT be reversed, are you sure you wish to to close the account {displayName}?"
msgstr "Cette action ne peut être annulée, êtes-vous sûr de vouloir fermer le compte {displayName}?"
@@ -5004,17 +5123,17 @@ msgstr "Ce composant n'est pas disponible actuellement. Essayez de recharger la
msgid "This could be due to improper configuration, or could be the result of a scan error"
msgstr "Cela peut être dû à une mauvaise configuration ou à une erreur d'analyse"
-#: src/admin/AdminDomains.js:533
-#: src/admin/AuditLogTable.js:148
+#: src/admin/AdminDomains.js:536
+#: src/admin/AuditLogTable.js:149
msgid "This domain does not belong to this organization"
msgstr "Ce domaine n'appartient pas à cette organisation"
-#: src/admin/AdminDomains.js:530
-#: src/admin/AuditLogTable.js:146
+#: src/admin/AdminDomains.js:533
+#: src/admin/AuditLogTable.js:147
msgid "This domain no longer exists"
msgstr "Ce domaine n'existe plus"
-#: src/createOrganization/CreateOrganizationPage.js:24
+#: src/createOrganization/CreateOrganizationPage.js:25
#: src/utilities/fieldRequirements.js:6
msgid "This field cannot be empty"
msgstr "Ce champ ne peut pas être vide"
@@ -5027,7 +5146,7 @@ msgstr "Ce champ ne peut pas être vide"
msgid "This filter will show only domains affiliated with your account."
msgstr "Ce filtre n'affichera que les domaines affiliés à votre compte."
-#: src/app/TopBanner.js:95
+#: src/app/TopBanner.js:96
msgid "This is a new service, we are constantly improving."
msgstr "Il s'agit d'un nouveau service, que nous améliorons constamment."
@@ -5069,35 +5188,35 @@ msgstr "Cet onglet affiche une liste de vos domaines favoris."
msgid "This tab displays the HTTPS and DMARC summaries for your favourited domains."
msgstr "Cet onglet affiche les résumés HTTPS et DMARC pour vos domaines favoris."
-#: src/admin/SuperAdminUserList.js:176
+#: src/admin/SuperAdminUserList.js:177
msgid "This user is not affiliated with any organizations"
msgstr "Cet utilisateur n'est pas affilié à une quelconque organisation"
#. placeholder {0}: selectAllGlobal ? domainCount : selectedIds.size
-#: src/admin/DomainUpdateList.js:352
+#: src/admin/DomainUpdateList.js:353
msgid "This will update {0} domain(s)."
msgstr "Cela mettra à jour {0} domaine(s)."
-#: src/summaries/HistoricalSummariesGraph.js:272
+#: src/summaries/HistoricalSummariesGraph.js:273
#: src/summaries/TieredSummaries.js:19
msgid "Tier 1: Minimum Requirements"
msgstr "Niveau 1 : Exigences minimales"
-#: src/summaries/HistoricalSummariesGraph.js:275
+#: src/summaries/HistoricalSummariesGraph.js:276
#: src/summaries/TieredSummaries.js:30
msgid "Tier 2: Improved Posture"
msgstr "Niveau 2 : Amélioration de la posture"
-#: src/summaries/HistoricalSummariesGraph.js:278
+#: src/summaries/HistoricalSummariesGraph.js:279
#: src/summaries/TieredSummaries.js:47
msgid "Tier 3: Compliance"
msgstr "Niveau 3 : Conformité"
-#: src/admin/AuditLogTable.js:71
+#: src/admin/AuditLogTable.js:72
msgid "Time Generated"
msgstr "Temps généré"
-#: src/admin/AuditLogTable.js:112
+#: src/admin/AuditLogTable.js:113
msgid "Time Generated (UTC)"
msgstr "Heure générée (UTC)"
@@ -5105,7 +5224,7 @@ msgstr "Heure générée (UTC)"
#~ msgid "TLS"
#~ msgstr "TLS"
-#: src/guidance/WebTLSResults.js:194
+#: src/guidance/WebTLSResults.js:195
msgid "TLS Results"
msgstr "Résultats TLS"
@@ -5122,7 +5241,7 @@ msgstr "Le scan TLS pour le domaine \"{0}\" est terminé."
msgid "TLS Summary"
msgstr "Résumé TLS"
-#: src/app/App.js:88
+#: src/app/App.js:89
msgid "To enable full app functionality and maximize your account's security, <0>please verify your account0>."
msgstr "Pour activer toutes les fonctionnalités de l'application et maximiser la sécurité de votre compte, <0>vous devez vérifier votre compte0>."
@@ -5134,7 +5253,7 @@ msgstr "Pour assurer des résultats de numérisation précis, configurez les par
#~ msgid "To ensure accurate scanning results, update your firewall and DDOS protection settings to allow traffic from:"
#~ msgstr "Pour garantir des résultats d'analyse précis, mettez à jour les paramètres de votre pare-feu et de votre protection contre le DDOS afin d'autoriser le trafic en provenance de :"
-#: src/app/App.js:58
+#: src/app/App.js:59
msgid "To maximize your account's security, <0>please activate a multi-factor authentication option0>."
msgstr "Pour maximiser la sécurité de votre compte, <0>vous devez activer une option d'authentification multifactorielle0>."
@@ -5142,7 +5261,7 @@ msgstr "Pour maximiser la sécurité de votre compte, <0>vous devez activer une
#~ msgid "To receive DKIM scan results and guidance, you must add the DKIM selectors used for each domain. Organization administrators can add selectors in the “Admin Profile” by clicking the edit button of the domain for which they wish to add the selector. Common selectors to keep an for are “selector1”, and “selector2”."
#~ msgstr "Pour recevoir les résultats de l'analyse DKIM et des conseils, vous devez ajouter les sélecteurs DKIM utilisés pour chaque domaine. Les administrateurs de l'organisation peuvent ajouter des sélecteurs dans le \"profil administrateur\" en cliquant sur le bouton d'édition du domaine pour lequel ils souhaitent ajouter le sélecteur. Les sélecteurs les plus courants sont “selector1“ et “selector2“."
-#: src/app/App.js:73
+#: src/app/App.js:74
msgid "To view detailed scan results and other functionality, <0>please affiliate with an organization0>."
msgstr "Pour consulter les résultats détaillés de l'analyse et d'autres fonctionnalités, <0>vous devez vous affilier à une organisation0>."
@@ -5151,14 +5270,14 @@ msgstr "Pour consulter les résultats détaillés de l'analyse et d'autres fonct
#~ msgid "Top 25 vulnerability detected in additional findings."
#~ msgstr "Las 25 principales vulnerabilidades detectadas en hallazgos adicionales."
-#: src/dmarc/DmarcByDomainPage.js:129
-#: src/dmarc/DmarcByDomainPage.js:299
-#: src/dmarc/DmarcReportPage.js:190
-#: src/dmarc/DmarcReportSummaryGraph.js:120
+#: src/dmarc/DmarcByDomainPage.js:130
+#: src/dmarc/DmarcByDomainPage.js:300
+#: src/dmarc/DmarcReportPage.js:191
+#: src/dmarc/DmarcReportSummaryGraph.js:121
msgid "Total Messages"
msgstr "Total des messages"
-#: src/summaries/HistoricalSummariesGraph.js:282
+#: src/summaries/HistoricalSummariesGraph.js:283
msgid "Total Negative Findings"
msgstr "Total des conclusions négatives"
@@ -5171,8 +5290,8 @@ msgstr "Total des conclusions négatives"
msgid "Track Digital Security"
msgstr "Suivre la sécurité numérique"
-#: src/admin/SuperAdminUserList.js:88
-#: src/user/UserPage.js:63
+#: src/admin/SuperAdminUserList.js:89
+#: src/user/UserPage.js:64
msgid "Tracker account has been successfully closed."
msgstr "Le compte du traqueur a été fermé avec succès."
@@ -5204,15 +5323,15 @@ msgstr "GitHub du suivi"
msgid "Tracker HSTS and HTTPS results display incorrectly when a domain has a non-compliant WWW subdomain. Check your WWW subdomain if your results appear incorrect. For example, the results for www.canada.ca in the Tracker platform are included in the results for canada.ca. Work is in progress to separate the results."
msgstr "Les résultats de suivi des domaines HSTS et HTTPS s’affichent incorrectement lorsqu’un domaine possède un sous-domaine WWW qui ne se conforme pas aux règles. Vérifiez votre sous-domaine WWW si vos résultats vous semblent incorrects. Par exemple, les résultats que l’on obtient pour le site www.canada.ca dans la plateforme de suivi sont inclus dans les résultats pour le site canada.ca. Les travaux sont en cours pour séparer les résultats."
-#: src/app/TopBanner.js:72
+#: src/app/TopBanner.js:73
msgid "Tracker logo outline"
msgstr "Contour du logo Suivi"
-#: src/app/TopBanner.js:75
+#: src/app/TopBanner.js:76
msgid "Tracker logo text"
msgstr "Texte du logo du Suivi"
-#: src/app/App.js:190
+#: src/app/App.js:191
msgid "Tracker now automatically manages your DKIM selectors."
msgstr "Tracker gère désormais automatiquement vos sélecteurs DKIM."
@@ -5228,36 +5347,36 @@ msgstr "Suivi :"
msgid "Trademarks Act"
msgstr "Loi sur les marques de commerce"
-#: src/auth/TwoFactorAuthenticatePage.js:111
+#: src/auth/TwoFactorAuthenticatePage.js:112
msgid "Two Factor Authentication"
msgstr "Authentification à deux facteurs"
-#: src/user/EditableUserTFAMethod.js:92
+#: src/user/EditableUserTFAMethod.js:93
msgid "Two-Factor Authentication:"
msgstr "Authentification à deux facteurs:"
-#: src/admin/UserListModal.js:96
+#: src/admin/UserListModal.js:97
msgid "Unable to change user role, please try again."
msgstr "Impossible de modifier le rôle de l'utilisateur, veuillez réessayer."
-#: src/admin/SuperAdminUserList.js:97
-#: src/user/UserPage.js:73
+#: src/admin/SuperAdminUserList.js:98
+#: src/user/UserPage.js:74
msgid "Unable to close the account."
msgstr "Impossible de fermer le compte."
-#: src/admin/SuperAdminUserList.js:76
+#: src/admin/SuperAdminUserList.js:77
msgid "Unable to close this account."
msgstr "Impossible de fermer ce compte."
-#: src/userOnboarding/components/TourComponent.js:48
+#: src/userOnboarding/components/TourComponent.js:49
msgid "Unable to complete the tour."
msgstr "Impossible de terminer la visite."
-#: src/auth/CreateUserPage.js:52
+#: src/auth/CreateUserPage.js:53
msgid "Unable to create account, please try again."
msgstr "Impossible de créer un compte, veuillez réessayer."
-#: src/admin/AdminDomainModal.js:70
+#: src/admin/AdminDomainModal.js:89
msgid "Unable to create new domain."
msgstr "Impossible de créer un nouveau domaine."
@@ -5266,27 +5385,27 @@ msgstr "Impossible de créer un nouveau domaine."
#~ msgid "Unable to create new global tag."
#~ msgstr "Impossible de créer une nouvelle balise globale."
-#: src/createOrganization/CreateOrganizationPage.js:63
+#: src/createOrganization/CreateOrganizationPage.js:58
msgid "Unable to create new organization."
msgstr "Impossible de créer une nouvelle organisation."
-#: src/admin/TagForm.js:93
+#: src/admin/TagForm.js:94
msgid "Unable to create new tag."
msgstr "Impossible de créer une nouvelle balise."
-#: src/auth/CreateUserPage.js:28
+#: src/auth/CreateUserPage.js:29
msgid "Unable to create your account, please try again."
msgstr "Impossible de créer votre compte, veuillez réessayer"
-#: src/app/NotificationBanner.js:51
+#: src/app/NotificationBanner.js:52
msgid "Unable to dismiss the message."
msgstr "Impossible de rejeter le message."
-#: src/guidance/CveIgnorer.js:43
+#: src/guidance/CveIgnorer.js:44
msgid "Unable to ignore CVE."
msgstr "Impossible d'ignorer le CVE."
-#: src/admin/UserListModal.js:71
+#: src/admin/UserListModal.js:72
msgid "Unable to invite user."
msgstr "Impossible d'inviter un utilisateur."
@@ -5295,28 +5414,28 @@ msgstr "Impossible d'inviter un utilisateur."
#~ msgid "Unable to leave organization."
#~ msgstr "Impossible de quitter l'organisation."
-#: src/admin/AdminDomains.js:153
+#: src/admin/AdminDomains.js:155
msgid "Unable to remove domain."
msgstr "Impossible de supprimer le domaine."
-#: src/admin/OrganizationInformation.js:75
+#: src/admin/OrganizationInformation.js:76
msgid "Unable to remove this organization."
msgstr "Impossible de supprimer cette organisation."
-#: src/admin/UserListModal.js:161
+#: src/admin/UserListModal.js:162
msgid "Unable to remove user."
msgstr "Impossible de supprimer l'utilisateur."
-#: src/organizations/RequestOrgInviteModal.js:26
-#: src/organizations/RequestOrgInviteModal.js:46
+#: src/organizations/RequestOrgInviteModal.js:27
+#: src/organizations/RequestOrgInviteModal.js:47
msgid "Unable to request invite, please try again."
msgstr "Impossible de demander une invitation, veuillez réessayer."
-#: src/domains/ScanDomain.js:44
+#: src/domains/ScanDomain.js:45
msgid "Unable to request scan, please try again."
msgstr "Impossible de demander un balayage, veuillez réessayer."
-#: src/auth/ResetPasswordPage.js:51
+#: src/auth/ResetPasswordPage.js:52
msgid "Unable to reset your password, please try again."
msgstr "Impossible de réinitialiser votre mot de passe, veuillez réessayer."
@@ -5324,7 +5443,7 @@ msgstr "Impossible de réinitialiser votre mot de passe, veuillez réessayer."
msgid "Unable to retrieve scan data for {domain}."
msgstr "Impossible de récupérer les données d'analyse pour {domain}."
-#: src/auth/ForgotPasswordPage.js:26
+#: src/auth/ForgotPasswordPage.js:27
msgid "Unable to send password reset link to email."
msgstr "Impossible d'envoyer le lien de réinitialisation du mot de passe par courriel."
@@ -5332,47 +5451,47 @@ msgstr "Impossible d'envoyer le lien de réinitialisation du mot de passe par co
#~ msgid "Unable to send verification email"
#~ msgstr "Impossible d'envoyer l'e-mail de vérification"
-#: src/auth/SignInPage.js:34
-#: src/auth/SignInPage.js:76
-#: src/auth/TwoFactorAuthenticatePage.js:29
-#: src/auth/TwoFactorAuthenticatePage.js:65
+#: src/auth/SignInPage.js:35
+#: src/auth/SignInPage.js:77
+#: src/auth/TwoFactorAuthenticatePage.js:30
+#: src/auth/TwoFactorAuthenticatePage.js:66
msgid "Unable to sign in to your account, please try again."
msgstr "Impossible de vous connecter à votre compte, veuillez réessayer."
-#: src/guidance/CveIgnorer.js:92
+#: src/guidance/CveIgnorer.js:93
msgid "Unable to stop ignoring CVE."
msgstr "Impossible de cesser d'ignorer le CVE."
-#: src/admin/AdminDomainModal.js:118
+#: src/admin/AdminDomainModal.js:135
msgid "Unable to update domain."
msgstr "Impossible de mettre à jour le domaine."
-#: src/admin/DomainUpdateList.js:79
-#: src/admin/DomainUpdateList.js:126
+#: src/admin/DomainUpdateList.js:80
+#: src/admin/DomainUpdateList.js:127
msgid "Unable to update domains."
msgstr "Impossible de mettre à jour les domaines."
-#: src/auth/ResetPasswordPage.js:31
+#: src/auth/ResetPasswordPage.js:32
msgid "Unable to update password"
msgstr "Impossible de mettre à jour le mot de passe"
-#: src/admin/TagForm.js:47
+#: src/admin/TagForm.js:48
msgid "Unable to update tag."
msgstr "Impossible de mettre à jour la balise."
-#: src/admin/OrganizationInformation.js:138
+#: src/admin/OrganizationInformation.js:139
msgid "Unable to update this organization."
msgstr "Impossible de mettre à jour cette organisation."
-#: src/user/EditableUserDisplayName.js:63
+#: src/user/EditableUserDisplayName.js:64
msgid "Unable to update to your display name, please try again."
msgstr "Impossible de mettre à jour votre nom d'affichage, veuillez réessayer."
-#: src/user/EditableEmailUpdateOptions.js:63
+#: src/user/EditableEmailUpdateOptions.js:64
msgid "Unable to update to your Email Updates status, please try again."
msgstr "Impossible de mettre à jour votre statut de mise à jour par courriel, veuillez réessayer."
-#: src/user/InsideUserSwitch.js:45
+#: src/user/InsideUserSwitch.js:46
msgid "Unable to update to your inside user status, please try again."
msgstr "Impossible de mettre à jour votre statut d'utilisateur interne, veuillez réessayer."
@@ -5384,7 +5503,7 @@ msgstr "Impossible de mettre à jour votre statut d'utilisateur interne, veuille
#~ msgid "Unable to update to your preferred language, please try again."
#~ msgstr "Impossible de mettre à jour votre langue préférée, veuillez réessayer."
-#: src/user/EditableUserTFAMethod.js:67
+#: src/user/EditableUserTFAMethod.js:68
msgid "Unable to update to your TFA send method, please try again."
msgstr "Impossible de mettre à jour votre méthode d'envoi TFA, veuillez réessayer."
@@ -5392,27 +5511,27 @@ msgstr "Impossible de mettre à jour votre méthode d'envoi TFA, veuillez réess
#~ msgid "Unable to update to your username, please try again."
#~ msgstr "Impossible de mettre à jour votre nom d'utilisateur, veuillez réessayer."
-#: src/admin/UserListModal.js:116
+#: src/admin/UserListModal.js:117
msgid "Unable to update user role."
msgstr "Impossible de mettre à jour le rôle de l'utilisateur."
-#: src/user/EditableUserEmail.js:59
+#: src/user/EditableUserEmail.js:60
msgid "Unable to update your email address, please try again."
msgstr "Impossible de mettre à jour votre adresse électronique, veuillez réessayer."
-#: src/user/EditableUserPassword.js:66
+#: src/user/EditableUserPassword.js:67
msgid "Unable to update your password, please try again."
msgstr "Impossible de mettre à jour votre mot de passe, veuillez réessayer."
-#: src/user/EditableUserPhoneNumber.js:58
+#: src/user/EditableUserPhoneNumber.js:59
msgid "Unable to update your phone number, please try again."
msgstr "Impossible de mettre à jour votre numéro de téléphone, veuillez réessayer."
-#: src/user/EditableUserPhoneNumber.js:109
+#: src/user/EditableUserPhoneNumber.js:110
msgid "Unable to verify your phone number, please try again."
msgstr "Impossible de vérifier votre numéro de téléphone, veuillez réessayer."
-#: src/organizations/Organizations.js:160
+#: src/organizations/Organizations.js:161
msgid "Unclaimed"
msgstr "Non réclamé"
@@ -5420,16 +5539,16 @@ msgstr "Non réclamé"
msgid "Understanding Scan Metrics:"
msgstr "Comprendre les métriques d'analyse :"
-#: src/guidance/IgnoredCves.js:61
+#: src/guidance/IgnoredCves.js:62
msgid "Undetected Ignored CVEs:"
msgstr "CVE ignorés non détectés :"
-#: src/domains/DomainCard.js:88
+#: src/domains/DomainCard.js:90
msgid "Unfavourited Domain"
msgstr "Domaine non favorisé"
-#: src/guidance/WebTLSResults.js:216
-#: src/guidance/WebTLSResults.js:239
+#: src/guidance/WebTLSResults.js:217
+#: src/guidance/WebTLSResults.js:240
msgid "Unknown"
msgstr "Inconnu"
@@ -5437,39 +5556,39 @@ msgstr "Inconnu"
msgid "Unscanned"
msgstr "Non balayé"
-#: src/admin/AuditLogTable.js:85
+#: src/admin/AuditLogTable.js:86
msgid "Update"
msgstr "Mise à jour"
-#: src/admin/OrganizationInformation.js:129
+#: src/admin/OrganizationInformation.js:130
msgid "Updated Organization"
msgstr "Organisation mise à jour"
-#: src/admin/AuditLogTable.js:130
+#: src/admin/AuditLogTable.js:131
msgid "Updated Properties"
msgstr "Propriétés actualisées"
-#: src/guidance/DmarcPhaseStepper.js:42
+#: src/guidance/DmarcPhaseStepper.js:43
msgid "Upgrade DMARC policy to quarantine (gradually increment enforcement from 25% to 100%;"
msgstr "Mettez la politique DMARC en quarantaine (augmentez progressivement l'application de 25% à 100%) ;"
-#: src/domains/ScanDomain.js:126
+#: src/domains/ScanDomain.js:127
msgid "Upgrade DMARC policy to quarantine (gradually increment enforcement from 25% to 100%);"
msgstr "Faire passer la stratégie DMARC à Mettre en quarantaine (Quarantine) (l’appliquer progressivement pour passer de 25 % à 100 %)."
-#: src/guidance/DmarcPhaseStepper.js:43
+#: src/guidance/DmarcPhaseStepper.js:44
msgid "Upgrade DMARC policy to reject (gradually increment enforcement from 25% to 100%); and"
msgstr "Mettre à niveau la politique DMARC pour qu'elle rejette (augmentation progressive de l'application de 25 % à 100 %)"
-#: src/domains/ScanDomain.js:127
+#: src/domains/ScanDomain.js:128
msgid "Upgrade DMARC policy to reject (gradually increment enforcement from 25%to 100%); and"
msgstr "Faire passer la stratégie DMARC à Rejeter (Reject) (l’appliquer progressivement pour passer de 25 % à 100 %)."
-#: src/guidance/WebConnectionResults.js:153
+#: src/guidance/WebConnectionResults.js:161
msgid "URL:"
msgstr "URL :"
-#: src/guidance/WebConnectionResults.js:237
+#: src/guidance/WebConnectionResults.js:233
msgid "URL: "
msgstr "URL :"
@@ -5497,11 +5616,11 @@ msgstr "Utilisez ce champ de recherche pour trouver une organisation."
#~ msgid "Use Tracker to monitor the domains and sub-domains of your organization."
#~ msgstr "Utilisez Suivi pour surveiller les domaines et sous-domaines de votre organisation."
-#: src/admin/AuditLogTable.js:78
+#: src/admin/AuditLogTable.js:79
msgid "User"
msgstr "Utilisateur"
-#: src/admin/UserListModal.js:258
+#: src/admin/UserListModal.js:259
msgid "USER"
msgstr "UTILISATEUR"
@@ -5513,12 +5632,12 @@ msgstr "UTILISATEUR"
#~ msgid "user email"
#~ msgstr "e-mail de l'utilisateur"
-#: src/admin/UserList.js:163
+#: src/admin/UserList.js:158
msgid "User email"
msgstr "Courriel de l'utilisateur"
-#: src/admin/SuperAdminUserList.js:418
-#: src/user/UserPage.js:210
+#: src/admin/SuperAdminUserList.js:419
+#: src/user/UserPage.js:211
msgid "User Email"
msgstr "Courriel de l'utilisateur"
@@ -5526,16 +5645,16 @@ msgstr "Courriel de l'utilisateur"
msgid "User email does not match"
msgstr "L'email de l'utilisateur ne correspond pas"
-#: src/admin/UserListModal.js:61
+#: src/admin/UserListModal.js:62
msgid "User invited"
msgstr "Utilisateur invité"
-#: src/admin/SuperAdminUserList.js:153
+#: src/admin/SuperAdminUserList.js:154
#: src/admin/UserList.js:79
msgid "User List"
msgstr "Liste des utilisateurs"
-#: src/admin/UserListModal.js:152
+#: src/admin/UserListModal.js:153
msgid "User removed."
msgstr "Utilisateur supprimé."
@@ -5547,11 +5666,11 @@ msgstr "Les balises désignées par l'utilisateur apparaissent ici."
#~ msgid "User:"
#~ msgstr "Utilisateur:"
-#: src/admin/UserListModal.js:229
+#: src/admin/UserListModal.js:230
msgid "User: "
msgstr "Utilisateur: "
-#: src/admin/AdminPage.js:238
+#: src/admin/AdminPage.js:239
#: src/admin/AdminPanel.js:26
#: src/organizationDetails/OrganizationDetails.js:150
msgid "Users"
@@ -5561,30 +5680,35 @@ msgstr "Utilisateurs"
msgid "Users exercise due diligence in ensuring the accuracy of the materials reproduced;"
msgstr "Les utilisateurs font preuve de diligence raisonnable en s'assurant de l'exactitude des documents reproduits;"
-#: src/admin/AdminDomains.js:234
-#: src/domains/DomainListFilters.js:161
+#: src/admin/AdminDomains.js:239
+#: src/domains/DomainListFilters.js:162
msgid "Value"
msgstr "Valeur"
-#: src/utilities/fieldRequirements.js:29
+#: src/utilities/fieldRequirements.js:31
+msgid "Verification code must be exactly 6 digits long"
+msgstr "Le code de vérification doit comporter exactement 6 chiffres."
+
+#: src/utilities/fieldRequirements.js:30
msgid "Verification code must only contains numbers"
msgstr "Le code de vérification ne doit contenir que des chiffres"
-#: src/admin/SuperAdminUserList.js:146
-#: src/admin/SuperAdminUserList.js:307
-#: src/organizations/Organizations.js:95
+#: src/admin/SuperAdminUserList.js:147
+#: src/admin/SuperAdminUserList.js:308
+#: src/createOrganization/CreateOrganizationPage.js:148
+#: src/organizations/Organizations.js:96
msgid "Verified"
msgstr "Vérifié"
-#: src/guidance/WebTLSResults.js:335
+#: src/guidance/WebTLSResults.js:336
msgid "Verified Chain Free of Legacy Symantec Anchor"
msgstr "Chaîne vérifiée exempte d'ancre Symantec ancienne"
-#: src/guidance/WebTLSResults.js:324
+#: src/guidance/WebTLSResults.js:325
msgid "Verified Chain Free of SHA1 Signature"
msgstr "Chaîne vérifiée sans signature SHA1"
-#: src/user/EditableUserPhoneNumber.js:224
+#: src/user/EditableUserPhoneNumber.js:225
msgid "Verify"
msgstr "Vérifier"
@@ -5592,7 +5716,7 @@ msgstr "Vérifier"
#~ msgid "Verify Account"
#~ msgstr "Vérifier le compte"
-#: src/dmarc/DmarcReportSummaryGraph.js:108
+#: src/dmarc/DmarcReportSummaryGraph.js:109
msgid "Vertical View"
msgstr "Vue verticale"
@@ -5620,7 +5744,7 @@ msgstr "Voir les détails de haut niveau pour chaque domaine."
msgid "View information for each domain."
msgstr "Voir les informations pour chaque domaine."
-#: src/domains/DomainCard.js:233
+#: src/domains/DomainCard.js:243
msgid "View Results"
msgstr "Voir les résultats"
@@ -5628,7 +5752,7 @@ msgstr "Voir les résultats"
msgid "View summaries of your organization's web and email security compliance."
msgstr "Consultez les résumés de la conformité de votre organisation en matière de sécurité du web et du courrier électronique."
-#: src/admin/TagForm.js:213
+#: src/admin/TagForm.js:214
msgid "Visible"
msgstr "Visible"
@@ -5636,7 +5760,7 @@ msgstr "Visible"
#~ msgid "Volume of messages spoofing {domainSlug} (reject + quarantine + none):"
#~ msgstr "Volume de messages usurpant {domainSlug} (rejet + quarantaine + aucun) :"
-#: src/dmarc/DmarcReportPage.js:641
+#: src/dmarc/DmarcReportPage.js:642
msgid "Volume of messages spoofing domain (reject + quarantine + none):"
msgstr "Volume de messages usurpant domaine (rejet + quarantaine + aucun) :"
@@ -5656,8 +5780,8 @@ msgstr "Volume de messages usurpant domaine (rejet + quarantaine + aucun) :"
#~ msgid "Warnings"
#~ msgstr "Avertissements"
-#: src/guidance/EmailGuidance.js:314
-#: src/guidance/EmailGuidance.js:391
+#: src/guidance/EmailGuidance.js:313
+#: src/guidance/EmailGuidance.js:363
msgid "Warnings:"
msgstr "Avertissements :"
@@ -5669,7 +5793,7 @@ msgstr "Nous nous réservons le droit de modifier la présentation et le contenu
msgid "We reserve the right to modify or terminate our services for any reason, without notice, at any time."
msgstr "Nous nous réservons le droit de modifier ou de mettre fin à nos services pour quelque raison que ce soit, sans préavis, à tout moment."
-#: src/dmarc/DmarcReportPage.js:620
+#: src/dmarc/DmarcReportPage.js:621
msgid "We've made enhancements to our DMARC data tables to provide a more accurate view of the information."
msgstr "Nous avons apporté des améliorations à nos tableaux de données DMARC afin de fournir une vue plus précise de l'information."
@@ -5685,7 +5809,7 @@ msgstr "Nous avons envoyé un SMS à votre numéro de téléphone enregistré av
msgid "We've sent you an email with an authentication code to sign into Tracker."
msgstr "Nous vous avons envoyé un e-mail avec un code d'authentification pour vous connecter à Suivi."
-#: src/guidance/WebTLSResults.js:28
+#: src/guidance/WebTLSResults.js:29
msgid "weak"
msgstr "faible"
@@ -5697,23 +5821,23 @@ msgstr "faible"
#~ msgid "Weak Curves:"
#~ msgstr "Courbes faibles:"
-#: src/summaries/HistoricalSummariesGraph.js:101
+#: src/summaries/HistoricalSummariesGraph.js:102
msgid "Web"
msgstr "Web"
-#: src/organizationDetails/OrganizationDomains.js:251
+#: src/organizationDetails/OrganizationDomains.js:256
msgid "WEB"
msgstr "WEB"
-#: src/domains/DomainCard.js:201
+#: src/domains/DomainCard.js:211
msgid "Web (HTTPS/TLS)"
msgstr "Web (HTTPS/TLS)"
-#: src/guidance/AdditionalFindings.js:330
+#: src/guidance/AdditionalFindings.js:331
msgid "Web Components"
msgstr "Composants Web"
-#: src/summaries/HistoricalSummariesGraph.js:96
+#: src/summaries/HistoricalSummariesGraph.js:97
msgid "Web Connections"
msgstr "Connexions web"
@@ -5721,12 +5845,12 @@ msgstr "Connexions web"
msgid "Web Connections Summary"
msgstr "Résumé des connexions web"
-#: src/domains/ScanDomain.js:242
-#: src/guidance/GuidancePage.js:290
+#: src/domains/ScanDomain.js:243
+#: src/guidance/GuidancePage.js:289
msgid "Web Guidance"
msgstr "Conseils sur le Web"
-#: src/domains/ScanDomain.js:254
+#: src/domains/ScanDomain.js:255
msgid "Web Scan Results"
msgstr "Résultats de l'analyse du Web"
@@ -5750,7 +5874,7 @@ msgstr "d'hébergement web"
msgid "Welcome to the Admin Profile page!"
msgstr "Bienvenue sur la page du profil de l'administrateur !"
-#: src/auth/CreateUserPage.js:113
+#: src/auth/CreateUserPage.js:114
msgid "Welcome to Tracker, please enter your details."
msgstr "Bienvenue sur Suivi, veuillez entrer vos coordonnées."
@@ -5762,8 +5886,8 @@ msgstr "Bienvenue dans votre vision personnelle de Suivi. Modérez la posture de
#~ msgid "Welcome, you are successfully signed in to your new account!"
#~ msgstr "Veuillez choisir votre langue préférée"
-#: src/auth/SignInPage.js:59
-#: src/auth/TwoFactorAuthenticatePage.js:55
+#: src/auth/SignInPage.js:60
+#: src/auth/TwoFactorAuthenticatePage.js:56
msgid "Welcome, you are successfully signed in!"
msgstr "Bienvenue, vous êtes connecté avec succès!"
@@ -5807,7 +5931,7 @@ msgstr "Pourquoi la page d'orientation n'affiche-t-elle pas les sélecteurs DKIM
msgid "Wiki"
msgstr "Wiki"
-#: src/domains/DomainsPage.js:140
+#: src/domains/DomainsPage.js:142
msgid "Wildcard"
msgstr "Wildcard"
@@ -5816,60 +5940,60 @@ msgstr "Wildcard"
#~ msgid "WILDCARD"
#~ msgstr "WILDCARD"
-#: src/admin/AdminDomains.js:184
-#: src/domains/DomainCard.js:157
-#: src/domains/DomainsPage.js:141
-#: src/guidance/GuidancePage.js:349
-#: src/organizationDetails/OrganizationDomains.js:117
+#: src/admin/AdminDomains.js:186
+#: src/domains/DomainCard.js:159
+#: src/domains/DomainsPage.js:143
+#: src/guidance/GuidancePage.js:347
+#: src/organizationDetails/OrganizationDomains.js:118
msgid "Wildcard Entry"
msgstr "Entrée Wildcard"
-#: src/domains/DomainsPage.js:316
-#: src/organizationDetails/OrganizationDomains.js:259
+#: src/domains/DomainsPage.js:320
+#: src/organizationDetails/OrganizationDomains.js:264
msgid "WILDCARD ENTRY"
msgstr "ENTRÉE WILDCARD"
-#: src/admin/AdminDomains.js:183
-#: src/domains/DomainCard.js:157
-#: src/guidance/GuidancePage.js:349
-#: src/organizationDetails/OrganizationDomains.js:116
+#: src/admin/AdminDomains.js:185
+#: src/domains/DomainCard.js:159
+#: src/guidance/GuidancePage.js:347
+#: src/organizationDetails/OrganizationDomains.js:117
msgid "Wildcard Sibling"
msgstr "Wildcard en rapport"
-#: src/domains/DomainsPage.js:313
-#: src/organizationDetails/OrganizationDomains.js:256
+#: src/domains/DomainsPage.js:317
+#: src/organizationDetails/OrganizationDomains.js:261
msgid "WILDCARD SIBLING"
msgstr "WILDCARD EN RAPPORT"
-#: src/organizations/RequestOrgInviteModal.js:66
+#: src/organizations/RequestOrgInviteModal.js:67
msgid "Would you like to request an invite to {orgName}?"
msgstr "Souhaitez-vous demander une invitation à {orgName} ?"
-#: src/summaries/HistoricalSummariesGraph.js:212
+#: src/summaries/HistoricalSummariesGraph.js:213
msgid "Year to Date"
msgstr "Depuis le début de l'année"
-#: src/guidance/WebConnectionResults.js:130
-#: src/guidance/WebConnectionResults.js:176
-#: src/guidance/WebConnectionResults.js:206
-#: src/guidance/WebConnectionResults.js:224
-#: src/guidance/WebConnectionResults.js:233
-#: src/guidance/WebTLSResults.js:216
-#: src/guidance/WebTLSResults.js:274
-#: src/guidance/WebTLSResults.js:285
-#: src/guidance/WebTLSResults.js:294
-#: src/guidance/WebTLSResults.js:305
-#: src/guidance/WebTLSResults.js:316
-#: src/guidance/WebTLSResults.js:327
-#: src/guidance/WebTLSResults.js:338
-#: src/guidance/WebTLSResults.js:416
-#: src/guidance/WebTLSResults.js:425
-#: src/guidance/WebTLSResults.js:428
-#: src/guidance/WebTLSResults.js:447
+#: src/guidance/WebConnectionResults.js:142
+#: src/guidance/WebConnectionResults.js:182
+#: src/guidance/WebConnectionResults.js:208
+#: src/guidance/WebConnectionResults.js:220
+#: src/guidance/WebConnectionResults.js:226
+#: src/guidance/WebTLSResults.js:217
+#: src/guidance/WebTLSResults.js:275
+#: src/guidance/WebTLSResults.js:286
+#: src/guidance/WebTLSResults.js:295
+#: src/guidance/WebTLSResults.js:306
+#: src/guidance/WebTLSResults.js:317
+#: src/guidance/WebTLSResults.js:328
+#: src/guidance/WebTLSResults.js:339
+#: src/guidance/WebTLSResults.js:417
+#: src/guidance/WebTLSResults.js:426
+#: src/guidance/WebTLSResults.js:429
+#: src/guidance/WebTLSResults.js:448
msgid "Yes"
msgstr "Oui"
-#: src/admin/DomainUpdateList.js:360
+#: src/admin/DomainUpdateList.js:361
msgid "Yes, Apply"
msgstr "Oui, postuler"
@@ -5893,7 +6017,7 @@ msgstr "Vous acceptez d'utiliser notre site Web, nos produits et nos services un
#~ msgid "You are current visiting a staging environment, used for testing purposes only. This is <0>not the live production site.0><1/>Visit the production site at <2>https://tracker.canada.ca2> (GC network only)."
#~ msgstr "Vous visitez actuellement un environnement de démonstration, utilisé uniquement à des fins de test. Il ne s'agit pas du site de production. Il ne s'agit <0>pas du site de production.0><1/>Visitez le site de production à l'adresse <2>https://tracker.canada.ca2> (réseau GC uniquement)."
-#: src/app/App.js:171
+#: src/app/App.js:172
msgid "You are currently visiting a staging environment, used for testing purposes only. This is <0>not the live production site.0><1/>Visit the production site at <2>https://tracker.canada.ca2> (GC network only)."
msgstr "Vous visitez actuellement un environnement de démonstration, utilisé uniquement à des fins de test. Il ne s'agit <0>pas du site de production.0><1/>Visitez le site de production à l'adresse <2>https://tracker.canada.ca2> (réseau GC uniquement)."
@@ -5909,7 +6033,7 @@ msgstr "Vous visitez actuellement un environnement de démonstration, utilisé u
#~ msgid "You can search for an organization here"
#~ msgstr "Vous pouvez rechercher une organisation ici"
-#: src/admin/AdminPage.js:126
+#: src/admin/AdminPage.js:127
msgid "You currently have no admin affiliations."
msgstr "Vous n'avez actuellement aucune affiliation administrative."
@@ -5917,12 +6041,12 @@ msgstr "Vous n'avez actuellement aucune affiliation administrative."
msgid "You have successfully added {domainName} to myTracker."
msgstr "Vous avez ajouté avec succès {domainName} à myTracker."
-#: src/domains/DomainCard.js:63
+#: src/domains/DomainCard.js:65
msgid "You have successfully added {url} to myTracker."
msgstr "Vous avez ajouté avec succès {url} à monSuivi."
-#: src/app/FloatingMenu.js:49
-#: src/app/TopBanner.js:43
+#: src/app/FloatingMenu.js:50
+#: src/app/TopBanner.js:44
msgid "You have successfully been signed out."
msgstr "Vous avez été déconnecté avec succès."
@@ -5932,11 +6056,11 @@ msgstr "Vous avez été déconnecté avec succès."
#~ msgstr "Vous avez quitté {orgSlug} avec succès."
#. placeholder {0}: data.removeOrganization.result.organization.name
-#: src/admin/OrganizationInformation.js:99
+#: src/admin/OrganizationInformation.js:100
msgid "You have successfully removed {0}."
msgstr "Vous avez retiré {0} avec succès."
-#: src/domains/DomainCard.js:89
+#: src/domains/DomainCard.js:91
msgid "You have successfully removed {url} from myTracker."
msgstr "Vous avez réussi à supprimer {url} de monSuivi."
@@ -5944,20 +6068,20 @@ msgstr "Vous avez réussi à supprimer {url} de monSuivi."
msgid "You have successfully requested a scan."
msgstr "Vous avez demandé un scan avec succès."
-#: src/domains/SubdomainDiscoveryButton.js:42
+#: src/domains/SubdomainDiscoveryButton.js:43
msgid "You have successfully requested subdomain discovery."
msgstr "Vous avez demandé avec succès la découverte d'un sous-domaine."
#. placeholder {0}: updateOrganization.result.name
-#: src/admin/OrganizationInformation.js:130
+#: src/admin/OrganizationInformation.js:131
msgid "You have successfully updated {0}."
msgstr "Vous avez réussi à mettre à jour {0}."
-#: src/user/EditableUserDisplayName.js:52
+#: src/user/EditableUserDisplayName.js:53
msgid "You have successfully updated your display name."
msgstr "Vous avez réussi à mettre à jour votre nom d'affichage."
-#: src/user/EditableEmailUpdateOptions.js:51
+#: src/user/EditableEmailUpdateOptions.js:52
msgid "You have successfully updated your email update preference."
msgstr "Vous avez mis à jour vos préférences de mise à jour de l'email avec succès."
@@ -5965,7 +6089,7 @@ msgstr "Vous avez mis à jour vos préférences de mise à jour de l'email avec
#~ msgid "You have successfully updated your email."
#~ msgstr "Vous avez mis à jour votre courriel avec succès."
-#: src/user/InsideUserSwitch.js:31
+#: src/user/InsideUserSwitch.js:32
msgid "You have successfully updated your inside user preference."
msgstr "Vous avez réussi à mettre à jour vos préférences d'utilisateur interne."
@@ -5973,11 +6097,11 @@ msgstr "Vous avez réussi à mettre à jour vos préférences d'utilisateur inte
#~ msgid "You have successfully updated your insider preference."
#~ msgstr "Vous avez réussi à mettre à jour vos préférences d'initié."
-#: src/user/EditableUserPassword.js:55
+#: src/user/EditableUserPassword.js:56
msgid "You have successfully updated your password."
msgstr "Vous avez mis à jour votre mot de passe avec succès."
-#: src/user/EditableUserPhoneNumber.js:97
+#: src/user/EditableUserPhoneNumber.js:98
msgid "You have successfully updated your phone number."
msgstr "Vous avez réussi à mettre à jour votre numéro de téléphone."
@@ -5985,11 +6109,11 @@ msgstr "Vous avez réussi à mettre à jour votre numéro de téléphone."
#~ msgid "You have successfully updated your preferred language."
#~ msgstr "Vous avez réussi à mettre à jour votre langue préférée."
-#: src/user/EditableUserTFAMethod.js:53
+#: src/user/EditableUserTFAMethod.js:54
msgid "You have successfully updated your TFA send method."
msgstr "Vous avez mis à jour avec succès votre méthode d'envoi de TFA."
-#: src/auth/ResetPasswordPage.js:43
+#: src/auth/ResetPasswordPage.js:44
msgid "You may now sign in with your new password"
msgstr "Vous pouvez maintenant vous connecter avec votre nouveau mot de passe"
@@ -5997,7 +6121,7 @@ msgstr "Vous pouvez maintenant vous connecter avec votre nouveau mot de passe"
msgid "You will need a Tracker account to use certain products and services. You are responsible for maintaining the confidentiality of your account, password and for restricting access to your account. You also agree to accept responsibility for all activities that occur under your account or password. TBS accepts no liability for any loss or damage arising from your failure to maintain the security of your account or password."
msgstr "Vous aurez besoin d'un compte Suivi pour utiliser certains produits et services. Vous êtes responsable du maintien de la confidentialité de votre compte et de votre mot de passe et de la restriction de l'accès à votre compte. Vous acceptez également d'assumer la responsabilité de toutes les activités qui se déroulent sous votre compte ou votre mot de passe. Le SCT n'accepte aucune responsabilité pour toute perte ou tout dommage résultant de votre incapacité à maintenir la sécurité de votre compte ou de votre mot de passe."
-#: src/app/App.js:364
+#: src/app/App.js:365
msgid "Your Account"
msgstr "Votre compte"
@@ -6009,7 +6133,7 @@ msgstr "L'email de votre compte n'a pas pu être vérifié pour le moment. Veuil
msgid "Your account email was successfully verified"
msgstr "L'email de votre compte a été vérifié avec succès"
-#: src/auth/CreateUserPage.js:77
+#: src/auth/CreateUserPage.js:78
msgid "Your account will automatically be linked to the organization that invited you."
msgstr "Votre compte sera automatiquement lié à l'organisation qui vous a invité."
@@ -6017,6 +6141,6 @@ msgstr "Votre compte sera automatiquement lié à l'organisation qui vous a invi
msgid "Your account will be fully activated the next time you log in"
msgstr "Votre compte sera entièrement activé lors de votre prochaine connexion."
-#: src/organizations/RequestOrgInviteModal.js:37
+#: src/organizations/RequestOrgInviteModal.js:38
msgid "Your request has been sent to the organization administrators."
msgstr "Votre demande a été envoyée aux administrateurs de l'organisation."
diff --git a/frontend/src/images/android-chrome-192x192.png b/frontend/src/meta/android-chrome-192x192.png
similarity index 100%
rename from frontend/src/images/android-chrome-192x192.png
rename to frontend/src/meta/android-chrome-192x192.png
diff --git a/frontend/src/images/android-chrome-512x512.png b/frontend/src/meta/android-chrome-512x512.png
similarity index 100%
rename from frontend/src/images/android-chrome-512x512.png
rename to frontend/src/meta/android-chrome-512x512.png
diff --git a/frontend/src/images/apple-touch-icon.png b/frontend/src/meta/apple-touch-icon.png
similarity index 100%
rename from frontend/src/images/apple-touch-icon.png
rename to frontend/src/meta/apple-touch-icon.png
diff --git a/frontend/src/images/favicon-16x16.png b/frontend/src/meta/favicon-16x16.png
similarity index 100%
rename from frontend/src/images/favicon-16x16.png
rename to frontend/src/meta/favicon-16x16.png
diff --git a/frontend/src/images/favicon-32x32.png b/frontend/src/meta/favicon-32x32.png
similarity index 100%
rename from frontend/src/images/favicon-32x32.png
rename to frontend/src/meta/favicon-32x32.png
diff --git a/frontend/src/images/favicon.ico b/frontend/src/meta/favicon.ico
similarity index 100%
rename from frontend/src/images/favicon.ico
rename to frontend/src/meta/favicon.ico
diff --git a/frontend/src/manifest.json b/frontend/src/meta/manifest.json
similarity index 100%
rename from frontend/src/manifest.json
rename to frontend/src/meta/manifest.json
diff --git a/frontend/src/robots.txt b/frontend/src/meta/robots.txt
similarity index 100%
rename from frontend/src/robots.txt
rename to frontend/src/meta/robots.txt
diff --git a/frontend/src/images/safari-pinned-tab.svg b/frontend/src/meta/safari-pinned-tab.svg
similarity index 100%
rename from frontend/src/images/safari-pinned-tab.svg
rename to frontend/src/meta/safari-pinned-tab.svg
diff --git a/frontend/src/organizationDetails/OrganizationAffiliations.js b/frontend/src/organizationDetails/OrganizationAffiliations.js
index dbb217f50b..aeb4dfb179 100644
--- a/frontend/src/organizationDetails/OrganizationAffiliations.js
+++ b/frontend/src/organizationDetails/OrganizationAffiliations.js
@@ -1,5 +1,6 @@
import React, { useCallback, useState } from 'react'
-import { Trans, t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { Box, Divider, Text } from '@chakra-ui/react'
import { ErrorBoundary } from 'react-error-boundary'
import { string } from 'prop-types'
diff --git a/frontend/src/organizationDetails/OrganizationDetails.js b/frontend/src/organizationDetails/OrganizationDetails.js
index 55e473b9c5..5131cb0e08 100644
--- a/frontend/src/organizationDetails/OrganizationDetails.js
+++ b/frontend/src/organizationDetails/OrganizationDetails.js
@@ -1,6 +1,6 @@
import React, { useEffect } from 'react'
import { useQuery } from '@apollo/client'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
import {
Box,
Button,
diff --git a/frontend/src/organizationDetails/OrganizationDomains.js b/frontend/src/organizationDetails/OrganizationDomains.js
index cb348476b3..cb732505d5 100644
--- a/frontend/src/organizationDetails/OrganizationDomains.js
+++ b/frontend/src/organizationDetails/OrganizationDomains.js
@@ -1,5 +1,6 @@
import React, { useState, useCallback } from 'react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { Box, Flex, Text, useDisclosure } from '@chakra-ui/react'
import { ErrorBoundary } from 'react-error-boundary'
import { array, bool, string } from 'prop-types'
@@ -118,6 +119,8 @@ export function OrganizationDomains({
{ value: `SCAN_PENDING`, text: t`Scan Pending` },
{ value: `ARCHIVED`, text: t`Archived` },
{ value: `CVE_DETECTED`, text: t`SPIN Top 25` },
+ { value: 'CVD_ENROLLED', text: t`CVD Enrolled` },
+ { value: 'CVD_DENY', text: t`CVD Denied` },
]
const assetStateOptions = [
@@ -130,7 +133,7 @@ export function OrganizationDomains({
const guidanceTagOptions = negativeFindings?.map(({ tagId, tagName }) => {
const getTagCategoryFromId = (id) => {
- return id.split(/[0-9]/)[0].toUpperCase()
+ return id.split(/[0-9]/)[0].toUpperCase();
}
return { value: tagId, text: `${getTagCategoryFromId(tagId)}: ${tagName}` }
})
@@ -178,6 +181,7 @@ export function OrganizationDomains({
webScanPending,
userHasPermission,
cveDetected,
+ cvdEnrollment,
},
index,
) => (
@@ -198,6 +202,7 @@ export function OrganizationDomains({
webScanPending={webScanPending}
userHasPermission={userHasPermission}
cveDetected={cveDetected}
+ cvdEnrollment={cvdEnrollment}
mb="3"
/>
diff --git a/frontend/src/organizationDetails/__tests__/OrganizationAffiliations.test.js b/frontend/src/organizationDetails/__tests__/OrganizationAffiliations.test.js
index 6436540f17..1274993da1 100644
--- a/frontend/src/organizationDetails/__tests__/OrganizationAffiliations.test.js
+++ b/frontend/src/organizationDetails/__tests__/OrganizationAffiliations.test.js
@@ -4,26 +4,12 @@ import { MockedProvider } from '@apollo/client/testing'
import { createMemoryRouter, RouterProvider } from 'react-router-dom'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import matchMediaPolyfill from 'mq-polyfill'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import { OrganizationAffiliations } from '../OrganizationAffiliations'
-
import { UserVarProvider } from '../../utilities/userState'
import { PAGINATED_ORG_AFFILIATIONS } from '../../graphql/queries'
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
matchMediaPolyfill(window)
window
@@ -159,10 +145,10 @@ describe('', () => {
)
await waitFor(() => {
- expect(getByText('Jabari_Larson@hotmail.com')).toBeInTheDocument()
+ expect(getByText(/Jabari_Larson@hotmail.com/i)).toBeInTheDocument()
})
await waitFor(() => {
- expect(getByText('Cara Olson')).toBeInTheDocument()
+ expect(getByText(/Cara Olson/i)).toBeInTheDocument()
})
})
})
diff --git a/frontend/src/organizationDetails/__tests__/OrganizationDetails.test.js b/frontend/src/organizationDetails/__tests__/OrganizationDetails.test.js
index 432725f0d0..cfc1313a93 100644
--- a/frontend/src/organizationDetails/__tests__/OrganizationDetails.test.js
+++ b/frontend/src/organizationDetails/__tests__/OrganizationDetails.test.js
@@ -4,27 +4,13 @@ import { MockedProvider } from '@apollo/client/testing'
import { createMemoryRouter, RouterProvider } from 'react-router-dom'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import matchMediaPolyfill from 'mq-polyfill'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import OrganizationDetails from '../OrganizationDetails'
-
import { UserVarProvider } from '../../utilities/userState'
import { ORG_DETAILS_PAGE } from '../../graphql/queries'
import { TourProvider } from '../../userOnboarding/contexts/TourContext'
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
matchMediaPolyfill(window)
window
diff --git a/frontend/src/organizationDetails/__tests__/OrganizationDomains.test.js b/frontend/src/organizationDetails/__tests__/OrganizationDomains.test.js
index b939599339..ca6b02cb88 100644
--- a/frontend/src/organizationDetails/__tests__/OrganizationDomains.test.js
+++ b/frontend/src/organizationDetails/__tests__/OrganizationDomains.test.js
@@ -4,26 +4,12 @@ import { MockedProvider } from '@apollo/client/testing'
import { createMemoryRouter, RouterProvider } from 'react-router-dom'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import matchMediaPolyfill from 'mq-polyfill'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import { OrganizationDomains } from '../OrganizationDomains'
-
import { UserVarProvider } from '../../utilities/userState'
import { PAGINATED_ORG_DOMAINS } from '../../graphql/queries'
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
matchMediaPolyfill(window)
window
diff --git a/frontend/src/organizations/OrganizationCard.js b/frontend/src/organizations/OrganizationCard.js
index 62f318b36a..8e60ab9eae 100644
--- a/frontend/src/organizations/OrganizationCard.js
+++ b/frontend/src/organizations/OrganizationCard.js
@@ -3,7 +3,7 @@ import { Box, Flex, Progress, Stack, Text } from '@chakra-ui/react'
import { CheckCircleIcon } from '@chakra-ui/icons'
import { Link as RouteLink } from 'react-router-dom'
import { bool, number, object, string } from 'prop-types'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
export function OrganizationCard({
name,
diff --git a/frontend/src/organizations/Organizations.js b/frontend/src/organizations/Organizations.js
index 4c63a1748f..39cc0131a6 100644
--- a/frontend/src/organizations/Organizations.js
+++ b/frontend/src/organizations/Organizations.js
@@ -1,5 +1,6 @@
import React, { useCallback, useState } from 'react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { ListOf } from '../components/ListOf'
import {
Box,
diff --git a/frontend/src/organizations/RequestOrgInviteModal.js b/frontend/src/organizations/RequestOrgInviteModal.js
index 7fb9d39a15..27185ec358 100644
--- a/frontend/src/organizations/RequestOrgInviteModal.js
+++ b/frontend/src/organizations/RequestOrgInviteModal.js
@@ -12,7 +12,8 @@ import {
Button,
useToast,
} from '@chakra-ui/react'
-import { Trans, t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { bool } from 'prop-types'
import { func } from 'prop-types'
import { string } from 'prop-types'
diff --git a/frontend/src/organizations/__tests__/OrganizationCard.test.js b/frontend/src/organizations/__tests__/OrganizationCard.test.js
index c404d64f67..86fe4c01db 100644
--- a/frontend/src/organizations/__tests__/OrganizationCard.test.js
+++ b/frontend/src/organizations/__tests__/OrganizationCard.test.js
@@ -4,25 +4,11 @@ import { MemoryRouter } from 'react-router-dom'
import { List, theme, ChakraProvider, ListItem } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
import { MockedProvider } from '@apollo/client/testing'
-import { setupI18n } from '@lingui/core'
-import { en } from 'make-plural/plurals'
-
+import { i18n } from '@lingui/core'
import { OrganizationCard } from '../OrganizationCard'
-
import { matchMediaSize } from '../../helpers/matchMedia'
-
matchMediaSize()
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
const summaries = {
mail: {
total: 23452,
diff --git a/frontend/src/organizations/__tests__/Organizations.test.js b/frontend/src/organizations/__tests__/Organizations.test.js
index c376781c7a..6a89418311 100644
--- a/frontend/src/organizations/__tests__/Organizations.test.js
+++ b/frontend/src/organizations/__tests__/Organizations.test.js
@@ -4,29 +4,16 @@ import { createMemoryRouter, MemoryRouter, RouterProvider } from 'react-router-d
import { fireEvent, render, waitFor } from '@testing-library/react'
import { MockedProvider } from '@apollo/client/testing'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
import userEvent from '@testing-library/user-event'
-import { en } from 'make-plural/plurals'
-
import Organizations from '../Organizations'
-
import { createCache } from '../../client'
import { UserVarProvider } from '../../utilities/userState'
import { matchMediaSize } from '../../helpers/matchMedia'
import { PAGINATED_ORGANIZATIONS } from '../../graphql/queries'
import { TourProvider } from '../../userOnboarding/contexts/TourContext'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
const summaries = {
dmarc: {
total: 86954,
diff --git a/frontend/src/organizations/__tests__/RequestOrgInviteModal.test.js b/frontend/src/organizations/__tests__/RequestOrgInviteModal.test.js
index 0b5ba5eefc..48f5eb822a 100644
--- a/frontend/src/organizations/__tests__/RequestOrgInviteModal.test.js
+++ b/frontend/src/organizations/__tests__/RequestOrgInviteModal.test.js
@@ -4,8 +4,7 @@ import { MemoryRouter } from 'react-router-dom'
import { theme, ChakraProvider, useDisclosure } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
import { MockedProvider } from '@apollo/client/testing'
-import { setupI18n } from '@lingui/core'
-import { en } from 'make-plural/plurals'
+import { i18n } from '@lingui/core'
import userEvent from '@testing-library/user-event'
import { RequestOrgInviteModal } from '../RequestOrgInviteModal'
import { REQUEST_INVITE_TO_ORG } from '../../graphql/mutations'
@@ -13,19 +12,7 @@ import { matchMediaSize } from '../../helpers/matchMedia'
import { createCache } from '../../client'
import { makeVar } from '@apollo/client'
import { UserVarProvider } from '../../utilities/userState'
-
matchMediaSize()
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
const orgId = 'test-id'
const orgName = 'test-org-name'
diff --git a/frontend/src/setupTests.js b/frontend/src/setupTests.js
index 316452ef51..a0e09b69c5 100644
--- a/frontend/src/setupTests.js
+++ b/frontend/src/setupTests.js
@@ -1,4 +1,5 @@
import '@testing-library/jest-dom'
+import { i18n } from '@lingui/core'
// This defines the window.scrollBy work-around used for firefox on android
Object.defineProperty(window, 'scrollBy', {
@@ -19,3 +20,10 @@ global['Request'] = jest.fn().mockImplementation(() => ({
}))
global.TextEncoder = require('util').TextEncoder
+
+beforeEach(() => {
+ i18n.load({
+ en: {},
+ })
+ i18n.activate('en')
+})
diff --git a/frontend/src/summaries/AggregatedGuidanceSummary.js b/frontend/src/summaries/AggregatedGuidanceSummary.js
index 59a4873dd8..352b8e042e 100644
--- a/frontend/src/summaries/AggregatedGuidanceSummary.js
+++ b/frontend/src/summaries/AggregatedGuidanceSummary.js
@@ -6,7 +6,7 @@ import { ErrorFallbackMessage } from '../components/ErrorFallbackMessage'
import { RelayPaginationControls } from '../components/RelayPaginationControls'
import { LoadingMessage } from '../components/LoadingMessage'
import { ListOf } from '../components/ListOf'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
import { ErrorBoundary } from 'react-error-boundary'
import { GuidanceTagDetails } from '../guidance/GuidanceTagDetails'
import { useQuery } from '@apollo/client'
diff --git a/frontend/src/summaries/Doughnut.js b/frontend/src/summaries/Doughnut.js
index 7a4be5599e..f2da0fc2a5 100644
--- a/frontend/src/summaries/Doughnut.js
+++ b/frontend/src/summaries/Doughnut.js
@@ -1,7 +1,7 @@
import React from 'react'
import { arrayOf, func, number, object, string } from 'prop-types'
import { Box, Image, Stack, Text } from '@chakra-ui/react'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
import { useLingui } from '@lingui/react'
import { useArcs } from '../utilities/useArcs'
diff --git a/frontend/src/summaries/HistoricalSummariesGraph.js b/frontend/src/summaries/HistoricalSummariesGraph.js
index 0d9a27e9b1..482d7877db 100644
--- a/frontend/src/summaries/HistoricalSummariesGraph.js
+++ b/frontend/src/summaries/HistoricalSummariesGraph.js
@@ -14,7 +14,8 @@ import { Line, LinePath } from '@visx/shape'
import { useTooltip, TooltipWithBounds, defaultStyles } from '@visx/tooltip'
import { utcFormat } from '@visx/vendor/d3-time-format'
import { GlyphCircle } from '@visx/glyph'
-import { Trans, t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { func } from 'prop-types'
import useSearchParam from '../utilities/useSearchParam'
import { useLocation } from 'react-router-dom'
diff --git a/frontend/src/summaries/RadialBarChart.js b/frontend/src/summaries/RadialBarChart.js
index 0fe90ced14..ddbe55ea14 100644
--- a/frontend/src/summaries/RadialBarChart.js
+++ b/frontend/src/summaries/RadialBarChart.js
@@ -2,7 +2,7 @@ import React from 'react'
import * as d3 from 'd3'
import { arrayOf, number, object } from 'prop-types'
import theme from '../theme/canada'
-import { t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
import { useD3 } from '../utilities/useD3'
import { Box } from '@chakra-ui/react'
diff --git a/frontend/src/summaries/SummaryGroup.js b/frontend/src/summaries/SummaryGroup.js
index d591be2369..2356c56198 100644
--- a/frontend/src/summaries/SummaryGroup.js
+++ b/frontend/src/summaries/SummaryGroup.js
@@ -1,5 +1,5 @@
import React from 'react'
-import { t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
import { Flex } from '@chakra-ui/react'
import { array } from 'prop-types'
diff --git a/frontend/src/summaries/TierOneSummaries.js b/frontend/src/summaries/TierOneSummaries.js
index df03973cb6..086138332e 100644
--- a/frontend/src/summaries/TierOneSummaries.js
+++ b/frontend/src/summaries/TierOneSummaries.js
@@ -1,5 +1,5 @@
import React from 'react'
-import { t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
import { object } from 'prop-types'
import { SummaryGroup } from './SummaryGroup'
diff --git a/frontend/src/summaries/TierThreeSummaries.js b/frontend/src/summaries/TierThreeSummaries.js
index 01c5fac685..782a9e3de7 100644
--- a/frontend/src/summaries/TierThreeSummaries.js
+++ b/frontend/src/summaries/TierThreeSummaries.js
@@ -1,6 +1,6 @@
import React from 'react'
-import { t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
import { object } from 'prop-types'
import { SummaryGroup } from './SummaryGroup'
diff --git a/frontend/src/summaries/TierTwoSummaries.js b/frontend/src/summaries/TierTwoSummaries.js
index 9c9208e06f..8113bc4173 100644
--- a/frontend/src/summaries/TierTwoSummaries.js
+++ b/frontend/src/summaries/TierTwoSummaries.js
@@ -1,7 +1,7 @@
import React from 'react'
import { Box } from '@chakra-ui/react'
-import { t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
import { object } from 'prop-types'
import { SummaryGroup } from './SummaryGroup'
diff --git a/frontend/src/summaries/TieredSummaries.js b/frontend/src/summaries/TieredSummaries.js
index 072b254a14..94d79810f9 100644
--- a/frontend/src/summaries/TieredSummaries.js
+++ b/frontend/src/summaries/TieredSummaries.js
@@ -4,7 +4,7 @@ import { Box, Accordion, AccordionItem, AccordionButton, AccordionPanel, Accordi
import { TierOneSummaries } from './TierOneSummaries'
import { TierTwoSummaries } from './TierTwoSummaries'
import { TierThreeSummaries } from './TierThreeSummaries'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
import { object } from 'prop-types'
export function TieredSummaries({ summaries }) {
diff --git a/frontend/src/summaries/__tests__/AggregatedGuidanceSummary.test.js b/frontend/src/summaries/__tests__/AggregatedGuidanceSummary.test.js
index b7cdb0a6d7..bdf94a673f 100644
--- a/frontend/src/summaries/__tests__/AggregatedGuidanceSummary.test.js
+++ b/frontend/src/summaries/__tests__/AggregatedGuidanceSummary.test.js
@@ -3,25 +3,12 @@ import { render, waitFor } from '@testing-library/react'
import { MockedProvider } from '@apollo/client/testing'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import { AggregatedGuidanceSummary } from '../AggregatedGuidanceSummary'
-
import { UserVarProvider } from '../../utilities/userState'
import { ORG_NEGATIVE_FINDINGS } from '../../graphql/queries'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
describe('', () => {
const mocks = [
{
diff --git a/frontend/src/summaries/__tests__/Doughnut.test.js b/frontend/src/summaries/__tests__/Doughnut.test.js
index 1270120f65..46d206b09e 100644
--- a/frontend/src/summaries/__tests__/Doughnut.test.js
+++ b/frontend/src/summaries/__tests__/Doughnut.test.js
@@ -1,20 +1,9 @@
import React from 'react'
import { render } from '@testing-library/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { Doughnut, Segment } from '../Doughnut'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
const data = [
{ count: 1, title: 'good', color: '#00ff00', percentage: 1, total: 3 },
diff --git a/frontend/src/summaries/__tests__/HistoricalSummariesGraph.test.js b/frontend/src/summaries/__tests__/HistoricalSummariesGraph.test.js
index c25db8815b..f37812586c 100644
--- a/frontend/src/summaries/__tests__/HistoricalSummariesGraph.test.js
+++ b/frontend/src/summaries/__tests__/HistoricalSummariesGraph.test.js
@@ -2,8 +2,7 @@ import React from 'react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { render } from '@testing-library/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { historicalSummariesData } from '../../fixtures/summaryListData'
import { HistoricalSummariesGraph } from '../HistoricalSummariesGraph'
import { MemoryRouter } from 'react-router-dom'
@@ -27,17 +26,6 @@ class ResizeObserver {
}
window.ResizeObserver = ResizeObserver
-// **
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
describe('', () => {
it('renders correctly', async () => {
diff --git a/frontend/src/summaries/__tests__/SummaryCard.test.js b/frontend/src/summaries/__tests__/SummaryCard.test.js
index 6bae48f987..3d24d9e55c 100644
--- a/frontend/src/summaries/__tests__/SummaryCard.test.js
+++ b/frontend/src/summaries/__tests__/SummaryCard.test.js
@@ -2,20 +2,9 @@ import React from 'react'
import { render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { SummaryCard } from '../SummaryCard'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
const { data } = {
data: {
webSummary: {
diff --git a/frontend/src/summaries/__tests__/SummaryGroup.test.js b/frontend/src/summaries/__tests__/SummaryGroup.test.js
index 710f901642..dd97f18151 100644
--- a/frontend/src/summaries/__tests__/SummaryGroup.test.js
+++ b/frontend/src/summaries/__tests__/SummaryGroup.test.js
@@ -3,20 +3,9 @@ import { MockedProvider } from '@apollo/client/testing'
import { render } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { SummaryGroup } from '../SummaryGroup'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
const data = [
{
id: 'httpsStatus',
diff --git a/frontend/src/summaries/__tests__/TieredSummaries.test.js b/frontend/src/summaries/__tests__/TieredSummaries.test.js
index 3bc2a2959e..514e9a2159 100644
--- a/frontend/src/summaries/__tests__/TieredSummaries.test.js
+++ b/frontend/src/summaries/__tests__/TieredSummaries.test.js
@@ -3,22 +3,11 @@ import { MockedProvider } from '@apollo/client/testing'
import { render } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-
+import { i18n } from '@lingui/core'
import { TieredSummaries } from '../TieredSummaries'
import { UserVarProvider } from '../../utilities/userState'
import { makeVar } from '@apollo/client'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
const data = {
https: {
total: 8992,
diff --git a/frontend/src/termsConditions/TermsConditionsPage.js b/frontend/src/termsConditions/TermsConditionsPage.js
index 74db705620..7547d23c2b 100644
--- a/frontend/src/termsConditions/TermsConditionsPage.js
+++ b/frontend/src/termsConditions/TermsConditionsPage.js
@@ -1,7 +1,7 @@
import React from 'react'
import { Box, Divider, Heading, Link, List, ListItem } from '@chakra-ui/react'
import { LinkIcon } from '@chakra-ui/icons'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
import { useLingui } from '@lingui/react'
import { Link as RouteLink } from 'react-router-dom'
diff --git a/frontend/src/user/EditableEmailUpdateOptions.js b/frontend/src/user/EditableEmailUpdateOptions.js
index 5c198bf0e5..11fc4ee478 100644
--- a/frontend/src/user/EditableEmailUpdateOptions.js
+++ b/frontend/src/user/EditableEmailUpdateOptions.js
@@ -19,7 +19,8 @@ import {
useToast,
} from '@chakra-ui/react'
import { useMutation } from '@apollo/client'
-import { Trans, t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { UPDATE_USER_PROFILE } from '../graphql/mutations'
import { useUserVar } from '../utilities/userState'
import { object } from 'prop-types'
diff --git a/frontend/src/user/EditableUserDisplayName.js b/frontend/src/user/EditableUserDisplayName.js
index d7b49acab1..2ff22a5d27 100644
--- a/frontend/src/user/EditableUserDisplayName.js
+++ b/frontend/src/user/EditableUserDisplayName.js
@@ -18,7 +18,8 @@ import {
} from '@chakra-ui/react'
import { UserIcon } from '../theme/Icons'
import { Formik } from 'formik'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useMutation } from '@apollo/client'
import { string } from 'prop-types'
diff --git a/frontend/src/user/EditableUserEmail.js b/frontend/src/user/EditableUserEmail.js
index 9856206ada..2365ace430 100644
--- a/frontend/src/user/EditableUserEmail.js
+++ b/frontend/src/user/EditableUserEmail.js
@@ -18,7 +18,8 @@ import {
} from '@chakra-ui/react'
import { EditIcon } from '@chakra-ui/icons'
import { Formik } from 'formik'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useMutation } from '@apollo/client'
import { string } from 'prop-types'
diff --git a/frontend/src/user/EditableUserPassword.js b/frontend/src/user/EditableUserPassword.js
index ea65b0c3fc..9abf80712b 100644
--- a/frontend/src/user/EditableUserPassword.js
+++ b/frontend/src/user/EditableUserPassword.js
@@ -18,7 +18,8 @@ import {
} from '@chakra-ui/react'
import { EditIcon } from '@chakra-ui/icons'
import { Formik } from 'formik'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useMutation } from '@apollo/client'
import { PasswordField } from '../components/fields/PasswordField'
diff --git a/frontend/src/user/EditableUserPhoneNumber.js b/frontend/src/user/EditableUserPhoneNumber.js
index 86af894435..8ce1569d95 100644
--- a/frontend/src/user/EditableUserPhoneNumber.js
+++ b/frontend/src/user/EditableUserPhoneNumber.js
@@ -18,7 +18,8 @@ import {
} from '@chakra-ui/react'
import { PhoneIcon } from '../theme/Icons'
import { Formik } from 'formik'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useMutation } from '@apollo/client'
import { string } from 'prop-types'
diff --git a/frontend/src/user/EditableUserTFAMethod.js b/frontend/src/user/EditableUserTFAMethod.js
index 0646e06bb5..fa182d4654 100644
--- a/frontend/src/user/EditableUserTFAMethod.js
+++ b/frontend/src/user/EditableUserTFAMethod.js
@@ -10,7 +10,8 @@ import {
Stack,
useToast,
} from '@chakra-ui/react'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { Field, Formik } from 'formik'
import { useMutation } from '@apollo/client'
diff --git a/frontend/src/user/InsideUserSwitch.js b/frontend/src/user/InsideUserSwitch.js
index cb6e5c62b2..c20ab1169d 100644
--- a/frontend/src/user/InsideUserSwitch.js
+++ b/frontend/src/user/InsideUserSwitch.js
@@ -1,7 +1,8 @@
import { useMutation } from '@apollo/client'
import { QuestionOutlineIcon } from '@chakra-ui/icons'
import { Badge, Flex, Switch, useToast, Tooltip } from '@chakra-ui/react'
-import { Trans, t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { bool } from 'prop-types'
import React from 'react'
import { UPDATE_USER_PROFILE } from '../graphql/mutations'
diff --git a/frontend/src/user/MyTrackerPage.js b/frontend/src/user/MyTrackerPage.js
index 8acace485b..d3da8d338e 100644
--- a/frontend/src/user/MyTrackerPage.js
+++ b/frontend/src/user/MyTrackerPage.js
@@ -1,6 +1,6 @@
import React, { useEffect } from 'react'
import { useQuery } from '@apollo/client'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
import { Box, Flex, Heading, Tab, TabList, TabPanel, TabPanels, Tabs, Text } from '@chakra-ui/react'
import { useParams, useNavigate } from 'react-router-dom'
import { ErrorBoundary } from 'react-error-boundary'
diff --git a/frontend/src/user/UserPage.js b/frontend/src/user/UserPage.js
index e684957a3a..58c4acb815 100644
--- a/frontend/src/user/UserPage.js
+++ b/frontend/src/user/UserPage.js
@@ -18,7 +18,8 @@ import {
import { useMutation, useQuery } from '@apollo/client'
import { QUERY_CURRENT_USER } from '../graphql/queries'
import { useNavigate } from 'react-router-dom'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useLingui } from '@lingui/react'
import { Formik } from 'formik'
import { string } from 'prop-types'
diff --git a/frontend/src/user/__tests__/EditableEmailUpdateOptions.test.js b/frontend/src/user/__tests__/EditableEmailUpdateOptions.test.js
index 67eb024279..9ccaa09aa6 100644
--- a/frontend/src/user/__tests__/EditableEmailUpdateOptions.test.js
+++ b/frontend/src/user/__tests__/EditableEmailUpdateOptions.test.js
@@ -7,22 +7,12 @@ import { UPDATE_USER_PROFILE } from '../../graphql/mutations'
import { useUserVar } from '../../utilities/userState'
import { ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
jest.mock('../../utilities/userState', () => ({
useUserVar: jest.fn(),
}))
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
const mocks = [
{
request: {
diff --git a/frontend/src/user/__tests__/EditableUserDisplayName.test.js b/frontend/src/user/__tests__/EditableUserDisplayName.test.js
index b179c970de..abd332f6f6 100644
--- a/frontend/src/user/__tests__/EditableUserDisplayName.test.js
+++ b/frontend/src/user/__tests__/EditableUserDisplayName.test.js
@@ -2,27 +2,15 @@ import React from 'react'
import { render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MemoryRouter } from 'react-router-dom'
import { MockedProvider } from '@apollo/client/testing'
import { fireEvent } from '@testing-library/dom'
import { makeVar } from '@apollo/client'
-
import { EditableUserDisplayName } from '../EditableUserDisplayName'
-
import { UserVarProvider } from '../../utilities/userState'
import { UPDATE_USER_PROFILE } from '../../graphql/mutations'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
it('renders', async () => {
const { getByText } = render(
diff --git a/frontend/src/user/__tests__/EditableUserEmail.test.js b/frontend/src/user/__tests__/EditableUserEmail.test.js
index 71d069b13e..19200cad82 100644
--- a/frontend/src/user/__tests__/EditableUserEmail.test.js
+++ b/frontend/src/user/__tests__/EditableUserEmail.test.js
@@ -2,27 +2,15 @@ import React from 'react'
import { render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MemoryRouter } from 'react-router-dom'
import { MockedProvider } from '@apollo/client/testing'
import { fireEvent } from '@testing-library/dom'
import { makeVar } from '@apollo/client'
-
import { EditableUserEmail } from '../EditableUserEmail'
-
import { UserVarProvider } from '../../utilities/userState'
import { UPDATE_USER_PROFILE } from '../../graphql/mutations'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
it('renders', async () => {
const { getByText } = render(
diff --git a/frontend/src/user/__tests__/EditableUserPassword.test.js b/frontend/src/user/__tests__/EditableUserPassword.test.js
index 00f2d3841d..4024d1abcf 100644
--- a/frontend/src/user/__tests__/EditableUserPassword.test.js
+++ b/frontend/src/user/__tests__/EditableUserPassword.test.js
@@ -2,27 +2,15 @@ import React from 'react'
import { render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MemoryRouter } from 'react-router-dom'
import { MockedProvider } from '@apollo/client/testing'
import { fireEvent } from '@testing-library/dom'
import { makeVar } from '@apollo/client'
-
import { EditableUserPassword } from '../EditableUserPassword'
-
import { UserVarProvider } from '../../utilities/userState'
import { UPDATE_USER_PASSWORD } from '../../graphql/mutations'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
it('renders', async () => {
const { getByText } = render(
diff --git a/frontend/src/user/__tests__/EditableUserPhoneNumber.test.js b/frontend/src/user/__tests__/EditableUserPhoneNumber.test.js
index 4808db206e..0d87169efe 100644
--- a/frontend/src/user/__tests__/EditableUserPhoneNumber.test.js
+++ b/frontend/src/user/__tests__/EditableUserPhoneNumber.test.js
@@ -2,28 +2,16 @@ import React, { Suspense } from 'react'
import { render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MemoryRouter } from 'react-router-dom'
import { MockedProvider } from '@apollo/client/testing'
import { fireEvent } from '@testing-library/dom'
import { makeVar } from '@apollo/client'
import userEvent from '@testing-library/user-event'
-
import { EditableUserPhoneNumber } from '../EditableUserPhoneNumber'
-
import { UserVarProvider } from '../../utilities/userState'
import { VERIFY_PHONE_NUMBER, SET_PHONE_NUMBER } from '../../graphql/mutations'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
it('renders', async () => {
const { getByText } = render(
diff --git a/frontend/src/user/__tests__/EditableUserTFAMethod.test.js b/frontend/src/user/__tests__/EditableUserTFAMethod.test.js
index df2a838488..8150d6197d 100644
--- a/frontend/src/user/__tests__/EditableUserTFAMethod.test.js
+++ b/frontend/src/user/__tests__/EditableUserTFAMethod.test.js
@@ -2,26 +2,14 @@ import React from 'react'
import { waitFor, render, fireEvent } from '@testing-library/react'
import { ChakraProvider, theme } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MemoryRouter } from 'react-router-dom'
import { MockedProvider } from '@apollo/client/testing'
import { makeVar } from '@apollo/client'
-
import { EditableUserTFAMethod } from '../EditableUserTFAMethod'
-
import { UserVarProvider } from '../../utilities/userState'
import { UPDATE_USER_PROFILE } from '../../graphql/mutations'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
it('renders', async () => {
const { getByText } = render(
diff --git a/frontend/src/user/__tests__/InsideUserSwitch.test.js b/frontend/src/user/__tests__/InsideUserSwitch.test.js
index 2f14cc7a0a..d6e0106816 100644
--- a/frontend/src/user/__tests__/InsideUserSwitch.test.js
+++ b/frontend/src/user/__tests__/InsideUserSwitch.test.js
@@ -2,26 +2,15 @@ import React from 'react'
import { render, waitFor } from '@testing-library/react'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { MemoryRouter } from 'react-router-dom'
import { MockedProvider } from '@apollo/client/testing'
import userEvent from '@testing-library/user-event'
import { makeVar } from '@apollo/client'
-
import { UserVarProvider } from '../../utilities/userState'
import { UPDATE_USER_PROFILE } from '../../graphql/mutations'
import { InsideUserSwitch } from '../InsideUserSwitch'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
-
describe('', () => {
it('renders', async () => {
const { getByText } = render(
diff --git a/frontend/src/user/__tests__/MyTrackerPage.test.js b/frontend/src/user/__tests__/MyTrackerPage.test.js
index fcb7833e68..1e88f86bb4 100644
--- a/frontend/src/user/__tests__/MyTrackerPage.test.js
+++ b/frontend/src/user/__tests__/MyTrackerPage.test.js
@@ -4,27 +4,13 @@ import { MockedProvider } from '@apollo/client/testing'
import { MemoryRouter } from 'react-router-dom'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import matchMediaPolyfill from 'mq-polyfill'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import MyTrackerPage from '../MyTrackerPage'
-
import { UserVarProvider } from '../../utilities/userState'
import { MY_TRACKER_SUMMARY } from '../../graphql/queries'
import { TourProvider } from '../../userOnboarding/contexts/TourContext'
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
matchMediaPolyfill(window)
window
diff --git a/frontend/src/user/__tests__/UserPage.test.js b/frontend/src/user/__tests__/UserPage.test.js
index a75b588d1b..3a2d1dbf9d 100644
--- a/frontend/src/user/__tests__/UserPage.test.js
+++ b/frontend/src/user/__tests__/UserPage.test.js
@@ -1,31 +1,18 @@
import React from 'react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { fireEvent, render, waitFor } from '@testing-library/react'
import { MemoryRouter } from 'react-router-dom'
import { theme, ChakraProvider } from '@chakra-ui/react'
import { I18nProvider } from '@lingui/react'
import { MockedProvider } from '@apollo/client/testing'
import { makeVar } from '@apollo/client'
-import { en } from 'make-plural/plurals'
-
import UserPage from '../UserPage'
-
import { UserVarProvider } from '../../utilities/userState'
import { QUERY_CURRENT_USER } from '../../graphql/queries'
import userEvent from '@testing-library/user-event'
import { ErrorBoundary } from 'react-error-boundary'
import { ErrorFallbackMessage } from '../../components/ErrorFallbackMessage'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
describe('', () => {
const userName = 'testuser@testemail.gc.ca'
const displayName = 'Test User'
diff --git a/frontend/src/userOnboarding/__tests__/TourButton.test.js b/frontend/src/userOnboarding/__tests__/TourButton.test.js
index c2e2dd2122..75afbcccf5 100644
--- a/frontend/src/userOnboarding/__tests__/TourButton.test.js
+++ b/frontend/src/userOnboarding/__tests__/TourButton.test.js
@@ -4,17 +4,7 @@ import { TourButton } from '../components/TourButton'
import * as useTourModule from '../hooks/useTour'
import { MemoryRouter } from 'react-router-dom'
import { I18nProvider } from '@lingui/react'
-import { setupI18n } from '@lingui/core'
-
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: {},
- },
-})
+import { i18n } from '@lingui/core'
// Mock the useTour hook
jest.mock('../hooks/useTour', () => ({
diff --git a/frontend/src/userOnboarding/__tests__/TourComponent.test.js b/frontend/src/userOnboarding/__tests__/TourComponent.test.js
index 218ef06a1e..e0c79c6eb1 100644
--- a/frontend/src/userOnboarding/__tests__/TourComponent.test.js
+++ b/frontend/src/userOnboarding/__tests__/TourComponent.test.js
@@ -8,21 +8,10 @@ import { I18nProvider } from '@lingui/react'
import { ChakraProvider, theme } from '@chakra-ui/react'
import { MemoryRouter } from 'react-router-dom'
import { TourProvider } from '../contexts/TourContext'
-import { setupI18n } from '@lingui/core'
-import { en } from 'make-plural'
+import { i18n } from '@lingui/core'
import { fireEvent } from '@testing-library/dom'
import { COMPLETE_TOUR } from '../../graphql/mutations'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
jest.mock('../config/tourSteps', () => ({
mainTourSteps: {
landingPage: {
diff --git a/frontend/src/userOnboarding/components/TourButton.js b/frontend/src/userOnboarding/components/TourButton.js
index 478a534d2f..54cfc7686b 100644
--- a/frontend/src/userOnboarding/components/TourButton.js
+++ b/frontend/src/userOnboarding/components/TourButton.js
@@ -4,7 +4,7 @@ import { useTour } from '../hooks/useTour'
// import { QuestionOutlineIcon } from '@chakra-ui/icons'
// import { IconButton } from '@chakra-ui/react'
import { Button } from '@chakra-ui/react'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
export const toursConfig = {
// list of pages with their paths
diff --git a/frontend/src/userOnboarding/components/TourComponent.js b/frontend/src/userOnboarding/components/TourComponent.js
index 2076674faa..dbfd6291b2 100644
--- a/frontend/src/userOnboarding/components/TourComponent.js
+++ b/frontend/src/userOnboarding/components/TourComponent.js
@@ -2,7 +2,8 @@ import React, { useEffect } from 'react'
import Joyride from 'react-joyride'
import { useTour } from '../hooks/useTour'
import { mainTourSteps } from '../config/tourSteps'
-import { t, Trans } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
+import { Trans } from "@lingui/react/macro"
import { useUserVar } from '../../utilities/userState'
import theme from '../../theme/canada'
import { useLocation } from 'react-router-dom'
diff --git a/frontend/src/userOnboarding/config/tourSteps.js b/frontend/src/userOnboarding/config/tourSteps.js
index e1ea3c7624..7c4de8ec7b 100644
--- a/frontend/src/userOnboarding/config/tourSteps.js
+++ b/frontend/src/userOnboarding/config/tourSteps.js
@@ -1,5 +1,5 @@
import React from 'react'
-import { Trans } from '@lingui/macro'
+import { Trans } from "@lingui/react/macro"
//Tour steps for each page labeled by the page name, with option for requiring authentication
export const mainTourSteps = {
diff --git a/frontend/src/utilities/__tests__/useDocumentTitle.test.js b/frontend/src/utilities/__tests__/useDocumentTitle.test.js
index b2bb268ab2..3ccead0a9a 100644
--- a/frontend/src/utilities/__tests__/useDocumentTitle.test.js
+++ b/frontend/src/utilities/__tests__/useDocumentTitle.test.js
@@ -1,21 +1,9 @@
import React from 'react'
import { render } from '@testing-library/react'
-import { setupI18n } from '@lingui/core'
+import { i18n } from '@lingui/core'
import { I18nProvider } from '@lingui/react'
-import { en } from 'make-plural/plurals'
-
import { useDocumentTitle } from '../useDocumentTitle'
-const i18n = setupI18n({
- locale: 'en',
- messages: {
- en: {},
- },
- localeData: {
- en: { plurals: en },
- },
-})
-
describe('useDocumentTitle', () => {
describe('when passed a string', () => {
it('sets the document title', async () => {
diff --git a/frontend/src/utilities/fieldRequirements.js b/frontend/src/utilities/fieldRequirements.js
index 5e8874b4bf..f3d49aa25a 100644
--- a/frontend/src/utilities/fieldRequirements.js
+++ b/frontend/src/utilities/fieldRequirements.js
@@ -1,5 +1,5 @@
-import { array, number, object, ref, string } from 'yup'
-import { t } from '@lingui/macro'
+import { array, object, ref, string } from 'yup'
+import { t } from "@lingui/core/macro"
import { i18n } from '@lingui/core'
import { array as arrayProp, object as objectProp, string as stringProp } from 'prop-types'
@@ -25,9 +25,10 @@ const getSchema = (options) => {
lang: string()
.required(i18n._(t`Please choose your preferred language`))
.oneOf(['ENGLISH', 'FRENCH'], ''),
- twoFactorCode: number()
- .typeError(i18n._(t`Verification code must only contains numbers`))
- .required(i18n._(t`Code field must not be empty`)),
+ twoFactorCode: string()
+ .required(i18n._(t`Code field must not be empty`))
+ .matches(/^\d+$/, i18n._(t`Verification code must only contains numbers`))
+ .length(6, i18n._(t`Verification code must be exactly 6 digits long`)),
domainUrl: string().required(i18n._(t`Domain url field must not be empty`)),
phoneNumber: string()
.required(i18n._(t`Phone number field must not be empty`))
@@ -88,7 +89,7 @@ const getSchema = (options) => {
then: (schema) => schema.required(nonEmptyMessage()),
otherwise: (schema) => schema.notRequired(),
}),
- }
+ };
}
const filterSchema = (keyArray, options) => {
diff --git a/frontend/src/utilities/months.js b/frontend/src/utilities/months.js
index 74fa1a25fb..08116304a8 100644
--- a/frontend/src/utilities/months.js
+++ b/frontend/src/utilities/months.js
@@ -1,4 +1,4 @@
-import { t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
export const months = [
t`January`,
diff --git a/frontend/src/utilities/useDocumentTitle.js b/frontend/src/utilities/useDocumentTitle.js
index da133a1fff..e13d6f7ee8 100644
--- a/frontend/src/utilities/useDocumentTitle.js
+++ b/frontend/src/utilities/useDocumentTitle.js
@@ -1,5 +1,5 @@
import { useEffect } from 'react'
-import { t } from '@lingui/macro'
+import { t } from "@lingui/core/macro"
import { useLingui } from '@lingui/react'
export const useDocumentTitle = (title, setTitle = true) => {
diff --git a/frontend/webpack.config.js b/frontend/webpack.config.js
index 7bd291bb84..f5f96335b6 100644
--- a/frontend/webpack.config.js
+++ b/frontend/webpack.config.js
@@ -1,6 +1,7 @@
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
+const CopyWebpackPlugin = require('copy-webpack-plugin')
module.exports = (env) => {
return {
@@ -26,6 +27,14 @@ module.exports = (env) => {
new HtmlWebpackPlugin({
template: './src/html.js',
}),
+ new CopyWebpackPlugin({
+ patterns: [
+ {
+ from: './src/meta',
+ to: './',
+ },
+ ],
+ }),
],
devServer: {
port: 3300,
@@ -90,7 +99,7 @@ module.exports = (env) => {
test: /\.(png|svg|jpe?g|gif)$/i,
type: 'asset/resource',
generator: {
- filename: 'images/[name][ext]',
+ filename: 'images/[name].[contenthash][ext]',
},
},
{
diff --git a/k8s/apps/bases/api/cvd-enrollment-cronjob.yaml b/k8s/apps/bases/api/cvd-enrollment-cronjob.yaml
new file mode 100644
index 0000000000..b842fb4b8f
--- /dev/null
+++ b/k8s/apps/bases/api/cvd-enrollment-cronjob.yaml
@@ -0,0 +1,71 @@
+apiVersion: batch/v1
+kind: CronJob
+metadata:
+ name: cvd-enrollment
+ namespace: api
+spec:
+ timeZone: America/Toronto
+ schedule: "0 3 * * *" # Nightly at 3am UTC
+ concurrencyPolicy: Replace
+ jobTemplate:
+ spec:
+ template:
+ metadata:
+ labels:
+ app: cvd-enrollment
+ spec:
+ securityContext:
+ fsGroup: 1000
+ seccompProfile:
+ type: RuntimeDefault
+ containers:
+ - name: cvd-enrollment
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/cvd-enrollment:master-92665fd-1777395252 # {"$imagepolicy": "flux-system:cvd-enrollment"}
+ env:
+ - name: DB_USER
+ valueFrom:
+ secretKeyRef:
+ name: api
+ key: DB_USER
+ - name: DB_PASS
+ valueFrom:
+ secretKeyRef:
+ name: api
+ key: DB_PASS
+ - name: DB_URL
+ valueFrom:
+ secretKeyRef:
+ name: api
+ key: DB_URL
+ - name: DB_NAME
+ valueFrom:
+ secretKeyRef:
+ name: api
+ key: DB_NAME
+ - name: API_USERNAME
+ valueFrom:
+ secretKeyRef:
+ name: api
+ key: H1_USERNAME
+ - name: API_TOKEN
+ valueFrom:
+ secretKeyRef:
+ name: api
+ key: H1_TOKEN
+ - name: ORG_ID
+ valueFrom:
+ secretKeyRef:
+ name: api
+ key: H1_ORG_ID
+ securityContext:
+ runAsUser: 1000
+ runAsGroup: 1000
+ privileged: false
+ runAsNonRoot: true
+ capabilities:
+ drop:
+ - ALL
+ readOnlyRootFilesystem: true
+ allowPrivilegeEscalation: false
+ restartPolicy: Never
+ backoffLimit: 4
diff --git a/k8s/apps/bases/api/deployment.yaml b/k8s/apps/bases/api/deployment.yaml
index 754bface0d..83e7ca969c 100644
--- a/k8s/apps/bases/api/deployment.yaml
+++ b/k8s/apps/bases/api/deployment.yaml
@@ -27,7 +27,7 @@ spec:
seccompProfile:
type: RuntimeDefault
initContainers:
- - image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/database-migration:master-83897b7-1765557052 # {"$imagepolicy": "flux-system:database-migration"}
+ - image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/database-migration:master-fba8d01-1774016622 # {"$imagepolicy": "flux-system:database-migration"}
name: database-migration
env:
- name: DB_USER
@@ -53,7 +53,7 @@ spec:
name: api
key: DB_URL
containers:
- - image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/api-js:master-710b809-1767619056 # {"$imagepolicy": "flux-system:api"}
+ - image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/api-js:master-9ac6260-1776787241 # {"$imagepolicy": "flux-system:api"}
name: api
ports:
- containerPort: 4000
@@ -168,6 +168,11 @@ spec:
secretKeyRef:
name: api
key: NOTIFICATION_PASSWORD_RESET_BILINGUAL
+ - name: NOTIFICATION_ROLE_CHANGE_EMAIL
+ valueFrom:
+ secretKeyRef:
+ name: api
+ key: NOTIFICATION_ROLE_CHANGE_EMAIL
- name: NOTIFICATION_TWO_FACTOR_CODE_EN
valueFrom:
secretKeyRef:
diff --git a/k8s/apps/bases/api/domain-cleanup-cronjob.yaml b/k8s/apps/bases/api/domain-cleanup-cronjob.yaml
index 997fb6f9fb..7b1204cb27 100644
--- a/k8s/apps/bases/api/domain-cleanup-cronjob.yaml
+++ b/k8s/apps/bases/api/domain-cleanup-cronjob.yaml
@@ -21,7 +21,7 @@ spec:
type: RuntimeDefault
containers:
- name: domain-cleanup
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/domain-cleanup:master-25191be-1763497057 # {"$imagepolicy": "flux-system:domain-cleanup"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/domain-cleanup:master-394446b-1777395321 # {"$imagepolicy": "flux-system:domain-cleanup"}
env:
- name: DB_PASS
valueFrom:
diff --git a/k8s/apps/bases/api/kustomization.yaml b/k8s/apps/bases/api/kustomization.yaml
index d630fcacde..495d2a67b6 100644
--- a/k8s/apps/bases/api/kustomization.yaml
+++ b/k8s/apps/bases/api/kustomization.yaml
@@ -8,3 +8,4 @@ resources:
- virtual-service.yaml
- network-policy.yaml
- domain-cleanup-cronjob.yaml
+ - cvd-enrollment-cronjob.yaml
diff --git a/k8s/apps/bases/api/org-footprint-cronjob/cronjob.yaml b/k8s/apps/bases/api/org-footprint-cronjob/cronjob.yaml
index 5a84a38023..5f967318f6 100644
--- a/k8s/apps/bases/api/org-footprint-cronjob/cronjob.yaml
+++ b/k8s/apps/bases/api/org-footprint-cronjob/cronjob.yaml
@@ -21,7 +21,7 @@ spec:
type: RuntimeDefault
containers:
- name: org-footprint
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/org-footprint:master-b60f6bc-1764944591 # {"$imagepolicy": "flux-system:org-footprint"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/org-footprint:master-394446b-1777395312 # {"$imagepolicy": "flux-system:org-footprint"}
env:
- name: DB_PASS
valueFrom:
@@ -68,6 +68,11 @@ spec:
secretKeyRef:
name: api
key: NOTIFICATION_PENDING_USERS
+ - name: NOTIFICATION_PENDING_CVD_ENROLLMENT
+ valueFrom:
+ secretKeyRef:
+ name: api
+ key: NOTIFICATION_PENDING_CVD_ENROLLMENT
securityContext:
runAsUser: 1000
runAsGroup: 1000
diff --git a/k8s/apps/bases/api/progress-report-cronjob/cronjob.yaml b/k8s/apps/bases/api/progress-report-cronjob/cronjob.yaml
index 2b514de3e1..e7b6ab5327 100644
--- a/k8s/apps/bases/api/progress-report-cronjob/cronjob.yaml
+++ b/k8s/apps/bases/api/progress-report-cronjob/cronjob.yaml
@@ -21,7 +21,7 @@ spec:
type: RuntimeDefault
containers:
- name: progress-report
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/progress-report:master-45c2ed1-1764944577 # {"$imagepolicy": "flux-system:progress-report"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/progress-report:master-394446b-1777395315 # {"$imagepolicy": "flux-system:progress-report"}
env:
- name: DB_PASS
valueFrom:
diff --git a/k8s/apps/bases/azure-defender-easm/add-domain-to-easm/deployment.yaml b/k8s/apps/bases/azure-defender-easm/add-domain-to-easm/deployment.yaml
index 15b6b3dd03..4e197ac830 100644
--- a/k8s/apps/bases/azure-defender-easm/add-domain-to-easm/deployment.yaml
+++ b/k8s/apps/bases/azure-defender-easm/add-domain-to-easm/deployment.yaml
@@ -22,7 +22,7 @@ spec:
type: RuntimeDefault
containers:
- name: add-domain-to-easm
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/azure-defender-easm/add-domain-to-easm:master-0c6be1d-1762980110 # {"$imagepolicy": "flux-system:add-domain-to-easm"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/azure-defender-easm/add-domain-to-easm:master-af58a35-1777031327 # {"$imagepolicy": "flux-system:add-domain-to-easm"}
env:
- name: NATS_SERVERS
value: nats://nats.pubsub:4222
diff --git a/k8s/apps/bases/azure-defender-easm/add-easm-assets-to-tracker-cronjob/cronjob.yaml b/k8s/apps/bases/azure-defender-easm/add-easm-assets-to-tracker-cronjob/cronjob.yaml
index 37b22e25cf..f4ce44af6a 100644
--- a/k8s/apps/bases/azure-defender-easm/add-easm-assets-to-tracker-cronjob/cronjob.yaml
+++ b/k8s/apps/bases/azure-defender-easm/add-easm-assets-to-tracker-cronjob/cronjob.yaml
@@ -20,7 +20,7 @@ spec:
type: RuntimeDefault
containers:
- name: add-easm-assets-to-tracker
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/azure-defender-easm/add-easm-assets-to-tracker:master-0c6be1d-1762980116 # {"$imagepolicy": "flux-system:add-easm-assets-to-tracker"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/azure-defender-easm/add-easm-assets-to-tracker:master-996b6ab-1776967203 # {"$imagepolicy": "flux-system:add-easm-assets-to-tracker"}
env:
- name: DB_PASS
valueFrom:
diff --git a/k8s/apps/bases/azure-defender-easm/import-easm-additional-findings-cronjob/cronjob.yaml b/k8s/apps/bases/azure-defender-easm/import-easm-additional-findings-cronjob/cronjob.yaml
index cf2ff68ebb..18958c3450 100644
--- a/k8s/apps/bases/azure-defender-easm/import-easm-additional-findings-cronjob/cronjob.yaml
+++ b/k8s/apps/bases/azure-defender-easm/import-easm-additional-findings-cronjob/cronjob.yaml
@@ -20,7 +20,7 @@ spec:
type: RuntimeDefault
containers:
- name: import-easm-additional-findings
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/azure-defender-easm/import-easm-additional-findings:master-e11d6f6-1743087729 # {"$imagepolicy": "flux-system:import-easm-additional-findings"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/azure-defender-easm/import-easm-additional-findings:master-10065be-1777032660 # {"$imagepolicy": "flux-system:import-easm-additional-findings"}
env:
- name: DB_PASS
valueFrom:
diff --git a/k8s/apps/bases/azure-defender-easm/label-known-easm-assets-cronjob/cronjob.yaml b/k8s/apps/bases/azure-defender-easm/label-known-easm-assets-cronjob/cronjob.yaml
index e77b5c243b..31dd25332f 100644
--- a/k8s/apps/bases/azure-defender-easm/label-known-easm-assets-cronjob/cronjob.yaml
+++ b/k8s/apps/bases/azure-defender-easm/label-known-easm-assets-cronjob/cronjob.yaml
@@ -20,7 +20,7 @@ spec:
type: RuntimeDefault
containers:
- name: label-known-easm-assets
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/azure-defender-easm/label-known-easm-assets:master-9d6cb1b-1750272229 # {"$imagepolicy": "flux-system:label-known-easm-assets"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/azure-defender-easm/label-known-easm-assets:master-9819949-1777032649 # {"$imagepolicy": "flux-system:label-known-easm-assets"}
env:
- name: DB_PASS
valueFrom:
diff --git a/k8s/apps/bases/frontend/deployment.yaml b/k8s/apps/bases/frontend/deployment.yaml
index dc57b1b6f6..29c61e8b0d 100644
--- a/k8s/apps/bases/frontend/deployment.yaml
+++ b/k8s/apps/bases/frontend/deployment.yaml
@@ -24,7 +24,7 @@ spec:
seccompProfile:
type: RuntimeDefault
containers:
- - image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/frontend:master-930565c-1768407652 # {"$imagepolicy": "flux-system:frontend"}
+ - image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/frontend:master-48fb25d-1776168216 # {"$imagepolicy": "flux-system:frontend"}
name: frontend
env:
- name: FRENCH_HOSTS
diff --git a/k8s/apps/bases/scanners/detect-decay-cronjob/cronjob.yaml b/k8s/apps/bases/scanners/detect-decay-cronjob/cronjob.yaml
index 3715c1c330..3c45f21b1f 100644
--- a/k8s/apps/bases/scanners/detect-decay-cronjob/cronjob.yaml
+++ b/k8s/apps/bases/scanners/detect-decay-cronjob/cronjob.yaml
@@ -21,7 +21,7 @@ spec:
type: RuntimeDefault
containers:
- name: detect-decay
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/detect-decay:master-4b108a1-1768495540 # {"$imagepolicy": "flux-system:detect-decay"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/detect-decay:master-dcce34a-1777395318 # {"$imagepolicy": "flux-system:detect-decay"}
env:
- name: DB_USER
valueFrom:
@@ -72,7 +72,7 @@ spec:
- name: DETECT_DECAY_DRY_RUN_LOG_MODE
value: "false"
- name: DETECT_DECAY_DRY_RUN_EMAIL_MODE
- value: "true"
+ value: "false"
securityContext:
runAsUser: 1000
runAsGroup: 1000
diff --git a/k8s/apps/bases/scanners/dmarc-report-cronjob/cronjob.yaml b/k8s/apps/bases/scanners/dmarc-report-cronjob/cronjob.yaml
index cc1e8c84c1..4aea9262cb 100644
--- a/k8s/apps/bases/scanners/dmarc-report-cronjob/cronjob.yaml
+++ b/k8s/apps/bases/scanners/dmarc-report-cronjob/cronjob.yaml
@@ -21,7 +21,7 @@ spec:
type: RuntimeDefault
containers:
- name: dmarc-report
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/dmarc-report:master-989470f-1767196748 # {"$imagepolicy": "flux-system:dmarc-report"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/dmarc-report:master-394446b-1777395328 # {"$imagepolicy": "flux-system:dmarc-report"}
env:
- name: DB_NAME
valueFrom:
diff --git a/k8s/apps/bases/scanners/dns-processor/deployment.yaml b/k8s/apps/bases/scanners/dns-processor/deployment.yaml
index d90b6fa531..8abb8736ec 100644
--- a/k8s/apps/bases/scanners/dns-processor/deployment.yaml
+++ b/k8s/apps/bases/scanners/dns-processor/deployment.yaml
@@ -22,7 +22,7 @@ spec:
type: RuntimeDefault
containers:
- name: dns-processor
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/dns-processor:master-f91175f-1768328797 # {"$imagepolicy": "flux-system:dns-processor"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/dns-processor:master-2f9e153-1776966976 # {"$imagepolicy": "flux-system:dns-processor"}
env:
- name: LOGGER_LEVEL
value: INFO
@@ -44,6 +44,16 @@ spec:
key: DB_USER
- name: NATS_SERVERS
value: nats://nats.pubsub:4222
+ - name: CNAME_MONITOR_ONLY_LIST
+ valueFrom:
+ secretKeyRef:
+ name: scanners
+ key: CNAME_MONITOR_ONLY_LIST
+ - name: SERVICE_ACCOUNT_EMAIL
+ valueFrom:
+ secretKeyRef:
+ name: scanners
+ key: SERVICE_ACCOUNT_EMAIL
- name: NOTIFICATION_API_KEY
valueFrom:
secretKeyRef:
diff --git a/k8s/apps/bases/scanners/dns-scanner/deployment.yaml b/k8s/apps/bases/scanners/dns-scanner/deployment.yaml
index 0ef703f4ff..b3d788fc3f 100644
--- a/k8s/apps/bases/scanners/dns-scanner/deployment.yaml
+++ b/k8s/apps/bases/scanners/dns-scanner/deployment.yaml
@@ -21,7 +21,7 @@ spec:
type: RuntimeDefault
containers:
- name: dns-scanner
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/dns-scanner:master-6ee8ff1-1768495869 # {"$imagepolicy": "flux-system:dns-scanner"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/dns-scanner:master-92c1cd1-1776966888 # {"$imagepolicy": "flux-system:dns-scanner"}
env:
- name: LOGGER_LEVEL
value: INFO
diff --git a/k8s/apps/bases/scanners/domain-discovery/deployment.yaml b/k8s/apps/bases/scanners/domain-discovery/deployment.yaml
index c405d8e92c..561c32dd00 100644
--- a/k8s/apps/bases/scanners/domain-discovery/deployment.yaml
+++ b/k8s/apps/bases/scanners/domain-discovery/deployment.yaml
@@ -22,7 +22,7 @@ spec:
type: RuntimeDefault
containers:
- name: domain-discovery
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/domain-discovery:master-0c6be1d-1762980115 # {"$imagepolicy": "flux-system:domain-discovery"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/domain-discovery:master-d6c7bd4-1777032665 # {"$imagepolicy": "flux-system:domain-discovery"}
env:
- name: DB_NAME
value: track_dmarc
diff --git a/k8s/apps/bases/scanners/domain-dispatcher-cronjob/cronjob.yaml b/k8s/apps/bases/scanners/domain-dispatcher-cronjob/cronjob.yaml
index afbf2c5a47..c5a2fb81c7 100644
--- a/k8s/apps/bases/scanners/domain-dispatcher-cronjob/cronjob.yaml
+++ b/k8s/apps/bases/scanners/domain-dispatcher-cronjob/cronjob.yaml
@@ -20,7 +20,7 @@ spec:
type: RuntimeDefault
containers:
- name: domain-dispatcher
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/domain-dispatcher:master-c00df59-1763496985 # {"$imagepolicy": "flux-system:domain-dispatcher"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/domain-dispatcher:master-0774a52-1774969223 # {"$imagepolicy": "flux-system:domain-dispatcher"}
env:
- name: DB_PASS
valueFrom:
diff --git a/k8s/apps/bases/scanners/summaries-cronjob/cronjob.yaml b/k8s/apps/bases/scanners/summaries-cronjob/cronjob.yaml
index 8c7cd6a13c..868cc62716 100644
--- a/k8s/apps/bases/scanners/summaries-cronjob/cronjob.yaml
+++ b/k8s/apps/bases/scanners/summaries-cronjob/cronjob.yaml
@@ -21,7 +21,7 @@ spec:
type: RuntimeDefault
containers:
- name: summaries
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/summaries:master-12325e1-1768415866 # {"$imagepolicy": "flux-system:summaries"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/summaries:master-ec8c3ff-1776966895 # {"$imagepolicy": "flux-system:summaries"}
env:
- name: DB_USER
valueFrom:
diff --git a/k8s/apps/bases/scanners/update-selectors-cronjob/cronjob.yaml b/k8s/apps/bases/scanners/update-selectors-cronjob/cronjob.yaml
index f4dc8574e4..827e3ce14e 100644
--- a/k8s/apps/bases/scanners/update-selectors-cronjob/cronjob.yaml
+++ b/k8s/apps/bases/scanners/update-selectors-cronjob/cronjob.yaml
@@ -20,7 +20,7 @@ spec:
type: RuntimeDefault
containers:
- name: update-selectors
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/update-selectors:master-1739751-1768486826 # {"$imagepolicy": "flux-system:update-selectors"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/update-selectors:master-c2841b2-1777395314 # {"$imagepolicy": "flux-system:update-selectors"}
env:
- name: ARANGO_DB_USER
valueFrom:
diff --git a/k8s/apps/bases/scanners/web-processor/deployment.yaml b/k8s/apps/bases/scanners/web-processor/deployment.yaml
index 96e60d706b..9c0321caa2 100644
--- a/k8s/apps/bases/scanners/web-processor/deployment.yaml
+++ b/k8s/apps/bases/scanners/web-processor/deployment.yaml
@@ -22,7 +22,7 @@ spec:
type: RuntimeDefault
containers:
- name: web-processor
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/web-processor:master-279326f-1768414958 # {"$imagepolicy": "flux-system:web-processor"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/web-processor:master-a3c1bb7-1776970441 # {"$imagepolicy": "flux-system:web-processor"}
env:
- name: LOGGER_LEVEL
value: INFO
diff --git a/k8s/apps/bases/scanners/web-scanner/deployment.yaml b/k8s/apps/bases/scanners/web-scanner/deployment.yaml
index 11356528bd..4b2e92c352 100644
--- a/k8s/apps/bases/scanners/web-scanner/deployment.yaml
+++ b/k8s/apps/bases/scanners/web-scanner/deployment.yaml
@@ -24,7 +24,7 @@ spec:
type: RuntimeDefault
containers:
- name: web-scanner
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/web-scanner:master-64f9981-1768415862 # {"$imagepolicy": "flux-system:web-scanner"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/web-scanner:master-554a39f-1776966873 # {"$imagepolicy": "flux-system:web-scanner"}
env:
- name: LOGGER_LEVEL
value: INFO
diff --git a/k8s/clusters/auto-image-update/bases/image-repo-policies/cvd-enrollment-image-repo-policy.yaml b/k8s/clusters/auto-image-update/bases/image-repo-policies/cvd-enrollment-image-repo-policy.yaml
new file mode 100644
index 0000000000..fcd737f713
--- /dev/null
+++ b/k8s/clusters/auto-image-update/bases/image-repo-policies/cvd-enrollment-image-repo-policy.yaml
@@ -0,0 +1,23 @@
+apiVersion: image.toolkit.fluxcd.io/v1beta2
+kind: ImageRepository
+metadata:
+ name: cvd-enrollment
+ namespace: flux-system
+spec:
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/cvd-enrollment
+ interval: 1m0s
+---
+apiVersion: image.toolkit.fluxcd.io/v1beta2
+kind: ImagePolicy
+metadata:
+ name: cvd-enrollment
+ namespace: flux-system
+spec:
+ filterTags:
+ extract: $ts
+ pattern: ^master-[a-fA-F0-9]+-(?P.*)
+ imageRepositoryRef:
+ name: cvd-enrollment
+ policy:
+ numerical:
+ order: asc
diff --git a/k8s/clusters/auto-image-update/bases/image-repo-policies/kustomization.yaml b/k8s/clusters/auto-image-update/bases/image-repo-policies/kustomization.yaml
index 9a391df48f..8fd7a2a492 100644
--- a/k8s/clusters/auto-image-update/bases/image-repo-policies/kustomization.yaml
+++ b/k8s/clusters/auto-image-update/bases/image-repo-policies/kustomization.yaml
@@ -27,3 +27,4 @@ resources:
- add-easm-assets-to-tracker-image-repo-policy.yaml
- import-easm-additional-findings-image-repo-policy.yaml
- detect-decay-image-repo-policy.yaml
+ - cvd-enrollment-image-repo-policy.yaml
diff --git a/k8s/infrastructure/bases/arangodb/network-policy.yaml b/k8s/infrastructure/bases/arangodb/network-policy.yaml
index e4b7a1ccb3..7c8019b3f8 100644
--- a/k8s/infrastructure/bases/arangodb/network-policy.yaml
+++ b/k8s/infrastructure/bases/arangodb/network-policy.yaml
@@ -114,6 +114,12 @@ spec:
podSelector:
matchLabels:
app: domain-cleanup
+ - namespaceSelector:
+ matchLabels:
+ kubernetes.io/metadata.name: api
+ podSelector:
+ matchLabels:
+ app: cvd-enrollment
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: azure-defender-easm
diff --git a/k8s/jobs/bases/guidance/job.yaml b/k8s/jobs/bases/guidance/job.yaml
index 6d324f1d72..1788ee9de3 100755
--- a/k8s/jobs/bases/guidance/job.yaml
+++ b/k8s/jobs/bases/guidance/job.yaml
@@ -11,7 +11,7 @@ spec:
spec:
containers:
- name: guidance
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/guidance:master-8914612-1768414937 # {"$imagepolicy": "flux-system:guidance"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/guidance:master-597d370-1776966815 # {"$imagepolicy": "flux-system:guidance"}
env:
- name: DB_USER
valueFrom:
diff --git a/k8s/jobs/bases/super-admin/super-admin-job.yaml b/k8s/jobs/bases/super-admin/super-admin-job.yaml
index 836967c94a..2aefb8b696 100644
--- a/k8s/jobs/bases/super-admin/super-admin-job.yaml
+++ b/k8s/jobs/bases/super-admin/super-admin-job.yaml
@@ -11,7 +11,7 @@ spec:
spec:
containers:
- name: super-admin
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/super-admin:master-e1342bc-1765558161 # {"$imagepolicy": "flux-system:super-admin"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/super-admin:master-394446b-1777395316 # {"$imagepolicy": "flux-system:super-admin"}
env:
- name: DB_PASS
valueFrom:
diff --git a/scanners/dns-processor/Dockerfile b/scanners/dns-processor/Dockerfile
index a63a9e215b..50b3d0770f 100644
--- a/scanners/dns-processor/Dockerfile
+++ b/scanners/dns-processor/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.13.5-slim-bookworm AS python-builder
+FROM python:3.14.2-alpine AS python-builder
# Copy local code to the container image.
ENV PYTHONUNBUFFERED 1
@@ -6,13 +6,12 @@ ENV PYTHONWARNINGS ignore
WORKDIR /working/install
-RUN apt-get update && apt-get install -y --no-install-recommends \
- apt-utils \
+RUN apk add --no-cache \
python3 \
- python3-pip \
- python3-setuptools \
- python3-wheel \
- build-essential \
+ py3-pip \
+ py3-setuptools \
+ py3-wheel \
+ build-base \
python3-dev
COPY requirements.txt /requirements.txt
@@ -22,7 +21,7 @@ RUN pip3 install --prefix=/working/install -r /requirements.txt
#===============================================================================================
#===============================================================================================
-FROM python:3.13.5-slim-bookworm
+FROM python:3.14.2-alpine
# Copy local code to the container image.
ENV PYTHONUNBUFFERED 1
@@ -37,7 +36,7 @@ COPY service.py dns_processor_cli.py ./
COPY dns_processor ./dns_processor
COPY notify ./notify
-RUN useradd -ms /bin/bash scanner
+RUN adduser -D scanner
USER scanner
CMD ["python3", "service.py"]
diff --git a/scanners/dns-processor/requirements.txt b/scanners/dns-processor/requirements.txt
index 760762b6c7..3eac542d03 100644
--- a/scanners/dns-processor/requirements.txt
+++ b/scanners/dns-processor/requirements.txt
@@ -4,9 +4,9 @@ docopt==0.6.2
idna==3.7
nats-py==2.8.0
notifications-python-client==8.0.1
-PyJWT==2.8.0
-python-arango==7.3.4
-python-dotenv==0.20.0
-requests==2.32.4
+PyJWT==2.12.0
+python-arango==8.3.0
+python-dotenv==1.2.2
+requests==2.33.0
requests-toolbelt==1.0.0
urllib3==2.6.3
diff --git a/scanners/dns-processor/service.py b/scanners/dns-processor/service.py
index 6511487d74..8f8f2e9fb2 100644
--- a/scanners/dns-processor/service.py
+++ b/scanners/dns-processor/service.py
@@ -57,6 +57,9 @@
DB_NAME = os.getenv("DB_NAME")
DB_URL = os.getenv("DB_URL")
+CNAME_MONITOR_ONLY_LIST = os.getenv("CNAME_MONITOR_ONLY_LIST", "").split(",")
+SERVICE_ACCOUNT_EMAIL = os.getenv("SERVICE_ACCOUNT_EMAIL")
+
SCAN_THREAD_COUNT = int(os.getenv("SCAN_THREAD_COUNT", 1))
# Establish DB connection
@@ -170,6 +173,18 @@ def check_mx_diff(processed_results, domain_id):
return mx_record_diff
+def is_cname_target(resolve_chain, domains):
+ # Check if any CNAME record in the resolve chain points to a domain in the provided list
+ for rrset in resolve_chain:
+ for record in rrset:
+ record_parts = record.split(" ")
+ if len(record_parts) >= 5 and record_parts[3] == "CNAME":
+ record_target = record_parts[4].strip(".")
+ if record_target in domains:
+ return True
+ return False
+
+
def process_msg(msg):
subject = msg.subject
reply = msg.reply
@@ -370,6 +385,75 @@ def process_msg(msg):
f"Error while updating domain after retrying for received message: {msg}: {error_str}"
)
+ if processed_results.get("cname_record") is not None and CNAME_MONITOR_ONLY_LIST:
+ try:
+ # Use resolve chain instead of CNAME as some domains have CNAMEs that point to other CNAMEs before reaching the final target domain
+ is_cname_target_in_monitor_only_list = is_cname_target(
+ resolve_chain=processed_results.get("resolve_chain", []),
+ domains=CNAME_MONITOR_ONLY_LIST,
+ )
+
+ if is_cname_target_in_monitor_only_list:
+ # Get current claim asset states of domain
+ approved_state_claims_cursor = db.aql.execute(
+ """
+ FOR v, e IN 1..1 INBOUND @domain_id claims
+ FILTER v.verified == true
+ FILTER e.assetState == "approved"
+ RETURN e
+ """,
+ bind_vars={"domain_id": domain["_id"]},
+ )
+ if approved_state_claims_cursor.empty():
+ logger.debug(
+ f"No approved claims for domain with CNAME in monitor-only list for received message: {msg}"
+ )
+ else:
+ approved_state_claims = [claim for claim in approved_state_claims_cursor]
+ for claim in approved_state_claims:
+ try:
+ logger.info(f"Domain with CNAME in monitor-only list has approved claim, updating claim state to monitor-only for claim: {claim}")
+ claim["assetState"] = "monitor-only"
+ db.collection("claims").update(claim)
+
+ insert_activity = {
+ "timestamp": datetime.datetime.now(datetime.timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%f")[
+ :-3
+ ]
+ + "Z",
+ "initiatedBy": {
+ "id": "dns-processor",
+ "userName": SERVICE_ACCOUNT_EMAIL,
+ "role": "service",
+ },
+ "target": {
+ "resource": domain["domain"],
+ "updatedProperties": [
+ {
+ "name": "assetState",
+ "oldValue": "approved",
+ "newValue": "monitor-only",
+ }
+ ],
+ "organization": {"id": claim["_from"].split("/")[1]},
+ "resourceType": "domain",
+ },
+ "action": "update",
+ "reason": None,
+ }
+ db.collection("auditLogs").insert(insert_activity)
+
+ except Exception as e:
+ logger.error(
+ f"Error while processing claim with approved state for domain with CNAME in monitor-only list for received message: {msg}: {str(e)}"
+ )
+ continue
+
+ except Exception as e:
+ logger.error(
+ f"Error while parsing CNAME record for received message: {msg}: {str(e)}"
+ )
+
except Exception as e:
logger.error(
f"Error while inserting processed results for received message: {msg}: {str(e)} \n\nFull traceback: {traceback.format_exc()}"
diff --git a/scanners/dns-scanner/Dockerfile b/scanners/dns-scanner/Dockerfile
index 823ebfd949..9bded3521f 100644
--- a/scanners/dns-scanner/Dockerfile
+++ b/scanners/dns-scanner/Dockerfile
@@ -1,17 +1,16 @@
-FROM python:3.13.5-slim-bookworm AS python-builder
+FROM python:3.14.3-alpine AS python-builder
# Copy local code to the container image.
ENV PYTHONWARNINGS ignore
ENV PYTHONUNBUFFERED 1
WORKDIR /working/install
-RUN apt-get update && apt-get install -y --no-install-recommends \
- apt-utils \
+RUN apk add --no-cache \
python3 \
- python3-pip \
- python3-setuptools \
- python3-wheel \
- build-essential \
+ py3-pip \
+ py3-setuptools \
+ py3-wheel \
+ build-base \
python3-dev
COPY requirements.txt /requirements.txt
@@ -21,7 +20,7 @@ RUN pip3 install --prefix=/working/install -r /requirements.txt
#===============================================================================================
#===============================================================================================
-FROM python:3.13.5-slim-bookworm
+FROM python:3.14.3-alpine
# Copy local code to the container image.
ENV PYTHONUNBUFFERED 1
@@ -34,7 +33,7 @@ COPY --from=python-builder /working/install/lib /usr/local/lib
COPY service.py dns_scan_cli.py ./
COPY dns_scanner ./dns_scanner
-RUN useradd -ms /bin/bash scanner
+RUN adduser -D scanner
USER scanner
CMD ["python3", "service.py"]
diff --git a/scanners/dns-scanner/requirements.txt b/scanners/dns-scanner/requirements.txt
index bf395426a8..b9d301b0ab 100644
--- a/scanners/dns-scanner/requirements.txt
+++ b/scanners/dns-scanner/requirements.txt
@@ -2,7 +2,7 @@ certifi==2024.7.4
cffi==2.0.0
charset-normalizer==2.1.1
checkdmarc==5.7.7
-cryptography==44.0.1
+cryptography==46.0.7
dkimpy==1.0.5
dnspython==2.6.1
expiringdict==1.2.2
@@ -12,12 +12,12 @@ nats-py==2.8.0
publicsuffix2==2.20191221
publicsuffixlist==0.10.0.20240420
pycparser==2.21
-PyJWT==2.8.0
+PyJWT==2.12.0
pyleri==1.4.1
PyNaCl==1.6.2
python-arango==8.1.6
-python-dotenv==0.21.0
-requests==2.32.4
+python-dotenv==1.2.2
+requests==2.33.0
requests-file==1.5.1
requests-toolbelt==1.0.0
six==1.16.0
diff --git a/scanners/domain-discovery/Dockerfile b/scanners/domain-discovery/Dockerfile
index 9105d5259f..c6eee02126 100644
--- a/scanners/domain-discovery/Dockerfile
+++ b/scanners/domain-discovery/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.11.12-slim-bookworm AS python-builder
+FROM python:3.14.2-alpine AS python-builder
# Copy local code to the container image.
ENV PYTHONUNBUFFERED 1
@@ -6,13 +6,12 @@ ENV PYTHONWARNINGS ignore
WORKDIR /working/install
-RUN apt-get update && apt-get install -y --no-install-recommends \
- apt-utils \
+RUN apk add --no-cache \
python3 \
- python3-pip \
- python3-setuptools \
- python3-wheel \
- build-essential \
+ py3-pip \
+ py3-setuptools \
+ py3-wheel \
+ build-base \
python3-dev \
curl \
unzip
@@ -30,7 +29,7 @@ RUN curl -LO https://github.com/findomain/findomain/releases/latest/download/fin
#===============================================================================================
#===============================================================================================
-FROM python:3.11.12-slim-bookworm
+FROM python:3.14.2-alpine
# Copy local code to the container image.
ENV PYTHONUNBUFFERED 1
@@ -45,7 +44,7 @@ COPY --from=python-builder /usr/bin/findomain /usr/bin/findomain
COPY domain_discovery.py ./
-RUN useradd -ms /bin/bash discovery
+RUN adduser -D discovery
USER discovery
CMD ["python3", "domain_discovery.py"]
diff --git a/scanners/domain-discovery/requirements.txt b/scanners/domain-discovery/requirements.txt
index c6c6b17aeb..6dff50b254 100644
--- a/scanners/domain-discovery/requirements.txt
+++ b/scanners/domain-discovery/requirements.txt
@@ -1,4 +1,4 @@
python-arango==7.3.4
-python-dotenv==1.1.0
+python-dotenv==1.2.2
nats-py==2.6.0
dnspython==2.6.1
diff --git a/scanners/domain-dispatcher/.eslintrc b/scanners/domain-dispatcher/.eslintrc
index 9665f5a604..40515f156c 100644
--- a/scanners/domain-dispatcher/.eslintrc
+++ b/scanners/domain-dispatcher/.eslintrc
@@ -9,6 +9,11 @@
"env": {
"jest/globals": true
},
+ "settings": {
+ "import/resolver": {
+ "typescript": {}
+ }
+ },
"rules": {
"comma-dangle": ["error", "always-multiline"],
"no-unused-vars": [
diff --git a/scanners/domain-dispatcher/cloudbuild.yaml b/scanners/domain-dispatcher/cloudbuild.yaml
index ef04cb5dd9..f03a7a0bd2 100644
--- a/scanners/domain-dispatcher/cloudbuild.yaml
+++ b/scanners/domain-dispatcher/cloudbuild.yaml
@@ -13,19 +13,19 @@ steps:
id: wait_arango
args: ['arangodb:8529']
- - name: node:16-alpine
+ - name: node:22-alpine
id: install
dir: scanners/domain-dispatcher
entrypoint: npm
args: ['ci', '--no-optional']
- - name: node:16-alpine
+ - name: node:22-alpine
id: lint
dir: scanners/domain-dispatcher
entrypoint: npm
args: ['run', 'lint']
- - name: node:16-alpine
+ - name: node:22-alpine
id: test
dir: scanners/domain-dispatcher
entrypoint: npm
diff --git a/scanners/domain-dispatcher/domain-dispatcher-job.yaml b/scanners/domain-dispatcher/domain-dispatcher-job.yaml
index 9f5af5eba8..e16d30b074 100644
--- a/scanners/domain-dispatcher/domain-dispatcher-job.yaml
+++ b/scanners/domain-dispatcher/domain-dispatcher-job.yaml
@@ -12,7 +12,7 @@ spec:
spec:
containers:
- name: domain-dispatcher
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/domain-dispatcher:master-c00df59-1763496985 # {"$imagepolicy": "flux-system:domain-dispatcher"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/domain-dispatcher:master-0774a52-1774969223 # {"$imagepolicy": "flux-system:domain-dispatcher"}
env:
- name: DB_PASS
valueFrom:
diff --git a/scanners/domain-dispatcher/package-lock.json b/scanners/domain-dispatcher/package-lock.json
index 0899965589..78ab3a5699 100644
--- a/scanners/domain-dispatcher/package-lock.json
+++ b/scanners/domain-dispatcher/package-lock.json
@@ -9,7 +9,7 @@
"version": "1.0.0",
"license": "MIT",
"dependencies": {
- "arangojs": "^8.0.0",
+ "arangojs": "^10.2.2",
"async-wait-until": "^2.0.7",
"dotenv-safe": "^8.2.0",
"nats": "^2.7.0"
@@ -18,6 +18,7 @@
"eslint": "^7.32.0",
"eslint-config-prettier": "^8.3.0",
"eslint-config-standard": "^16.0.3",
+ "eslint-import-resolver-typescript": "^4.4.4",
"eslint-plugin-import": "^2.24.2",
"eslint-plugin-jest": "^24.4.0",
"eslint-plugin-node": "^11.1.0",
@@ -25,124 +26,54 @@
"eslint-plugin-react": "^7.24.0",
"eslint-plugin-react-hooks": "^4.2.0",
"eslint-plugin-standard": "^4.1.0",
- "jest": "^27.0.6",
+ "jest": "^30.2.0",
"prettier": "^2.3.2"
}
},
"node_modules/@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
"dev": true,
"dependencies": {
- "@babel/highlight": "^7.22.13",
- "chalk": "^2.4.2"
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/code-frame/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/code-frame/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@babel/code-frame/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/@babel/compat-data": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz",
- "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
+ "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz",
- "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.15.0",
- "@babel/helper-compilation-targets": "^7.15.0",
- "@babel/helper-module-transforms": "^7.15.0",
- "@babel/helpers": "^7.14.8",
- "@babel/parser": "^7.15.0",
- "@babel/template": "^7.14.5",
- "@babel/traverse": "^7.15.0",
- "@babel/types": "^7.15.0",
- "convert-source-map": "^1.7.0",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
+ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helpers": "^7.28.6",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/traverse": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/remapping": "^2.3.5",
+ "convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
- "json5": "^2.1.2",
- "semver": "^6.3.0",
- "source-map": "^0.5.0"
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
@@ -152,221 +83,154 @@
"url": "https://opencollective.com/babel"
}
},
- "node_modules/@babel/core/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "bin": {
+ "semver": "bin/semver.js"
}
},
"node_modules/@babel/generator": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
- "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
+ "version": "7.29.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.23.0",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
- "jsesc": "^2.5.1"
+ "@babel/parser": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz",
- "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
+ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.15.0",
- "@babel/helper-validator-option": "^7.14.5",
- "browserslist": "^4.16.6",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=6.9.0"
+ "@babel/compat-data": "^7.28.6",
+ "@babel/helper-validator-option": "^7.27.1",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-environment-visitor": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
- "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
- "dev": true,
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-function-name": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
- "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+ "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.23.0"
- },
- "engines": {
- "node": ">=6.9.0"
+ "yallist": "^3.0.2"
}
},
- "node_modules/@babel/helper-hoist-variables": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
- "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
+ "bin": {
+ "semver": "bin/semver.js"
}
},
- "node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz",
- "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==",
+ "node_modules/@babel/helper-compilation-targets/node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ },
+ "node_modules/@babel/helper-globals": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
"dev": true,
- "dependencies": {
- "@babel/types": "^7.15.0"
- },
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz",
- "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
+ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.14.5"
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz",
- "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
+ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
"dev": true,
"dependencies": {
- "@babel/helper-module-imports": "^7.14.5",
- "@babel/helper-replace-supers": "^7.15.0",
- "@babel/helper-simple-access": "^7.14.8",
- "@babel/helper-split-export-declaration": "^7.14.5",
- "@babel/helper-validator-identifier": "^7.14.9",
- "@babel/template": "^7.14.5",
- "@babel/traverse": "^7.15.0",
- "@babel/types": "^7.15.0"
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz",
- "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.14.5"
},
- "engines": {
- "node": ">=6.9.0"
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz",
- "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-replace-supers": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz",
- "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-member-expression-to-functions": "^7.15.0",
- "@babel/helper-optimise-call-expression": "^7.14.5",
- "@babel/traverse": "^7.15.0",
- "@babel/types": "^7.15.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-simple-access": {
- "version": "7.14.8",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz",
- "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
"dev": true,
- "dependencies": {
- "@babel/types": "^7.14.8"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-split-export-declaration": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
- "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz",
- "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.15.3",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz",
- "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
+ "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.14.5",
- "@babel/traverse": "^7.15.0",
- "@babel/types": "^7.15.0"
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -458,10 +322,13 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
- "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
+ "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
"dev": true,
+ "dependencies": {
+ "@babel/types": "^7.29.0"
+ },
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -505,6 +372,36 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-attributes": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz",
+ "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
@@ -529,6 +426,21 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz",
+ "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
@@ -601,6 +513,21 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/plugin-syntax-top-level-await": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
@@ -617,12 +544,12 @@
}
},
"node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz",
- "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz",
+ "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -632,49 +559,45 @@
}
},
"node_modules/@babel/template": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
- "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
+ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
+ "@babel/code-frame": "^7.28.6",
+ "@babel/parser": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
- "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.0",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.0",
- "@babel/types": "^7.23.0",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
+ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.29.0",
+ "debug": "^4.3.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/types": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
- "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
"dev": true,
"dependencies": {
- "@babel/helper-string-parser": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.20",
- "to-fast-properties": "^2.0.0"
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5"
},
"engines": {
"node": ">=6.9.0"
@@ -686,6 +609,58 @@
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
"dev": true
},
+ "node_modules/@emnapi/core": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz",
+ "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.1.0",
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/core/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz",
+ "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/runtime/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/@emnapi/wasi-threads": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz",
+ "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emnapi/wasi-threads/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "optional": true
+ },
"node_modules/@eslint/eslintrc": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
@@ -753,6 +728,102 @@
"integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
"dev": true
},
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true
+ },
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
+ "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^6.2.2"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
"node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -779,60 +850,59 @@
}
},
"node_modules/@jest/console": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.6.tgz",
- "integrity": "sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.2.0.tgz",
+ "integrity": "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.0.6",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "jest-message-util": "^27.0.6",
- "jest-util": "^27.0.6",
+ "chalk": "^4.1.2",
+ "jest-message-util": "30.2.0",
+ "jest-util": "30.2.0",
"slash": "^3.0.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/@jest/core": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.6.tgz",
- "integrity": "sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.2.0.tgz",
+ "integrity": "sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==",
"dev": true,
"dependencies": {
- "@jest/console": "^27.0.6",
- "@jest/reporters": "^27.0.6",
- "@jest/test-result": "^27.0.6",
- "@jest/transform": "^27.0.6",
- "@jest/types": "^27.0.6",
+ "@jest/console": "30.2.0",
+ "@jest/pattern": "30.0.1",
+ "@jest/reporters": "30.2.0",
+ "@jest/test-result": "30.2.0",
+ "@jest/transform": "30.2.0",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "emittery": "^0.8.1",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-changed-files": "^27.0.6",
- "jest-config": "^27.0.6",
- "jest-haste-map": "^27.0.6",
- "jest-message-util": "^27.0.6",
- "jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.0.6",
- "jest-resolve-dependencies": "^27.0.6",
- "jest-runner": "^27.0.6",
- "jest-runtime": "^27.0.6",
- "jest-snapshot": "^27.0.6",
- "jest-util": "^27.0.6",
- "jest-validate": "^27.0.6",
- "jest-watcher": "^27.0.6",
- "micromatch": "^4.0.4",
- "p-each-series": "^2.1.0",
- "rimraf": "^3.0.0",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "ansi-escapes": "^4.3.2",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "exit-x": "^0.2.2",
+ "graceful-fs": "^4.2.11",
+ "jest-changed-files": "30.2.0",
+ "jest-config": "30.2.0",
+ "jest-haste-map": "30.2.0",
+ "jest-message-util": "30.2.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.2.0",
+ "jest-resolve-dependencies": "30.2.0",
+ "jest-runner": "30.2.0",
+ "jest-runtime": "30.2.0",
+ "jest-snapshot": "30.2.0",
+ "jest-util": "30.2.0",
+ "jest-validate": "30.2.0",
+ "jest-watcher": "30.2.0",
+ "micromatch": "^4.0.8",
+ "pretty-format": "30.2.0",
+ "slash": "^3.0.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -843,85 +913,141 @@
}
}
},
- "node_modules/@jest/environment": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.6.tgz",
- "integrity": "sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg==",
+ "node_modules/@jest/diff-sequences": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz",
+ "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==",
"dev": true,
- "dependencies": {
- "@jest/fake-timers": "^27.0.6",
- "@jest/types": "^27.0.6",
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/environment": {
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz",
+ "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==",
+ "dev": true,
+ "dependencies": {
+ "@jest/fake-timers": "30.2.0",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "jest-mock": "^27.0.6"
+ "jest-mock": "30.2.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/expect": {
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.2.0.tgz",
+ "integrity": "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==",
+ "dev": true,
+ "dependencies": {
+ "expect": "30.2.0",
+ "jest-snapshot": "30.2.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/expect-utils": {
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz",
+ "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/get-type": "30.1.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/@jest/fake-timers": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.6.tgz",
- "integrity": "sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz",
+ "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.0.6",
- "@sinonjs/fake-timers": "^7.0.2",
+ "@jest/types": "30.2.0",
+ "@sinonjs/fake-timers": "^13.0.0",
"@types/node": "*",
- "jest-message-util": "^27.0.6",
- "jest-mock": "^27.0.6",
- "jest-util": "^27.0.6"
+ "jest-message-util": "30.2.0",
+ "jest-mock": "30.2.0",
+ "jest-util": "30.2.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/get-type": {
+ "version": "30.1.0",
+ "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz",
+ "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==",
+ "dev": true,
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/@jest/globals": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.6.tgz",
- "integrity": "sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.2.0.tgz",
+ "integrity": "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.0.6",
- "@jest/types": "^27.0.6",
- "expect": "^27.0.6"
+ "@jest/environment": "30.2.0",
+ "@jest/expect": "30.2.0",
+ "@jest/types": "30.2.0",
+ "jest-mock": "30.2.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/pattern": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz",
+ "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "jest-regex-util": "30.0.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/@jest/reporters": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.6.tgz",
- "integrity": "sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.2.0.tgz",
+ "integrity": "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==",
"dev": true,
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^27.0.6",
- "@jest/test-result": "^27.0.6",
- "@jest/transform": "^27.0.6",
- "@jest/types": "^27.0.6",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.2",
- "graceful-fs": "^4.2.4",
+ "@jest/console": "30.2.0",
+ "@jest/test-result": "30.2.0",
+ "@jest/transform": "30.2.0",
+ "@jest/types": "30.2.0",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "collect-v8-coverage": "^1.0.2",
+ "exit-x": "^0.2.2",
+ "glob": "^10.3.10",
+ "graceful-fs": "^4.2.11",
"istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^4.0.3",
+ "istanbul-lib-instrument": "^6.0.0",
"istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "jest-haste-map": "^27.0.6",
- "jest-resolve": "^27.0.6",
- "jest-util": "^27.0.6",
- "jest-worker": "^27.0.6",
+ "istanbul-lib-source-maps": "^5.0.0",
+ "istanbul-reports": "^3.1.3",
+ "jest-message-util": "30.2.0",
+ "jest-util": "30.2.0",
+ "jest-worker": "30.2.0",
"slash": "^3.0.0",
- "source-map": "^0.6.0",
- "string-length": "^4.0.1",
- "terminal-link": "^2.0.0",
- "v8-to-istanbul": "^8.0.0"
+ "string-length": "^4.0.2",
+ "v8-to-istanbul": "^9.0.1"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -932,140 +1058,223 @@
}
}
},
+ "node_modules/@jest/reporters/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@jest/reporters/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@jest/reporters/node_modules/minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@jest/schemas": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz",
+ "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/snapshot-utils": {
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz",
+ "integrity": "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "30.2.0",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "natural-compare": "^1.4.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
"node_modules/@jest/source-map": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz",
- "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==",
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz",
+ "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==",
"dev": true,
"dependencies": {
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.4",
- "source-map": "^0.6.0"
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "callsites": "^3.1.0",
+ "graceful-fs": "^4.2.11"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/@jest/test-result": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.6.tgz",
- "integrity": "sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.2.0.tgz",
+ "integrity": "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==",
"dev": true,
"dependencies": {
- "@jest/console": "^27.0.6",
- "@jest/types": "^27.0.6",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
+ "@jest/console": "30.2.0",
+ "@jest/types": "30.2.0",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "collect-v8-coverage": "^1.0.2"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/@jest/test-sequencer": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz",
- "integrity": "sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz",
+ "integrity": "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==",
"dev": true,
"dependencies": {
- "@jest/test-result": "^27.0.6",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.0.6",
- "jest-runtime": "^27.0.6"
+ "@jest/test-result": "30.2.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.2.0",
+ "slash": "^3.0.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/@jest/transform": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.6.tgz",
- "integrity": "sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.1.0",
- "@jest/types": "^27.0.6",
- "babel-plugin-istanbul": "^6.0.0",
- "chalk": "^4.0.0",
- "convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.0.6",
- "jest-regex-util": "^27.0.6",
- "jest-util": "^27.0.6",
- "micromatch": "^4.0.4",
- "pirates": "^4.0.1",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.2.0.tgz",
+ "integrity": "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.27.4",
+ "@jest/types": "30.2.0",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "babel-plugin-istanbul": "^7.0.1",
+ "chalk": "^4.1.2",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.2.0",
+ "jest-regex-util": "30.0.1",
+ "jest-util": "30.2.0",
+ "micromatch": "^4.0.8",
+ "pirates": "^4.0.7",
"slash": "^3.0.0",
- "source-map": "^0.6.1",
- "write-file-atomic": "^3.0.0"
+ "write-file-atomic": "^5.0.1"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/@jest/types": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
- "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz",
+ "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==",
"dev": true,
"dependencies": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
"@types/node": "*",
- "@types/yargs": "^16.0.0",
- "chalk": "^4.0.0"
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
"dev": true,
"dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
}
},
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
"dev": true,
- "engines": {
- "node": ">=6.0.0"
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
}
},
- "node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"dev": true
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.19",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
- "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
"dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@napi-rs/wasm-runtime": {
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
+ "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@emnapi/core": "^1.4.3",
+ "@emnapi/runtime": "^1.4.3",
+ "@tybys/wasm-util": "^0.10.0"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -1101,64 +1310,95 @@
"node": ">= 8"
}
},
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@pkgr/core": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz",
+ "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/pkgr"
+ }
+ },
+ "node_modules/@sinclair/typebox": {
+ "version": "0.34.48",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz",
+ "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==",
+ "dev": true
+ },
"node_modules/@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"dev": true,
"dependencies": {
"type-detect": "4.0.8"
}
},
"node_modules/@sinonjs/fake-timers": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz",
- "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==",
+ "version": "13.0.5",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz",
+ "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==",
"dev": true,
"dependencies": {
- "@sinonjs/commons": "^1.7.0"
+ "@sinonjs/commons": "^3.0.1"
}
},
- "node_modules/@tokenizer/token": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
- "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
- },
- "node_modules/@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+ "node_modules/@tybys/wasm-util": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
+ "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
"dev": true,
- "engines": {
- "node": ">= 6"
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
}
},
+ "node_modules/@tybys/wasm-util/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "optional": true
+ },
"node_modules/@types/babel__core": {
- "version": "7.1.15",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz",
- "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
"dependencies": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0",
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
"@types/babel__generator": "*",
"@types/babel__template": "*",
"@types/babel__traverse": "*"
}
},
"node_modules/@types/babel__generator": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz",
- "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
"dev": true,
"dependencies": {
"@babel/types": "^7.0.0"
}
},
"node_modules/@types/babel__template": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
- "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.1.0",
@@ -1166,42 +1406,33 @@
}
},
"node_modules/@types/babel__traverse": {
- "version": "7.14.2",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz",
- "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.3.0"
- }
- },
- "node_modules/@types/graceful-fs": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
- "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==",
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
"dev": true,
"dependencies": {
- "@types/node": "*"
+ "@babel/types": "^7.28.2"
}
},
"node_modules/@types/istanbul-lib-coverage": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
- "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
"dev": true
},
"node_modules/@types/istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
+ "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
"dev": true,
"dependencies": {
"@types/istanbul-lib-coverage": "*"
}
},
"node_modules/@types/istanbul-reports": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
- "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+ "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"dev": true,
"dependencies": {
"@types/istanbul-lib-report": "*"
@@ -1220,35 +1451,32 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "16.7.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.2.tgz",
- "integrity": "sha512-TbG4TOx9hng8FKxaVrCisdaxKxqEwJ3zwHoCWXZ0Jw6mnvTInpaB99/2Cy4+XxpXtjNv9/TgfGSvZFyfV/t8Fw=="
- },
- "node_modules/@types/prettier": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz",
- "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==",
- "dev": true
+ "version": "20.19.37",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz",
+ "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
},
"node_modules/@types/stack-utils": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
- "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
+ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
"dev": true
},
"node_modules/@types/yargs": {
- "version": "16.0.4",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz",
- "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==",
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/@types/yargs-parser": {
- "version": "20.2.1",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz",
- "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==",
+ "version": "21.0.3",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
+ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
"dev": true
},
"node_modules/@typescript-eslint/experimental-utils": {
@@ -1382,39 +1610,268 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/abab": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
- "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
"dev": true
},
- "node_modules/acorn": {
- "version": "8.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz",
- "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==",
+ "node_modules/@unrs/resolver-binding-android-arm-eabi": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz",
+ "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==",
+ "cpu": [
+ "arm"
+ ],
"dev": true,
- "bin": {
- "acorn": "bin/acorn"
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-android-arm64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz",
+ "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-darwin-arm64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz",
+ "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-darwin-x64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz",
+ "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-freebsd-x64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz",
+ "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz",
+ "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz",
+ "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz",
+ "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz",
+ "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz",
+ "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz",
+ "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz",
+ "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz",
+ "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz",
+ "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-x64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz",
+ "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-wasm32-wasi": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz",
+ "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==",
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@napi-rs/wasm-runtime": "^0.2.11"
},
"engines": {
- "node": ">=0.4.0"
+ "node": ">=14.0.0"
}
},
- "node_modules/acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+ "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz",
+ "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
- }
+ "optional": true,
+ "os": [
+ "win32"
+ ]
},
- "node_modules/acorn-globals/node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz",
+ "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==",
+ "cpu": [
+ "ia32"
+ ],
"dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz",
+ "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/acorn": {
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz",
+ "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==",
+ "dev": true,
+ "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -1431,27 +1888,6 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
- "node_modules/acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -1517,9 +1953,9 @@
}
},
"node_modules/anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
"dependencies": {
"normalize-path": "^3.0.0",
@@ -1530,18 +1966,22 @@
}
},
"node_modules/arangojs": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-8.0.0.tgz",
- "integrity": "sha512-VjeWxbS18c65Wu6Pr/d5/kW0Chn6ftIfUAzCmG3wUUe8OrRRalSgL6e1+5iY9apocbECo6wTK3kr2goXfLHB+A==",
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-10.2.2.tgz",
+ "integrity": "sha512-3Xllq5inTGjros0mBP9NFxrIW8Di0ldtFurLdrXy5z4NDVJPyJtnwUiiGrMPY21NuVu53wUDE23YN50jnX4epw==",
"dependencies": {
- "@types/node": ">=14",
- "multi-part": "^4.0.0",
- "path-browserify": "^1.0.1",
- "x3-linkedlist": "1.2.0",
- "xhr": "^2.4.1"
+ "@types/node": "^20.11.26"
},
"engines": {
- "node": ">=14"
+ "node": ">=20"
+ },
+ "peerDependencies": {
+ "undici": ">=5.21.0"
+ },
+ "peerDependenciesMeta": {
+ "undici": {
+ "optional": true
+ }
}
},
"node_modules/argparse": {
@@ -1634,102 +2074,95 @@
"npm": ">= 1.0.0"
}
},
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
"node_modules/babel-jest": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.6.tgz",
- "integrity": "sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.2.0.tgz",
+ "integrity": "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==",
"dev": true,
"dependencies": {
- "@jest/transform": "^27.0.6",
- "@jest/types": "^27.0.6",
- "@types/babel__core": "^7.1.14",
- "babel-plugin-istanbul": "^6.0.0",
- "babel-preset-jest": "^27.0.6",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
+ "@jest/transform": "30.2.0",
+ "@types/babel__core": "^7.20.5",
+ "babel-plugin-istanbul": "^7.0.1",
+ "babel-preset-jest": "30.2.0",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
"slash": "^3.0.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
"peerDependencies": {
- "@babel/core": "^7.8.0"
+ "@babel/core": "^7.11.0 || ^8.0.0-0"
}
},
"node_modules/babel-plugin-istanbul": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz",
- "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz",
+ "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.0.0",
"@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^4.0.0",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-instrument": "^6.0.2",
"test-exclude": "^6.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=12"
}
},
"node_modules/babel-plugin-jest-hoist": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz",
- "integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz",
+ "integrity": "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.0.0",
- "@types/babel__traverse": "^7.0.6"
+ "@types/babel__core": "^7.20.5"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/babel-preset-current-node-syntax": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
- "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz",
+ "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==",
"dev": true,
"dependencies": {
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.8.3",
+ "@babel/plugin-syntax-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.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.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-top-level-await": "^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"
+ "@babel/core": "^7.0.0 || ^8.0.0-0"
}
},
"node_modules/babel-preset-jest": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz",
- "integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz",
+ "integrity": "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==",
"dev": true,
"dependencies": {
- "babel-plugin-jest-hoist": "^27.0.6",
- "babel-preset-current-node-syntax": "^1.0.0"
+ "babel-plugin-jest-hoist": "30.2.0",
+ "babel-preset-current-node-syntax": "^1.2.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0"
+ "@babel/core": "^7.11.0 || ^8.0.0-beta.1"
}
},
"node_modules/balanced-match": {
@@ -1738,6 +2171,18 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz",
+ "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==",
+ "dev": true,
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -1760,33 +2205,37 @@
"node": ">=8"
}
},
- "node_modules/browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
"node_modules/browserslist": {
- "version": "4.16.8",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.8.tgz",
- "integrity": "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==",
+ "version": "4.28.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
+ "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
"dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
"dependencies": {
- "caniuse-lite": "^1.0.30001251",
- "colorette": "^1.3.0",
- "electron-to-chromium": "^1.3.811",
- "escalade": "^3.1.1",
- "node-releases": "^1.1.75"
+ "baseline-browser-mapping": "^2.9.0",
+ "caniuse-lite": "^1.0.30001759",
+ "electron-to-chromium": "^1.5.263",
+ "node-releases": "^2.0.27",
+ "update-browserslist-db": "^1.2.0"
},
"bin": {
"browserslist": "cli.js"
},
"engines": {
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
}
},
"node_modules/bser": {
@@ -1849,14 +2298,24 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001252",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz",
- "integrity": "sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw==",
+ "version": "1.0.30001776",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001776.tgz",
+ "integrity": "sha512-sg01JDPzZ9jGshqKSckOQthXnYwOEP50jeVFhaSFbZcOy05TiuuaffDOfcwtCisJ9kNQuLBFibYywv2Bgm9osw==",
"dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- }
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
},
"node_modules/chalk": {
"version": "4.1.2",
@@ -1884,32 +2343,44 @@
}
},
"node_modules/ci-info": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz",
- "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==",
- "dev": true
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz",
+ "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "engines": {
+ "node": ">=8"
+ }
},
"node_modules/cjs-module-lexer": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
- "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz",
+ "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==",
"dev": true
},
"node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dev": true,
"dependencies": {
"string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
+ "strip-ansi": "^6.0.1",
"wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
"dev": true,
"engines": {
"iojs": ">= 1.0.0",
@@ -1917,9 +2388,9 @@
}
},
"node_modules/collect-v8-coverage": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz",
+ "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==",
"dev": true
},
"node_modules/color-convert": {
@@ -1940,24 +2411,6 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "node_modules/colorette": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
- "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
- "dev": true
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -1965,18 +2418,15 @@
"dev": true
},
"node_modules/convert-source-map": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
- "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.1"
- }
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
},
"node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"dependencies": {
"path-key": "^3.1.0",
@@ -1987,51 +2437,13 @@
"node": ">= 8"
}
},
- "node_modules/cssom": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
- "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
- "dev": true
- },
- "node_modules/cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
- "dev": true,
- "dependencies": {
- "cssom": "~0.3.6"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cssstyle/node_modules/cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
- "dev": true
- },
- "node_modules/data-urls": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
- "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
- "dev": true,
- "dependencies": {
- "abab": "^2.0.3",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"dev": true,
"dependencies": {
- "ms": "2.1.2"
+ "ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
@@ -2042,17 +2454,19 @@
}
}
},
- "node_modules/decimal.js": {
- "version": "10.3.1",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
- "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
- "dev": true
- },
"node_modules/dedent": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
- "dev": true
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz",
+ "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==",
+ "dev": true,
+ "peerDependencies": {
+ "babel-plugin-macros": "^3.1.0"
+ },
+ "peerDependenciesMeta": {
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
},
"node_modules/deep-is": {
"version": "0.1.3",
@@ -2061,9 +2475,9 @@
"dev": true
},
"node_modules/deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -2081,15 +2495,6 @@
"node": ">= 0.4"
}
},
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/detect-newline": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
@@ -2099,15 +2504,6 @@
"node": ">=8"
}
},
- "node_modules/diff-sequences": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz",
- "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==",
- "dev": true,
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
"node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -2132,32 +2528,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/dom-walk": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
- "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
- },
- "node_modules/domexception": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
- "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
- "dev": true,
- "dependencies": {
- "webidl-conversions": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/domexception/node_modules/webidl-conversions": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
- "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/dotenv": {
"version": "8.6.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
@@ -2188,19 +2558,25 @@
"node": ">= 0.4"
}
},
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true
+ },
"node_modules/electron-to-chromium": {
- "version": "1.3.818",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.818.tgz",
- "integrity": "sha512-c/Z9gIr+jDZAR9q+mn40hEc1NharBT+8ejkarjbCDnBNFviI6hvcC5j2ezkAXru//bTnQp5n6iPi0JA83Tla1Q==",
+ "version": "1.5.307",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz",
+ "integrity": "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==",
"dev": true
},
"node_modules/emittery": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz",
- "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==",
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sindresorhus/emittery?sponsor=1"
@@ -2294,21 +2670,6 @@
"node": ">= 0.4"
}
},
- "node_modules/es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "dev": true,
- "dependencies": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
"node_modules/es-to-primitive": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
@@ -2327,9 +2688,9 @@
}
},
"node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"dev": true,
"engines": {
"node": ">=6"
@@ -2341,29 +2702,7 @@
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true,
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/escodegen": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
- "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
- "dev": true,
- "dependencies": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1"
- },
- "bin": {
- "escodegen": "bin/escodegen.js",
- "esgenerate": "bin/esgenerate.js"
- },
- "engines": {
- "node": ">=6.0"
- },
- "optionalDependencies": {
- "source-map": "~0.6.1"
+ "node": ">=8"
}
},
"node_modules/eslint": {
@@ -2461,6 +2800,30 @@
"eslint-plugin-promise": "^4.2.1 || ^5.0.0"
}
},
+ "node_modules/eslint-import-context": {
+ "version": "0.1.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.9.tgz",
+ "integrity": "sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==",
+ "dev": true,
+ "dependencies": {
+ "get-tsconfig": "^4.10.1",
+ "stable-hash-x": "^0.2.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint-import-context"
+ },
+ "peerDependencies": {
+ "unrs-resolver": "^1.0.0"
+ },
+ "peerDependenciesMeta": {
+ "unrs-resolver": {
+ "optional": true
+ }
+ }
+ },
"node_modules/eslint-import-resolver-node": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
@@ -2480,6 +2843,40 @@
"ms": "^2.1.1"
}
},
+ "node_modules/eslint-import-resolver-typescript": {
+ "version": "4.4.4",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.4.tgz",
+ "integrity": "sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.4.1",
+ "eslint-import-context": "^0.1.8",
+ "get-tsconfig": "^4.10.1",
+ "is-bun-module": "^2.0.0",
+ "stable-hash-x": "^0.2.0",
+ "tinyglobby": "^0.2.14",
+ "unrs-resolver": "^1.7.11"
+ },
+ "engines": {
+ "node": "^16.17.0 || >=18.6.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint-import-resolver-typescript"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*",
+ "eslint-plugin-import-x": "*"
+ },
+ "peerDependenciesMeta": {
+ "eslint-plugin-import": {
+ "optional": true
+ },
+ "eslint-plugin-import-x": {
+ "optional": true
+ }
+ }
+ },
"node_modules/eslint-module-utils": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz",
@@ -3153,42 +3550,30 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "node_modules/exit": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "node_modules/exit-x": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz",
+ "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==",
"dev": true,
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/expect": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.6.tgz",
- "integrity": "sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz",
+ "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.0.6",
- "ansi-styles": "^5.0.0",
- "jest-get-type": "^27.0.6",
- "jest-matcher-utils": "^27.0.6",
- "jest-message-util": "^27.0.6",
- "jest-regex-util": "^27.0.6"
+ "@jest/expect-utils": "30.2.0",
+ "@jest/get-type": "30.1.0",
+ "jest-matcher-utils": "30.2.0",
+ "jest-message-util": "30.2.0",
+ "jest-mock": "30.2.0",
+ "jest-util": "30.2.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/expect/node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/fast-deep-equal": {
@@ -3235,9 +3620,9 @@
}
},
"node_modules/fb-watchman": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
- "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
"dev": true,
"dependencies": {
"bser": "2.1.1"
@@ -3255,22 +3640,6 @@
"node": "^10.12.0 || >=12.0.0"
}
},
- "node_modules/file-type": {
- "version": "16.5.4",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz",
- "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==",
- "dependencies": {
- "readable-web-to-node-stream": "^3.0.0",
- "strtok3": "^6.2.4",
- "token-types": "^4.1.1"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/file-type?sponsor=1"
- }
- },
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@@ -3310,25 +3679,37 @@
}
},
"node_modules/flatted": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
- "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
- "node_modules/form-data": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz",
- "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==",
+ "node_modules/foreground-child": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
"dev": true,
"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"
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
},
"engines": {
- "node": ">= 6"
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/foreground-child/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/fs.realpath": {
@@ -3338,9 +3719,9 @@
"dev": true
},
"node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
"optional": true,
@@ -3442,6 +3823,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/get-tsconfig": {
+ "version": "4.13.6",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz",
+ "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==",
+ "dev": true,
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
"node_modules/glob": {
"version": "7.1.7",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
@@ -3474,24 +3867,6 @@
"node": ">= 6"
}
},
- "node_modules/global": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
- "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
- "dependencies": {
- "min-document": "^2.19.0",
- "process": "^0.11.10"
- }
- },
- "node_modules/globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/globby": {
"version": "11.0.4",
"resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
@@ -3534,9 +3909,9 @@
}
},
"node_modules/graceful-fs": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
"node_modules/has": {
@@ -3614,51 +3989,12 @@
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true
},
- "node_modules/html-encoding-sniffer": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
- "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
- "dev": true,
- "dependencies": {
- "whatwg-encoding": "^1.0.5"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true
},
- "node_modules/http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "dev": true,
- "dependencies": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "dev": true,
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
@@ -3668,37 +4004,6 @@
"node": ">=10.17.0"
}
},
- "node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
@@ -3734,9 +4039,9 @@
}
},
"node_modules/import-local": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
- "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
"dev": true,
"dependencies": {
"pkg-dir": "^4.2.0",
@@ -3747,6 +4052,9 @@
},
"engines": {
"node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/imurmurhash": {
@@ -3771,7 +4079,8 @@
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
},
"node_modules/internal-slot": {
"version": "1.0.3",
@@ -3821,6 +4130,27 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-bun-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
+ "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^7.7.1"
+ }
+ },
+ "node_modules/is-bun-module/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/is-callable": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
@@ -3833,18 +4163,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-ci": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz",
- "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==",
- "dev": true,
- "dependencies": {
- "ci-info": "^3.1.1"
- },
- "bin": {
- "is-ci": "bin.js"
- }
- },
"node_modules/is-core-module": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
@@ -3890,11 +4208,6 @@
"node": ">=8"
}
},
- "node_modules/is-function": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
- "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="
- },
"node_modules/is-generator-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
@@ -3952,12 +4265,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-potential-custom-element-name": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
- "dev": true
- },
"node_modules/is-regex": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -4016,12 +4323,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -4029,61 +4330,74 @@
"dev": true
},
"node_modules/istanbul-lib-coverage": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
- "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"node_modules/istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
"dev": true,
"dependencies": {
- "@babel/core": "^7.7.5",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
- "semver": "^6.3.0"
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^7.5.4"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-instrument/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
"dependencies": {
"istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
+ "make-dir": "^4.0.0",
"supports-color": "^7.1.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
}
},
"node_modules/istanbul-lib-source-maps": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
- "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz",
+ "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==",
"dev": true,
"dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.23",
"debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
+ "istanbul-lib-coverage": "^3.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
}
},
"node_modules/istanbul-reports": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
- "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
+ "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
"dev": true,
"dependencies": {
"html-escaper": "^2.0.0",
@@ -4093,21 +4407,37 @@
"node": ">=8"
}
},
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
"node_modules/jest": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.6.tgz",
- "integrity": "sha512-EjV8aETrsD0wHl7CKMibKwQNQc3gIRBXlTikBmmHUeVMKaPFxdcUIBfoDqTSXDoGJIivAYGqCWVlzCSaVjPQsA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-30.2.0.tgz",
+ "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==",
"dev": true,
"dependencies": {
- "@jest/core": "^27.0.6",
- "import-local": "^3.0.2",
- "jest-cli": "^27.0.6"
+ "@jest/core": "30.2.0",
+ "@jest/types": "30.2.0",
+ "import-local": "^3.2.0",
+ "jest-cli": "30.2.0"
},
"bin": {
"jest": "bin/jest.js"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -4119,73 +4449,72 @@
}
},
"node_modules/jest-changed-files": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.6.tgz",
- "integrity": "sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.2.0.tgz",
+ "integrity": "sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.0.6",
- "execa": "^5.0.0",
- "throat": "^6.0.1"
+ "execa": "^5.1.1",
+ "jest-util": "30.2.0",
+ "p-limit": "^3.1.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-circus": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.6.tgz",
- "integrity": "sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.2.0.tgz",
+ "integrity": "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.0.6",
- "@jest/test-result": "^27.0.6",
- "@jest/types": "^27.0.6",
+ "@jest/environment": "30.2.0",
+ "@jest/expect": "30.2.0",
+ "@jest/test-result": "30.2.0",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "chalk": "^4.0.0",
+ "chalk": "^4.1.2",
"co": "^4.6.0",
- "dedent": "^0.7.0",
- "expect": "^27.0.6",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^27.0.6",
- "jest-matcher-utils": "^27.0.6",
- "jest-message-util": "^27.0.6",
- "jest-runtime": "^27.0.6",
- "jest-snapshot": "^27.0.6",
- "jest-util": "^27.0.6",
- "pretty-format": "^27.0.6",
+ "dedent": "^1.6.0",
+ "is-generator-fn": "^2.1.0",
+ "jest-each": "30.2.0",
+ "jest-matcher-utils": "30.2.0",
+ "jest-message-util": "30.2.0",
+ "jest-runtime": "30.2.0",
+ "jest-snapshot": "30.2.0",
+ "jest-util": "30.2.0",
+ "p-limit": "^3.1.0",
+ "pretty-format": "30.2.0",
+ "pure-rand": "^7.0.0",
"slash": "^3.0.0",
- "stack-utils": "^2.0.3",
- "throat": "^6.0.1"
+ "stack-utils": "^2.0.6"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-cli": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.6.tgz",
- "integrity": "sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg==",
- "dev": true,
- "dependencies": {
- "@jest/core": "^27.0.6",
- "@jest/test-result": "^27.0.6",
- "@jest/types": "^27.0.6",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "import-local": "^3.0.2",
- "jest-config": "^27.0.6",
- "jest-util": "^27.0.6",
- "jest-validate": "^27.0.6",
- "prompts": "^2.0.1",
- "yargs": "^16.0.3"
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.2.0.tgz",
+ "integrity": "sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/core": "30.2.0",
+ "@jest/test-result": "30.2.0",
+ "@jest/types": "30.2.0",
+ "chalk": "^4.1.2",
+ "exit-x": "^0.2.2",
+ "import-local": "^3.2.0",
+ "jest-config": "30.2.0",
+ "jest-util": "30.2.0",
+ "jest-validate": "30.2.0",
+ "yargs": "^17.7.2"
},
"bin": {
"jest": "bin/jest.js"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -4197,252 +4526,270 @@
}
},
"node_modules/jest-config": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.6.tgz",
- "integrity": "sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^27.0.6",
- "@jest/types": "^27.0.6",
- "babel-jest": "^27.0.6",
- "chalk": "^4.0.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.1",
- "graceful-fs": "^4.2.4",
- "is-ci": "^3.0.0",
- "jest-circus": "^27.0.6",
- "jest-environment-jsdom": "^27.0.6",
- "jest-environment-node": "^27.0.6",
- "jest-get-type": "^27.0.6",
- "jest-jasmine2": "^27.0.6",
- "jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.0.6",
- "jest-runner": "^27.0.6",
- "jest-util": "^27.0.6",
- "jest-validate": "^27.0.6",
- "micromatch": "^4.0.4",
- "pretty-format": "^27.0.6"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.2.0.tgz",
+ "integrity": "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.27.4",
+ "@jest/get-type": "30.1.0",
+ "@jest/pattern": "30.0.1",
+ "@jest/test-sequencer": "30.2.0",
+ "@jest/types": "30.2.0",
+ "babel-jest": "30.2.0",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "deepmerge": "^4.3.1",
+ "glob": "^10.3.10",
+ "graceful-fs": "^4.2.11",
+ "jest-circus": "30.2.0",
+ "jest-docblock": "30.2.0",
+ "jest-environment-node": "30.2.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.2.0",
+ "jest-runner": "30.2.0",
+ "jest-util": "30.2.0",
+ "jest-validate": "30.2.0",
+ "micromatch": "^4.0.8",
+ "parse-json": "^5.2.0",
+ "pretty-format": "30.2.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
"peerDependencies": {
+ "@types/node": "*",
+ "esbuild-register": ">=3.4.0",
"ts-node": ">=9.0.0"
},
"peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "esbuild-register": {
+ "optional": true
+ },
"ts-node": {
"optional": true
}
}
},
+ "node_modules/jest-config/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/jest-config/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/jest-config/node_modules/minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/jest-config/node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/jest-diff": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.6.tgz",
- "integrity": "sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz",
+ "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==",
"dev": true,
"dependencies": {
- "chalk": "^4.0.0",
- "diff-sequences": "^27.0.6",
- "jest-get-type": "^27.0.6",
- "pretty-format": "^27.0.6"
+ "@jest/diff-sequences": "30.0.1",
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "pretty-format": "30.2.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-docblock": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz",
- "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz",
+ "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==",
"dev": true,
"dependencies": {
- "detect-newline": "^3.0.0"
+ "detect-newline": "^3.1.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-each": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.6.tgz",
- "integrity": "sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^27.0.6",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.0.6",
- "jest-util": "^27.0.6",
- "pretty-format": "^27.0.6"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/jest-environment-jsdom": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz",
- "integrity": "sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.2.0.tgz",
+ "integrity": "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.0.6",
- "@jest/fake-timers": "^27.0.6",
- "@jest/types": "^27.0.6",
- "@types/node": "*",
- "jest-mock": "^27.0.6",
- "jest-util": "^27.0.6",
- "jsdom": "^16.6.0"
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.2.0",
+ "chalk": "^4.1.2",
+ "jest-util": "30.2.0",
+ "pretty-format": "30.2.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-environment-node": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.6.tgz",
- "integrity": "sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.2.0.tgz",
+ "integrity": "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.0.6",
- "@jest/fake-timers": "^27.0.6",
- "@jest/types": "^27.0.6",
+ "@jest/environment": "30.2.0",
+ "@jest/fake-timers": "30.2.0",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "jest-mock": "^27.0.6",
- "jest-util": "^27.0.6"
+ "jest-mock": "30.2.0",
+ "jest-util": "30.2.0",
+ "jest-validate": "30.2.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/jest-get-type": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
- "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
- "dev": true,
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-haste-map": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.6.tgz",
- "integrity": "sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.2.0.tgz",
+ "integrity": "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.0.6",
- "@types/graceful-fs": "^4.1.2",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-regex-util": "^27.0.6",
- "jest-serializer": "^27.0.6",
- "jest-util": "^27.0.6",
- "jest-worker": "^27.0.6",
- "micromatch": "^4.0.4",
- "walker": "^1.0.7"
+ "anymatch": "^3.1.3",
+ "fb-watchman": "^2.0.2",
+ "graceful-fs": "^4.2.11",
+ "jest-regex-util": "30.0.1",
+ "jest-util": "30.2.0",
+ "jest-worker": "30.2.0",
+ "micromatch": "^4.0.8",
+ "walker": "^1.0.8"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
"optionalDependencies": {
- "fsevents": "^2.3.2"
- }
- },
- "node_modules/jest-jasmine2": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz",
- "integrity": "sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA==",
- "dev": true,
- "dependencies": {
- "@babel/traverse": "^7.1.0",
- "@jest/environment": "^27.0.6",
- "@jest/source-map": "^27.0.6",
- "@jest/test-result": "^27.0.6",
- "@jest/types": "^27.0.6",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "expect": "^27.0.6",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^27.0.6",
- "jest-matcher-utils": "^27.0.6",
- "jest-message-util": "^27.0.6",
- "jest-runtime": "^27.0.6",
- "jest-snapshot": "^27.0.6",
- "jest-util": "^27.0.6",
- "pretty-format": "^27.0.6",
- "throat": "^6.0.1"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "fsevents": "^2.3.3"
}
},
"node_modules/jest-leak-detector": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz",
- "integrity": "sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz",
+ "integrity": "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==",
"dev": true,
"dependencies": {
- "jest-get-type": "^27.0.6",
- "pretty-format": "^27.0.6"
+ "@jest/get-type": "30.1.0",
+ "pretty-format": "30.2.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-matcher-utils": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz",
- "integrity": "sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz",
+ "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==",
"dev": true,
"dependencies": {
- "chalk": "^4.0.0",
- "jest-diff": "^27.0.6",
- "jest-get-type": "^27.0.6",
- "pretty-format": "^27.0.6"
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "jest-diff": "30.2.0",
+ "pretty-format": "30.2.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-message-util": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.6.tgz",
- "integrity": "sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.12.13",
- "@jest/types": "^27.0.6",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "micromatch": "^4.0.4",
- "pretty-format": "^27.0.6",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz",
+ "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.2.0",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "micromatch": "^4.0.8",
+ "pretty-format": "30.2.0",
"slash": "^3.0.0",
- "stack-utils": "^2.0.3"
+ "stack-utils": "^2.0.6"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-mock": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.6.tgz",
- "integrity": "sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz",
+ "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.0.6",
- "@types/node": "*"
+ "@jest/types": "30.2.0",
+ "@types/node": "*",
+ "jest-util": "30.2.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-pnp-resolver": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
- "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
"dev": true,
"engines": {
"node": ">=6"
@@ -4457,174 +4804,194 @@
}
},
"node_modules/jest-regex-util": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz",
- "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==",
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz",
+ "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==",
"dev": true,
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-resolve": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.6.tgz",
- "integrity": "sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.2.0.tgz",
+ "integrity": "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.0.6",
- "chalk": "^4.0.0",
- "escalade": "^3.1.1",
- "graceful-fs": "^4.2.4",
- "jest-pnp-resolver": "^1.2.2",
- "jest-util": "^27.0.6",
- "jest-validate": "^27.0.6",
- "resolve": "^1.20.0",
- "slash": "^3.0.0"
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.2.0",
+ "jest-pnp-resolver": "^1.2.3",
+ "jest-util": "30.2.0",
+ "jest-validate": "30.2.0",
+ "slash": "^3.0.0",
+ "unrs-resolver": "^1.7.11"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-resolve-dependencies": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz",
- "integrity": "sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.2.0.tgz",
+ "integrity": "sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.0.6",
- "jest-regex-util": "^27.0.6",
- "jest-snapshot": "^27.0.6"
+ "jest-regex-util": "30.0.1",
+ "jest-snapshot": "30.2.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-runner": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.6.tgz",
- "integrity": "sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.2.0.tgz",
+ "integrity": "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==",
"dev": true,
"dependencies": {
- "@jest/console": "^27.0.6",
- "@jest/environment": "^27.0.6",
- "@jest/test-result": "^27.0.6",
- "@jest/transform": "^27.0.6",
- "@jest/types": "^27.0.6",
+ "@jest/console": "30.2.0",
+ "@jest/environment": "30.2.0",
+ "@jest/test-result": "30.2.0",
+ "@jest/transform": "30.2.0",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "emittery": "^0.8.1",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-docblock": "^27.0.6",
- "jest-environment-jsdom": "^27.0.6",
- "jest-environment-node": "^27.0.6",
- "jest-haste-map": "^27.0.6",
- "jest-leak-detector": "^27.0.6",
- "jest-message-util": "^27.0.6",
- "jest-resolve": "^27.0.6",
- "jest-runtime": "^27.0.6",
- "jest-util": "^27.0.6",
- "jest-worker": "^27.0.6",
- "source-map-support": "^0.5.6",
- "throat": "^6.0.1"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "chalk": "^4.1.2",
+ "emittery": "^0.13.1",
+ "exit-x": "^0.2.2",
+ "graceful-fs": "^4.2.11",
+ "jest-docblock": "30.2.0",
+ "jest-environment-node": "30.2.0",
+ "jest-haste-map": "30.2.0",
+ "jest-leak-detector": "30.2.0",
+ "jest-message-util": "30.2.0",
+ "jest-resolve": "30.2.0",
+ "jest-runtime": "30.2.0",
+ "jest-util": "30.2.0",
+ "jest-watcher": "30.2.0",
+ "jest-worker": "30.2.0",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-runtime": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.6.tgz",
- "integrity": "sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q==",
- "dev": true,
- "dependencies": {
- "@jest/console": "^27.0.6",
- "@jest/environment": "^27.0.6",
- "@jest/fake-timers": "^27.0.6",
- "@jest/globals": "^27.0.6",
- "@jest/source-map": "^27.0.6",
- "@jest/test-result": "^27.0.6",
- "@jest/transform": "^27.0.6",
- "@jest/types": "^27.0.6",
- "@types/yargs": "^16.0.0",
- "chalk": "^4.0.0",
- "cjs-module-lexer": "^1.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.0.6",
- "jest-message-util": "^27.0.6",
- "jest-mock": "^27.0.6",
- "jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.0.6",
- "jest-snapshot": "^27.0.6",
- "jest-util": "^27.0.6",
- "jest-validate": "^27.0.6",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.2.0.tgz",
+ "integrity": "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "30.2.0",
+ "@jest/fake-timers": "30.2.0",
+ "@jest/globals": "30.2.0",
+ "@jest/source-map": "30.0.1",
+ "@jest/test-result": "30.2.0",
+ "@jest/transform": "30.2.0",
+ "@jest/types": "30.2.0",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "cjs-module-lexer": "^2.1.0",
+ "collect-v8-coverage": "^1.0.2",
+ "glob": "^10.3.10",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.2.0",
+ "jest-message-util": "30.2.0",
+ "jest-mock": "30.2.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.2.0",
+ "jest-snapshot": "30.2.0",
+ "jest-util": "30.2.0",
"slash": "^3.0.0",
- "strip-bom": "^4.0.0",
- "yargs": "^16.0.3"
+ "strip-bom": "^4.0.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
}
},
- "node_modules/jest-serializer": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz",
- "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==",
+ "node_modules/jest-runtime/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"dev": true,
"dependencies": {
- "@types/node": "*",
- "graceful-fs": "^4.2.4"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/jest-snapshot": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.6.tgz",
- "integrity": "sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.7.2",
- "@babel/generator": "^7.7.2",
- "@babel/parser": "^7.7.2",
- "@babel/plugin-syntax-typescript": "^7.7.2",
- "@babel/traverse": "^7.7.2",
- "@babel/types": "^7.0.0",
- "@jest/transform": "^27.0.6",
- "@jest/types": "^27.0.6",
- "@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.0.6",
- "graceful-fs": "^4.2.4",
- "jest-diff": "^27.0.6",
- "jest-get-type": "^27.0.6",
- "jest-haste-map": "^27.0.6",
- "jest-matcher-utils": "^27.0.6",
- "jest-message-util": "^27.0.6",
- "jest-resolve": "^27.0.6",
- "jest-util": "^27.0.6",
- "natural-compare": "^1.4.0",
- "pretty-format": "^27.0.6",
- "semver": "^7.3.2"
+ "node_modules/jest-runtime/node_modules/minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.2"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/jest-snapshot": {
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.2.0.tgz",
+ "integrity": "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.27.4",
+ "@babel/generator": "^7.27.5",
+ "@babel/plugin-syntax-jsx": "^7.27.1",
+ "@babel/plugin-syntax-typescript": "^7.27.1",
+ "@babel/types": "^7.27.3",
+ "@jest/expect-utils": "30.2.0",
+ "@jest/get-type": "30.1.0",
+ "@jest/snapshot-utils": "30.2.0",
+ "@jest/transform": "30.2.0",
+ "@jest/types": "30.2.0",
+ "babel-preset-current-node-syntax": "^1.2.0",
+ "chalk": "^4.1.2",
+ "expect": "30.2.0",
+ "graceful-fs": "^4.2.11",
+ "jest-diff": "30.2.0",
+ "jest-matcher-utils": "30.2.0",
+ "jest-message-util": "30.2.0",
+ "jest-util": "30.2.0",
+ "pretty-format": "30.2.0",
+ "semver": "^7.7.2",
+ "synckit": "^0.11.8"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-snapshot/node_modules/semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -4633,43 +5000,55 @@
}
},
"node_modules/jest-util": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.6.tgz",
- "integrity": "sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz",
+ "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.0.6",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "is-ci": "^3.0.0",
- "picomatch": "^2.2.3"
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-util/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/jest-validate": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.6.tgz",
- "integrity": "sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.2.0.tgz",
+ "integrity": "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.0.6",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.0.6",
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.2.0",
+ "camelcase": "^6.3.0",
+ "chalk": "^4.1.2",
"leven": "^3.1.0",
- "pretty-format": "^27.0.6"
+ "pretty-format": "30.2.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-validate/node_modules/camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
"engines": {
"node": ">=10"
@@ -4679,35 +5058,38 @@
}
},
"node_modules/jest-watcher": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.6.tgz",
- "integrity": "sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.2.0.tgz",
+ "integrity": "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==",
"dev": true,
"dependencies": {
- "@jest/test-result": "^27.0.6",
- "@jest/types": "^27.0.6",
+ "@jest/test-result": "30.2.0",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "jest-util": "^27.0.6",
- "string-length": "^4.0.1"
+ "ansi-escapes": "^4.3.2",
+ "chalk": "^4.1.2",
+ "emittery": "^0.13.1",
+ "jest-util": "30.2.0",
+ "string-length": "^4.0.2"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-worker": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz",
- "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.2.0.tgz",
+ "integrity": "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==",
"dev": true,
"dependencies": {
"@types/node": "*",
+ "@ungap/structured-clone": "^1.3.0",
+ "jest-util": "30.2.0",
"merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
+ "supports-color": "^8.1.1"
},
"engines": {
- "node": ">= 10.13.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-worker/node_modules/supports-color": {
@@ -4744,62 +5126,16 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/jsdom": {
- "version": "16.7.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
- "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
- "dev": true,
- "dependencies": {
- "abab": "^2.0.5",
- "acorn": "^8.2.4",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.4.4",
- "cssstyle": "^2.3.0",
- "data-urls": "^2.0.0",
- "decimal.js": "^10.2.1",
- "domexception": "^2.0.1",
- "escodegen": "^2.0.0",
- "form-data": "^3.0.0",
- "html-encoding-sniffer": "^2.0.1",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.0",
- "parse5": "6.0.1",
- "saxes": "^5.0.1",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^4.0.0",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^2.0.0",
- "webidl-conversions": "^6.1.0",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.5.0",
- "ws": "^7.4.6",
- "xml-name-validator": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "canvas": "^2.5.0"
- },
- "peerDependenciesMeta": {
- "canvas": {
- "optional": true
- }
- }
- },
"node_modules/jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
"dev": true,
"bin": {
"jsesc": "bin/jsesc"
},
"engines": {
- "node": ">=4"
+ "node": ">=6"
}
},
"node_modules/json-parse-better-errors": {
@@ -4808,6 +5144,12 @@
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
"dev": true
},
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -4845,15 +5187,6 @@
"node": ">=4.0"
}
},
- "node_modules/kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
@@ -4863,18 +5196,11 @@
"node": ">=6"
}
},
- "node_modules/levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "dependencies": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
},
"node_modules/load-json-file": {
"version": "4.0.0",
@@ -4912,12 +5238,6 @@
"node": ">=8"
}
},
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
"node_modules/lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
@@ -4961,27 +5281,39 @@
}
},
"node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
"dependencies": {
- "semver": "^6.0.0"
+ "semver": "^7.5.3"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/makeerror": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
- "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
"dev": true,
"dependencies": {
- "tmpl": "1.0.x"
+ "tmpl": "1.0.5"
}
},
"node_modules/math-intrinsics": {
@@ -5009,49 +5341,18 @@
}
},
"node_modules/micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
"dev": true,
"dependencies": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
},
"engines": {
"node": ">=8.6"
}
},
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-kind": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mime-kind/-/mime-kind-4.0.0.tgz",
- "integrity": "sha512-qQvglvSpS5mABi30beNFd+uHKtKkxD3dxAmhi2e589XKx+WfVqhg5i5P5LBcVgwwv3BiDpNMBWrHqU+JexW4aA==",
- "dependencies": {
- "file-type": "^16.5.4",
- "mime-types": "^2.1.24"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
"node_modules/mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
@@ -5061,18 +5362,10 @@
"node": ">=6"
}
},
- "node_modules/min-document": {
- "version": "2.19.1",
- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.1.tgz",
- "integrity": "sha512-8lqe85PkqQJzIcs2iD7xW/WSxcncC3/DPVbTOafKNJDIMXwGfwXS350mH4SJslomntN2iYtFBuC0yNO3CEap6g==",
- "dependencies": {
- "dom-walk": "^0.1.0"
- }
- },
"node_modules/minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -5087,30 +5380,34 @@
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
"dev": true
},
+ "node_modules/minipass": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
+ "dev": true,
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
"node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true
},
- "node_modules/multi-part": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multi-part/-/multi-part-4.0.0.tgz",
- "integrity": "sha512-YT/CS0PAe62kT8EoQXcQj8yIcSu18HhYv0s6ShdAFsoFly3oV5QaxODnkj0u7zH0/RFyH47cdcMVpcGXliEFVA==",
- "dependencies": {
- "mime-kind": "^4.0.0",
- "multi-part-lite": "^1.0.0"
+ "node_modules/napi-postinstall": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz",
+ "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==",
+ "dev": true,
+ "bin": {
+ "napi-postinstall": "lib/cli.js"
},
"engines": {
- "node": ">=10"
- }
- },
- "node_modules/multi-part-lite": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/multi-part-lite/-/multi-part-lite-1.0.0.tgz",
- "integrity": "sha512-KxIRbBZZ45hoKX1ROD/19wJr0ql1bef1rE8Y1PCwD3PuNXV42pp7Wo8lEHYuAajoT4vfAFcd3rPjlkyEEyt1nw==",
- "engines": {
- "node": ">=8.3.0"
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/napi-postinstall"
}
},
"node_modules/nats": {
@@ -5150,22 +5447,13 @@
"node_modules/node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
"dev": true
},
- "node_modules/node-modules-regexp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
- "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/node-releases": {
- "version": "1.1.75",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz",
- "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==",
+ "version": "2.0.36",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz",
+ "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==",
"dev": true
},
"node_modules/normalize-package-data": {
@@ -5210,12 +5498,6 @@
"node": ">=8"
}
},
- "node_modules/nwsapi": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
- "dev": true
- },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -5334,36 +5616,34 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"dependencies": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
+ "yocto-queue": "^0.1.0"
},
"engines": {
- "node": ">= 0.8.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-each-series": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz",
- "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==",
+ "node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
"engines": {
"node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-limit": {
+ "node_modules/p-locate/node_modules/p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
@@ -5378,18 +5658,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
@@ -5399,6 +5667,12 @@
"node": ">=6"
}
},
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true
+ },
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -5411,11 +5685,6 @@
"node": ">=6"
}
},
- "node_modules/parse-headers": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz",
- "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw=="
- },
"node_modules/parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
@@ -5429,17 +5698,6 @@
"node": ">=4"
}
},
- "node_modules/parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
- "node_modules/path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
- },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -5473,6 +5731,28 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-scurry/node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
+ },
"node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -5482,22 +5762,16 @@
"node": ">=8"
}
},
- "node_modules/peek-readable": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
- "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true
},
"node_modules/picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"engines": {
"node": ">=8.6"
@@ -5516,13 +5790,10 @@
}
},
"node_modules/pirates": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
- "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
"dev": true,
- "dependencies": {
- "node-modules-regexp": "^1.0.0"
- },
"engines": {
"node": ">= 6"
}
@@ -5618,15 +5889,6 @@
"node": ">=4"
}
},
- "node_modules/prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
"node_modules/prettier": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz",
@@ -5640,18 +5902,17 @@
}
},
"node_modules/pretty-format": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
- "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz",
+ "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==",
"dev": true,
"dependencies": {
- "@jest/types": "^27.0.6",
- "ansi-regex": "^5.0.0",
- "ansi-styles": "^5.0.0",
- "react-is": "^17.0.1"
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/pretty-format/node_modules/ansi-styles": {
@@ -5666,14 +5927,6 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "engines": {
- "node": ">= 0.6.0"
- }
- },
"node_modules/progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@@ -5683,19 +5936,6 @@
"node": ">=0.4.0"
}
},
- "node_modules/prompts": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz",
- "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==",
- "dev": true,
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/prop-types": {
"version": "15.7.2",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
@@ -5713,12 +5953,6 @@
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"dev": true
},
- "node_modules/psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "dev": true
- },
"node_modules/punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -5728,12 +5962,22 @@
"node": ">=6"
}
},
- "node_modules/querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "dev": true
- },
+ "node_modules/pure-rand": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz",
+ "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/dubzzz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fast-check"
+ }
+ ]
+ },
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -5755,9 +5999,9 @@
]
},
"node_modules/react-is": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"node_modules/read-pkg": {
@@ -5866,34 +6110,6 @@
"node": ">=4"
}
},
- "node_modules/readable-stream": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz",
- "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/readable-web-to-node-stream": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
- "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
- "dependencies": {
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
"node_modules/regexp.prototype.flags": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz",
@@ -5925,7 +6141,7 @@
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true,
"engines": {
"node": ">=0.10.0"
@@ -5940,12 +6156,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
- "dev": true
- },
"node_modules/resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@@ -5980,6 +6190,15 @@
"node": ">=8"
}
},
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
"node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -6028,30 +6247,6 @@
"queue-microtask": "^1.2.2"
}
},
- "node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "node_modules/saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "dev": true,
- "dependencies": {
- "xmlchars": "^2.2.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -6097,15 +6292,9 @@
}
},
"node_modules/signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
- "dev": true
- },
- "node_modules/sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
"node_modules/slash": {
@@ -6144,9 +6333,9 @@
}
},
"node_modules/source-map-support": {
- "version": "0.5.19",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
- "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
"dependencies": {
"buffer-from": "^1.0.0",
@@ -6191,10 +6380,19 @@
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
+ "node_modules/stable-hash-x": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz",
+ "integrity": "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/stack-utils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz",
- "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
"dev": true,
"dependencies": {
"escape-string-regexp": "^2.0.0"
@@ -6203,33 +6401,6 @@
"node": ">=10"
}
},
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/string-length": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
@@ -6244,14 +6415,29 @@
}
},
"node_modules/string-width": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
- "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
@@ -6303,12 +6489,25 @@
}
},
"node_modules/strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"dependencies": {
- "ansi-regex": "^5.0.0"
+ "ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
@@ -6344,22 +6543,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/strtok3": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz",
- "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==",
- "dependencies": {
- "@tokenizer/token": "^0.3.0",
- "peek-readable": "^4.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -6372,25 +6555,21 @@
"node": ">=8"
}
},
- "node_modules/supports-hyperlinks": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
- "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+ "node_modules/synckit": {
+ "version": "0.11.12",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz",
+ "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==",
"dev": true,
"dependencies": {
- "has-flag": "^4.0.0",
- "supports-color": "^7.0.0"
+ "@pkgr/core": "^0.2.9"
},
"engines": {
- "node": ">=8"
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/synckit"
}
},
- "node_modules/symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true
- },
"node_modules/table": {
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz",
@@ -6430,22 +6609,6 @@
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
},
- "node_modules/terminal-link": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
- "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
- "dev": true,
- "dependencies": {
- "ansi-escapes": "^4.2.1",
- "supports-hyperlinks": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
@@ -6466,80 +6629,67 @@
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
- "node_modules/throat": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
- "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==",
- "dev": true
- },
- "node_modules/tmpl": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
- "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
- "dev": true
- },
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
"dev": true,
"dependencies": {
- "is-number": "^7.0.0"
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
},
"engines": {
- "node": ">=8.0"
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
}
},
- "node_modules/token-types": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz",
- "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==",
- "dependencies": {
- "@tokenizer/token": "^0.3.0",
- "ieee754": "^1.2.1"
- },
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=12.0.0"
},
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
}
},
- "node_modules/tough-cookie": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
- "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
- "dependencies": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
- },
"engines": {
- "node": ">=6"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/tr46": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
- "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
+ "node_modules/tmpl": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
+ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
+ "dev": true
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"dependencies": {
- "punycode": "^2.1.1"
+ "is-number": "^7.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=8.0"
}
},
"node_modules/tsconfig-paths": {
@@ -6601,18 +6751,6 @@
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
"integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
},
- "node_modules/type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dev": true,
- "dependencies": {
- "prelude-ls": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
"node_modules/type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
@@ -6634,15 +6772,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "dependencies": {
- "is-typedarray": "^1.0.0"
- }
- },
"node_modules/typescript": {
"version": "4.3.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz",
@@ -6672,13 +6801,73 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/universalify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
+ },
+ "node_modules/unrs-resolver": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz",
+ "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==",
"dev": true,
- "engines": {
- "node": ">= 4.0.0"
+ "hasInstallScript": true,
+ "dependencies": {
+ "napi-postinstall": "^0.3.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unrs-resolver"
+ },
+ "optionalDependencies": {
+ "@unrs/resolver-binding-android-arm-eabi": "1.11.1",
+ "@unrs/resolver-binding-android-arm64": "1.11.1",
+ "@unrs/resolver-binding-darwin-arm64": "1.11.1",
+ "@unrs/resolver-binding-darwin-x64": "1.11.1",
+ "@unrs/resolver-binding-freebsd-x64": "1.11.1",
+ "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1",
+ "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1",
+ "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-arm64-musl": "1.11.1",
+ "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1",
+ "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-x64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-x64-musl": "1.11.1",
+ "@unrs/resolver-binding-wasm32-wasi": "1.11.1",
+ "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1",
+ "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1",
+ "@unrs/resolver-binding-win32-x64-msvc": "1.11.1"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
}
},
"node_modules/uri-js": {
@@ -6690,21 +6879,6 @@
"punycode": "^2.1.0"
}
},
- "node_modules/url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "dev": true,
- "dependencies": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
- },
"node_modules/v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
@@ -6712,28 +6886,19 @@
"dev": true
},
"node_modules/v8-to-istanbul": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz",
- "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
+ "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
"dev": true,
"dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
"@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^1.6.0",
- "source-map": "^0.7.3"
+ "convert-source-map": "^2.0.0"
},
"engines": {
"node": ">=10.12.0"
}
},
- "node_modules/v8-to-istanbul/node_modules/source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
@@ -6744,72 +6909,13 @@
"spdx-expression-parse": "^3.0.0"
}
},
- "node_modules/w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "dependencies": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
- "node_modules/w3c-xmlserializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
- "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
- "dev": true,
- "dependencies": {
- "xml-name-validator": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/walker": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
- "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
- "dev": true,
- "dependencies": {
- "makeerror": "1.0.x"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
- "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
- "dev": true,
- "engines": {
- "node": ">=10.4"
- }
- },
- "node_modules/whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
- "dev": true,
- "dependencies": {
- "iconv-lite": "0.4.24"
- }
- },
- "node_modules/whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "node_modules/whatwg-url": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
- "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
"dev": true,
"dependencies": {
- "lodash": "^4.7.0",
- "tr46": "^2.1.0",
- "webidl-conversions": "^6.1.0"
- },
- "engines": {
- "node": ">=10"
+ "makeerror": "1.0.12"
}
},
"node_modules/which": {
@@ -6869,6 +6975,24 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -6876,75 +7000,28 @@
"dev": true
},
"node_modules/write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+ "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
"dev": true,
"dependencies": {
"imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
- "node_modules/ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "dev": true,
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
+ "signal-exit": "^4.0.1"
},
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/x3-linkedlist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/x3-linkedlist/-/x3-linkedlist-1.2.0.tgz",
- "integrity": "sha512-mH/YwxpYSKNa8bDNF1yOuZCMuV+K80LtDN8vcLDUAwNazCxptDNsYt+zA/EJeYiGbdtKposhKLZjErGVOR8mag==",
"engines": {
- "node": ">=10"
- }
- },
- "node_modules/xhr": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz",
- "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
- "dependencies": {
- "global": "~4.4.0",
- "is-function": "^1.0.1",
- "parse-headers": "^2.0.0",
- "xtend": "^4.0.0"
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true
- },
- "node_modules/xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "node_modules/write-file-atomic/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
"engines": {
- "node": ">=0.4"
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/y18n": {
@@ -6963,294 +7040,202 @@
"dev": true
},
"node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dev": true,
"dependencies": {
- "cliui": "^7.0.2",
+ "cliui": "^8.0.1",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
- "string-width": "^4.2.0",
+ "string-width": "^4.2.3",
"y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
+ "yargs-parser": "^21.1.1"
},
"engines": {
- "node": ">=10"
+ "node": ">=12"
}
},
"node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true,
"engines": {
"node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
}
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.22.13",
- "chalk": "^2.4.2"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
}
},
"@babel/compat-data": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz",
- "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
+ "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
"dev": true
},
"@babel/core": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz",
- "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.15.0",
- "@babel/helper-compilation-targets": "^7.15.0",
- "@babel/helper-module-transforms": "^7.15.0",
- "@babel/helpers": "^7.14.8",
- "@babel/parser": "^7.15.0",
- "@babel/template": "^7.14.5",
- "@babel/traverse": "^7.15.0",
- "@babel/types": "^7.15.0",
- "convert-source-map": "^1.7.0",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
+ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helpers": "^7.28.6",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/traverse": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/remapping": "^2.3.5",
+ "convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
- "json5": "^2.1.2",
- "semver": "^6.3.0",
- "source-map": "^0.5.0"
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
},
"dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true
}
}
},
"@babel/generator": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
- "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
+ "version": "7.29.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
"dev": true,
"requires": {
- "@babel/types": "^7.23.0",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
- "jsesc": "^2.5.1"
+ "@babel/parser": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
}
},
"@babel/helper-compilation-targets": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz",
- "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
+ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.15.0",
- "@babel/helper-validator-option": "^7.14.5",
- "browserslist": "^4.16.6",
- "semver": "^6.3.0"
+ "@babel/compat-data": "^7.28.6",
+ "@babel/helper-validator-option": "^7.27.1",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true
+ }
}
},
- "@babel/helper-environment-visitor": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
- "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
+ "@babel/helper-globals": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
"dev": true
},
- "@babel/helper-function-name": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
- "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.23.0"
- }
- },
- "@babel/helper-hoist-variables": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
- "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.22.5"
- }
- },
- "@babel/helper-member-expression-to-functions": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz",
- "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.15.0"
- }
- },
"@babel/helper-module-imports": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz",
- "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
+ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
"dev": true,
"requires": {
- "@babel/types": "^7.14.5"
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6"
}
},
"@babel/helper-module-transforms": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz",
- "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.14.5",
- "@babel/helper-replace-supers": "^7.15.0",
- "@babel/helper-simple-access": "^7.14.8",
- "@babel/helper-split-export-declaration": "^7.14.5",
- "@babel/helper-validator-identifier": "^7.14.9",
- "@babel/template": "^7.14.5",
- "@babel/traverse": "^7.15.0",
- "@babel/types": "^7.15.0"
- }
- },
- "@babel/helper-optimise-call-expression": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz",
- "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
+ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
"dev": true,
"requires": {
- "@babel/types": "^7.14.5"
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/traverse": "^7.28.6"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz",
- "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
"dev": true
},
- "@babel/helper-replace-supers": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz",
- "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==",
- "dev": true,
- "requires": {
- "@babel/helper-member-expression-to-functions": "^7.15.0",
- "@babel/helper-optimise-call-expression": "^7.14.5",
- "@babel/traverse": "^7.15.0",
- "@babel/types": "^7.15.0"
- }
- },
- "@babel/helper-simple-access": {
- "version": "7.14.8",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz",
- "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.14.8"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
- "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.22.5"
- }
- },
"@babel/helper-string-parser": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"dev": true
},
"@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
"dev": true
},
"@babel/helper-validator-option": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz",
- "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
"dev": true
},
"@babel/helpers": {
- "version": "7.15.3",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz",
- "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
+ "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
"dev": true,
"requires": {
- "@babel/template": "^7.14.5",
- "@babel/traverse": "^7.15.0",
- "@babel/types": "^7.15.0"
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.28.6"
}
},
"@babel/highlight": {
@@ -7323,10 +7308,13 @@
}
},
"@babel/parser": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
- "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
- "dev": true
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz",
+ "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.29.0"
+ }
},
"@babel/plugin-syntax-async-generators": {
"version": "7.8.4",
@@ -7355,6 +7343,24 @@
"@babel/helper-plugin-utils": "^7.12.13"
}
},
+ "@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-import-attributes": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz",
+ "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.28.6"
+ }
+ },
"@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
@@ -7373,6 +7379,15 @@
"@babel/helper-plugin-utils": "^7.8.0"
}
},
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz",
+ "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.28.6"
+ }
+ },
"@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
@@ -7427,6 +7442,15 @@
"@babel/helper-plugin-utils": "^7.8.0"
}
},
+ "@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
"@babel/plugin-syntax-top-level-await": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
@@ -7437,52 +7461,48 @@
}
},
"@babel/plugin-syntax-typescript": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz",
- "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz",
+ "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.28.6"
}
},
"@babel/template": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
- "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
+ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
+ "@babel/code-frame": "^7.28.6",
+ "@babel/parser": "^7.28.6",
+ "@babel/types": "^7.28.6"
}
},
"@babel/traverse": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
- "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.0",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.0",
- "@babel/types": "^7.23.0",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
+ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.29.0",
+ "debug": "^4.3.1"
}
},
"@babel/types": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
- "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
"dev": true,
"requires": {
- "@babel/helper-string-parser": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.20",
- "to-fast-properties": "^2.0.0"
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5"
}
},
"@bcoe/v8-coverage": {
@@ -7491,6 +7511,64 @@
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
"dev": true
},
+ "@emnapi/core": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz",
+ "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@emnapi/wasi-threads": "1.1.0",
+ "tslib": "^2.4.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "@emnapi/runtime": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz",
+ "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tslib": "^2.4.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "@emnapi/wasi-threads": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz",
+ "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tslib": "^2.4.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
"@eslint/eslintrc": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
@@ -7536,12 +7614,77 @@
"minimatch": "^3.0.4"
}
},
- "@humanwhocodes/object-schema": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
- "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
- "dev": true
- },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
+ "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
+ "dev": true
+ },
+ "@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "requires": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
+ "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^6.2.2"
+ }
+ },
+ "wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ }
+ }
+ }
+ },
"@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -7562,235 +7705,347 @@
"dev": true
},
"@jest/console": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.6.tgz",
- "integrity": "sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.2.0.tgz",
+ "integrity": "sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.6",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "jest-message-util": "^27.0.6",
- "jest-util": "^27.0.6",
+ "chalk": "^4.1.2",
+ "jest-message-util": "30.2.0",
+ "jest-util": "30.2.0",
"slash": "^3.0.0"
}
},
"@jest/core": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.6.tgz",
- "integrity": "sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.2.0.tgz",
+ "integrity": "sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==",
"dev": true,
"requires": {
- "@jest/console": "^27.0.6",
- "@jest/reporters": "^27.0.6",
- "@jest/test-result": "^27.0.6",
- "@jest/transform": "^27.0.6",
- "@jest/types": "^27.0.6",
+ "@jest/console": "30.2.0",
+ "@jest/pattern": "30.0.1",
+ "@jest/reporters": "30.2.0",
+ "@jest/test-result": "30.2.0",
+ "@jest/transform": "30.2.0",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "emittery": "^0.8.1",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-changed-files": "^27.0.6",
- "jest-config": "^27.0.6",
- "jest-haste-map": "^27.0.6",
- "jest-message-util": "^27.0.6",
- "jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.0.6",
- "jest-resolve-dependencies": "^27.0.6",
- "jest-runner": "^27.0.6",
- "jest-runtime": "^27.0.6",
- "jest-snapshot": "^27.0.6",
- "jest-util": "^27.0.6",
- "jest-validate": "^27.0.6",
- "jest-watcher": "^27.0.6",
- "micromatch": "^4.0.4",
- "p-each-series": "^2.1.0",
- "rimraf": "^3.0.0",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "ansi-escapes": "^4.3.2",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "exit-x": "^0.2.2",
+ "graceful-fs": "^4.2.11",
+ "jest-changed-files": "30.2.0",
+ "jest-config": "30.2.0",
+ "jest-haste-map": "30.2.0",
+ "jest-message-util": "30.2.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.2.0",
+ "jest-resolve-dependencies": "30.2.0",
+ "jest-runner": "30.2.0",
+ "jest-runtime": "30.2.0",
+ "jest-snapshot": "30.2.0",
+ "jest-util": "30.2.0",
+ "jest-validate": "30.2.0",
+ "jest-watcher": "30.2.0",
+ "micromatch": "^4.0.8",
+ "pretty-format": "30.2.0",
+ "slash": "^3.0.0"
}
},
+ "@jest/diff-sequences": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz",
+ "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==",
+ "dev": true
+ },
"@jest/environment": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.6.tgz",
- "integrity": "sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.2.0.tgz",
+ "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==",
"dev": true,
"requires": {
- "@jest/fake-timers": "^27.0.6",
- "@jest/types": "^27.0.6",
+ "@jest/fake-timers": "30.2.0",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "jest-mock": "^27.0.6"
+ "jest-mock": "30.2.0"
+ }
+ },
+ "@jest/expect": {
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.2.0.tgz",
+ "integrity": "sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==",
+ "dev": true,
+ "requires": {
+ "expect": "30.2.0",
+ "jest-snapshot": "30.2.0"
+ }
+ },
+ "@jest/expect-utils": {
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz",
+ "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==",
+ "dev": true,
+ "requires": {
+ "@jest/get-type": "30.1.0"
}
},
"@jest/fake-timers": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.6.tgz",
- "integrity": "sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.2.0.tgz",
+ "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.6",
- "@sinonjs/fake-timers": "^7.0.2",
+ "@jest/types": "30.2.0",
+ "@sinonjs/fake-timers": "^13.0.0",
"@types/node": "*",
- "jest-message-util": "^27.0.6",
- "jest-mock": "^27.0.6",
- "jest-util": "^27.0.6"
+ "jest-message-util": "30.2.0",
+ "jest-mock": "30.2.0",
+ "jest-util": "30.2.0"
}
},
+ "@jest/get-type": {
+ "version": "30.1.0",
+ "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz",
+ "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==",
+ "dev": true
+ },
"@jest/globals": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.6.tgz",
- "integrity": "sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.2.0.tgz",
+ "integrity": "sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==",
"dev": true,
"requires": {
- "@jest/environment": "^27.0.6",
- "@jest/types": "^27.0.6",
- "expect": "^27.0.6"
+ "@jest/environment": "30.2.0",
+ "@jest/expect": "30.2.0",
+ "@jest/types": "30.2.0",
+ "jest-mock": "30.2.0"
+ }
+ },
+ "@jest/pattern": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz",
+ "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "jest-regex-util": "30.0.1"
}
},
"@jest/reporters": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.6.tgz",
- "integrity": "sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.2.0.tgz",
+ "integrity": "sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==",
"dev": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^27.0.6",
- "@jest/test-result": "^27.0.6",
- "@jest/transform": "^27.0.6",
- "@jest/types": "^27.0.6",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.2",
- "graceful-fs": "^4.2.4",
+ "@jest/console": "30.2.0",
+ "@jest/test-result": "30.2.0",
+ "@jest/transform": "30.2.0",
+ "@jest/types": "30.2.0",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "collect-v8-coverage": "^1.0.2",
+ "exit-x": "^0.2.2",
+ "glob": "^10.3.10",
+ "graceful-fs": "^4.2.11",
"istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^4.0.3",
+ "istanbul-lib-instrument": "^6.0.0",
"istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "jest-haste-map": "^27.0.6",
- "jest-resolve": "^27.0.6",
- "jest-util": "^27.0.6",
- "jest-worker": "^27.0.6",
+ "istanbul-lib-source-maps": "^5.0.0",
+ "istanbul-reports": "^3.1.3",
+ "jest-message-util": "30.2.0",
+ "jest-util": "30.2.0",
+ "jest-worker": "30.2.0",
"slash": "^3.0.0",
- "source-map": "^0.6.0",
- "string-length": "^4.0.1",
- "terminal-link": "^2.0.0",
- "v8-to-istanbul": "^8.0.0"
+ "string-length": "^4.0.2",
+ "v8-to-istanbul": "^9.0.1"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "dev": true,
+ "requires": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ }
+ },
+ "minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.2"
+ }
+ }
+ }
+ },
+ "@jest/schemas": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz",
+ "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==",
+ "dev": true,
+ "requires": {
+ "@sinclair/typebox": "^0.34.0"
+ }
+ },
+ "@jest/snapshot-utils": {
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.2.0.tgz",
+ "integrity": "sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "30.2.0",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "natural-compare": "^1.4.0"
}
},
"@jest/source-map": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz",
- "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==",
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz",
+ "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==",
"dev": true,
"requires": {
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.4",
- "source-map": "^0.6.0"
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "callsites": "^3.1.0",
+ "graceful-fs": "^4.2.11"
}
},
"@jest/test-result": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.6.tgz",
- "integrity": "sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.2.0.tgz",
+ "integrity": "sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==",
"dev": true,
"requires": {
- "@jest/console": "^27.0.6",
- "@jest/types": "^27.0.6",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
+ "@jest/console": "30.2.0",
+ "@jest/types": "30.2.0",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "collect-v8-coverage": "^1.0.2"
}
},
"@jest/test-sequencer": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz",
- "integrity": "sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.2.0.tgz",
+ "integrity": "sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==",
"dev": true,
"requires": {
- "@jest/test-result": "^27.0.6",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.0.6",
- "jest-runtime": "^27.0.6"
+ "@jest/test-result": "30.2.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.2.0",
+ "slash": "^3.0.0"
}
},
"@jest/transform": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.6.tgz",
- "integrity": "sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.1.0",
- "@jest/types": "^27.0.6",
- "babel-plugin-istanbul": "^6.0.0",
- "chalk": "^4.0.0",
- "convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.0.6",
- "jest-regex-util": "^27.0.6",
- "jest-util": "^27.0.6",
- "micromatch": "^4.0.4",
- "pirates": "^4.0.1",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.2.0.tgz",
+ "integrity": "sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.27.4",
+ "@jest/types": "30.2.0",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "babel-plugin-istanbul": "^7.0.1",
+ "chalk": "^4.1.2",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.2.0",
+ "jest-regex-util": "30.0.1",
+ "jest-util": "30.2.0",
+ "micromatch": "^4.0.8",
+ "pirates": "^4.0.7",
"slash": "^3.0.0",
- "source-map": "^0.6.1",
- "write-file-atomic": "^3.0.0"
+ "write-file-atomic": "^5.0.1"
}
},
"@jest/types": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
- "integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz",
+ "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==",
"dev": true,
"requires": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
"@types/node": "*",
- "@types/yargs": "^16.0.0",
- "chalk": "^4.0.0"
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
}
},
"@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
"dev": true,
"requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
}
},
- "@jridgewell/resolve-uri": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
- "dev": true
+ "@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
},
- "@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true
},
"@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"dev": true
},
"@jridgewell/trace-mapping": {
- "version": "0.3.19",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
- "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
"dev": true,
"requires": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "@napi-rs/wasm-runtime": {
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
+ "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@emnapi/core": "^1.4.3",
+ "@emnapi/runtime": "^1.4.3",
+ "@tybys/wasm-util": "^0.10.0"
+ }
+ },
"@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -7817,61 +8072,88 @@
"fastq": "^1.6.0"
}
},
+ "@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "optional": true
+ },
+ "@pkgr/core": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz",
+ "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==",
+ "dev": true
+ },
+ "@sinclair/typebox": {
+ "version": "0.34.48",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz",
+ "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==",
+ "dev": true
+ },
"@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"dev": true,
"requires": {
"type-detect": "4.0.8"
}
},
"@sinonjs/fake-timers": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz",
- "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==",
+ "version": "13.0.5",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz",
+ "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==",
"dev": true,
"requires": {
- "@sinonjs/commons": "^1.7.0"
+ "@sinonjs/commons": "^3.0.1"
}
},
- "@tokenizer/token": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
- "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
- },
- "@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "dev": true
+ "@tybys/wasm-util": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
+ "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tslib": "^2.4.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "optional": true
+ }
+ }
},
"@types/babel__core": {
- "version": "7.1.15",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz",
- "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
"requires": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0",
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
"@types/babel__generator": "*",
"@types/babel__template": "*",
"@types/babel__traverse": "*"
}
},
"@types/babel__generator": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz",
- "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
"dev": true,
"requires": {
"@babel/types": "^7.0.0"
}
},
"@types/babel__template": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
- "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
"dev": true,
"requires": {
"@babel/parser": "^7.1.0",
@@ -7879,42 +8161,33 @@
}
},
"@types/babel__traverse": {
- "version": "7.14.2",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz",
- "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.3.0"
- }
- },
- "@types/graceful-fs": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
- "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==",
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
"dev": true,
"requires": {
- "@types/node": "*"
+ "@babel/types": "^7.28.2"
}
},
"@types/istanbul-lib-coverage": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
- "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
"dev": true
},
"@types/istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
+ "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "*"
}
},
"@types/istanbul-reports": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
- "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+ "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"dev": true,
"requires": {
"@types/istanbul-lib-report": "*"
@@ -7933,35 +8206,32 @@
"dev": true
},
"@types/node": {
- "version": "16.7.2",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.2.tgz",
- "integrity": "sha512-TbG4TOx9hng8FKxaVrCisdaxKxqEwJ3zwHoCWXZ0Jw6mnvTInpaB99/2Cy4+XxpXtjNv9/TgfGSvZFyfV/t8Fw=="
- },
- "@types/prettier": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz",
- "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==",
- "dev": true
+ "version": "20.19.37",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz",
+ "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==",
+ "requires": {
+ "undici-types": "~6.21.0"
+ }
},
"@types/stack-utils": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
- "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
+ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
"dev": true
},
"@types/yargs": {
- "version": "16.0.4",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz",
- "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==",
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
}
},
"@types/yargs-parser": {
- "version": "20.2.1",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz",
- "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==",
+ "version": "21.0.3",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
+ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
"dev": true
},
"@typescript-eslint/experimental-utils": {
@@ -8041,35 +8311,154 @@
"eslint-visitor-keys": "^2.0.0"
}
},
- "abab": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
- "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
+ "@ungap/structured-clone": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
"dev": true
},
+ "@unrs/resolver-binding-android-arm-eabi": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz",
+ "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-android-arm64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz",
+ "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-darwin-arm64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz",
+ "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-darwin-x64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz",
+ "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-freebsd-x64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz",
+ "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-arm-gnueabihf": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz",
+ "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-arm-musleabihf": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz",
+ "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-arm64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz",
+ "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-arm64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz",
+ "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-ppc64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz",
+ "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-riscv64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz",
+ "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-riscv64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz",
+ "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-s390x-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz",
+ "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-x64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz",
+ "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-x64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz",
+ "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-wasm32-wasi": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz",
+ "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@napi-rs/wasm-runtime": "^0.2.11"
+ }
+ },
+ "@unrs/resolver-binding-win32-arm64-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz",
+ "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-win32-ia32-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz",
+ "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-win32-x64-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz",
+ "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==",
+ "dev": true,
+ "optional": true
+ },
"acorn": {
"version": "8.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz",
"integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==",
- "dev": true
- },
- "acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
"dev": true,
- "requires": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
- },
- "dependencies": {
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true
- }
- }
+ "peer": true
},
"acorn-jsx": {
"version": "5.3.2",
@@ -8078,21 +8467,6 @@
"dev": true,
"requires": {}
},
- "acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "dev": true
- },
- "agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "requires": {
- "debug": "4"
- }
- },
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -8136,9 +8510,9 @@
}
},
"anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
"requires": {
"normalize-path": "^3.0.0",
@@ -8146,15 +8520,11 @@
}
},
"arangojs": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-8.0.0.tgz",
- "integrity": "sha512-VjeWxbS18c65Wu6Pr/d5/kW0Chn6ftIfUAzCmG3wUUe8OrRRalSgL6e1+5iY9apocbECo6wTK3kr2goXfLHB+A==",
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-10.2.2.tgz",
+ "integrity": "sha512-3Xllq5inTGjros0mBP9NFxrIW8Di0ldtFurLdrXy5z4NDVJPyJtnwUiiGrMPY21NuVu53wUDE23YN50jnX4epw==",
"requires": {
- "@types/node": ">=14",
- "multi-part": "^4.0.0",
- "path-browserify": "^1.0.1",
- "x3-linkedlist": "1.2.0",
- "xhr": "^2.4.1"
+ "@types/node": "^20.11.26"
}
},
"argparse": {
@@ -8219,81 +8589,74 @@
"resolved": "https://registry.npmjs.org/async-wait-until/-/async-wait-until-2.0.7.tgz",
"integrity": "sha512-SjHxM2f5ev4o87gYppr8HmWPjOHw06Pg5KZvkSl6FMqa3TTHzDGIWCZx61XWjxO5ArPcZBuJYbAa809FNyx3QQ=="
},
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
"babel-jest": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.6.tgz",
- "integrity": "sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.2.0.tgz",
+ "integrity": "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==",
"dev": true,
"requires": {
- "@jest/transform": "^27.0.6",
- "@jest/types": "^27.0.6",
- "@types/babel__core": "^7.1.14",
- "babel-plugin-istanbul": "^6.0.0",
- "babel-preset-jest": "^27.0.6",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
+ "@jest/transform": "30.2.0",
+ "@types/babel__core": "^7.20.5",
+ "babel-plugin-istanbul": "^7.0.1",
+ "babel-preset-jest": "30.2.0",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
"slash": "^3.0.0"
}
},
"babel-plugin-istanbul": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz",
- "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz",
+ "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
"@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^4.0.0",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-instrument": "^6.0.2",
"test-exclude": "^6.0.0"
}
},
"babel-plugin-jest-hoist": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz",
- "integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.2.0.tgz",
+ "integrity": "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==",
"dev": true,
"requires": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.0.0",
- "@types/babel__traverse": "^7.0.6"
+ "@types/babel__core": "^7.20.5"
}
},
"babel-preset-current-node-syntax": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
- "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz",
+ "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==",
"dev": true,
"requires": {
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.8.3",
+ "@babel/plugin-syntax-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.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.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-top-level-await": "^7.8.3"
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5"
}
},
"babel-preset-jest": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz",
- "integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.2.0.tgz",
+ "integrity": "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==",
"dev": true,
"requires": {
- "babel-plugin-jest-hoist": "^27.0.6",
- "babel-preset-current-node-syntax": "^1.0.0"
+ "babel-plugin-jest-hoist": "30.2.0",
+ "babel-preset-current-node-syntax": "^1.2.0"
}
},
"balanced-match": {
@@ -8302,6 +8665,12 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
+ "baseline-browser-mapping": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz",
+ "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==",
+ "dev": true
+ },
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -8321,23 +8690,17 @@
"fill-range": "^7.1.1"
}
},
- "browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
"browserslist": {
- "version": "4.16.8",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.8.tgz",
- "integrity": "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==",
+ "version": "4.28.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
+ "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
"dev": true,
"requires": {
- "caniuse-lite": "^1.0.30001251",
- "colorette": "^1.3.0",
- "electron-to-chromium": "^1.3.811",
- "escalade": "^3.1.1",
- "node-releases": "^1.1.75"
+ "baseline-browser-mapping": "^2.9.0",
+ "caniuse-lite": "^1.0.30001759",
+ "electron-to-chromium": "^1.5.263",
+ "node-releases": "^2.0.27",
+ "update-browserslist-db": "^1.2.0"
}
},
"bser": {
@@ -8388,9 +8751,9 @@
"dev": true
},
"caniuse-lite": {
- "version": "1.0.30001252",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz",
- "integrity": "sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw==",
+ "version": "1.0.30001776",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001776.tgz",
+ "integrity": "sha512-sg01JDPzZ9jGshqKSckOQthXnYwOEP50jeVFhaSFbZcOy05TiuuaffDOfcwtCisJ9kNQuLBFibYywv2Bgm9osw==",
"dev": true
},
"chalk": {
@@ -8410,38 +8773,38 @@
"dev": true
},
"ci-info": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz",
- "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz",
+ "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==",
"dev": true
},
"cjs-module-lexer": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
- "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz",
+ "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==",
"dev": true
},
"cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dev": true,
"requires": {
"string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
+ "strip-ansi": "^6.0.1",
"wrap-ansi": "^7.0.0"
}
},
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
"dev": true
},
"collect-v8-coverage": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz",
+ "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==",
"dev": true
},
"color-convert": {
@@ -8459,21 +8822,6 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "colorette": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz",
- "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==",
- "dev": true
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -8481,18 +8829,15 @@
"dev": true
},
"convert-source-map": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
- "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- }
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
},
"cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"requires": {
"path-key": "^3.1.0",
@@ -8500,60 +8845,21 @@
"which": "^2.0.1"
}
},
- "cssom": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
- "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
- "dev": true
- },
- "cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
- "dev": true,
- "requires": {
- "cssom": "~0.3.6"
- },
- "dependencies": {
- "cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
- "dev": true
- }
- }
- },
- "data-urls": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
- "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
- "dev": true,
- "requires": {
- "abab": "^2.0.3",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0"
- }
- },
"debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"dev": true,
"requires": {
- "ms": "2.1.2"
+ "ms": "^2.1.3"
}
},
- "decimal.js": {
- "version": "10.3.1",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
- "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
- "dev": true
- },
"dedent": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
- "dev": true
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz",
+ "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==",
+ "dev": true,
+ "requires": {}
},
"deep-is": {
"version": "0.1.3",
@@ -8562,9 +8868,9 @@
"dev": true
},
"deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"dev": true
},
"define-properties": {
@@ -8574,13 +8880,7 @@
"dev": true,
"requires": {
"object-keys": "^1.0.12"
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
+ }
},
"detect-newline": {
"version": "3.1.0",
@@ -8588,12 +8888,6 @@
"integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
"dev": true
},
- "diff-sequences": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz",
- "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==",
- "dev": true
- },
"dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -8612,28 +8906,6 @@
"esutils": "^2.0.2"
}
},
- "dom-walk": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
- "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
- },
- "domexception": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
- "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
- "dev": true,
- "requires": {
- "webidl-conversions": "^5.0.0"
- },
- "dependencies": {
- "webidl-conversions": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
- "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
- "dev": true
- }
- }
- },
"dotenv": {
"version": "8.6.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
@@ -8658,16 +8930,22 @@
"gopd": "^1.2.0"
}
},
+ "eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true
+ },
"electron-to-chromium": {
- "version": "1.3.818",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.818.tgz",
- "integrity": "sha512-c/Z9gIr+jDZAR9q+mn40hEc1NharBT+8ejkarjbCDnBNFviI6hvcC5j2ezkAXru//bTnQp5n6iPi0JA83Tla1Q==",
+ "version": "1.5.307",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.307.tgz",
+ "integrity": "sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==",
"dev": true
},
"emittery": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz",
- "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==",
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
"dev": true
},
"emoji-regex": {
@@ -8740,18 +9018,6 @@
"es-errors": "^1.3.0"
}
},
- "es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
- "dev": true,
- "requires": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- }
- },
"es-to-primitive": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
@@ -8764,9 +9030,9 @@
}
},
"escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"dev": true
},
"escape-string-regexp": {
@@ -8775,19 +9041,6 @@
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true
},
- "escodegen": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
- "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
- "dev": true,
- "requires": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1",
- "source-map": "~0.6.1"
- }
- },
"eslint": {
"version": "7.32.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
@@ -8930,6 +9183,16 @@
"dev": true,
"requires": {}
},
+ "eslint-import-context": {
+ "version": "0.1.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.9.tgz",
+ "integrity": "sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==",
+ "dev": true,
+ "requires": {
+ "get-tsconfig": "^4.10.1",
+ "stable-hash-x": "^0.2.0"
+ }
+ },
"eslint-import-resolver-node": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
@@ -8951,6 +9214,21 @@
}
}
},
+ "eslint-import-resolver-typescript": {
+ "version": "4.4.4",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.4.tgz",
+ "integrity": "sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.4.1",
+ "eslint-import-context": "^0.1.8",
+ "get-tsconfig": "^4.10.1",
+ "is-bun-module": "^2.0.0",
+ "stable-hash-x": "^0.2.0",
+ "tinyglobby": "^0.2.14",
+ "unrs-resolver": "^1.7.11"
+ }
+ },
"eslint-module-utils": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz",
@@ -9350,32 +9628,24 @@
"strip-final-newline": "^2.0.0"
}
},
- "exit": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "exit-x": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz",
+ "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==",
"dev": true
},
"expect": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.6.tgz",
- "integrity": "sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz",
+ "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.6",
- "ansi-styles": "^5.0.0",
- "jest-get-type": "^27.0.6",
- "jest-matcher-utils": "^27.0.6",
- "jest-message-util": "^27.0.6",
- "jest-regex-util": "^27.0.6"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
- "dev": true
- }
+ "@jest/expect-utils": "30.2.0",
+ "@jest/get-type": "30.1.0",
+ "jest-matcher-utils": "30.2.0",
+ "jest-message-util": "30.2.0",
+ "jest-mock": "30.2.0",
+ "jest-util": "30.2.0"
}
},
"fast-deep-equal": {
@@ -9419,9 +9689,9 @@
}
},
"fb-watchman": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
- "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
"dev": true,
"requires": {
"bser": "2.1.1"
@@ -9436,16 +9706,6 @@
"flat-cache": "^3.0.4"
}
},
- "file-type": {
- "version": "16.5.4",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz",
- "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==",
- "requires": {
- "readable-web-to-node-stream": "^3.0.0",
- "strtok3": "^6.2.4",
- "token-types": "^4.1.1"
- }
- },
"fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@@ -9476,22 +9736,27 @@
}
},
"flatted": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
- "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
- "form-data": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz",
- "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==",
+ "foreground-child": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
"dev": true,
"requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "es-set-tostringtag": "^2.1.0",
- "hasown": "^2.0.2",
- "mime-types": "^2.1.35"
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
+ },
+ "dependencies": {
+ "signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true
+ }
}
},
"fs.realpath": {
@@ -9501,9 +9766,9 @@
"dev": true
},
"fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"optional": true
},
@@ -9571,6 +9836,15 @@
"integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
"dev": true
},
+ "get-tsconfig": {
+ "version": "4.13.6",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz",
+ "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==",
+ "dev": true,
+ "requires": {
+ "resolve-pkg-maps": "^1.0.0"
+ }
+ },
"glob": {
"version": "7.1.7",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
@@ -9594,21 +9868,6 @@
"is-glob": "^4.0.1"
}
},
- "global": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
- "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
- "requires": {
- "min-document": "^2.19.0",
- "process": "^0.11.10"
- }
- },
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- },
"globby": {
"version": "11.0.4",
"resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
@@ -9638,9 +9897,9 @@
"dev": true
},
"graceful-fs": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
"has": {
@@ -9694,62 +9953,18 @@
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true
},
- "html-encoding-sniffer": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
- "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
- "dev": true,
- "requires": {
- "whatwg-encoding": "^1.0.5"
- }
- },
"html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true
},
- "http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "dev": true,
- "requires": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- }
- },
- "https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "dev": true,
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- },
"human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"dev": true
},
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
- },
"ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
@@ -9775,9 +9990,9 @@
}
},
"import-local": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
- "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
"dev": true,
"requires": {
"pkg-dir": "^4.2.0",
@@ -9803,7 +10018,8 @@
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
},
"internal-slot": {
"version": "1.0.3",
@@ -9841,21 +10057,29 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-bun-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
+ "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
+ "dev": true,
+ "requires": {
+ "semver": "^7.7.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true
+ }
+ }
+ },
"is-callable": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
"integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
"dev": true
},
- "is-ci": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz",
- "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==",
- "dev": true,
- "requires": {
- "ci-info": "^3.1.1"
- }
- },
"is-core-module": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
@@ -9886,11 +10110,6 @@
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true
},
- "is-function": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
- "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="
- },
"is-generator-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
@@ -9927,12 +10146,6 @@
"has-tostringtag": "^1.0.0"
}
},
- "is-potential-custom-element-name": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
- "dev": true
- },
"is-regex": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -9967,12 +10180,6 @@
"has-symbols": "^1.0.2"
}
},
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -9980,536 +10187,580 @@
"dev": true
},
"istanbul-lib-coverage": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
- "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
"dev": true
},
"istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
"dev": true,
"requires": {
- "@babel/core": "^7.7.5",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
- "semver": "^6.3.0"
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^7.5.4"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true
+ }
}
},
"istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
"requires": {
"istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
+ "make-dir": "^4.0.0",
"supports-color": "^7.1.0"
}
},
"istanbul-lib-source-maps": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
- "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz",
+ "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==",
"dev": true,
"requires": {
+ "@jridgewell/trace-mapping": "^0.3.23",
"debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
+ "istanbul-lib-coverage": "^3.0.0"
}
},
"istanbul-reports": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
- "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
+ "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
"dev": true,
"requires": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
}
},
+ "jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "requires": {
+ "@isaacs/cliui": "^8.0.2",
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
"jest": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.6.tgz",
- "integrity": "sha512-EjV8aETrsD0wHl7CKMibKwQNQc3gIRBXlTikBmmHUeVMKaPFxdcUIBfoDqTSXDoGJIivAYGqCWVlzCSaVjPQsA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-30.2.0.tgz",
+ "integrity": "sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==",
"dev": true,
"requires": {
- "@jest/core": "^27.0.6",
- "import-local": "^3.0.2",
- "jest-cli": "^27.0.6"
+ "@jest/core": "30.2.0",
+ "@jest/types": "30.2.0",
+ "import-local": "^3.2.0",
+ "jest-cli": "30.2.0"
}
},
"jest-changed-files": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.6.tgz",
- "integrity": "sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.2.0.tgz",
+ "integrity": "sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.6",
- "execa": "^5.0.0",
- "throat": "^6.0.1"
+ "execa": "^5.1.1",
+ "jest-util": "30.2.0",
+ "p-limit": "^3.1.0"
}
},
"jest-circus": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.6.tgz",
- "integrity": "sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.2.0.tgz",
+ "integrity": "sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==",
"dev": true,
"requires": {
- "@jest/environment": "^27.0.6",
- "@jest/test-result": "^27.0.6",
- "@jest/types": "^27.0.6",
+ "@jest/environment": "30.2.0",
+ "@jest/expect": "30.2.0",
+ "@jest/test-result": "30.2.0",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "chalk": "^4.0.0",
+ "chalk": "^4.1.2",
"co": "^4.6.0",
- "dedent": "^0.7.0",
- "expect": "^27.0.6",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^27.0.6",
- "jest-matcher-utils": "^27.0.6",
- "jest-message-util": "^27.0.6",
- "jest-runtime": "^27.0.6",
- "jest-snapshot": "^27.0.6",
- "jest-util": "^27.0.6",
- "pretty-format": "^27.0.6",
+ "dedent": "^1.6.0",
+ "is-generator-fn": "^2.1.0",
+ "jest-each": "30.2.0",
+ "jest-matcher-utils": "30.2.0",
+ "jest-message-util": "30.2.0",
+ "jest-runtime": "30.2.0",
+ "jest-snapshot": "30.2.0",
+ "jest-util": "30.2.0",
+ "p-limit": "^3.1.0",
+ "pretty-format": "30.2.0",
+ "pure-rand": "^7.0.0",
"slash": "^3.0.0",
- "stack-utils": "^2.0.3",
- "throat": "^6.0.1"
+ "stack-utils": "^2.0.6"
}
},
"jest-cli": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.6.tgz",
- "integrity": "sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.2.0.tgz",
+ "integrity": "sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==",
"dev": true,
"requires": {
- "@jest/core": "^27.0.6",
- "@jest/test-result": "^27.0.6",
- "@jest/types": "^27.0.6",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "import-local": "^3.0.2",
- "jest-config": "^27.0.6",
- "jest-util": "^27.0.6",
- "jest-validate": "^27.0.6",
- "prompts": "^2.0.1",
- "yargs": "^16.0.3"
+ "@jest/core": "30.2.0",
+ "@jest/test-result": "30.2.0",
+ "@jest/types": "30.2.0",
+ "chalk": "^4.1.2",
+ "exit-x": "^0.2.2",
+ "import-local": "^3.2.0",
+ "jest-config": "30.2.0",
+ "jest-util": "30.2.0",
+ "jest-validate": "30.2.0",
+ "yargs": "^17.7.2"
}
},
"jest-config": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.6.tgz",
- "integrity": "sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^27.0.6",
- "@jest/types": "^27.0.6",
- "babel-jest": "^27.0.6",
- "chalk": "^4.0.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.1",
- "graceful-fs": "^4.2.4",
- "is-ci": "^3.0.0",
- "jest-circus": "^27.0.6",
- "jest-environment-jsdom": "^27.0.6",
- "jest-environment-node": "^27.0.6",
- "jest-get-type": "^27.0.6",
- "jest-jasmine2": "^27.0.6",
- "jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.0.6",
- "jest-runner": "^27.0.6",
- "jest-util": "^27.0.6",
- "jest-validate": "^27.0.6",
- "micromatch": "^4.0.4",
- "pretty-format": "^27.0.6"
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.2.0.tgz",
+ "integrity": "sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.27.4",
+ "@jest/get-type": "30.1.0",
+ "@jest/pattern": "30.0.1",
+ "@jest/test-sequencer": "30.2.0",
+ "@jest/types": "30.2.0",
+ "babel-jest": "30.2.0",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "deepmerge": "^4.3.1",
+ "glob": "^10.3.10",
+ "graceful-fs": "^4.2.11",
+ "jest-circus": "30.2.0",
+ "jest-docblock": "30.2.0",
+ "jest-environment-node": "30.2.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.2.0",
+ "jest-runner": "30.2.0",
+ "jest-util": "30.2.0",
+ "jest-validate": "30.2.0",
+ "micromatch": "^4.0.8",
+ "parse-json": "^5.2.0",
+ "pretty-format": "30.2.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "dev": true,
+ "requires": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ }
+ },
+ "minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.2"
+ }
+ },
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ }
}
},
"jest-diff": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.6.tgz",
- "integrity": "sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz",
+ "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==",
"dev": true,
"requires": {
- "chalk": "^4.0.0",
- "diff-sequences": "^27.0.6",
- "jest-get-type": "^27.0.6",
- "pretty-format": "^27.0.6"
+ "@jest/diff-sequences": "30.0.1",
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "pretty-format": "30.2.0"
}
},
"jest-docblock": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz",
- "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz",
+ "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==",
"dev": true,
"requires": {
- "detect-newline": "^3.0.0"
+ "detect-newline": "^3.1.0"
}
},
"jest-each": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.6.tgz",
- "integrity": "sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA==",
- "dev": true,
- "requires": {
- "@jest/types": "^27.0.6",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.0.6",
- "jest-util": "^27.0.6",
- "pretty-format": "^27.0.6"
- }
- },
- "jest-environment-jsdom": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz",
- "integrity": "sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.2.0.tgz",
+ "integrity": "sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==",
"dev": true,
"requires": {
- "@jest/environment": "^27.0.6",
- "@jest/fake-timers": "^27.0.6",
- "@jest/types": "^27.0.6",
- "@types/node": "*",
- "jest-mock": "^27.0.6",
- "jest-util": "^27.0.6",
- "jsdom": "^16.6.0"
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.2.0",
+ "chalk": "^4.1.2",
+ "jest-util": "30.2.0",
+ "pretty-format": "30.2.0"
}
},
"jest-environment-node": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.6.tgz",
- "integrity": "sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.2.0.tgz",
+ "integrity": "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==",
"dev": true,
"requires": {
- "@jest/environment": "^27.0.6",
- "@jest/fake-timers": "^27.0.6",
- "@jest/types": "^27.0.6",
+ "@jest/environment": "30.2.0",
+ "@jest/fake-timers": "30.2.0",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "jest-mock": "^27.0.6",
- "jest-util": "^27.0.6"
+ "jest-mock": "30.2.0",
+ "jest-util": "30.2.0",
+ "jest-validate": "30.2.0"
}
},
- "jest-get-type": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
- "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
- "dev": true
- },
"jest-haste-map": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.6.tgz",
- "integrity": "sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.2.0.tgz",
+ "integrity": "sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.6",
- "@types/graceful-fs": "^4.1.2",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "fsevents": "^2.3.2",
- "graceful-fs": "^4.2.4",
- "jest-regex-util": "^27.0.6",
- "jest-serializer": "^27.0.6",
- "jest-util": "^27.0.6",
- "jest-worker": "^27.0.6",
- "micromatch": "^4.0.4",
- "walker": "^1.0.7"
- }
- },
- "jest-jasmine2": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz",
- "integrity": "sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA==",
- "dev": true,
- "requires": {
- "@babel/traverse": "^7.1.0",
- "@jest/environment": "^27.0.6",
- "@jest/source-map": "^27.0.6",
- "@jest/test-result": "^27.0.6",
- "@jest/types": "^27.0.6",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "expect": "^27.0.6",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^27.0.6",
- "jest-matcher-utils": "^27.0.6",
- "jest-message-util": "^27.0.6",
- "jest-runtime": "^27.0.6",
- "jest-snapshot": "^27.0.6",
- "jest-util": "^27.0.6",
- "pretty-format": "^27.0.6",
- "throat": "^6.0.1"
+ "anymatch": "^3.1.3",
+ "fb-watchman": "^2.0.2",
+ "fsevents": "^2.3.3",
+ "graceful-fs": "^4.2.11",
+ "jest-regex-util": "30.0.1",
+ "jest-util": "30.2.0",
+ "jest-worker": "30.2.0",
+ "micromatch": "^4.0.8",
+ "walker": "^1.0.8"
}
},
"jest-leak-detector": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz",
- "integrity": "sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.2.0.tgz",
+ "integrity": "sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==",
"dev": true,
"requires": {
- "jest-get-type": "^27.0.6",
- "pretty-format": "^27.0.6"
+ "@jest/get-type": "30.1.0",
+ "pretty-format": "30.2.0"
}
},
"jest-matcher-utils": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz",
- "integrity": "sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz",
+ "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==",
"dev": true,
"requires": {
- "chalk": "^4.0.0",
- "jest-diff": "^27.0.6",
- "jest-get-type": "^27.0.6",
- "pretty-format": "^27.0.6"
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "jest-diff": "30.2.0",
+ "pretty-format": "30.2.0"
}
},
"jest-message-util": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.6.tgz",
- "integrity": "sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.12.13",
- "@jest/types": "^27.0.6",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "micromatch": "^4.0.4",
- "pretty-format": "^27.0.6",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz",
+ "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.2.0",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "micromatch": "^4.0.8",
+ "pretty-format": "30.2.0",
"slash": "^3.0.0",
- "stack-utils": "^2.0.3"
+ "stack-utils": "^2.0.6"
}
},
"jest-mock": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.6.tgz",
- "integrity": "sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz",
+ "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.6",
- "@types/node": "*"
+ "@jest/types": "30.2.0",
+ "@types/node": "*",
+ "jest-util": "30.2.0"
}
},
"jest-pnp-resolver": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
- "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
"dev": true,
"requires": {}
},
"jest-regex-util": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz",
- "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==",
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz",
+ "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==",
"dev": true
},
"jest-resolve": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.6.tgz",
- "integrity": "sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.2.0.tgz",
+ "integrity": "sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.6",
- "chalk": "^4.0.0",
- "escalade": "^3.1.1",
- "graceful-fs": "^4.2.4",
- "jest-pnp-resolver": "^1.2.2",
- "jest-util": "^27.0.6",
- "jest-validate": "^27.0.6",
- "resolve": "^1.20.0",
- "slash": "^3.0.0"
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.2.0",
+ "jest-pnp-resolver": "^1.2.3",
+ "jest-util": "30.2.0",
+ "jest-validate": "30.2.0",
+ "slash": "^3.0.0",
+ "unrs-resolver": "^1.7.11"
}
},
"jest-resolve-dependencies": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz",
- "integrity": "sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.2.0.tgz",
+ "integrity": "sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.6",
- "jest-regex-util": "^27.0.6",
- "jest-snapshot": "^27.0.6"
+ "jest-regex-util": "30.0.1",
+ "jest-snapshot": "30.2.0"
}
},
"jest-runner": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.6.tgz",
- "integrity": "sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.2.0.tgz",
+ "integrity": "sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==",
"dev": true,
"requires": {
- "@jest/console": "^27.0.6",
- "@jest/environment": "^27.0.6",
- "@jest/test-result": "^27.0.6",
- "@jest/transform": "^27.0.6",
- "@jest/types": "^27.0.6",
+ "@jest/console": "30.2.0",
+ "@jest/environment": "30.2.0",
+ "@jest/test-result": "30.2.0",
+ "@jest/transform": "30.2.0",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "emittery": "^0.8.1",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-docblock": "^27.0.6",
- "jest-environment-jsdom": "^27.0.6",
- "jest-environment-node": "^27.0.6",
- "jest-haste-map": "^27.0.6",
- "jest-leak-detector": "^27.0.6",
- "jest-message-util": "^27.0.6",
- "jest-resolve": "^27.0.6",
- "jest-runtime": "^27.0.6",
- "jest-util": "^27.0.6",
- "jest-worker": "^27.0.6",
- "source-map-support": "^0.5.6",
- "throat": "^6.0.1"
+ "chalk": "^4.1.2",
+ "emittery": "^0.13.1",
+ "exit-x": "^0.2.2",
+ "graceful-fs": "^4.2.11",
+ "jest-docblock": "30.2.0",
+ "jest-environment-node": "30.2.0",
+ "jest-haste-map": "30.2.0",
+ "jest-leak-detector": "30.2.0",
+ "jest-message-util": "30.2.0",
+ "jest-resolve": "30.2.0",
+ "jest-runtime": "30.2.0",
+ "jest-util": "30.2.0",
+ "jest-watcher": "30.2.0",
+ "jest-worker": "30.2.0",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
}
},
"jest-runtime": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.6.tgz",
- "integrity": "sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q==",
- "dev": true,
- "requires": {
- "@jest/console": "^27.0.6",
- "@jest/environment": "^27.0.6",
- "@jest/fake-timers": "^27.0.6",
- "@jest/globals": "^27.0.6",
- "@jest/source-map": "^27.0.6",
- "@jest/test-result": "^27.0.6",
- "@jest/transform": "^27.0.6",
- "@jest/types": "^27.0.6",
- "@types/yargs": "^16.0.0",
- "chalk": "^4.0.0",
- "cjs-module-lexer": "^1.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.0.6",
- "jest-message-util": "^27.0.6",
- "jest-mock": "^27.0.6",
- "jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.0.6",
- "jest-snapshot": "^27.0.6",
- "jest-util": "^27.0.6",
- "jest-validate": "^27.0.6",
- "slash": "^3.0.0",
- "strip-bom": "^4.0.0",
- "yargs": "^16.0.3"
- }
- },
- "jest-serializer": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz",
- "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==",
- "dev": true,
- "requires": {
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.2.0.tgz",
+ "integrity": "sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "30.2.0",
+ "@jest/fake-timers": "30.2.0",
+ "@jest/globals": "30.2.0",
+ "@jest/source-map": "30.0.1",
+ "@jest/test-result": "30.2.0",
+ "@jest/transform": "30.2.0",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "graceful-fs": "^4.2.4"
+ "chalk": "^4.1.2",
+ "cjs-module-lexer": "^2.1.0",
+ "collect-v8-coverage": "^1.0.2",
+ "glob": "^10.3.10",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.2.0",
+ "jest-message-util": "30.2.0",
+ "jest-mock": "30.2.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.2.0",
+ "jest-snapshot": "30.2.0",
+ "jest-util": "30.2.0",
+ "slash": "^3.0.0",
+ "strip-bom": "^4.0.0"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "dev": true,
+ "requires": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ }
+ },
+ "minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.2"
+ }
+ }
}
},
"jest-snapshot": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.6.tgz",
- "integrity": "sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.7.2",
- "@babel/generator": "^7.7.2",
- "@babel/parser": "^7.7.2",
- "@babel/plugin-syntax-typescript": "^7.7.2",
- "@babel/traverse": "^7.7.2",
- "@babel/types": "^7.0.0",
- "@jest/transform": "^27.0.6",
- "@jest/types": "^27.0.6",
- "@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.0.6",
- "graceful-fs": "^4.2.4",
- "jest-diff": "^27.0.6",
- "jest-get-type": "^27.0.6",
- "jest-haste-map": "^27.0.6",
- "jest-matcher-utils": "^27.0.6",
- "jest-message-util": "^27.0.6",
- "jest-resolve": "^27.0.6",
- "jest-util": "^27.0.6",
- "natural-compare": "^1.4.0",
- "pretty-format": "^27.0.6",
- "semver": "^7.3.2"
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.2.0.tgz",
+ "integrity": "sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.27.4",
+ "@babel/generator": "^7.27.5",
+ "@babel/plugin-syntax-jsx": "^7.27.1",
+ "@babel/plugin-syntax-typescript": "^7.27.1",
+ "@babel/types": "^7.27.3",
+ "@jest/expect-utils": "30.2.0",
+ "@jest/get-type": "30.1.0",
+ "@jest/snapshot-utils": "30.2.0",
+ "@jest/transform": "30.2.0",
+ "@jest/types": "30.2.0",
+ "babel-preset-current-node-syntax": "^1.2.0",
+ "chalk": "^4.1.2",
+ "expect": "30.2.0",
+ "graceful-fs": "^4.2.11",
+ "jest-diff": "30.2.0",
+ "jest-matcher-utils": "30.2.0",
+ "jest-message-util": "30.2.0",
+ "jest-util": "30.2.0",
+ "pretty-format": "30.2.0",
+ "semver": "^7.7.2",
+ "synckit": "^0.11.8"
},
"dependencies": {
"semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true
}
}
},
"jest-util": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.6.tgz",
- "integrity": "sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz",
+ "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.6",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "is-ci": "^3.0.0",
- "picomatch": "^2.2.3"
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.2"
+ },
+ "dependencies": {
+ "picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true
+ }
}
},
"jest-validate": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.6.tgz",
- "integrity": "sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.2.0.tgz",
+ "integrity": "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.6",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.0.6",
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.2.0",
+ "camelcase": "^6.3.0",
+ "chalk": "^4.1.2",
"leven": "^3.1.0",
- "pretty-format": "^27.0.6"
+ "pretty-format": "30.2.0"
},
"dependencies": {
"camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true
}
}
},
"jest-watcher": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.6.tgz",
- "integrity": "sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.2.0.tgz",
+ "integrity": "sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==",
"dev": true,
"requires": {
- "@jest/test-result": "^27.0.6",
- "@jest/types": "^27.0.6",
+ "@jest/test-result": "30.2.0",
+ "@jest/types": "30.2.0",
"@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "jest-util": "^27.0.6",
- "string-length": "^4.0.1"
+ "ansi-escapes": "^4.3.2",
+ "chalk": "^4.1.2",
+ "emittery": "^0.13.1",
+ "jest-util": "30.2.0",
+ "string-length": "^4.0.2"
}
},
"jest-worker": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz",
- "integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.2.0.tgz",
+ "integrity": "sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==",
"dev": true,
"requires": {
"@types/node": "*",
+ "@ungap/structured-clone": "^1.3.0",
+ "jest-util": "30.2.0",
"merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
+ "supports-color": "^8.1.1"
},
"dependencies": {
"supports-color": {
@@ -10539,45 +10790,10 @@
"esprima": "^4.0.0"
}
},
- "jsdom": {
- "version": "16.7.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
- "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
- "dev": true,
- "requires": {
- "abab": "^2.0.5",
- "acorn": "^8.2.4",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.4.4",
- "cssstyle": "^2.3.0",
- "data-urls": "^2.0.0",
- "decimal.js": "^10.2.1",
- "domexception": "^2.0.1",
- "escodegen": "^2.0.0",
- "form-data": "^3.0.0",
- "html-encoding-sniffer": "^2.0.1",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.0",
- "parse5": "6.0.1",
- "saxes": "^5.0.1",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^4.0.0",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^2.0.0",
- "webidl-conversions": "^6.1.0",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.5.0",
- "ws": "^7.4.6",
- "xml-name-validator": "^3.0.0"
- }
- },
"jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
"dev": true
},
"json-parse-better-errors": {
@@ -10586,6 +10802,12 @@
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
"dev": true
},
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -10614,27 +10836,17 @@
"object.assign": "^4.1.2"
}
},
- "kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true
- },
"leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
"dev": true
},
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- }
+ "lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
},
"load-json-file": {
"version": "4.0.0",
@@ -10665,12 +10877,6 @@
"p-locate": "^4.1.0"
}
},
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
"lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
@@ -10708,21 +10914,29 @@
}
},
"make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
"requires": {
- "semver": "^6.0.0"
+ "semver": "^7.5.3"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true
+ }
}
},
"makeerror": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
- "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
"dev": true,
"requires": {
- "tmpl": "1.0.x"
+ "tmpl": "1.0.5"
}
},
"math-intrinsics": {
@@ -10744,35 +10958,13 @@
"dev": true
},
"micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
- }
- },
- "mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
- },
- "mime-kind": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mime-kind/-/mime-kind-4.0.0.tgz",
- "integrity": "sha512-qQvglvSpS5mABi30beNFd+uHKtKkxD3dxAmhi2e589XKx+WfVqhg5i5P5LBcVgwwv3BiDpNMBWrHqU+JexW4aA==",
- "requires": {
- "file-type": "^16.5.4",
- "mime-types": "^2.1.24"
- }
- },
- "mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
"requires": {
- "mime-db": "1.52.0"
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
}
},
"mimic-fn": {
@@ -10781,18 +10973,10 @@
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
- "min-document": {
- "version": "2.19.1",
- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.1.tgz",
- "integrity": "sha512-8lqe85PkqQJzIcs2iD7xW/WSxcncC3/DPVbTOafKNJDIMXwGfwXS350mH4SJslomntN2iYtFBuC0yNO3CEap6g==",
- "requires": {
- "dom-walk": "^0.1.0"
- }
- },
"minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
@@ -10804,25 +10988,23 @@
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
"dev": true
},
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "minipass": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
"dev": true
},
- "multi-part": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multi-part/-/multi-part-4.0.0.tgz",
- "integrity": "sha512-YT/CS0PAe62kT8EoQXcQj8yIcSu18HhYv0s6ShdAFsoFly3oV5QaxODnkj0u7zH0/RFyH47cdcMVpcGXliEFVA==",
- "requires": {
- "mime-kind": "^4.0.0",
- "multi-part-lite": "^1.0.0"
- }
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true
},
- "multi-part-lite": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/multi-part-lite/-/multi-part-lite-1.0.0.tgz",
- "integrity": "sha512-KxIRbBZZ45hoKX1ROD/19wJr0ql1bef1rE8Y1PCwD3PuNXV42pp7Wo8lEHYuAajoT4vfAFcd3rPjlkyEEyt1nw=="
+ "napi-postinstall": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz",
+ "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==",
+ "dev": true
},
"nats": {
"version": "2.7.0",
@@ -10857,19 +11039,13 @@
"node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
- "dev": true
- },
- "node-modules-regexp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
- "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
"dev": true
},
"node-releases": {
- "version": "1.1.75",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz",
- "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==",
+ "version": "2.0.36",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz",
+ "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==",
"dev": true
},
"normalize-package-data": {
@@ -10907,12 +11083,6 @@
"path-key": "^3.0.0"
}
},
- "nwsapi": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
- "dev": true
- },
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -10995,33 +11165,13 @@
"mimic-fn": "^2.1.0"
}
},
- "optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dev": true,
- "requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- }
- },
- "p-each-series": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz",
- "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==",
- "dev": true
- },
"p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
"requires": {
- "p-try": "^2.0.0"
+ "yocto-queue": "^0.1.0"
}
},
"p-locate": {
@@ -11031,6 +11181,17 @@
"dev": true,
"requires": {
"p-limit": "^2.2.0"
+ },
+ "dependencies": {
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ }
}
},
"p-try": {
@@ -11039,6 +11200,12 @@
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
},
+ "package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true
+ },
"parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -11048,11 +11215,6 @@
"callsites": "^3.0.0"
}
},
- "parse-headers": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz",
- "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw=="
- },
"parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
@@ -11063,17 +11225,6 @@
"json-parse-better-errors": "^1.0.1"
}
},
- "parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
- "path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
- },
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -11098,21 +11249,40 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
+ "path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
+ }
+ }
+ },
"path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true
},
- "peek-readable": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
- "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg=="
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true
},
"picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true
},
"pify": {
@@ -11122,13 +11292,10 @@
"dev": true
},
"pirates": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
- "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
- "dev": true,
- "requires": {
- "node-modules-regexp": "^1.0.0"
- }
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+ "dev": true
},
"pkg-dir": {
"version": "4.2.0",
@@ -11199,12 +11366,6 @@
}
}
},
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true
- },
"prettier": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz",
@@ -11212,15 +11373,14 @@
"dev": true
},
"pretty-format": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
- "integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz",
+ "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==",
"dev": true,
"requires": {
- "@jest/types": "^27.0.6",
- "ansi-regex": "^5.0.0",
- "ansi-styles": "^5.0.0",
- "react-is": "^17.0.1"
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
},
"dependencies": {
"ansi-styles": {
@@ -11231,27 +11391,12 @@
}
}
},
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
- },
"progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
"dev": true
},
- "prompts": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz",
- "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==",
- "dev": true,
- "requires": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- }
- },
"prop-types": {
"version": "15.7.2",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
@@ -11271,22 +11416,16 @@
}
}
},
- "psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "dev": true
- },
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
},
- "querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "pure-rand": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz",
+ "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==",
"dev": true
},
"queue-microtask": {
@@ -11296,9 +11435,9 @@
"dev": true
},
"react-is": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
},
"read-pkg": {
@@ -11384,24 +11523,6 @@
}
}
},
- "readable-stream": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz",
- "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "readable-web-to-node-stream": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
- "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
- "requires": {
- "readable-stream": "^3.6.0"
- }
- },
"regexp.prototype.flags": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz",
@@ -11421,7 +11542,7 @@
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true
},
"require-from-string": {
@@ -11430,12 +11551,6 @@
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true
},
- "requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
- "dev": true
- },
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@@ -11461,6 +11576,12 @@
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true
},
+ "resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true
+ },
"reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -11485,27 +11606,6 @@
"queue-microtask": "^1.2.2"
}
},
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "dev": true,
- "requires": {
- "xmlchars": "^2.2.0"
- }
- },
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -11539,15 +11639,9 @@
}
},
"signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
- "dev": true
- },
- "sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
"slash": {
@@ -11574,9 +11668,9 @@
"dev": true
},
"source-map-support": {
- "version": "0.5.19",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
- "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
"requires": {
"buffer-from": "^1.0.0",
@@ -11621,30 +11715,21 @@
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
},
+ "stable-hash-x": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz",
+ "integrity": "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==",
+ "dev": true
+ },
"stack-utils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz",
- "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
"dev": true,
"requires": {
"escape-string-regexp": "^2.0.0"
}
},
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "requires": {
- "safe-buffer": "~5.2.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- }
- }
- },
"string-length": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
@@ -11656,14 +11741,25 @@
}
},
"string-width": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
- "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "string-width-cjs": {
+ "version": "npm:string-width@4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
}
},
"string.prototype.matchall": {
@@ -11703,12 +11799,21 @@
}
},
"strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-ansi-cjs": {
+ "version": "npm:strip-ansi@6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"requires": {
- "ansi-regex": "^5.0.0"
+ "ansi-regex": "^5.0.1"
}
},
"strip-bom": {
@@ -11729,15 +11834,6 @@
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true
},
- "strtok3": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz",
- "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==",
- "requires": {
- "@tokenizer/token": "^0.3.0",
- "peek-readable": "^4.1.0"
- }
- },
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -11747,22 +11843,15 @@
"has-flag": "^4.0.0"
}
},
- "supports-hyperlinks": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
- "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+ "synckit": {
+ "version": "0.11.12",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz",
+ "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==",
"dev": true,
"requires": {
- "has-flag": "^4.0.0",
- "supports-color": "^7.0.0"
+ "@pkgr/core": "^0.2.9"
}
},
- "symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true
- },
"table": {
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz",
@@ -11797,16 +11886,6 @@
}
}
},
- "terminal-link": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
- "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^4.2.1",
- "supports-hyperlinks": "^2.0.0"
- }
- },
"test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
@@ -11824,11 +11903,30 @@
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
- "throat": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
- "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==",
- "dev": true
+ "tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "requires": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "dependencies": {
+ "fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "requires": {}
+ },
+ "picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true
+ }
+ }
},
"tmpl": {
"version": "1.0.5",
@@ -11836,12 +11934,6 @@
"integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
"dev": true
},
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
- "dev": true
- },
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -11851,36 +11943,6 @@
"is-number": "^7.0.0"
}
},
- "token-types": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz",
- "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==",
- "requires": {
- "@tokenizer/token": "^0.3.0",
- "ieee754": "^1.2.1"
- }
- },
- "tough-cookie": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
- "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
- "dev": true,
- "requires": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
- }
- },
- "tr46": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
- "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.1"
- }
- },
"tsconfig-paths": {
"version": "3.11.0",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz",
@@ -11930,15 +11992,6 @@
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
"integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
},
- "type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2"
- }
- },
"type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
@@ -11951,15 +12004,6 @@
"integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
"dev": true
},
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
"typescript": {
"version": "4.3.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz",
@@ -11979,11 +12023,48 @@
"which-boxed-primitive": "^1.0.2"
}
},
- "universalify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
- "dev": true
+ "undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
+ },
+ "unrs-resolver": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz",
+ "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==",
+ "dev": true,
+ "requires": {
+ "@unrs/resolver-binding-android-arm-eabi": "1.11.1",
+ "@unrs/resolver-binding-android-arm64": "1.11.1",
+ "@unrs/resolver-binding-darwin-arm64": "1.11.1",
+ "@unrs/resolver-binding-darwin-x64": "1.11.1",
+ "@unrs/resolver-binding-freebsd-x64": "1.11.1",
+ "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1",
+ "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1",
+ "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-arm64-musl": "1.11.1",
+ "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1",
+ "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-x64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-x64-musl": "1.11.1",
+ "@unrs/resolver-binding-wasm32-wasi": "1.11.1",
+ "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1",
+ "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1",
+ "@unrs/resolver-binding-win32-x64-msvc": "1.11.1",
+ "napi-postinstall": "^0.3.0"
+ }
+ },
+ "update-browserslist-db": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "dev": true,
+ "requires": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ }
},
"uri-js": {
"version": "4.4.1",
@@ -11994,21 +12075,6 @@
"punycode": "^2.1.0"
}
},
- "url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "dev": true,
- "requires": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
- },
"v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
@@ -12016,22 +12082,14 @@
"dev": true
},
"v8-to-istanbul": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz",
- "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
+ "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
"dev": true,
"requires": {
+ "@jridgewell/trace-mapping": "^0.3.12",
"@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^1.6.0",
- "source-map": "^0.7.3"
- },
- "dependencies": {
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
+ "convert-source-map": "^2.0.0"
}
},
"validate-npm-package-license": {
@@ -12044,63 +12102,13 @@
"spdx-expression-parse": "^3.0.0"
}
},
- "w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "requires": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
- "w3c-xmlserializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
- "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
- "dev": true,
- "requires": {
- "xml-name-validator": "^3.0.0"
- }
- },
"walker": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
- "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
- "dev": true,
- "requires": {
- "makeerror": "1.0.x"
- }
- },
- "webidl-conversions": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
- "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
- "dev": true
- },
- "whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
- "dev": true,
- "requires": {
- "iconv-lite": "0.4.24"
- }
- },
- "whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "whatwg-url": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
- "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
"dev": true,
"requires": {
- "lodash": "^4.7.0",
- "tr46": "^2.1.0",
- "webidl-conversions": "^6.1.0"
+ "makeerror": "1.0.12"
}
},
"which": {
@@ -12142,6 +12150,17 @@
"strip-ansi": "^6.0.0"
}
},
+ "wrap-ansi-cjs": {
+ "version": "npm:wrap-ansi@7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -12149,57 +12168,23 @@
"dev": true
},
"write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+ "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
"dev": true,
"requires": {
"imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
- "ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "dev": true,
- "requires": {}
- },
- "x3-linkedlist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/x3-linkedlist/-/x3-linkedlist-1.2.0.tgz",
- "integrity": "sha512-mH/YwxpYSKNa8bDNF1yOuZCMuV+K80LtDN8vcLDUAwNazCxptDNsYt+zA/EJeYiGbdtKposhKLZjErGVOR8mag=="
- },
- "xhr": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz",
- "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
- "requires": {
- "global": "~4.4.0",
- "is-function": "^1.0.1",
- "parse-headers": "^2.0.0",
- "xtend": "^4.0.0"
+ "signal-exit": "^4.0.1"
+ },
+ "dependencies": {
+ "signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true
+ }
}
},
- "xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true
- },
- "xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
- },
"y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
@@ -12213,24 +12198,30 @@
"dev": true
},
"yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dev": true,
"requires": {
- "cliui": "^7.0.2",
+ "cliui": "^8.0.1",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
- "string-width": "^4.2.0",
+ "string-width": "^4.2.3",
"y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
+ "yargs-parser": "^21.1.1"
}
},
"yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true
}
}
diff --git a/scanners/domain-dispatcher/package.json b/scanners/domain-dispatcher/package.json
index e45b719afd..411263edbe 100644
--- a/scanners/domain-dispatcher/package.json
+++ b/scanners/domain-dispatcher/package.json
@@ -13,7 +13,7 @@
"author": "Mike Williamson",
"license": "MIT",
"dependencies": {
- "arangojs": "^8.0.0",
+ "arangojs": "^10.2.2",
"async-wait-until": "^2.0.7",
"dotenv-safe": "^8.2.0",
"nats": "^2.7.0"
@@ -22,6 +22,7 @@
"eslint": "^7.32.0",
"eslint-config-prettier": "^8.3.0",
"eslint-config-standard": "^16.0.3",
+ "eslint-import-resolver-typescript": "^4.4.4",
"eslint-plugin-import": "^2.24.2",
"eslint-plugin-jest": "^24.4.0",
"eslint-plugin-node": "^11.1.0",
@@ -29,7 +30,7 @@
"eslint-plugin-react": "^7.24.0",
"eslint-plugin-react-hooks": "^4.2.0",
"eslint-plugin-standard": "^4.1.0",
- "jest": "^27.0.6",
+ "jest": "^30.2.0",
"prettier": "^2.3.2"
},
"jest": {
diff --git a/scanners/domain-dispatcher/src/__tests__/dispatchDomains.test.js b/scanners/domain-dispatcher/src/__tests__/dispatchDomains.test.js
index 1ce020896f..5d84e051ca 100644
--- a/scanners/domain-dispatcher/src/__tests__/dispatchDomains.test.js
+++ b/scanners/domain-dispatcher/src/__tests__/dispatchDomains.test.js
@@ -17,7 +17,6 @@ const sys = new Database({
auth: { username, password },
})
-
const databaseName = `${DB_NAME}-${Date.now()}`
const logger = {
diff --git a/scanners/spring4shell/domain-dispatcher-job.yaml b/scanners/spring4shell/domain-dispatcher-job.yaml
index 972ef176d6..532c860113 100644
--- a/scanners/spring4shell/domain-dispatcher-job.yaml
+++ b/scanners/spring4shell/domain-dispatcher-job.yaml
@@ -12,7 +12,7 @@ spec:
spec:
containers:
- name: domain-dispatcher
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/domain-dispatcher:master-c00df59-1763496985 # {"$imagepolicy": "flux-system:domain-dispatcher"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/domain-dispatcher:master-0774a52-1774969223 # {"$imagepolicy": "flux-system:domain-dispatcher"}
env:
- name: DB_PASS
valueFrom:
diff --git a/scanners/web-processor/Dockerfile b/scanners/web-processor/Dockerfile
index a665181bc3..0af2d840e7 100644
--- a/scanners/web-processor/Dockerfile
+++ b/scanners/web-processor/Dockerfile
@@ -1,4 +1,4 @@
-FROM python:3.12.8-slim-bookworm AS python-builder
+FROM python:3.14.2-alpine AS python-builder
# Copy local code to the container image.
ENV PYTHONUNBUFFERED 1
@@ -6,13 +6,12 @@ ENV PYTHONWARNINGS ignore
WORKDIR /working/install
-RUN apt-get update && apt-get install -y --no-install-recommends \
- apt-utils \
+RUN apk add --no-cache \
python3 \
- python3-pip \
- python3-setuptools \
- python3-wheel \
- build-essential \
+ py3-pip \
+ py3-setuptools \
+ py3-wheel \
+ build-base \
python3-dev
COPY requirements.txt /requirements.txt
@@ -23,7 +22,7 @@ RUN pip3 install --prefix=/working/install -r /requirements.txt
#===============================================================================================
-FROM python:3.12.8-slim-bookworm
+FROM python:3.14.2-alpine
# Copy local code to the container image.
ENV PYTHONWARNINGS ignore
@@ -37,7 +36,7 @@ COPY --from=python-builder /working/install/lib /usr/local/lib
COPY service.py web_processor_cli.py ./
COPY web_processor ./web_processor
-RUN useradd -ms /bin/bash scanner
+RUN adduser -D scanner
USER scanner
CMD ["python3", "service.py"]
diff --git a/scanners/web-processor/requirements.txt b/scanners/web-processor/requirements.txt
index 61c5339b2d..c8a1db0c2d 100644
--- a/scanners/web-processor/requirements.txt
+++ b/scanners/web-processor/requirements.txt
@@ -4,10 +4,10 @@ idna==3.7
importlib_metadata==8.7.0
nats-py==2.8.0
packaging==25.0
-PyJWT==2.4.0
+PyJWT==2.12.0
python-arango==8.2.3
-python-dotenv==0.20.0
-requests==2.32.5
+python-dotenv==1.2.2
+requests==2.33.0
requests-toolbelt==1.0.0
setuptools==80.9.0
urllib3==2.6.3
diff --git a/scanners/web-scanner/Dockerfile b/scanners/web-scanner/Dockerfile
index 3b8de458b8..ad19fbe9d5 100644
--- a/scanners/web-scanner/Dockerfile
+++ b/scanners/web-scanner/Dockerfile
@@ -1,10 +1,10 @@
-FROM rust:1.84.1-bookworm AS crlite-builder
-RUN cargo install --git https://github.com/mozilla/crlite rust-query-crlite --rev dcb8a4d --features=rustls/dangerous_configuration
+FROM rust:1-bookworm AS crlite-builder
+RUN cargo install --git https://github.com/mozilla/crlite rust-query-crlite --tag v1.0.39
#===============================================================================================
#===============================================================================================
-FROM python:3.12.8-slim-bookworm AS python-builder
+FROM python:3.14.3-slim-bookworm AS python-builder
# Copy local code to the container image.
ENV PYTHONUNBUFFERED 1
@@ -26,7 +26,7 @@ RUN pip3 install --prefix=/working/install -r /requirements.txt
#===============================================================================================
#===============================================================================================
-FROM python:3.12.8-slim-bookworm
+FROM python:3.14.3-slim-bookworm
# Copy local code to the container image.
ENV PYTHONUNBUFFERED 1
diff --git a/scanners/web-scanner/requirements.txt b/scanners/web-scanner/requirements.txt
index 7af0002eb6..68f1ac7f6b 100644
--- a/scanners/web-scanner/requirements.txt
+++ b/scanners/web-scanner/requirements.txt
@@ -1,23 +1,23 @@
-annotated-types==0.5.0
+annotated-types==0.7.0
attrs==23.2.0
certifi==2024.7.4
-cffi==1.17.0
+cffi==2.0.0
charset-normalizer==2.1.1
-cryptography==44.0.3
+cryptography==46.0.7
idna==3.7
-nassl==5.3.0
+nassl==5.4.0
nats-py==2.8.0
psutil==5.9.8
-pyasn1==0.6.0
+pyasn1==0.6.3
pyasn1_modules==0.4.0
pycparser==2.21
-pydantic==2.4.0
-pydantic_core==2.10.0
-python-dotenv==0.21.0
-requests==2.32.4
+pydantic==2.12.5
+pydantic_core==2.41.5
+python-dotenv==1.2.2
+requests==2.33.0
requests-toolbelt==0.10.1
service-identity==24.1.0
-sslyze==6.1.0
+sslyze==6.3.1
tls-parser==2.0.0
-typing_extensions==4.12.2
+typing_extensions==4.14.1
urllib3==2.6.3
diff --git a/scanners/web-scanner/scan/tls_scanner/query_crlite.py b/scanners/web-scanner/scan/tls_scanner/query_crlite.py
index be778dd0c0..356a2188f7 100644
--- a/scanners/web-scanner/scan/tls_scanner/query_crlite.py
+++ b/scanners/web-scanner/scan/tls_scanner/query_crlite.py
@@ -1,41 +1,45 @@
import re
import subprocess
+import tempfile
+import os
def query_crlite(pem_cert: bytes) -> tuple[bool, str]:
- filename = "/tmp/temp.pem"
- f = open(filename, "w")
- f.write(pem_cert.decode("ascii"))
- f.close()
-
- find_query_crlite = subprocess.check_output(["which", "rust-query-crlite"])
-
- query_crlite_path = find_query_crlite.decode("ascii").splitlines()[0]
- if not query_crlite_path:
- FileNotFoundError("rust-query-crlite not found")
-
- completed = subprocess.run(
- [query_crlite_path, "-vv", "x509", filename],
- capture_output=True,
- )
-
- pattern = r'^(?:INFO|WARN|ERROR) - (\S*) (Good|Expired|NotCovered|NotEnrolled|Revoked)$'
-
- search_result = re.search(pattern, completed.stderr.decode("ascii"))
-
- if not search_result:
- raise ValueError(f"Certificate revocation status not found in rust_query_crlite output: {completed.stderr.decode('ascii')}")
-
- match search_result.group(2):
- case "Good":
- return True, "Good"
- case "Expired":
- return True, "Expired"
- case "NotCovered":
- return True, "NotCovered"
- case "NotEnrolled":
- return True, "NotEnrolled"
- case "Revoked":
- return False, "Revoked"
- case _:
- raise ValueError("Unknown status result")
+ fd, filename = tempfile.mkstemp(suffix=".pem")
+ try:
+ with os.fdopen(fd, "w") as f:
+ f.write(pem_cert.decode("ascii"))
+
+ find_query_crlite = subprocess.check_output(["which", "rust-query-crlite"])
+
+ query_crlite_path = find_query_crlite.decode("ascii").splitlines()[0]
+ if not query_crlite_path:
+ raise FileNotFoundError("rust-query-crlite not found")
+
+ completed = subprocess.run(
+ [query_crlite_path, "x509", filename],
+ capture_output=True,
+ )
+
+ pattern = r'^INFO - (\S*) (Good|Expired|NotCovered|NotEnrolled|Revoked)$'
+
+ search_result = re.search(pattern, completed.stderr.decode("ascii"), re.MULTILINE)
+
+ if not search_result:
+ raise ValueError(f"Certificate revocation status not found in rust_query_crlite output: {completed.stderr.decode('ascii')}")
+
+ match search_result.group(2):
+ case "Good":
+ return True, "Good"
+ case "Expired":
+ return True, "Expired"
+ case "NotCovered":
+ return True, "NotCovered"
+ case "NotEnrolled":
+ return True, "NotEnrolled"
+ case "Revoked":
+ return False, "Revoked"
+ case _:
+ raise ValueError("Unknown status result")
+ finally:
+ os.unlink(filename)
diff --git a/scripts/domain-loader/package-lock.json b/scripts/domain-loader/package-lock.json
index cfab45de77..dbadddda8f 100644
--- a/scripts/domain-loader/package-lock.json
+++ b/scripts/domain-loader/package-lock.json
@@ -9,7 +9,7 @@
"version": "1.0.0",
"license": "MIT",
"dependencies": {
- "arangojs": "^8.0.0",
+ "arangojs": "^10.2.2",
"dotenv-safe": "^8.2.0",
"url-slug": "^3.0.2",
"yargs": "^17.2.1"
@@ -23,7 +23,7 @@
"eslint-plugin-jest": "^24.5.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^5.1.0",
- "jest": "^27.2.4",
+ "jest": "^30.3.0",
"jest-matcher-utils": "^27.2.4",
"prettier": "^2.4.1",
"typescript": "^4.6.4"
@@ -39,35 +39,37 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz",
- "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
+ "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.15.5",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz",
- "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.15.4",
- "@babel/helper-compilation-targets": "^7.15.4",
- "@babel/helper-module-transforms": "^7.15.4",
- "@babel/helpers": "^7.15.4",
- "@babel/parser": "^7.15.5",
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4",
- "convert-source-map": "^1.7.0",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
+ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helpers": "^7.28.6",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/traverse": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/remapping": "^2.3.5",
+ "convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
- "json5": "^2.1.2",
- "semver": "^6.3.0",
- "source-map": "^0.5.0"
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
@@ -78,250 +80,175 @@
}
},
"node_modules/@babel/core/node_modules/@babel/code-frame": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
- "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/highlight": "^7.14.5"
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
- "node_modules/@babel/core/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/@babel/generator": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
- "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
+ "version": "7.29.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.23.0",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
- "jsesc": "^2.5.1"
+ "@babel/parser": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz",
- "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
+ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.15.0",
- "@babel/helper-validator-option": "^7.14.5",
- "browserslist": "^4.16.6",
- "semver": "^6.3.0"
+ "@babel/compat-data": "^7.28.6",
+ "@babel/helper-validator-option": "^7.27.1",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
},
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/helper-environment-visitor": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
- "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
- "dev": true,
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-function-name": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
- "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+ "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.23.0"
- },
- "engines": {
- "node": ">=6.9.0"
+ "yallist": "^3.0.2"
}
},
- "node_modules/@babel/helper-hoist-variables": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
- "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
}
},
- "node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz",
- "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==",
+ "node_modules/@babel/helper-globals": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
"dev": true,
- "dependencies": {
- "@babel/types": "^7.15.4"
- },
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz",
- "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
+ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.15.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz",
- "integrity": "sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
+ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.15.4",
- "@babel/helper-replace-supers": "^7.15.4",
- "@babel/helper-simple-access": "^7.15.4",
- "@babel/helper-split-export-declaration": "^7.15.4",
- "@babel/helper-validator-identifier": "^7.15.7",
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.6"
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/traverse": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz",
- "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.15.4"
},
- "engines": {
- "node": ">=6.9.0"
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz",
- "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-replace-supers": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz",
- "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
"dev": true,
- "dependencies": {
- "@babel/helper-member-expression-to-functions": "^7.15.4",
- "@babel/helper-optimise-call-expression": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-simple-access": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz",
- "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.15.4"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-split-export-declaration": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
- "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz",
- "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz",
- "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==",
+ "version": "7.29.2",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz",
+ "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4"
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.29.0"
},
"engines": {
"node": ">=6.9.0"
@@ -413,10 +340,14 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
- "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
+ "version": "7.29.2",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz",
+ "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.29.0"
+ },
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -429,6 +360,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
"integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -441,6 +373,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
"integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -453,6 +386,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
"integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
@@ -460,11 +394,44 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-attributes": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz",
+ "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
"integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
@@ -477,6 +444,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
"integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -484,11 +452,28 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz",
+ "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.28.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
"integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
@@ -501,6 +486,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
"integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -513,6 +499,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
"integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
@@ -525,6 +512,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
"integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -537,6 +525,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
"integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -549,6 +538,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
"integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -556,11 +546,28 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/plugin-syntax-top-level-await": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
"integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.14.5"
},
@@ -572,12 +579,13 @@
}
},
"node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz",
- "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz",
+ "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
@@ -587,282 +595,297 @@
}
},
"node_modules/@babel/template": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
- "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
+ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
+ "@babel/code-frame": "^7.28.6",
+ "@babel/parser": "^7.28.6",
+ "@babel/types": "^7.28.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/template/node_modules/@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/highlight": "^7.22.13",
- "chalk": "^2.4.2"
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/template/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "node_modules/@babel/traverse": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
+ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "color-convert": "^1.9.0"
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.29.0",
+ "debug": "^4.3.1"
},
"engines": {
- "node": ">=4"
+ "node": ">=6.9.0"
}
},
- "node_modules/@babel/template/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "node_modules/@babel/traverse/node_modules/@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
},
"engines": {
- "node": ">=4"
+ "node": ">=6.9.0"
}
},
- "node_modules/@babel/template/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "node_modules/@babel/types": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "color-name": "1.1.3"
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "node_modules/@babel/template/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
+ "node_modules/@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/@babel/template/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "node_modules/@emnapi/core": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz",
+ "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==",
"dev": true,
- "engines": {
- "node": ">=0.8.0"
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/wasi-threads": "1.2.0",
+ "tslib": "^2.4.0"
}
},
- "node_modules/@babel/template/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "node_modules/@emnapi/core/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"dev": true,
- "engines": {
- "node": ">=4"
- }
+ "license": "0BSD",
+ "optional": true
},
- "node_modules/@babel/template/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "node_modules/@emnapi/runtime": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz",
+ "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==",
"dev": true,
+ "license": "MIT",
+ "optional": true,
"dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
+ "tslib": "^2.4.0"
}
},
- "node_modules/@babel/traverse": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
- "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.0",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.0",
- "@babel/types": "^7.23.0",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
+ "node_modules/@emnapi/runtime/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD",
+ "optional": true
},
- "node_modules/@babel/traverse/node_modules/@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz",
+ "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==",
"dev": true,
+ "license": "MIT",
+ "optional": true,
"dependencies": {
- "@babel/highlight": "^7.22.13",
- "chalk": "^2.4.2"
- },
- "engines": {
- "node": ">=6.9.0"
+ "tslib": "^2.4.0"
}
},
- "node_modules/@babel/traverse/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "node_modules/@emnapi/wasi-threads/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD",
+ "optional": true
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
+ "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
"dev": true,
"dependencies": {
- "color-convert": "^1.9.0"
+ "ajv": "^6.12.4",
+ "debug": "^4.1.1",
+ "espree": "^7.3.0",
+ "globals": "^13.9.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^3.13.1",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
},
"engines": {
- "node": ">=4"
+ "node": "^10.12.0 || >=12.0.0"
}
},
- "node_modules/@babel/traverse/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
+ "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
"dev": true,
"dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "@humanwhocodes/object-schema": "^1.2.0",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
},
"engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/traverse/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
+ "node": ">=10.10.0"
}
},
- "node_modules/@babel/traverse/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
+ "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
"dev": true
},
- "node_modules/@babel/traverse/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
"dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
"engines": {
- "node": ">=0.8.0"
+ "node": ">=12"
}
},
- "node_modules/@babel/traverse/node_modules/globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=4"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
- "node_modules/@babel/traverse/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=4"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@babel/traverse/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
"dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
+ "license": "MIT"
},
- "node_modules/@babel/types": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
- "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-string-parser": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.20",
- "to-fast-properties": "^2.0.0"
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
},
"engines": {
- "node": ">=6.9.0"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@bcoe/v8-coverage": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
- "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
- "dev": true
- },
- "node_modules/@eslint/eslintrc": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
- "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
+ "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.1.1",
- "espree": "^7.3.0",
- "globals": "^13.9.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
- "minimatch": "^3.0.4",
- "strip-json-comments": "^3.1.1"
+ "ansi-regex": "^6.2.2"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
- "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@humanwhocodes/object-schema": "^1.2.0",
- "debug": "^4.1.1",
- "minimatch": "^3.0.4"
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
},
"engines": {
- "node": ">=10.10.0"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/@humanwhocodes/object-schema": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
- "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
- "dev": true
- },
"node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
"integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"camelcase": "^5.3.1",
"find-up": "^4.1.0",
@@ -879,6 +902,7 @@
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
@@ -892,6 +916,7 @@
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
@@ -904,6 +929,7 @@
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
@@ -919,6 +945,7 @@
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
@@ -931,6 +958,7 @@
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -940,6 +968,7 @@
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -949,6 +978,7 @@
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -958,64 +988,95 @@
"resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
"integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/@jest/console": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.4.tgz",
- "integrity": "sha512-94znCKynPZpDpYHQ6esRJSc11AmONrVkBOBZiD7S+bSubHhrUfbS95EY5HIOxhm4PQO7cnvZkL3oJcY0oMA+Wg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.3.0.tgz",
+ "integrity": "sha512-PAwCvFJ4696XP2qZj+LAn1BWjZaJ6RjG6c7/lkMaUJnkyMS34ucuIsfqYvfskVNvUI27R/u4P1HMYFnlVXG/Ww==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/types": "^27.2.4",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "jest-message-util": "^27.2.4",
- "jest-util": "^27.2.4",
+ "chalk": "^4.1.2",
+ "jest-message-util": "30.3.0",
+ "jest-util": "30.3.0",
"slash": "^3.0.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/console/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/@jest/console/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
}
},
"node_modules/@jest/core": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.4.tgz",
- "integrity": "sha512-UNQLyy+rXoojNm2MGlapgzWhZD1CT1zcHZQYeiD0xE7MtJfC19Q6J5D/Lm2l7i4V97T30usKDoEtjI8vKwWcLg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.3.0.tgz",
+ "integrity": "sha512-U5mVPsBxLSO6xYbf+tgkymLx+iAhvZX43/xI1+ej2ZOPnPdkdO1CzDmFKh2mZBn2s4XZixszHeQnzp1gm/DIxw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/console": "^27.2.4",
- "@jest/reporters": "^27.2.4",
- "@jest/test-result": "^27.2.4",
- "@jest/transform": "^27.2.4",
- "@jest/types": "^27.2.4",
+ "@jest/console": "30.3.0",
+ "@jest/pattern": "30.0.1",
+ "@jest/reporters": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "emittery": "^0.8.1",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-changed-files": "^27.2.4",
- "jest-config": "^27.2.4",
- "jest-haste-map": "^27.2.4",
- "jest-message-util": "^27.2.4",
- "jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.4",
- "jest-resolve-dependencies": "^27.2.4",
- "jest-runner": "^27.2.4",
- "jest-runtime": "^27.2.4",
- "jest-snapshot": "^27.2.4",
- "jest-util": "^27.2.4",
- "jest-validate": "^27.2.4",
- "jest-watcher": "^27.2.4",
- "micromatch": "^4.0.4",
- "rimraf": "^3.0.0",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "ansi-escapes": "^4.3.2",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "exit-x": "^0.2.2",
+ "graceful-fs": "^4.2.11",
+ "jest-changed-files": "30.3.0",
+ "jest-config": "30.3.0",
+ "jest-haste-map": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.3.0",
+ "jest-resolve-dependencies": "30.3.0",
+ "jest-runner": "30.3.0",
+ "jest-runtime": "30.3.0",
+ "jest-snapshot": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0",
+ "jest-watcher": "30.3.0",
+ "pretty-format": "30.3.0",
+ "slash": "^3.0.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
@@ -1026,1879 +1087,3110 @@
}
}
},
- "node_modules/@jest/environment": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.4.tgz",
- "integrity": "sha512-wkuui5yr3SSQW0XD0Qm3TATUbL/WE3LDEM3ulC+RCQhMf2yxhci8x7svGkZ4ivJ6Pc94oOzpZ6cdHBAMSYd1ew==",
+ "node_modules/@jest/core/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/fake-timers": "^27.2.4",
- "@jest/types": "^27.2.4",
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
"@types/node": "*",
- "jest-mock": "^27.2.4"
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/fake-timers": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.4.tgz",
- "integrity": "sha512-cs/TzvwWUM7kAA6Qm/890SK6JJ2pD5RfDNM3SSEom6BmdyV6OiWP1qf/pqo6ts6xwpcM36oN0wSEzcZWc6/B6w==",
+ "node_modules/@jest/core/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/types": "^27.2.4",
- "@sinonjs/fake-timers": "^8.0.1",
- "@types/node": "*",
- "jest-message-util": "^27.2.4",
- "jest-mock": "^27.2.4",
- "jest-util": "^27.2.4"
- },
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/@jest/core/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@jest/globals": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.4.tgz",
- "integrity": "sha512-DRsRs5dh0i+fA9mGHylTU19+8fhzNJoEzrgsu+zgJoZth3x8/0juCQ8nVVdW1er4Cqifb/ET7/hACYVPD0dBEA==",
+ "node_modules/@jest/core/node_modules/pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/environment": "^27.2.4",
- "@jest/types": "^27.2.4",
- "expect": "^27.2.4"
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/reporters": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.4.tgz",
- "integrity": "sha512-LHeSdDnDZkDnJ8kvnjcqV8P1Yv/32yL4d4XfR5gBiy3xGO0onwll1QEbvtW96fIwhx2nejug0GTaEdNDoyr3fQ==",
+ "node_modules/@jest/core/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true,
- "dependencies": {
- "@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^27.2.4",
- "@jest/test-result": "^27.2.4",
- "@jest/transform": "^27.2.4",
- "@jest/types": "^27.2.4",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.2",
- "graceful-fs": "^4.2.4",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^4.0.3",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "jest-haste-map": "^27.2.4",
- "jest-resolve": "^27.2.4",
- "jest-util": "^27.2.4",
- "jest-worker": "^27.2.4",
- "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"
- },
+ "license": "MIT"
+ },
+ "node_modules/@jest/diff-sequences": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.3.0.tgz",
+ "integrity": "sha512-cG51MVnLq1ecVUaQ3fr6YuuAOitHK1S4WUJHnsPFE/quQr33ADUx1FfrTCpMCRxvy0Yr9BThKpDjSlcTi91tMA==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/source-map": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz",
- "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==",
+ "node_modules/@jest/environment": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.3.0.tgz",
+ "integrity": "sha512-SlLSF4Be735yQXyh2+mctBOzNDx5s5uLv88/j8Qn1wH679PDcwy67+YdADn8NJnGjzlXtN62asGH/T4vWOkfaw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.4",
- "source-map": "^0.6.0"
+ "@jest/fake-timers": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "jest-mock": "30.3.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/test-result": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.4.tgz",
- "integrity": "sha512-eU+PRo0+lIS01b0dTmMdVZ0TtcRSxEaYquZTRFMQz6CvsehGhx9bRzi9Zdw6VROviJyv7rstU+qAMX5pNBmnfQ==",
+ "node_modules/@jest/environment/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/console": "^27.2.4",
- "@jest/types": "^27.2.4",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/test-sequencer": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.4.tgz",
- "integrity": "sha512-fpk5eknU3/DXE2QCCG1wv/a468+cfPo3Asu6d6yUtM9LOPh709ubZqrhuUOYfM8hXMrIpIdrv1CdCrWWabX0rQ==",
+ "node_modules/@jest/environment/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/@jest/expect": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.3.0.tgz",
+ "integrity": "sha512-76Nlh4xJxk2D/9URCn3wFi98d2hb19uWE1idLsTt2ywhvdOldbw3S570hBgn25P4ICUZ/cBjybrBex2g17IDbg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/test-result": "^27.2.4",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.4",
- "jest-runtime": "^27.2.4"
+ "expect": "30.3.0",
+ "jest-snapshot": "30.3.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/transform": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.4.tgz",
- "integrity": "sha512-n5FlX2TH0oQGwyVDKPxdJ5nI2sO7TJBFe3u3KaAtt7TOiV4yL+Y+rSFDl+Ic5MpbiA/eqXmLAQxjnBmWgS2rEA==",
+ "node_modules/@jest/expect-utils": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.3.0.tgz",
+ "integrity": "sha512-j0+W5iQQ8hBh7tHZkTQv3q2Fh/M7Je72cIsYqC4OaktgtO7v1So9UTjp6uPBHIaB6beoF/RRsCgMJKvti0wADA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/core": "^7.1.0",
- "@jest/types": "^27.2.4",
- "babel-plugin-istanbul": "^6.0.0",
- "chalk": "^4.0.0",
- "convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.4",
- "jest-regex-util": "^27.0.6",
- "jest-util": "^27.2.4",
- "micromatch": "^4.0.4",
- "pirates": "^4.0.1",
- "slash": "^3.0.0",
- "source-map": "^0.6.1",
- "write-file-atomic": "^3.0.0"
+ "@jest/get-type": "30.1.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jest/types": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.4.tgz",
- "integrity": "sha512-IDO2ezTxeMvQAHxzG/ZvEyA47q0aVfzT95rGFl7bZs/Go0aIucvfDbS2rmnoEdXxlLQhcolmoG/wvL/uKx4tKA==",
+ "node_modules/@jest/fake-timers": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.3.0.tgz",
+ "integrity": "sha512-WUQDs8SOP9URStX1DzhD425CqbN/HxUYCTwVrT8sTVBfMvFqYt/s61EK5T05qnHu0po6RitXIvP9otZxYDzTGQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
+ "@jest/types": "30.3.0",
+ "@sinonjs/fake-timers": "^15.0.0",
"@types/node": "*",
- "@types/yargs": "^16.0.0",
- "chalk": "^4.0.0"
+ "jest-message-util": "30.3.0",
+ "jest-mock": "30.3.0",
+ "jest-util": "30.3.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "node_modules/@jest/fake-timers/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": ">=6.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "node_modules/@jest/fake-timers/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
- "engines": {
- "node": ">=6.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
}
},
- "node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "node_modules/@jest/get-type": {
+ "version": "30.1.0",
+ "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz",
+ "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=6.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
- "dev": true
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.19",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
- "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
+ "node_modules/@jest/globals": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.3.0.tgz",
+ "integrity": "sha512-+owLCBBdfpgL3HU+BD5etr1SvbXpSitJK0is1kiYjJxAAJggYMRQz5hSdd5pq1sSggfxPbw2ld71pt4x5wwViA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
+ "@jest/environment": "30.3.0",
+ "@jest/expect": "30.3.0",
+ "@jest/types": "30.3.0",
+ "jest-mock": "30.3.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
},
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "node_modules/@jest/globals/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": ">= 8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "node_modules/@jest/globals/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
- "engines": {
- "node": ">= 8"
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
}
},
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "node_modules/@jest/pattern": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz",
+ "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
+ "@types/node": "*",
+ "jest-regex-util": "30.0.1"
},
"engines": {
- "node": ">= 8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+ "node_modules/@jest/reporters": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.3.0.tgz",
+ "integrity": "sha512-a09z89S+PkQnL055bVj8+pe2Caed2PBOaczHcXCykW5ngxX9EWx/1uAwncxc/HiU0oZqfwseMjyhxgRjS49qPw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "type-detect": "4.0.8"
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@jest/console": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "collect-v8-coverage": "^1.0.2",
+ "exit-x": "^0.2.2",
+ "glob": "^10.5.0",
+ "graceful-fs": "^4.2.11",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^6.0.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^5.0.0",
+ "istanbul-reports": "^3.1.3",
+ "jest-message-util": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-worker": "30.3.0",
+ "slash": "^3.0.0",
+ "string-length": "^4.0.2",
+ "v8-to-istanbul": "^9.0.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
}
},
- "node_modules/@sinonjs/fake-timers": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz",
- "integrity": "sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==",
+ "node_modules/@jest/reporters/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "node_modules/@tokenizer/token": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
- "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
- },
- "node_modules/@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "dev": true,
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
"engines": {
- "node": ">= 6"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@types/babel__core": {
- "version": "7.1.16",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz",
- "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==",
+ "node_modules/@jest/reporters/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0",
- "@types/babel__generator": "*",
- "@types/babel__template": "*",
- "@types/babel__traverse": "*"
+ "@types/yargs-parser": "*"
}
},
- "node_modules/@types/babel__generator": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz",
- "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==",
+ "node_modules/@jest/reporters/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.0.0"
+ "balanced-match": "^1.0.0"
}
},
- "node_modules/@types/babel__template": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
- "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
+ "node_modules/@jest/reporters/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@types/babel__traverse": {
- "version": "7.14.2",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz",
- "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==",
+ "node_modules/@jest/reporters/node_modules/minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "@babel/types": "^7.3.0"
+ "brace-expansion": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@types/graceful-fs": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
- "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==",
+ "node_modules/@jest/schemas": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz",
+ "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "@sinclair/typebox": "^0.34.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@types/istanbul-lib-coverage": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
- "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
- "dev": true
- },
- "node_modules/@types/istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+ "node_modules/@jest/snapshot-utils": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.3.0.tgz",
+ "integrity": "sha512-ORbRN9sf5PP82v3FXNSwmO1OTDR2vzR2YTaR+E3VkSBZ8zadQE6IqYdYEeFH1NIkeB2HIGdF02dapb6K0Mj05g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/istanbul-lib-coverage": "*"
+ "@jest/types": "30.3.0",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "natural-compare": "^1.4.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@types/istanbul-reports": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
- "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+ "node_modules/@jest/snapshot-utils/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/istanbul-lib-report": "*"
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@types/json-schema": {
- "version": "7.0.9",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
- "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
- "dev": true
- },
- "node_modules/@types/json5": {
- "version": "0.0.29",
- "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
- "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
- "dev": true
- },
- "node_modules/@types/node": {
- "version": "16.9.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz",
- "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g=="
- },
- "node_modules/@types/prettier": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz",
- "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==",
- "dev": true
- },
- "node_modules/@types/stack-utils": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
- "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
- "dev": true
- },
- "node_modules/@types/yargs": {
- "version": "16.0.4",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz",
- "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==",
+ "node_modules/@jest/snapshot-utils/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
}
},
- "node_modules/@types/yargs-parser": {
- "version": "20.2.1",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz",
- "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==",
- "dev": true
- },
- "node_modules/@typescript-eslint/experimental-utils": {
- "version": "4.31.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.1.tgz",
- "integrity": "sha512-NtoPsqmcSsWty0mcL5nTZXMf7Ei0Xr2MT8jWjXMVgRK0/1qeQ2jZzLFUh4QtyJ4+/lPUyMw5cSfeeME+Zrtp9Q==",
+ "node_modules/@jest/source-map": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz",
+ "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/json-schema": "^7.0.7",
- "@typescript-eslint/scope-manager": "4.31.1",
- "@typescript-eslint/types": "4.31.1",
- "@typescript-eslint/typescript-estree": "4.31.1",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^3.0.0"
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "callsites": "^3.1.0",
+ "graceful-fs": "^4.2.11"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "*"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
- "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "node_modules/@jest/test-result": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.3.0.tgz",
+ "integrity": "sha512-e/52nJGuD74AKTSe0P4y5wFRlaXP0qmrS17rqOMHeSwm278VyNyXE3gFO/4DTGF9w+65ra3lo3VKj0LBrzmgdQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "eslint-visitor-keys": "^2.0.0"
+ "@jest/console": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "collect-v8-coverage": "^1.0.2"
},
"engines": {
- "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- },
- "peerDependencies": {
- "eslint": ">=5"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "4.31.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.1.tgz",
- "integrity": "sha512-N1Uhn6SqNtU2XpFSkD4oA+F0PfKdWHyr4bTX0xTj8NRx1314gBDRL1LUuZd5+L3oP+wo6hCbZpaa1in6SwMcVQ==",
+ "node_modules/@jest/test-result/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "4.31.1",
- "@typescript-eslint/visitor-keys": "4.31.1"
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@typescript-eslint/types": {
- "version": "4.31.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.1.tgz",
- "integrity": "sha512-kixltt51ZJGKENNW88IY5MYqTBA8FR0Md8QdGbJD2pKZ+D5IvxjTYDNtJPDxFBiXmka2aJsITdB1BtO1fsgmsQ==",
+ "node_modules/@jest/test-result/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
- "engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
}
},
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "4.31.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.1.tgz",
- "integrity": "sha512-EGHkbsUvjFrvRnusk6yFGqrqMBTue5E5ROnS5puj3laGQPasVUgwhrxfcgkdHNFECHAewpvELE1Gjv0XO3mdWg==",
+ "node_modules/@jest/test-sequencer": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.3.0.tgz",
+ "integrity": "sha512-dgbWy9b8QDlQeRZcv7LNF+/jFiiYHTKho1xirauZ7kVwY7avjFF6uTT0RqlgudB5OuIPagFdVtfFMosjVbk1eA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "4.31.1",
- "@typescript-eslint/visitor-keys": "4.31.1",
- "debug": "^4.3.1",
- "globby": "^11.0.3",
- "is-glob": "^4.0.1",
- "semver": "^7.3.5",
- "tsutils": "^3.21.0"
+ "@jest/test-result": "30.3.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.3.0",
+ "slash": "^3.0.0"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "4.31.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.1.tgz",
- "integrity": "sha512-PCncP8hEqKw6SOJY+3St4LVtoZpPPn+Zlpm7KW5xnviMhdqcsBty4Lsg4J/VECpJjw1CkROaZhH4B8M1OfnXTQ==",
+ "node_modules/@jest/transform": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.3.0.tgz",
+ "integrity": "sha512-TLKY33fSLVd/lKB2YI1pH69ijyUblO/BQvCj566YvnwuzoTNr648iE0j22vRvVNk2HsPwByPxATg3MleS3gf5A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "4.31.1",
- "eslint-visitor-keys": "^2.0.0"
+ "@babel/core": "^7.27.4",
+ "@jest/types": "30.3.0",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "babel-plugin-istanbul": "^7.0.1",
+ "chalk": "^4.1.2",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.3.0",
+ "jest-regex-util": "30.0.1",
+ "jest-util": "30.3.0",
+ "pirates": "^4.0.7",
+ "slash": "^3.0.0",
+ "write-file-atomic": "^5.0.1"
},
"engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/abab": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
- "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
- "dev": true
- },
- "node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "node_modules/@jest/transform/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
- "bin": {
- "acorn": "bin/acorn"
+ "license": "MIT",
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": ">=0.4.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+ "node_modules/@jest/transform/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
+ "@types/yargs-parser": "*"
}
},
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "node_modules/@jest/types": {
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.4.tgz",
+ "integrity": "sha512-IDO2ezTxeMvQAHxzG/ZvEyA47q0aVfzT95rGFl7bZs/Go0aIucvfDbS2rmnoEdXxlLQhcolmoG/wvL/uKx4tKA==",
"dev": true,
"dependencies": {
- "debug": "4"
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^16.0.0",
+ "chalk": "^4.0.0"
},
"engines": {
- "node": ">= 6.0.0"
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
}
},
- "node_modules/ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "node_modules/@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
"dev": true,
- "engines": {
- "node": ">=6"
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
}
},
- "node_modules/ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
- "dependencies": {
- "type-fest": "^0.21.3"
- },
+ "license": "MIT",
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=6.0.0"
}
},
- "node_modules/ansi-escapes/node_modules/type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "license": "MIT"
},
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "engines": {
- "node": ">=8"
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/@napi-rs/wasm-runtime": {
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
+ "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
"dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "@emnapi/core": "^1.4.3",
+ "@emnapi/runtime": "^1.4.3",
+ "@tybys/wasm-util": "^0.10.0"
}
},
- "node_modules/anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
"dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
},
"engines": {
"node": ">= 8"
}
},
- "node_modules/arango-tools": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/arango-tools/-/arango-tools-0.5.0.tgz",
- "integrity": "sha512-Fb6gnfvtmqSH1lyHwiL3tKugOwRa8d1xPBrW+JF0ZUvZnAPS5PC2EHUYSzZoGurJa5DHHpkIz+azFeF9fbQniw==",
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true,
- "dependencies": {
- "arangojs": "^7.2.0",
- "assign-deep": "^1.0.1"
+ "engines": {
+ "node": ">= 8"
}
},
- "node_modules/arango-tools/node_modules/arangojs": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-7.8.0.tgz",
- "integrity": "sha512-aJFlMKlVr4sIO5GDMuykBVNVxWeZTkWDgYbbl9cIuxVctp8Lhs6dW5fr5MYlwAndnOEyi3bvbrhZIucly2IpWQ==",
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
"dependencies": {
- "@types/node": ">=13.13.4",
- "es6-error": "^4.0.1",
- "multi-part": "^3.0.0",
- "x3-linkedlist": "1.2.0",
- "xhr": "^2.4.1"
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
},
"engines": {
- "node": ">=10"
+ "node": ">= 8"
}
},
- "node_modules/arango-tools/node_modules/file-type": {
- "version": "12.4.2",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz",
- "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==",
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
"dev": true,
+ "license": "MIT",
+ "optional": true,
"engines": {
- "node": ">=8"
+ "node": ">=14"
}
},
- "node_modules/arango-tools/node_modules/mime-kind": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mime-kind/-/mime-kind-3.0.0.tgz",
- "integrity": "sha512-sx9lClVP7GXY2mO3aVDWTQLhfvAdDvNhGi3o3g7+ae3aKaoybeGbEIlnreoRKjrbDpvlPltlkIryxOtatojeXQ==",
+ "node_modules/@pkgr/core": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz",
+ "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==",
"dev": true,
- "dependencies": {
- "file-type": "^12.1.0",
- "mime-types": "^2.1.24"
- },
+ "license": "MIT",
"engines": {
- "node": ">=8.3.0"
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/pkgr"
}
},
- "node_modules/arango-tools/node_modules/multi-part": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/multi-part/-/multi-part-3.0.0.tgz",
- "integrity": "sha512-pDbdYQ6DLDxAsD83w9R7r7rlW56cETL7hIB5bCWX7FJYw0K+kL5JwHr0I8tRk9lGeFcAzf+2OEzXWlG/4wCnFw==",
+ "node_modules/@sinclair/typebox": {
+ "version": "0.34.48",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz",
+ "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@sinonjs/commons": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
- "mime-kind": "^3.0.0",
- "multi-part-lite": "^1.0.0"
- },
- "engines": {
- "node": ">=8.3.0"
+ "type-detect": "4.0.8"
}
},
- "node_modules/arangojs": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-8.0.0.tgz",
- "integrity": "sha512-VjeWxbS18c65Wu6Pr/d5/kW0Chn6ftIfUAzCmG3wUUe8OrRRalSgL6e1+5iY9apocbECo6wTK3kr2goXfLHB+A==",
+ "node_modules/@sinonjs/fake-timers": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.1.1.tgz",
+ "integrity": "sha512-cO5W33JgAPbOh07tvZjUOJ7oWhtaqGHiZw+11DPbyqh2kHTBc3eF/CjJDeQ4205RLQsX6rxCuYOroFQwl7JDRw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
- "@types/node": ">=14",
- "multi-part": "^4.0.0",
- "path-browserify": "^1.0.1",
- "x3-linkedlist": "1.2.0",
- "xhr": "^2.4.1"
- },
- "engines": {
- "node": ">=14"
+ "@sinonjs/commons": "^3.0.1"
}
},
- "node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "node_modules/@tybys/wasm-util": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
+ "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
"dev": true,
+ "license": "MIT",
+ "optional": true,
"dependencies": {
- "sprintf-js": "~1.0.2"
+ "tslib": "^2.4.0"
}
},
- "node_modules/array-includes": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz",
- "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==",
+ "node_modules/@tybys/wasm-util/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD",
+ "optional": true
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.2",
- "get-intrinsic": "^1.1.1",
- "is-string": "^1.0.5"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
}
},
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "node_modules/@types/babel__generator": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
"dev": true,
- "engines": {
- "node": ">=8"
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.0.0"
}
},
- "node_modules/array.prototype.flat": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz",
- "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==",
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
}
},
- "node_modules/assign-deep": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/assign-deep/-/assign-deep-1.0.1.tgz",
- "integrity": "sha512-CSXAX79mibneEYfqLT5FEmkqR5WXF+xDRjgQQuVf6wSCXCYU8/vHttPidNar7wJ5BFmKAo8Wei0rCtzb+M/yeA==",
+ "node_modules/@types/babel__traverse": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "assign-symbols": "^2.0.2"
- },
- "engines": {
- "node": ">=6"
+ "@babel/types": "^7.28.2"
}
},
- "node_modules/assign-symbols": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-2.0.2.tgz",
- "integrity": "sha512-9sBQUQZMKFKcO/C3Bo6Rx4CQany0R0UeVcefNGRRdW2vbmaMOhV1sbmlXcQLcD56juLXbSGTBm0GGuvmrAF8pA==",
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
"dev": true,
- "engines": {
- "node": ">=6"
- }
+ "license": "MIT"
},
- "node_modules/astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "node_modules/babel-jest": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.4.tgz",
- "integrity": "sha512-f24OmxyWymk5jfgLdlCMu4fTs4ldxFBIdn5sJdhvGC1m08rSkJ5hYbWkNmfBSvE/DjhCVNSHXepxsI6THGfGsg==",
+ "node_modules/@types/istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
"dev": true,
"dependencies": {
- "@jest/transform": "^27.2.4",
- "@jest/types": "^27.2.4",
- "@types/babel__core": "^7.1.14",
- "babel-plugin-istanbul": "^6.0.0",
- "babel-preset-jest": "^27.2.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.8.0"
+ "@types/istanbul-lib-coverage": "*"
}
},
- "node_modules/babel-plugin-istanbul": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz",
- "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==",
+ "node_modules/@types/istanbul-reports": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+ "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^4.0.0",
- "test-exclude": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
+ "@types/istanbul-lib-report": "*"
}
},
- "node_modules/babel-plugin-jest-hoist": {
- "version": "27.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz",
- "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==",
- "dev": true,
- "dependencies": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.0.0",
- "@types/babel__traverse": "^7.0.6"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
+ "node_modules/@types/json-schema": {
+ "version": "7.0.9",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
+ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
+ "dev": true
},
- "node_modules/babel-preset-current-node-syntax": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
- "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
- "dev": true,
- "dependencies": {
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.8.3",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.8.3",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-top-level-await": "^7.8.3"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
+ "dev": true
},
- "node_modules/babel-preset-jest": {
- "version": "27.2.0",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz",
- "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==",
- "dev": true,
+ "node_modules/@types/node": {
+ "version": "20.19.37",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz",
+ "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==",
"dependencies": {
- "babel-plugin-jest-hoist": "^27.2.0",
- "babel-preset-current-node-syntax": "^1.0.0"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
+ "undici-types": "~6.21.0"
}
},
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "node_modules/@types/stack-utils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
+ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
"dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
+ "license": "MIT"
},
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "node_modules/@types/yargs": {
+ "version": "16.0.4",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz",
+ "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==",
"dev": true,
"dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
+ "@types/yargs-parser": "*"
}
},
- "node_modules/browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
+ "node_modules/@types/yargs-parser": {
+ "version": "20.2.1",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz",
+ "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==",
"dev": true
},
- "node_modules/browserslist": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.1.tgz",
- "integrity": "sha512-aLD0ZMDSnF4lUt4ZDNgqi5BUn9BZ7YdQdI/cYlILrhdSSZJLU9aNZoD5/NBmM4SK34APB2e83MOsRt1EnkuyaQ==",
+ "node_modules/@typescript-eslint/experimental-utils": {
+ "version": "4.31.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.1.tgz",
+ "integrity": "sha512-NtoPsqmcSsWty0mcL5nTZXMf7Ei0Xr2MT8jWjXMVgRK0/1qeQ2jZzLFUh4QtyJ4+/lPUyMw5cSfeeME+Zrtp9Q==",
"dev": true,
"dependencies": {
- "caniuse-lite": "^1.0.30001259",
- "electron-to-chromium": "^1.3.846",
- "escalade": "^3.1.1",
- "nanocolors": "^0.1.5",
- "node-releases": "^1.1.76"
- },
- "bin": {
- "browserslist": "cli.js"
+ "@types/json-schema": "^7.0.7",
+ "@typescript-eslint/scope-manager": "4.31.1",
+ "@typescript-eslint/types": "4.31.1",
+ "@typescript-eslint/typescript-estree": "4.31.1",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
},
"engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ "node": "^10.12.0 || >=12.0.0"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- }
- },
- "node_modules/bser": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
- "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
- "dev": true,
- "dependencies": {
- "node-int64": "^0.4.0"
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
}
},
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
- },
- "node_modules/call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
"dev": true,
"dependencies": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=5"
}
},
- "node_modules/call-bind-apply-helpers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
- "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "4.31.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.1.tgz",
+ "integrity": "sha512-N1Uhn6SqNtU2XpFSkD4oA+F0PfKdWHyr4bTX0xTj8NRx1314gBDRL1LUuZd5+L3oP+wo6hCbZpaa1in6SwMcVQ==",
"dev": true,
"dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
+ "@typescript-eslint/types": "4.31.1",
+ "@typescript-eslint/visitor-keys": "4.31.1"
},
"engines": {
- "node": ">= 0.4"
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "node_modules/@typescript-eslint/types": {
+ "version": "4.31.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.1.tgz",
+ "integrity": "sha512-kixltt51ZJGKENNW88IY5MYqTBA8FR0Md8QdGbJD2pKZ+D5IvxjTYDNtJPDxFBiXmka2aJsITdB1BtO1fsgmsQ==",
"dev": true,
"engines": {
- "node": ">=6"
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "4.31.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.1.tgz",
+ "integrity": "sha512-EGHkbsUvjFrvRnusk6yFGqrqMBTue5E5ROnS5puj3laGQPasVUgwhrxfcgkdHNFECHAewpvELE1Gjv0XO3mdWg==",
"dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "4.31.1",
+ "@typescript-eslint/visitor-keys": "4.31.1",
+ "debug": "^4.3.1",
+ "globby": "^11.0.3",
+ "is-glob": "^4.0.1",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ },
"engines": {
- "node": ">=6"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001261",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001261.tgz",
- "integrity": "sha512-vM8D9Uvp7bHIN0fZ2KQ4wnmYFpJo/Etb4Vwsuc+ka0tfGDHvOPrFm6S/7CCNLSOkAUjenT2HnUPESdOIL91FaA==",
- "dev": true,
+ "node": "^10.12.0 || >=12.0.0"
+ },
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/browserslist"
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
}
},
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "4.31.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.1.tgz",
+ "integrity": "sha512-PCncP8hEqKw6SOJY+3St4LVtoZpPPn+Zlpm7KW5xnviMhdqcsBty4Lsg4J/VECpJjw1CkROaZhH4B8M1OfnXTQ==",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "@typescript-eslint/types": "4.31.1",
+ "eslint-visitor-keys": "^2.0.0"
},
"engines": {
- "node": ">=10"
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/char-regex": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
- "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
"dev": true,
- "engines": {
- "node": ">=10"
+ "license": "ISC"
+ },
+ "node_modules/@unrs/resolver-binding-android-arm-eabi": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz",
+ "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-android-arm64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz",
+ "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-darwin-arm64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz",
+ "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-darwin-x64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz",
+ "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-freebsd-x64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz",
+ "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz",
+ "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz",
+ "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz",
+ "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz",
+ "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz",
+ "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz",
+ "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz",
+ "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz",
+ "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz",
+ "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-linux-x64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz",
+ "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-wasm32-wasi": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz",
+ "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==",
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@napi-rs/wasm-runtime": "^0.2.11"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz",
+ "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz",
+ "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz",
+ "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-escapes/node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arango-tools": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/arango-tools/-/arango-tools-0.5.0.tgz",
+ "integrity": "sha512-Fb6gnfvtmqSH1lyHwiL3tKugOwRa8d1xPBrW+JF0ZUvZnAPS5PC2EHUYSzZoGurJa5DHHpkIz+azFeF9fbQniw==",
+ "dev": true,
+ "dependencies": {
+ "arangojs": "^7.2.0",
+ "assign-deep": "^1.0.1"
+ }
+ },
+ "node_modules/arango-tools/node_modules/arangojs": {
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-7.8.0.tgz",
+ "integrity": "sha512-aJFlMKlVr4sIO5GDMuykBVNVxWeZTkWDgYbbl9cIuxVctp8Lhs6dW5fr5MYlwAndnOEyi3bvbrhZIucly2IpWQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": ">=13.13.4",
+ "es6-error": "^4.0.1",
+ "multi-part": "^3.0.0",
+ "x3-linkedlist": "1.2.0",
+ "xhr": "^2.4.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/arango-tools/node_modules/file-type": {
+ "version": "12.4.2",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz",
+ "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/arango-tools/node_modules/mime-kind": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mime-kind/-/mime-kind-3.0.0.tgz",
+ "integrity": "sha512-sx9lClVP7GXY2mO3aVDWTQLhfvAdDvNhGi3o3g7+ae3aKaoybeGbEIlnreoRKjrbDpvlPltlkIryxOtatojeXQ==",
+ "dev": true,
+ "dependencies": {
+ "file-type": "^12.1.0",
+ "mime-types": "^2.1.24"
+ },
+ "engines": {
+ "node": ">=8.3.0"
+ }
+ },
+ "node_modules/arango-tools/node_modules/multi-part": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/multi-part/-/multi-part-3.0.0.tgz",
+ "integrity": "sha512-pDbdYQ6DLDxAsD83w9R7r7rlW56cETL7hIB5bCWX7FJYw0K+kL5JwHr0I8tRk9lGeFcAzf+2OEzXWlG/4wCnFw==",
+ "dev": true,
+ "dependencies": {
+ "mime-kind": "^3.0.0",
+ "multi-part-lite": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8.3.0"
+ }
+ },
+ "node_modules/arangojs": {
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-10.2.2.tgz",
+ "integrity": "sha512-3Xllq5inTGjros0mBP9NFxrIW8Di0ldtFurLdrXy5z4NDVJPyJtnwUiiGrMPY21NuVu53wUDE23YN50jnX4epw==",
+ "dependencies": {
+ "@types/node": "^20.11.26"
+ },
+ "engines": {
+ "node": ">=20"
+ },
+ "peerDependencies": {
+ "undici": ">=5.21.0"
+ },
+ "peerDependenciesMeta": {
+ "undici": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz",
+ "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.2",
+ "get-intrinsic": "^1.1.1",
+ "is-string": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz",
+ "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/assign-deep": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/assign-deep/-/assign-deep-1.0.1.tgz",
+ "integrity": "sha512-CSXAX79mibneEYfqLT5FEmkqR5WXF+xDRjgQQuVf6wSCXCYU8/vHttPidNar7wJ5BFmKAo8Wei0rCtzb+M/yeA==",
+ "dev": true,
+ "dependencies": {
+ "assign-symbols": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/assign-symbols": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-2.0.2.tgz",
+ "integrity": "sha512-9sBQUQZMKFKcO/C3Bo6Rx4CQany0R0UeVcefNGRRdW2vbmaMOhV1sbmlXcQLcD56juLXbSGTBm0GGuvmrAF8pA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-jest": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.3.0.tgz",
+ "integrity": "sha512-gRpauEU2KRrCox5Z296aeVHR4jQ98BCnu0IO332D/xpHNOsIH/bgSRk9k6GbKIbBw8vFeN6ctuu6tV8WOyVfYQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/transform": "30.3.0",
+ "@types/babel__core": "^7.20.5",
+ "babel-plugin-istanbul": "^7.0.1",
+ "babel-preset-jest": "30.3.0",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.11.0 || ^8.0.0-0"
+ }
+ },
+ "node_modules/babel-plugin-istanbul": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz",
+ "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "workspaces": [
+ "test/babel-8"
+ ],
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-instrument": "^6.0.2",
+ "test-exclude": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/babel-plugin-jest-hoist": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.3.0.tgz",
+ "integrity": "sha512-+TRkByhsws6sfPjVaitzadk1I0F5sPvOVUH5tyTSzhePpsGIVrdeunHSw/C36QeocS95OOk8lunc4rlu5Anwsg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/babel__core": "^7.20.5"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/babel-preset-current-node-syntax": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz",
+ "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==",
+ "dev": true,
+ "license": "MIT",
+ "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"
+ }
+ },
+ "node_modules/babel-preset-jest": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.3.0.tgz",
+ "integrity": "sha512-6ZcUbWHC+dMz2vfzdNwi87Z1gQsLNK2uLuK1Q89R11xdvejcivlYYwDlEv0FHX3VwEXpbBQ9uufB/MUNpZGfhQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "babel-plugin-jest-hoist": "30.3.0",
+ "babel-preset-current-node-syntax": "^1.2.0"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.11.0 || ^8.0.0-beta.1"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/baseline-browser-mapping": {
+ "version": "2.10.10",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.10.tgz",
+ "integrity": "sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "baseline-browser-mapping": "dist/cli.cjs"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.28.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
+ "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "baseline-browser-mapping": "^2.9.0",
+ "caniuse-lite": "^1.0.30001759",
+ "electron-to-chromium": "^1.5.263",
+ "node-releases": "^2.0.27",
+ "update-browserslist-db": "^1.2.0"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/bser": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+ "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001781",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001781.tgz",
+ "integrity": "sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/char-regex": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
+ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ci-info": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz",
+ "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cjs-module-lexer": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz",
+ "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/collect-v8-coverage": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz",
+ "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
+ "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/dedent": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz",
+ "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "babel-plugin-macros": "^3.1.0"
+ },
+ "peerDependenciesMeta": {
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "dependencies": {
+ "object-keys": "^1.0.12"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/detect-newline": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/diff-sequences": {
+ "version": "27.0.6",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz",
+ "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==",
+ "dev": true,
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/dom-walk": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
+ "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
+ "dev": true
+ },
+ "node_modules/dotenv": {
+ "version": "8.6.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
+ "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/dotenv-safe": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/dotenv-safe/-/dotenv-safe-8.2.0.tgz",
+ "integrity": "sha512-uWwWWdUQkSs5a3mySDB22UtNwyEYi0JtEQu+vDzIqr9OjbDdC2Ip13PnSpi/fctqlYmzkxCeabiyCAOROuAIaA==",
+ "dependencies": {
+ "dotenv": "^8.2.0"
+ }
+ },
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.325",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.325.tgz",
+ "integrity": "sha512-PwfIw7WQSt3xX7yOf5OE/unLzsK9CaN2f/FvV3WjPR1Knoc1T9vePRVV4W1EM301JzzysK51K7FNKcusCr0zYA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/emittery": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/emittery?sponsor=1"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/enquirer": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
+ "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-colors": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.18.6",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz",
+ "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.2",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
+ "is-negative-zero": "^2.0.1",
+ "is-regex": "^1.1.4",
+ "is-string": "^1.0.7",
+ "object-inspect": "^1.11.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.2",
+ "string.prototype.trimend": "^1.0.4",
+ "string.prototype.trimstart": "^1.0.4",
+ "unbox-primitive": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
}
},
- "node_modules/ci-info": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz",
- "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==",
- "dev": true
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
},
- "node_modules/cjs-module-lexer": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
- "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es6-error": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
+ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
"dev": true
},
- "node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "7.32.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
+ "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
+ "dev": true,
"dependencies": {
- "string-width": "^4.2.0",
+ "@babel/code-frame": "7.12.11",
+ "@eslint/eslintrc": "^0.4.3",
+ "@humanwhocodes/config-array": "^0.5.0",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "enquirer": "^2.3.5",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^2.1.0",
+ "eslint-visitor-keys": "^2.0.0",
+ "espree": "^7.3.1",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^5.1.2",
+ "globals": "^13.6.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^3.13.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "progress": "^2.0.0",
+ "regexpp": "^3.1.0",
+ "semver": "^7.2.1",
"strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
+ "strip-json-comments": "^3.1.0",
+ "table": "^6.0.9",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "node_modules/co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "node_modules/eslint-config-prettier": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz",
+ "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==",
"dev": true,
- "engines": {
- "iojs": ">= 1.0.0",
- "node": ">= 0.12.0"
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
}
},
- "node_modules/collect-v8-coverage": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
- "dev": true
+ "node_modules/eslint-config-standard": {
+ "version": "16.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz",
+ "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "peerDependencies": {
+ "eslint": "^7.12.1",
+ "eslint-plugin-import": "^2.22.1",
+ "eslint-plugin-node": "^11.1.0",
+ "eslint-plugin-promise": "^4.2.1 || ^5.0.0"
+ }
},
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
+ "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
+ "dev": true,
"dependencies": {
- "color-name": "~1.1.4"
+ "debug": "^3.2.7",
+ "resolve": "^1.20.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz",
+ "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.7",
+ "pkg-dir": "^2.0.0"
},
"engines": {
- "node": ">=7.0.0"
+ "node": ">=4"
}
},
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
},
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "node_modules/eslint-plugin-es": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
+ "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
"dev": true,
"dependencies": {
- "delayed-stream": "~1.0.0"
+ "eslint-utils": "^2.0.0",
+ "regexpp": "^3.0.0"
},
"engines": {
- "node": ">= 0.8"
+ "node": ">=8.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=4.19.1"
}
},
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "node_modules/convert-source-map": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
- "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
+ "node_modules/eslint-plugin-import": {
+ "version": "2.24.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz",
+ "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==",
"dev": true,
"dependencies": {
- "safe-buffer": "~5.1.1"
+ "array-includes": "^3.1.3",
+ "array.prototype.flat": "^1.2.4",
+ "debug": "^2.6.9",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-module-utils": "^2.6.2",
+ "find-up": "^2.0.0",
+ "has": "^1.0.3",
+ "is-core-module": "^2.6.0",
+ "minimatch": "^3.0.4",
+ "object.values": "^1.1.4",
+ "pkg-up": "^2.0.0",
+ "read-pkg-up": "^3.0.0",
+ "resolve": "^1.20.0",
+ "tsconfig-paths": "^3.11.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0"
}
},
- "node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
+ "ms": "2.0.0"
}
},
- "node_modules/cssom": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
- "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
- "dev": true
- },
- "node_modules/cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
"dev": true,
"dependencies": {
- "cssom": "~0.3.6"
+ "esutils": "^2.0.2"
},
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
- "node_modules/cssstyle/node_modules/cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
+ "node_modules/eslint-plugin-import/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
- "node_modules/data-urls": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
- "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
+ "node_modules/eslint-plugin-jest": {
+ "version": "24.5.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.5.2.tgz",
+ "integrity": "sha512-lrI3sGAyZi513RRmP08sIW241Ti/zMnn/6wbE4ZBhb3M2pJ9ztaZMnSKSKKBUfotVdwqU8W1KtD8ao2/FR8DIg==",
"dev": true,
"dependencies": {
- "abab": "^2.0.3",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0"
+ "@typescript-eslint/experimental-utils": "^4.0.1"
},
"engines": {
"node": ">=10"
- }
- },
- "node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
},
- "engines": {
- "node": ">=6.0"
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": ">= 4",
+ "eslint": ">=5"
},
"peerDependenciesMeta": {
- "supports-color": {
+ "@typescript-eslint/eslint-plugin": {
"optional": true
}
}
},
- "node_modules/decimal.js": {
- "version": "10.3.1",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
- "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
- "dev": true
- },
- "node_modules/dedent": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
- "dev": true
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
- "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "node_modules/deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "node_modules/eslint-plugin-node": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
+ "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==",
"dev": true,
"dependencies": {
- "object-keys": "^1.0.12"
+ "eslint-plugin-es": "^3.0.0",
+ "eslint-utils": "^2.0.0",
+ "ignore": "^5.1.1",
+ "minimatch": "^3.0.4",
+ "resolve": "^1.10.1",
+ "semver": "^6.1.0"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">=8.10.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=5.16.0"
}
},
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "node_modules/eslint-plugin-node/node_modules/ignore": {
+ "version": "5.1.8",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
+ "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
"dev": true,
"engines": {
- "node": ">=0.4.0"
+ "node": ">= 4"
}
},
- "node_modules/detect-newline": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
- "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+ "node_modules/eslint-plugin-node/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true,
- "engines": {
- "node": ">=8"
+ "bin": {
+ "semver": "bin/semver.js"
}
},
- "node_modules/diff-sequences": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz",
- "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==",
+ "node_modules/eslint-plugin-promise": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.1.0.tgz",
+ "integrity": "sha512-NGmI6BH5L12pl7ScQHbg7tvtk4wPxxj8yPHH47NvSmMtFneC077PSeY3huFj06ZWZvtbfxSPt3RuOQD5XcR4ng==",
"dev": true,
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "dependencies": {
- "path-type": "^4.0.0"
+ "node": "^10.12.0 || >=12.0.0"
},
- "engines": {
- "node": ">=8"
+ "peerDependencies": {
+ "eslint": "^7.0.0"
}
},
- "node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
"dependencies": {
- "esutils": "^2.0.2"
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
},
"engines": {
- "node": ">=6.0.0"
+ "node": ">=8.0.0"
}
},
- "node_modules/dom-walk": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
- "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
- },
- "node_modules/domexception": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
- "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
+ "node_modules/eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
"dev": true,
"dependencies": {
- "webidl-conversions": "^5.0.0"
+ "eslint-visitor-keys": "^1.1.0"
},
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/domexception/node_modules/webidl-conversions": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
- "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dotenv": {
- "version": "8.6.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
- "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/dotenv-safe": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/dotenv-safe/-/dotenv-safe-8.2.0.tgz",
- "integrity": "sha512-uWwWWdUQkSs5a3mySDB22UtNwyEYi0JtEQu+vDzIqr9OjbDdC2Ip13PnSpi/fctqlYmzkxCeabiyCAOROuAIaA==",
- "dependencies": {
- "dotenv": "^8.2.0"
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
}
},
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true,
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
"engines": {
- "node": ">= 0.4"
+ "node": ">=4"
}
},
- "node_modules/electron-to-chromium": {
- "version": "1.3.853",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.853.tgz",
- "integrity": "sha512-W4U8n+U8I5/SUaFcqZgbKRmYZwcyEIQVBDf+j5QQK6xChjXnQD+wj248eGR9X4u+dDmDR//8vIfbu4PrdBBIoQ==",
- "dev": true
- },
- "node_modules/emittery": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz",
- "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==",
+ "node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
"dev": true,
"engines": {
"node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/emittery?sponsor=1"
}
},
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+ "node_modules/espree": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
+ "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
"dev": true,
"dependencies": {
- "ansi-colors": "^4.1.1"
+ "acorn": "^7.4.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^1.3.0"
},
"engines": {
- "node": ">=8.6"
+ "node": "^10.12.0 || >=12.0.0"
}
},
- "node_modules/error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "node_modules/espree/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
"dev": true,
- "dependencies": {
- "is-arrayish": "^0.2.1"
+ "engines": {
+ "node": ">=4"
}
},
- "node_modules/es-abstract": {
- "version": "1.18.6",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz",
- "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.1.1",
- "get-symbol-description": "^1.0.0",
- "has": "^1.0.3",
- "has-symbols": "^1.0.2",
- "internal-slot": "^1.0.3",
- "is-callable": "^1.2.4",
- "is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.4",
- "is-string": "^1.0.7",
- "object-inspect": "^1.11.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.2",
- "string.prototype.trimend": "^1.0.4",
- "string.prototype.trimstart": "^1.0.4",
- "unbox-primitive": "^1.0.1"
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
},
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=4"
}
},
- "node_modules/es-define-property": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "node_modules/esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
"dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
"engines": {
- "node": ">= 0.4"
+ "node": ">=0.10"
}
},
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "node_modules/esquery/node_modules/estraverse": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+ "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
"dev": true,
"engines": {
- "node": ">= 0.4"
+ "node": ">=4.0"
}
},
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
"dependencies": {
- "es-errors": "^1.3.0"
+ "estraverse": "^5.2.0"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">=4.0"
}
},
- "node_modules/es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+ "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
"dev": true,
- "dependencies": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
"engines": {
- "node": ">= 0.4"
+ "node": ">=4.0"
}
},
- "node_modules/es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">=10"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "node_modules/es6-error": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
- "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
- "dev": true
+ "node_modules/exit-x": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz",
+ "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
},
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "node_modules/expect": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-30.3.0.tgz",
+ "integrity": "sha512-1zQrciTiQfRdo7qJM1uG4navm8DayFa2TgCSRlzUyNkhcJ6XUZF3hjnpkyr3VhAqPH7i/9GkG7Tv5abz6fqz0Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/expect-utils": "30.3.0",
+ "@jest/get-type": "30.1.0",
+ "jest-matcher-utils": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-mock": "30.3.0",
+ "jest-util": "30.3.0"
+ },
"engines": {
- "node": ">=6"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "node_modules/expect/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/escodegen": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
- "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
+ "node_modules/expect/node_modules/jest-diff": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.3.0.tgz",
+ "integrity": "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1"
- },
- "bin": {
- "escodegen": "bin/escodegen.js",
- "esgenerate": "bin/esgenerate.js"
+ "@jest/diff-sequences": "30.3.0",
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "pretty-format": "30.3.0"
},
"engines": {
- "node": ">=6.0"
- },
- "optionalDependencies": {
- "source-map": "~0.6.1"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/escodegen/node_modules/estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "node_modules/expect/node_modules/jest-matcher-utils": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.3.0.tgz",
+ "integrity": "sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "jest-diff": "30.3.0",
+ "pretty-format": "30.3.0"
+ },
"engines": {
- "node": ">=4.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/escodegen/node_modules/levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "node_modules/expect/node_modules/pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
},
"engines": {
- "node": ">= 0.8.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/escodegen/node_modules/optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "node_modules/expect/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
+ "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
"dev": true,
"dependencies": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
},
"engines": {
- "node": ">= 0.8.0"
+ "node": ">=8"
}
},
- "node_modules/escodegen/node_modules/prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
"dev": true,
- "engines": {
- "node": ">= 0.8.0"
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fb-watchman": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "bser": "2.1.1"
}
},
- "node_modules/escodegen/node_modules/type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
"dev": true,
"dependencies": {
- "prelude-ls": "~1.1.2"
+ "flat-cache": "^3.0.4"
},
"engines": {
- "node": ">= 0.8.0"
+ "node": "^10.12.0 || >=12.0.0"
}
},
- "node_modules/eslint": {
- "version": "7.32.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
- "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "7.12.11",
- "@eslint/eslintrc": "^0.4.3",
- "@humanwhocodes/config-array": "^0.5.0",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.0.1",
- "doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^2.0.0",
- "espree": "^7.3.1",
- "esquery": "^1.4.0",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.1.2",
- "globals": "^13.6.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.0.4",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "progress": "^2.0.0",
- "regexpp": "^3.1.0",
- "semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
- "strip-json-comments": "^3.1.0",
- "table": "^6.0.9",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^2.0.0"
},
- "bin": {
- "eslint": "bin/eslint.js"
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
},
"engines": {
"node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
+ "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
+ "dev": true
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
},
"funding": {
- "url": "https://opencollective.com/eslint"
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/eslint-config-prettier": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz",
- "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==",
+ "node_modules/foreground-child/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
- "bin": {
- "eslint-config-prettier": "bin/cli.js"
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
},
- "peerDependencies": {
- "eslint": ">=7.0.0"
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/eslint-config-standard": {
- "version": "16.0.3",
- "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz",
- "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==",
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
],
- "peerDependencies": {
- "eslint": "^7.12.1",
- "eslint-plugin-import": "^2.22.1",
- "eslint-plugin-node": "^11.1.0",
- "eslint-plugin-promise": "^4.2.1 || ^5.0.0"
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
- "node_modules/eslint-import-resolver-node": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
- "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true,
- "dependencies": {
- "debug": "^3.2.7",
- "resolve": "^1.20.0"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/eslint-import-resolver-node/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "node_modules/functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true,
- "dependencies": {
- "ms": "^2.1.1"
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "node_modules/eslint-module-utils": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz",
- "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==",
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"dev": true,
"dependencies": {
- "debug": "^3.2.7",
- "pkg-dir": "^2.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",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
},
"engines": {
- "node": ">=4"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/eslint-module-utils/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "node_modules/get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
"dev": true,
- "dependencies": {
- "ms": "^2.1.1"
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.0.0"
}
},
- "node_modules/eslint-plugin-es": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
- "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"dev": true,
"dependencies": {
- "eslint-utils": "^2.0.0",
- "regexpp": "^3.0.0"
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
},
"engines": {
- "node": ">=8.10.0"
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
},
"funding": {
- "url": "https://github.com/sponsors/mysticatea"
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
},
- "peerDependencies": {
- "eslint": ">=4.19.1"
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/eslint-plugin-import": {
- "version": "2.24.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz",
- "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==",
+ "node_modules/glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
"dev": true,
"dependencies": {
- "array-includes": "^3.1.3",
- "array.prototype.flat": "^1.2.4",
- "debug": "^2.6.9",
- "doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.6",
- "eslint-module-utils": "^2.6.2",
- "find-up": "^2.0.0",
- "has": "^1.0.3",
- "is-core-module": "^2.6.0",
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
"minimatch": "^3.0.4",
- "object.values": "^1.1.4",
- "pkg-up": "^2.0.0",
- "read-pkg-up": "^3.0.0",
- "resolve": "^1.20.0",
- "tsconfig-paths": "^3.11.0"
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
},
"engines": {
- "node": ">=4"
+ "node": "*"
},
- "peerDependencies": {
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0"
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/eslint-plugin-import/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"dependencies": {
- "ms": "2.0.0"
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
- "node_modules/eslint-plugin-import/node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "node_modules/global": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
+ "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
"dev": true,
"dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
+ "min-document": "^2.19.0",
+ "process": "^0.11.10"
}
},
- "node_modules/eslint-plugin-import/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "node_modules/eslint-plugin-jest": {
- "version": "24.5.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.5.2.tgz",
- "integrity": "sha512-lrI3sGAyZi513RRmP08sIW241Ti/zMnn/6wbE4ZBhb3M2pJ9ztaZMnSKSKKBUfotVdwqU8W1KtD8ao2/FR8DIg==",
+ "node_modules/globals": {
+ "version": "13.11.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
+ "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
"dev": true,
"dependencies": {
- "@typescript-eslint/experimental-utils": "^4.0.1"
+ "type-fest": "^0.20.2"
},
"engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "@typescript-eslint/eslint-plugin": ">= 4",
- "eslint": ">=5"
+ "node": ">=8"
},
- "peerDependenciesMeta": {
- "@typescript-eslint/eslint-plugin": {
- "optional": true
- }
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint-plugin-node": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
- "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==",
+ "node_modules/globby": {
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
+ "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
"dev": true,
"dependencies": {
- "eslint-plugin-es": "^3.0.0",
- "eslint-utils": "^2.0.0",
- "ignore": "^5.1.1",
- "minimatch": "^3.0.4",
- "resolve": "^1.10.1",
- "semver": "^6.1.0"
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.1.1",
+ "ignore": "^5.1.4",
+ "merge2": "^1.3.0",
+ "slash": "^3.0.0"
},
"engines": {
- "node": ">=8.10.0"
+ "node": ">=10"
},
- "peerDependencies": {
- "eslint": ">=5.16.0"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/eslint-plugin-node/node_modules/ignore": {
+ "node_modules/globby/node_modules/ignore": {
"version": "5.1.8",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
"integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
@@ -2907,438 +4199,413 @@
"node": ">= 4"
}
},
- "node_modules/eslint-plugin-node/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-plugin-promise": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.1.0.tgz",
- "integrity": "sha512-NGmI6BH5L12pl7ScQHbg7tvtk4wPxxj8yPHH47NvSmMtFneC077PSeY3huFj06ZWZvtbfxSPt3RuOQD5XcR4ng==",
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"dev": true,
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": ">= 0.4"
},
- "peerDependencies": {
- "eslint": "^7.0.0"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
+ "function-bind": "^1.1.1"
},
"engines": {
- "node": ">=8.0.0"
+ "node": ">= 0.4.0"
}
},
- "node_modules/eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "node_modules/has-bigints": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
+ "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
"dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^1.1.0"
- },
- "engines": {
- "node": ">=6"
- },
"funding": {
- "url": "https://github.com/sponsors/mysticatea"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
- "node_modules/eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/espree": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
- "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"dev": true,
"dependencies": {
- "acorn": "^7.4.0",
- "acorn-jsx": "^5.3.1",
- "eslint-visitor-keys": "^1.3.0"
+ "has-symbols": "^1.0.3"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/espree/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
"engines": {
- "node": ">=4"
+ "node": ">= 0.4"
}
},
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true
+ },
+ "node_modules/html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true,
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
+ "license": "MIT"
},
- "node_modules/esquery": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
- "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"dev": true,
- "dependencies": {
- "estraverse": "^5.1.0"
- },
+ "license": "Apache-2.0",
"engines": {
- "node": ">=0.10"
+ "node": ">=10.17.0"
}
},
- "node_modules/esquery/node_modules/estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "node_modules/ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
"dev": true,
"engines": {
- "node": ">=4.0"
+ "node": ">= 4"
}
},
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
"dev": true,
"dependencies": {
- "estraverse": "^5.2.0"
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
},
"engines": {
- "node": ">=4.0"
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/esrecurse/node_modules/estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "node_modules/import-local": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
"engines": {
- "node": ">=4.0"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "node_modules/import-local/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
"engines": {
- "node": ">=4.0"
+ "node": ">=8"
}
},
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "node_modules/import-local/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
}
},
- "node_modules/execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+ "node_modules/import-local/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
+ "license": "MIT",
"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"
+ "p-try": "^2.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=6"
},
"funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/exit": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "node_modules/import-local/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
"engines": {
- "node": ">= 0.8.0"
+ "node": ">=8"
}
},
- "node_modules/expect": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.4.tgz",
- "integrity": "sha512-gOtuonQ8TCnbNNCSw2fhVzRf8EFYDII4nB5NmG4IEV0rbUnW1I5zXvoTntU4iicB/Uh0oZr20NGlOLdJiwsOZA==",
+ "node_modules/import-local/node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true,
- "dependencies": {
- "@jest/types": "^27.2.4",
- "ansi-styles": "^5.0.0",
- "jest-get-type": "^27.0.6",
- "jest-matcher-utils": "^27.2.4",
- "jest-message-util": "^27.2.4",
- "jest-regex-util": "^27.0.6"
- },
+ "license": "MIT",
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=6"
}
},
- "node_modules/expect/node_modules/ansi-styles": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
- "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "node_modules/import-local/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "node": ">=8"
}
},
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "node_modules/fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
+ "node_modules/import-local/node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
+ "find-up": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "node_modules/fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true,
- "dependencies": {
- "reusify": "^1.0.4"
+ "engines": {
+ "node": ">=0.8.19"
}
},
- "node_modules/fb-watchman": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
- "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"dependencies": {
- "bser": "2.1.1"
+ "once": "^1.3.0",
+ "wrappy": "1"
}
},
- "node_modules/file-entry-cache": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
- "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
+ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
"dev": true,
"dependencies": {
- "flat-cache": "^3.0.4"
+ "get-intrinsic": "^1.1.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
},
"engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "node": ">= 0.4"
}
},
- "node_modules/file-type": {
- "version": "16.5.4",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz",
- "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==",
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
"dependencies": {
- "readable-web-to-node-stream": "^3.0.0",
- "strtok3": "^6.2.4",
- "token-types": "^4.1.1"
- },
- "engines": {
- "node": ">=10"
+ "has-bigints": "^1.0.1"
},
"funding": {
- "url": "https://github.com/sindresorhus/file-type?sponsor=1"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
"dev": true,
"dependencies": {
- "to-regex-range": "^5.0.1"
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "node_modules/is-callable": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
+ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
"dev": true,
- "dependencies": {
- "locate-path": "^2.0.0"
- },
"engines": {
- "node": ">=4"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/flat-cache": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
- "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "node_modules/is-core-module": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
+ "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
"dev": true,
"dependencies": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
+ "has": "^1.0.3"
},
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/flatted": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
- "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
- "dev": true
- },
- "node_modules/form-data": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz",
- "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==",
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
"dev": true,
"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"
+ "has-tostringtag": "^1.0.0"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true,
"engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ "node": ">=0.10.0"
}
},
- "node_modules/function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "node_modules/is-function": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
+ "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==",
"dev": true
},
- "node_modules/gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "node_modules/is-generator-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=6.9.0"
+ "node": ">=6"
}
},
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "node_modules/is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
"engines": {
- "node": "6.* || 8.* || >= 10.*"
+ "node": ">=0.10.0"
}
},
- "node_modules/get-intrinsic": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
- "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "node_modules/is-negative-zero": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
+ "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
"dev": true,
- "dependencies": {
- "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",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
- },
"engines": {
"node": ">= 0.4"
},
@@ -3346,48 +4613,38 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/get-package-type": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"engines": {
- "node": ">=8.0.0"
+ "node": ">=0.12.0"
}
},
- "node_modules/get-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
- "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "node_modules/is-number-object": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
+ "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
"dev": true,
"dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
+ "has-tostringtag": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
- }
- },
- "node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true,
- "engines": {
- "node": ">=10"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
+ "has-tostringtag": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -3396,1357 +4653,1549 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
+ "license": "MIT",
"engines": {
- "node": "*"
+ "node": ">=8"
},
"funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/global": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
- "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
- "dependencies": {
- "min-document": "^2.19.0",
- "process": "^0.11.10"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/globals": {
- "version": "13.11.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
- "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
"dev": true,
"dependencies": {
- "type-fest": "^0.20.2"
+ "has-tostringtag": "^1.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/globby": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
- "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
"dev": true,
"dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
- "slash": "^3.0.0"
+ "has-symbols": "^1.0.2"
},
"engines": {
- "node": ">=10"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/globby/node_modules/ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "node_modules/istanbul-lib-coverage": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
- "node": ">= 4"
+ "node": ">=8"
}
},
- "node_modules/gopd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "node_modules/istanbul-lib-instrument": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
"dev": true,
- "engines": {
- "node": ">= 0.4"
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^7.5.4"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "engines": {
+ "node": ">=10"
}
},
- "node_modules/graceful-fs": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
- "dev": true
- },
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "node_modules/istanbul-lib-report": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
- "function-bind": "^1.1.1"
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^4.0.0",
+ "supports-color": "^7.1.0"
},
"engines": {
- "node": ">= 0.4.0"
+ "node": ">=10"
}
},
- "node_modules/has-bigints": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
- "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
+ "node_modules/istanbul-lib-source-maps": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz",
+ "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==",
"dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.23",
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "node_modules/istanbul-reports": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
+ "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
"dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ },
"engines": {
"node": ">=8"
}
},
- "node_modules/has-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
- "engines": {
- "node": ">= 0.4"
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
}
},
- "node_modules/has-tostringtag": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
- "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "node_modules/jest": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-30.3.0.tgz",
+ "integrity": "sha512-AkXIIFcaazymvey2i/+F94XRnM6TsVLZDhBMLsd1Sf/W0wzsvvpjeyUrCZD6HGG4SDYPgDJDBKeiJTBb10WzMg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "has-symbols": "^1.0.3"
+ "@jest/core": "30.3.0",
+ "@jest/types": "30.3.0",
+ "import-local": "^3.2.0",
+ "jest-cli": "30.3.0"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
},
"engines": {
- "node": ">= 0.4"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
}
},
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "node_modules/jest-changed-files": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.3.0.tgz",
+ "integrity": "sha512-B/7Cny6cV5At6M25EWDgf9S617lHivamL8vl6KEpJqkStauzcG4e+WPfDgMMF+H4FVH4A2PLRyvgDJan4441QA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "function-bind": "^1.1.2"
+ "execa": "^5.1.1",
+ "jest-util": "30.3.0",
+ "p-limit": "^3.1.0"
},
"engines": {
- "node": ">= 0.4"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true
- },
- "node_modules/html-encoding-sniffer": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
- "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
+ "node_modules/jest-changed-files/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "whatwg-encoding": "^1.0.5"
+ "yocto-queue": "^0.1.0"
},
"engines": {
"node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/html-escaper": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
- "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true
- },
- "node_modules/http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+ "node_modules/jest-circus": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.3.0.tgz",
+ "integrity": "sha512-PyXq5szeSfR/4f1lYqCmmQjh0vqDkURUYi9N6whnHjlRz4IUQfMcXkGLeEoiJtxtyPqgUaUUfyQlApXWBSN1RA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
+ "@jest/environment": "30.3.0",
+ "@jest/expect": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "co": "^4.6.0",
+ "dedent": "^1.6.0",
+ "is-generator-fn": "^2.1.0",
+ "jest-each": "30.3.0",
+ "jest-matcher-utils": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-runtime": "30.3.0",
+ "jest-snapshot": "30.3.0",
+ "jest-util": "30.3.0",
+ "p-limit": "^3.1.0",
+ "pretty-format": "30.3.0",
+ "pure-rand": "^7.0.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.6"
},
"engines": {
- "node": ">= 6"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
+ "node_modules/jest-circus/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "agent-base": "6",
- "debug": "4"
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": ">= 6"
- }
- },
- "node_modules/human-signals": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "dev": true,
- "engines": {
- "node": ">=10.17.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "node_modules/jest-circus/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
+ "@types/yargs-parser": "*"
}
},
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "node_modules/jest-circus/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">= 4"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "node_modules/jest-circus/node_modules/jest-diff": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.3.0.tgz",
+ "integrity": "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
+ "@jest/diff-sequences": "30.3.0",
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "pretty-format": "30.3.0"
},
"engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/import-local": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
- "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
+ "node_modules/jest-circus/node_modules/jest-matcher-utils": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.3.0.tgz",
+ "integrity": "sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- },
- "bin": {
- "import-local-fixture": "fixtures/cli.js"
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "jest-diff": "30.3.0",
+ "pretty-format": "30.3.0"
},
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/import-local/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "node_modules/jest-circus/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
+ "yocto-queue": "^0.1.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/import-local/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "node_modules/jest-circus/node_modules/pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "p-locate": "^4.1.0"
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
},
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/import-local/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "node_modules/jest-circus/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true,
+ "license": "MIT"
+ },
+ "node_modules/jest-cli": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.3.0.tgz",
+ "integrity": "sha512-l6Tqx+j1fDXJEW5bqYykDQQ7mQg+9mhWXtnj+tQZrTWYHyHoi6Be8HPumDSA+UiX2/2buEgjA58iJzdj146uCw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "p-try": "^2.0.0"
+ "@jest/core": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/types": "30.3.0",
+ "chalk": "^4.1.2",
+ "exit-x": "^0.2.2",
+ "import-local": "^3.2.0",
+ "jest-config": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0",
+ "yargs": "^17.7.2"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
},
"engines": {
- "node": ">=6"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
}
},
- "node_modules/import-local/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "node_modules/jest-cli/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "p-limit": "^2.2.0"
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/import-local/node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "node_modules/jest-cli/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
- "engines": {
- "node": ">=6"
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
}
},
- "node_modules/import-local/node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "node_modules/jest-config": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.3.0.tgz",
+ "integrity": "sha512-WPMAkMAtNDY9P/oKObtsRG/6KTrhtgPJoBTmk20uDn4Uy6/3EJnnaZJre/FMT1KVRx8cve1r7/FlMIOfRVWL4w==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.27.4",
+ "@jest/get-type": "30.1.0",
+ "@jest/pattern": "30.0.1",
+ "@jest/test-sequencer": "30.3.0",
+ "@jest/types": "30.3.0",
+ "babel-jest": "30.3.0",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "deepmerge": "^4.3.1",
+ "glob": "^10.5.0",
+ "graceful-fs": "^4.2.11",
+ "jest-circus": "30.3.0",
+ "jest-docblock": "30.2.0",
+ "jest-environment-node": "30.3.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.3.0",
+ "jest-runner": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0",
+ "parse-json": "^5.2.0",
+ "pretty-format": "30.3.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ },
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "esbuild-register": ">=3.4.0",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "esbuild-register": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
}
},
- "node_modules/import-local/node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "node_modules/jest-config/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "find-up": "^4.0.0"
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "node_modules/jest-config/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
- "engines": {
- "node": ">=0.8.19"
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
}
},
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "node_modules/jest-config/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "node_modules/internal-slot": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
- "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
+ "node_modules/jest-config/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "get-intrinsic": "^1.1.0",
- "has": "^1.0.3",
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
+ "balanced-match": "^1.0.0"
}
},
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "node_modules/is-bigint": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
- "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "node_modules/jest-config/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "has-bigints": "^1.0.1"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/is-boolean-object": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
- "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "node_modules/jest-config/node_modules/minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
+ "brace-expansion": "^2.0.2"
},
"engines": {
- "node": ">= 0.4"
+ "node": ">=16 || 14 >=14.17"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/is-callable": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
- "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
+ "node_modules/jest-config/node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
"engines": {
- "node": ">= 0.4"
+ "node": ">=8"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/is-ci": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz",
- "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==",
+ "node_modules/jest-config/node_modules/pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "ci-info": "^3.1.1"
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
},
- "bin": {
- "is-ci": "bin.js"
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/is-core-module": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
- "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
+ "node_modules/jest-config/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/jest-diff": {
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.4.tgz",
+ "integrity": "sha512-bLAVlDSCR3gqUPGv+4nzVpEXGsHh98HjUL7Vb2hVyyuBDoQmja8eJb0imUABsuxBeUVmf47taJSAd9nDrwWKEg==",
"dev": true,
"dependencies": {
- "has": "^1.0.3"
+ "chalk": "^4.0.0",
+ "diff-sequences": "^27.0.6",
+ "jest-get-type": "^27.0.6",
+ "pretty-format": "^27.2.4"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
- "node_modules/is-date-object": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
- "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "node_modules/jest-docblock": {
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz",
+ "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "has-tostringtag": "^1.0.0"
+ "detect-newline": "^3.1.0"
},
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "node_modules/jest-each": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.3.0.tgz",
+ "integrity": "sha512-V8eMndg/aZ+3LnCJgSm13IxS5XSBM22QSZc9BtPK8Dek6pm+hfUNfwBdvsB3d342bo1q7wnSkC38zjX259qZNA==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.3.0",
+ "chalk": "^4.1.2",
+ "jest-util": "30.3.0",
+ "pretty-format": "30.3.0"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "node_modules/jest-each/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/is-function": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
- "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="
+ "node_modules/jest-each/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
},
- "node_modules/is-generator-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
- "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
+ "node_modules/jest-each/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=6"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "node_modules/jest-each/node_modules/pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-extglob": "^2.1.1"
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/is-negative-zero": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
- "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
+ "node_modules/jest-each/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "license": "MIT"
},
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "node_modules/jest-environment-node": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.3.0.tgz",
+ "integrity": "sha512-4i6HItw/JSiJVsC5q0hnKIe/hbYfZLVG9YJ/0pU9Hz2n/9qZe3Rhn5s5CUZA5ORZlcdT/vmAXRMyONXJwPrmYQ==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/environment": "30.3.0",
+ "@jest/fake-timers": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "jest-mock": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0"
+ },
"engines": {
- "node": ">=0.12.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/is-number-object": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
- "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
+ "node_modules/jest-environment-node/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "has-tostringtag": "^1.0.0"
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/is-potential-custom-element-name": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
- "dev": true
+ "node_modules/jest-environment-node/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
},
- "node_modules/is-regex": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
- "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "node_modules/jest-get-type": {
+ "version": "27.0.6",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
+ "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
+ "dev": true,
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/jest-haste-map": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.3.0.tgz",
+ "integrity": "sha512-mMi2oqG4KRU0R9QEtscl87JzMXfUhbKaFqOxmjb2CKcbHcUGFrJCBWHmnTiUqi6JcnzoBlO4rWfpdl2k/RfLCA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "anymatch": "^3.1.3",
+ "fb-watchman": "^2.0.2",
+ "graceful-fs": "^4.2.11",
+ "jest-regex-util": "30.0.1",
+ "jest-util": "30.3.0",
+ "jest-worker": "30.3.0",
+ "picomatch": "^4.0.3",
+ "walker": "^1.0.8"
},
"engines": {
- "node": ">= 0.4"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "optionalDependencies": {
+ "fsevents": "^2.3.3"
}
},
- "node_modules/is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "node_modules/jest-haste-map/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
- "engines": {
- "node": ">=8"
+ "license": "MIT",
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/is-string": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
- "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "node_modules/jest-haste-map/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "has-tostringtag": "^1.0.0"
- },
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/jest-haste-map/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">= 0.4"
+ "node": ">=12"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/is-symbol": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
- "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "node_modules/jest-leak-detector": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.3.0.tgz",
+ "integrity": "sha512-cuKmUUGIjfXZAiGJ7TbEMx0bcqNdPPI6P1V+7aF+m/FUJqFDxkFR4JqkTu8ZOiU5AaX/x0hZ20KaaIPXQzbMGQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "has-symbols": "^1.0.2"
+ "@jest/get-type": "30.1.0",
+ "pretty-format": "30.3.0"
},
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "node_modules/istanbul-lib-coverage": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.1.tgz",
- "integrity": "sha512-GvCYYTxaCPqwMjobtVcVKvSHtAGe48MNhGjpK8LtVF8K0ISX7hCKl85LgtuaSneWVyQmaGcW3iXVV3GaZSLpmQ==",
+ "node_modules/jest-leak-detector/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+ "node_modules/jest-leak-detector/node_modules/pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/core": "^7.7.5",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
- "semver": "^6.3.0"
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
},
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/istanbul-lib-instrument/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "node_modules/jest-leak-detector/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true,
- "bin": {
- "semver": "bin/semver.js"
+ "license": "MIT"
+ },
+ "node_modules/jest-matcher-utils": {
+ "version": "27.2.4",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.4.tgz",
+ "integrity": "sha512-nQeLfFAIPPkyhkDfifAPfP/U5wm1x0fLtAzqXZSSKckXDNuk2aaOfQiDYv1Mgf5GY6yOsxfUnvNm3dDjXM+BXw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "jest-diff": "^27.2.4",
+ "jest-get-type": "^27.0.6",
+ "pretty-format": "^27.2.4"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
- "node_modules/istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "node_modules/jest-message-util": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.3.0.tgz",
+ "integrity": "sha512-Z/j4Bo+4ySJ+JPJN3b2Qbl9hDq3VrXmnjjGEWD/x0BCXeOXPTV1iZYYzl2X8c1MaCOL+ewMyNBcm88sboE6YWw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
- "supports-color": "^7.1.0"
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.3.0",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.3",
+ "pretty-format": "30.3.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.6"
},
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/istanbul-lib-source-maps": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
- "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
+ "node_modules/jest-message-util/node_modules/@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
},
"engines": {
- "node": ">=8"
+ "node": ">=6.9.0"
}
},
- "node_modules/istanbul-reports": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
- "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
+ "node_modules/jest-message-util/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": ">=8"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.4.tgz",
- "integrity": "sha512-h4uqb1EQLfPulWyUFFWv9e9Nn8sCqsJ/j3wk/KCY0p4s4s0ICCfP3iMf6hRf5hEhsDyvyrCgKiZXma63gMz16A==",
+ "node_modules/jest-message-util/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/core": "^27.2.4",
- "import-local": "^3.0.2",
- "jest-cli": "^27.2.4"
- },
- "bin": {
- "jest": "bin/jest.js"
- },
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/jest-message-util/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=10"
},
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-message-util/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
},
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/jest-changed-files": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.2.4.tgz",
- "integrity": "sha512-eeO1C1u4ex7pdTroYXezr+rbr957myyVoKGjcY4R1TJi3A+9v+4fu1Iv9J4eLq1bgFyT3O3iRWU9lZsEE7J72Q==",
+ "node_modules/jest-message-util/node_modules/pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/types": "^27.2.4",
- "execa": "^5.0.0",
- "throat": "^6.0.1"
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-circus": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.4.tgz",
- "integrity": "sha512-TtheheTElrGjlsY9VxkzUU1qwIx05ItIusMVKnvNkMt4o/PeegLRcjq3Db2Jz0GGdBalJdbzLZBgeulZAJxJWA==",
+ "node_modules/jest-message-util/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/jest-mock": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.3.0.tgz",
+ "integrity": "sha512-OTzICK8CpE+t4ndhKrwlIdbM6Pn8j00lvmSmq5ejiO+KxukbLjgOflKWMn3KE34EZdQm5RqTuKj+5RIEniYhog==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/environment": "^27.2.4",
- "@jest/test-result": "^27.2.4",
- "@jest/types": "^27.2.4",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "dedent": "^0.7.0",
- "expect": "^27.2.4",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^27.2.4",
- "jest-matcher-utils": "^27.2.4",
- "jest-message-util": "^27.2.4",
- "jest-runtime": "^27.2.4",
- "jest-snapshot": "^27.2.4",
- "jest-util": "^27.2.4",
- "pretty-format": "^27.2.4",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3",
- "throat": "^6.0.1"
+ "jest-util": "30.3.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-cli": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.4.tgz",
- "integrity": "sha512-4kpQQkg74HYLaXo3nzwtg4PYxSLgL7puz1LXHj5Tu85KmlIpxQFjRkXlx4V47CYFFIDoyl3rHA/cXOxUWyMpNg==",
+ "node_modules/jest-mock/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/core": "^27.2.4",
- "@jest/test-result": "^27.2.4",
- "@jest/types": "^27.2.4",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "import-local": "^3.0.2",
- "jest-config": "^27.2.4",
- "jest-util": "^27.2.4",
- "jest-validate": "^27.2.4",
- "prompts": "^2.0.1",
- "yargs": "^16.2.0"
- },
- "bin": {
- "jest": "bin/jest.js"
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-cli/node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "node_modules/jest-mock/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
+ "license": "MIT",
"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"
- },
- "engines": {
- "node": ">=10"
+ "@types/yargs-parser": "*"
}
},
- "node_modules/jest-config": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.4.tgz",
- "integrity": "sha512-tWy0UxhdzqiKyp4l5Vq4HxLyD+gH5td+GCF3c22/DJ0bYAOsMo+qi2XtbJI6oYMH5JOJQs9nLW/r34nvFCehjA==",
+ "node_modules/jest-pnp-resolver": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
"dev": true,
- "dependencies": {
- "@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^27.2.4",
- "@jest/types": "^27.2.4",
- "babel-jest": "^27.2.4",
- "chalk": "^4.0.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.1",
- "graceful-fs": "^4.2.4",
- "is-ci": "^3.0.0",
- "jest-circus": "^27.2.4",
- "jest-environment-jsdom": "^27.2.4",
- "jest-environment-node": "^27.2.4",
- "jest-get-type": "^27.0.6",
- "jest-jasmine2": "^27.2.4",
- "jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.4",
- "jest-runner": "^27.2.4",
- "jest-util": "^27.2.4",
- "jest-validate": "^27.2.4",
- "micromatch": "^4.0.4",
- "pretty-format": "^27.2.4"
- },
+ "license": "MIT",
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=6"
},
"peerDependencies": {
- "ts-node": ">=9.0.0"
+ "jest-resolve": "*"
},
"peerDependenciesMeta": {
- "ts-node": {
+ "jest-resolve": {
"optional": true
}
}
},
- "node_modules/jest-diff": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.4.tgz",
- "integrity": "sha512-bLAVlDSCR3gqUPGv+4nzVpEXGsHh98HjUL7Vb2hVyyuBDoQmja8eJb0imUABsuxBeUVmf47taJSAd9nDrwWKEg==",
+ "node_modules/jest-regex-util": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz",
+ "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==",
"dev": true,
- "dependencies": {
- "chalk": "^4.0.0",
- "diff-sequences": "^27.0.6",
- "jest-get-type": "^27.0.6",
- "pretty-format": "^27.2.4"
- },
+ "license": "MIT",
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-docblock": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz",
- "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==",
+ "node_modules/jest-resolve": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.3.0.tgz",
+ "integrity": "sha512-NRtTAHQlpd15F9rUR36jqwelbrDV/dY4vzNte3S2kxCKUJRYNd5/6nTSbYiak1VX5g8IoFF23Uj5TURkUW8O5g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "detect-newline": "^3.0.0"
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.3.0",
+ "jest-pnp-resolver": "^1.2.3",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0",
+ "slash": "^3.0.0",
+ "unrs-resolver": "^1.7.11"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-each": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.4.tgz",
- "integrity": "sha512-w9XVc+0EDBUTJS4xBNJ7N2JCcWItFd006lFjz77OarAQcQ10eFDBMrfDv2GBJMKlXe9aq0HrIIF51AXcZrRJyg==",
+ "node_modules/jest-resolve-dependencies": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.3.0.tgz",
+ "integrity": "sha512-9ev8s3YN6Hsyz9LV75XUwkCVFlwPbaFn6Wp75qnI0wzAINYWY8Fb3+6y59Rwd3QaS3kKXffHXsZMziMavfz/nw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/types": "^27.2.4",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.0.6",
- "jest-util": "^27.2.4",
- "pretty-format": "^27.2.4"
+ "jest-regex-util": "30.0.1",
+ "jest-snapshot": "30.3.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-environment-jsdom": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.4.tgz",
- "integrity": "sha512-X70pTXFSypD7AIzKT1mLnDi5hP9w9mdTRcOGOmoDoBrNyNEg4rYm6d4LQWFLc9ps1VnMuDOkFSG0wjSNYGjkng==",
+ "node_modules/jest-runner": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.3.0.tgz",
+ "integrity": "sha512-gDv6C9LGKWDPLia9TSzZwf4h3kMQCqyTpq+95PODnTRDO0g9os48XIYYkS6D236vjpBir2fF63YmJFtqkS5Duw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/environment": "^27.2.4",
- "@jest/fake-timers": "^27.2.4",
- "@jest/types": "^27.2.4",
+ "@jest/console": "30.3.0",
+ "@jest/environment": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "jest-mock": "^27.2.4",
- "jest-util": "^27.2.4",
- "jsdom": "^16.6.0"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- }
- },
- "node_modules/jest-environment-node": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.4.tgz",
- "integrity": "sha512-ZbVbFSnbzTvhLOIkqh5lcLuGCCFvtG4xTXIRPK99rV2KzQT3kNg16KZwfTnLNlIiWCE8do960eToeDfcqmpSAw==",
+ "chalk": "^4.1.2",
+ "emittery": "^0.13.1",
+ "exit-x": "^0.2.2",
+ "graceful-fs": "^4.2.11",
+ "jest-docblock": "30.2.0",
+ "jest-environment-node": "30.3.0",
+ "jest-haste-map": "30.3.0",
+ "jest-leak-detector": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-resolve": "30.3.0",
+ "jest-runtime": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-watcher": "30.3.0",
+ "jest-worker": "30.3.0",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-runner/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/environment": "^27.2.4",
- "@jest/fake-timers": "^27.2.4",
- "@jest/types": "^27.2.4",
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
"@types/node": "*",
- "jest-mock": "^27.2.4",
- "jest-util": "^27.2.4"
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-get-type": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
- "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
+ "node_modules/jest-runner/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
}
},
- "node_modules/jest-haste-map": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.4.tgz",
- "integrity": "sha512-bkJ4bT00T2K+1NZXbRcyKnbJ42I6QBvoDNMTAQQDBhaGNnZreiQKUNqax0e6hLTx7E75pKDeltVu3V1HAdu+YA==",
+ "node_modules/jest-runner/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/types": "^27.2.4",
- "@types/graceful-fs": "^4.1.2",
- "@types/node": "*",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-regex-util": "^27.0.6",
- "jest-serializer": "^27.0.6",
- "jest-util": "^27.2.4",
- "jest-worker": "^27.2.4",
- "micromatch": "^4.0.4",
- "walker": "^1.0.7"
+ "yocto-queue": "^0.1.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=10"
},
- "optionalDependencies": {
- "fsevents": "^2.3.2"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/jest-jasmine2": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.4.tgz",
- "integrity": "sha512-fcffjO/xLWLVnW2ct3No4EksxM5RyPwHDYu9QU+90cC+/eSMLkFAxS55vkqsxexOO5zSsZ3foVpMQcg/amSeIQ==",
+ "node_modules/jest-runtime": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.3.0.tgz",
+ "integrity": "sha512-CgC+hIBJbuh78HEffkhNKcbXAytQViplcl8xupqeIWyKQF50kCQA8J7GeJCkjisC6hpnC9Muf8jV5RdtdFbGng==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/traverse": "^7.1.0",
- "@jest/environment": "^27.2.4",
- "@jest/source-map": "^27.0.6",
- "@jest/test-result": "^27.2.4",
- "@jest/types": "^27.2.4",
+ "@jest/environment": "30.3.0",
+ "@jest/fake-timers": "30.3.0",
+ "@jest/globals": "30.3.0",
+ "@jest/source-map": "30.0.1",
+ "@jest/test-result": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "expect": "^27.2.4",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^27.2.4",
- "jest-matcher-utils": "^27.2.4",
- "jest-message-util": "^27.2.4",
- "jest-runtime": "^27.2.4",
- "jest-snapshot": "^27.2.4",
- "jest-util": "^27.2.4",
- "pretty-format": "^27.2.4",
- "throat": "^6.0.1"
+ "chalk": "^4.1.2",
+ "cjs-module-lexer": "^2.1.0",
+ "collect-v8-coverage": "^1.0.2",
+ "glob": "^10.5.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-mock": "30.3.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.3.0",
+ "jest-snapshot": "30.3.0",
+ "jest-util": "30.3.0",
+ "slash": "^3.0.0",
+ "strip-bom": "^4.0.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-leak-detector": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.4.tgz",
- "integrity": "sha512-SrcHWbe0EHg/bw2uBjVoHacTo5xosl068x2Q0aWsjr2yYuW2XwqrSkZV4lurUop0jhv1709ymG4or+8E4sH27Q==",
+ "node_modules/jest-runtime/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "jest-get-type": "^27.0.6",
- "pretty-format": "^27.2.4"
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-matcher-utils": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.4.tgz",
- "integrity": "sha512-nQeLfFAIPPkyhkDfifAPfP/U5wm1x0fLtAzqXZSSKckXDNuk2aaOfQiDYv1Mgf5GY6yOsxfUnvNm3dDjXM+BXw==",
+ "node_modules/jest-runtime/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "chalk": "^4.0.0",
- "jest-diff": "^27.2.4",
- "jest-get-type": "^27.0.6",
- "pretty-format": "^27.2.4"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "@types/yargs-parser": "*"
}
},
- "node_modules/jest-message-util": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.4.tgz",
- "integrity": "sha512-wbKT/BNGnBVB9nzi+IoaLkXt6fbSvqUxx+IYY66YFh96J3goY33BAaNG3uPqaw/Sh/FR9YpXGVDfd5DJdbh4nA==",
+ "node_modules/jest-runtime/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.12.13",
- "@jest/types": "^27.2.4",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "micromatch": "^4.0.4",
- "pretty-format": "^27.2.4",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/jest-message-util/node_modules/@babel/code-frame": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
- "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
+ "node_modules/jest-runtime/node_modules/minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "@babel/highlight": "^7.14.5"
+ "brace-expansion": "^2.0.2"
},
"engines": {
- "node": ">=6.9.0"
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/jest-mock": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.2.4.tgz",
- "integrity": "sha512-iVRU905rutaAoUcrt5Tm1JoHHWi24YabqEGXjPJI4tAyA6wZ7mzDi3GrZ+M7ebgWBqUkZE93GAx1STk7yCMIQA==",
+ "node_modules/jest-snapshot": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.3.0.tgz",
+ "integrity": "sha512-f14c7atpb4O2DeNhwcvS810Y63wEn8O1HqK/luJ4F6M4NjvxmAKQwBUWjbExUtMxWJQ0wVgmCKymeJK6NZMnfQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/types": "^27.2.4",
- "@types/node": "*"
+ "@babel/core": "^7.27.4",
+ "@babel/generator": "^7.27.5",
+ "@babel/plugin-syntax-jsx": "^7.27.1",
+ "@babel/plugin-syntax-typescript": "^7.27.1",
+ "@babel/types": "^7.27.3",
+ "@jest/expect-utils": "30.3.0",
+ "@jest/get-type": "30.1.0",
+ "@jest/snapshot-utils": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
+ "babel-preset-current-node-syntax": "^1.2.0",
+ "chalk": "^4.1.2",
+ "expect": "30.3.0",
+ "graceful-fs": "^4.2.11",
+ "jest-diff": "30.3.0",
+ "jest-matcher-utils": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-util": "30.3.0",
+ "pretty-format": "30.3.0",
+ "semver": "^7.7.2",
+ "synckit": "^0.11.8"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-pnp-resolver": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
- "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
+ "node_modules/jest-snapshot/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/jest-snapshot/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=6"
- },
- "peerDependencies": {
- "jest-resolve": "*"
+ "node": ">=10"
},
- "peerDependenciesMeta": {
- "jest-resolve": {
- "optional": true
- }
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/jest-regex-util": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz",
- "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==",
+ "node_modules/jest-snapshot/node_modules/jest-diff": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.3.0.tgz",
+ "integrity": "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/diff-sequences": "30.3.0",
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "pretty-format": "30.3.0"
+ },
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-resolve": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.4.tgz",
- "integrity": "sha512-IsAO/3+3BZnKjI2I4f3835TBK/90dxR7Otgufn3mnrDFTByOSXclDi3G2XJsawGV4/18IMLARJ+V7Wm7t+J89Q==",
+ "node_modules/jest-snapshot/node_modules/jest-matcher-utils": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.3.0.tgz",
+ "integrity": "sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/types": "^27.2.4",
- "chalk": "^4.0.0",
- "escalade": "^3.1.1",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.4",
- "jest-pnp-resolver": "^1.2.2",
- "jest-util": "^27.2.4",
- "jest-validate": "^27.2.4",
- "resolve": "^1.20.0",
- "slash": "^3.0.0"
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "jest-diff": "30.3.0",
+ "pretty-format": "30.3.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-resolve-dependencies": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.4.tgz",
- "integrity": "sha512-i5s7Uh9B3Q6uwxLpMhNKlgBf6pcemvWaORxsW1zNF/YCY3jd5EftvnGBI+fxVwJ1CBxkVfxqCvm1lpZkbaoGmg==",
+ "node_modules/jest-snapshot/node_modules/pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/types": "^27.2.4",
- "jest-regex-util": "^27.0.6",
- "jest-snapshot": "^27.2.4"
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-runner": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.4.tgz",
- "integrity": "sha512-hIo5PPuNUyVDidZS8EetntuuJbQ+4IHWxmHgYZz9FIDbG2wcZjrP6b52uMDjAEQiHAn8yn8ynNe+TL8UuGFYKg==",
+ "node_modules/jest-snapshot/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/jest-util": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.3.0.tgz",
+ "integrity": "sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/console": "^27.2.4",
- "@jest/environment": "^27.2.4",
- "@jest/test-result": "^27.2.4",
- "@jest/transform": "^27.2.4",
- "@jest/types": "^27.2.4",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "emittery": "^0.8.1",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-docblock": "^27.0.6",
- "jest-environment-jsdom": "^27.2.4",
- "jest-environment-node": "^27.2.4",
- "jest-haste-map": "^27.2.4",
- "jest-leak-detector": "^27.2.4",
- "jest-message-util": "^27.2.4",
- "jest-resolve": "^27.2.4",
- "jest-runtime": "^27.2.4",
- "jest-util": "^27.2.4",
- "jest-worker": "^27.2.4",
- "source-map-support": "^0.5.6",
- "throat": "^6.0.1"
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.3"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-runtime": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.4.tgz",
- "integrity": "sha512-ICKzzYdjIi70P17MZsLLIgIQFCQmIjMFf+xYww3aUySiUA/QBPUTdUqo5B2eg4HOn9/KkUsV0z6GVgaqAPBJvg==",
+ "node_modules/jest-util/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/console": "^27.2.4",
- "@jest/environment": "^27.2.4",
- "@jest/fake-timers": "^27.2.4",
- "@jest/globals": "^27.2.4",
- "@jest/source-map": "^27.0.6",
- "@jest/test-result": "^27.2.4",
- "@jest/transform": "^27.2.4",
- "@jest/types": "^27.2.4",
- "@types/yargs": "^16.0.0",
- "chalk": "^4.0.0",
- "cjs-module-lexer": "^1.0.0",
- "collect-v8-coverage": "^1.0.0",
- "execa": "^5.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.4",
- "jest-message-util": "^27.2.4",
- "jest-mock": "^27.2.4",
- "jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.4",
- "jest-snapshot": "^27.2.4",
- "jest-util": "^27.2.4",
- "jest-validate": "^27.2.4",
- "slash": "^3.0.0",
- "strip-bom": "^4.0.0",
- "yargs": "^16.2.0"
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-runtime/node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "node_modules/jest-util/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
+ "license": "MIT",
"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"
- },
- "engines": {
- "node": ">=10"
+ "@types/yargs-parser": "*"
}
},
- "node_modules/jest-serializer": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz",
- "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==",
+ "node_modules/jest-util/node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
- "dependencies": {
- "@types/node": "*",
- "graceful-fs": "^4.2.4"
- },
+ "license": "MIT",
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/jest-snapshot": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.4.tgz",
- "integrity": "sha512-5DFxK31rYS8X8C6WXsFx8XxrxW3PGa6+9IrUcZdTLg1aEyXDGIeiBh4jbwvh655bg/9vTETbEj/njfZicHTZZw==",
+ "node_modules/jest-validate": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz",
+ "integrity": "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/core": "^7.7.2",
- "@babel/generator": "^7.7.2",
- "@babel/parser": "^7.7.2",
- "@babel/plugin-syntax-typescript": "^7.7.2",
- "@babel/traverse": "^7.7.2",
- "@babel/types": "^7.0.0",
- "@jest/transform": "^27.2.4",
- "@jest/types": "^27.2.4",
- "@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.2.4",
- "graceful-fs": "^4.2.4",
- "jest-diff": "^27.2.4",
- "jest-get-type": "^27.0.6",
- "jest-haste-map": "^27.2.4",
- "jest-matcher-utils": "^27.2.4",
- "jest-message-util": "^27.2.4",
- "jest-resolve": "^27.2.4",
- "jest-util": "^27.2.4",
- "natural-compare": "^1.4.0",
- "pretty-format": "^27.2.4",
- "semver": "^7.3.2"
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.3.0",
+ "camelcase": "^6.3.0",
+ "chalk": "^4.1.2",
+ "leven": "^3.1.0",
+ "pretty-format": "30.3.0"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-util": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.4.tgz",
- "integrity": "sha512-mW++4u+fSvAt3YBWm5IpbmRAceUqa2B++JlUZTiuEt2AmNYn0Yw5oay4cP17TGsMINRNPSGiJ2zNnX60g+VbFg==",
+ "node_modules/jest-validate/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/types": "^27.2.4",
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
"@types/node": "*",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "is-ci": "^3.0.0",
- "picomatch": "^2.2.3"
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
- "node_modules/jest-validate": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.4.tgz",
- "integrity": "sha512-VMtbxbkd7LHnIH7PChdDtrluCFRJ4b1YV2YJzNwwsASMWftq/HgqiqjvptBOWyWOtevgO3f14wPxkPcLlVBRog==",
+ "node_modules/jest-validate/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/types": "^27.2.4",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.0.6",
- "leven": "^3.1.0",
- "pretty-format": "^27.2.4"
- },
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/jest-validate/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-validate/node_modules/camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
},
@@ -4754,36 +6203,92 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/jest-validate/node_modules/pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/jest-watcher": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.4.tgz",
- "integrity": "sha512-LXC/0+dKxhK7cfF7reflRYlzDIaQE+fL4ynhKhzg8IMILNMuI4xcjXXfUJady7OR4/TZeMg7X8eHx8uan9vqaQ==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.3.0.tgz",
+ "integrity": "sha512-PJ1d9ThtTR8aMiBWUdcownq9mDdLXsQzJayTk4kmaBRHKvwNQn+ANveuhEBUyNI2hR1TVhvQ8D5kHubbzBHR/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/test-result": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "ansi-escapes": "^4.3.2",
+ "chalk": "^4.1.2",
+ "emittery": "^0.13.1",
+ "jest-util": "30.3.0",
+ "string-length": "^4.0.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-watcher/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/test-result": "^27.2.4",
- "@jest/types": "^27.2.4",
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
"@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "jest-util": "^27.2.4",
- "string-length": "^4.0.1"
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
},
"engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest-watcher/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
}
},
"node_modules/jest-worker": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.4.tgz",
- "integrity": "sha512-Zq9A2Pw59KkVjBBKD1i3iE2e22oSjXhUKKuAK1HGX8flGwkm6NMozyEYzKd41hXc64dbd/0eWFeEEuxqXyhM+g==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.3.0.tgz",
+ "integrity": "sha512-DrCKkaQwHexjRUFTmPzs7sHQe0TSj9nvDALKGdwmK5mW9v7j90BudWirKAJHt3QQ9Dhrg1F7DogPzhChppkJpQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@types/node": "*",
+ "@ungap/structured-clone": "^1.3.0",
+ "jest-util": "30.3.0",
"merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
+ "supports-color": "^8.1.1"
},
"engines": {
- "node": ">= 10.13.0"
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
}
},
"node_modules/jest-worker/node_modules/supports-color": {
@@ -4791,6 +6296,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -4801,6 +6307,35 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
+ "node_modules/jest/node_modules/@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ },
+ "engines": {
+ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
+ }
+ },
+ "node_modules/jest/node_modules/@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -4820,74 +6355,17 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/jsdom": {
- "version": "16.7.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
- "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
- "dev": true,
- "dependencies": {
- "abab": "^2.0.5",
- "acorn": "^8.2.4",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.4.4",
- "cssstyle": "^2.3.0",
- "data-urls": "^2.0.0",
- "decimal.js": "^10.2.1",
- "domexception": "^2.0.1",
- "escodegen": "^2.0.0",
- "form-data": "^3.0.0",
- "html-encoding-sniffer": "^2.0.1",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.0",
- "parse5": "6.0.1",
- "saxes": "^5.0.1",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^4.0.0",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^2.0.0",
- "webidl-conversions": "^6.1.0",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.5.0",
- "ws": "^7.4.6",
- "xml-name-validator": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "canvas": "^2.5.0"
- },
- "peerDependenciesMeta": {
- "canvas": {
- "optional": true
- }
- }
- },
- "node_modules/jsdom/node_modules/acorn": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
- "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
"node_modules/jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
"dev": true,
+ "license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
},
"engines": {
- "node": ">=4"
+ "node": ">=6"
}
},
"node_modules/json-parse-better-errors": {
@@ -4896,6 +6374,13 @@
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
"dev": true
},
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -4913,6 +6398,7 @@
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
+ "license": "MIT",
"bin": {
"json5": "lib/cli.js"
},
@@ -4920,20 +6406,12 @@
"node": ">=6"
}
},
- "node_modules/kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -4951,6 +6429,13 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/load-json-file": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
@@ -4988,12 +6473,6 @@
"node": ">=4"
}
},
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
"node_modules/lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
@@ -5013,48 +6492,36 @@
"dev": true
},
"node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
+ "license": "ISC"
},
"node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "semver": "^6.0.0"
+ "semver": "^7.5.3"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/make-dir/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/makeerror": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
- "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
- "tmpl": "1.0.x"
+ "tmpl": "1.0.5"
}
},
"node_modules/math-intrinsics": {
@@ -5070,7 +6537,8 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/merge2": {
"version": "1.4.1",
@@ -5098,26 +6566,16 @@
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
"engines": {
"node": ">= 0.6"
}
},
- "node_modules/mime-kind": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mime-kind/-/mime-kind-4.0.0.tgz",
- "integrity": "sha512-qQvglvSpS5mABi30beNFd+uHKtKkxD3dxAmhi2e589XKx+WfVqhg5i5P5LBcVgwwv3BiDpNMBWrHqU+JexW4aA==",
- "dependencies": {
- "file-type": "^16.5.4",
- "mime-types": "^2.1.24"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
"dependencies": {
"mime-db": "1.52.0"
},
@@ -5130,6 +6588,7 @@
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -5138,14 +6597,15 @@
"version": "2.19.1",
"resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.1.tgz",
"integrity": "sha512-8lqe85PkqQJzIcs2iD7xW/WSxcncC3/DPVbTOafKNJDIMXwGfwXS350mH4SJslomntN2iYtFBuC0yNO3CEap6g==",
+ "dev": true,
"dependencies": {
"dom-walk": "^0.1.0"
}
},
"node_modules/minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -5160,38 +6620,47 @@
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
"dev": true
},
+ "node_modules/minipass": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "node_modules/multi-part": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multi-part/-/multi-part-4.0.0.tgz",
- "integrity": "sha512-YT/CS0PAe62kT8EoQXcQj8yIcSu18HhYv0s6ShdAFsoFly3oV5QaxODnkj0u7zH0/RFyH47cdcMVpcGXliEFVA==",
- "dependencies": {
- "mime-kind": "^4.0.0",
- "multi-part-lite": "^1.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/multi-part-lite": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/multi-part-lite/-/multi-part-lite-1.0.0.tgz",
"integrity": "sha512-KxIRbBZZ45hoKX1ROD/19wJr0ql1bef1rE8Y1PCwD3PuNXV42pp7Wo8lEHYuAajoT4vfAFcd3rPjlkyEEyt1nw==",
+ "dev": true,
"engines": {
"node": ">=8.3.0"
}
},
- "node_modules/nanocolors": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.12.tgz",
- "integrity": "sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ==",
- "dev": true
- },
+ "node_modules/napi-postinstall": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz",
+ "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "napi-postinstall": "lib/cli.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/napi-postinstall"
+ }
+ },
"node_modules/natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -5201,23 +6670,16 @@
"node_modules/node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
- "dev": true
- },
- "node_modules/node-modules-regexp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
- "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
"dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
+ "license": "MIT"
},
"node_modules/node-releases": {
- "version": "1.1.76",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.76.tgz",
- "integrity": "sha512-9/IECtNr8dXNmPWmFXepT0/7o5eolGesHUa3mtr0KlgnCvnZxwh2qensKL42JJY2vQKC3nIBXetFAqR+PW1CmA==",
- "dev": true
+ "version": "2.0.36",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz",
+ "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/normalize-package-data": {
"version": "2.5.0",
@@ -5245,6 +6707,7 @@
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -5254,6 +6717,7 @@
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-key": "^3.0.0"
},
@@ -5261,12 +6725,6 @@
"node": ">=8"
}
},
- "node_modules/nwsapi": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
- "dev": true
- },
"node_modules/object-inspect": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
@@ -5334,6 +6792,7 @@
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"mimic-fn": "^2.1.0"
},
@@ -5394,6 +6853,13 @@
"node": ">=4"
}
},
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0"
+ },
"node_modules/parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -5409,7 +6875,8 @@
"node_modules/parse-headers": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz",
- "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw=="
+ "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==",
+ "dev": true
},
"node_modules/parse-json": {
"version": "4.0.0",
@@ -5424,17 +6891,6 @@
"node": ">=4"
}
},
- "node_modules/parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
- "node_modules/path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
- },
"node_modules/path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
@@ -5468,6 +6924,23 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -5477,22 +6950,17 @@
"node": ">=8"
}
},
- "node_modules/peek-readable": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
- "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"engines": {
"node": ">=8.6"
@@ -5511,13 +6979,11 @@
}
},
"node_modules/pirates": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
- "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
"dev": true,
- "dependencies": {
- "node-modules-regexp": "^1.0.0"
- },
+ "license": "MIT",
"engines": {
"node": ">= 6"
}
@@ -5598,6 +7064,7 @@
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
"integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true,
"engines": {
"node": ">= 0.6.0"
}
@@ -5611,25 +7078,6 @@
"node": ">=0.4.0"
}
},
- "node_modules/prompts": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz",
- "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==",
- "dev": true,
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "dev": true
- },
"node_modules/punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -5639,11 +7087,22 @@
"node": ">=6"
}
},
- "node_modules/querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
- "dev": true
+ "node_modules/pure-rand": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz",
+ "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/dubzzz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fast-check"
+ }
+ ],
+ "license": "MIT"
},
"node_modules/queue-microtask": {
"version": "1.2.3",
@@ -5710,34 +7169,6 @@
"node": ">=4"
}
},
- "node_modules/readable-stream": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz",
- "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/readable-web-to-node-stream": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
- "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
- "dependencies": {
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
"node_modules/regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
@@ -5767,12 +7198,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
- "dev": true
- },
"node_modules/resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@@ -5791,6 +7216,7 @@
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"resolve-from": "^5.0.0"
},
@@ -5803,6 +7229,7 @@
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -5864,38 +7291,12 @@
"queue-microtask": "^1.2.2"
}
},
- "node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "node_modules/saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "dev": true,
- "dependencies": {
- "xmlchars": "^2.2.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
@@ -5939,16 +7340,11 @@
}
},
"node_modules/signal-exit": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz",
- "integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==",
- "dev": true
- },
- "node_modules/sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/slash": {
"version": "3.0.0",
@@ -5981,15 +7377,17 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/source-map-support": {
- "version": "0.5.20",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz",
- "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==",
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
@@ -6034,10 +7432,11 @@
"dev": true
},
"node_modules/stack-utils": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz",
- "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"escape-string-regexp": "^2.0.0"
},
@@ -6050,42 +7449,17 @@
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/string-length": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
"integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"char-regex": "^1.0.2",
"strip-ansi": "^6.0.0"
@@ -6095,13 +7469,30 @@
}
},
"node_modules/string-width": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
- "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
@@ -6134,11 +7525,26 @@
}
},
"node_modules/strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "ansi-regex": "^5.0.0"
+ "ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
@@ -6149,6 +7555,7 @@
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
"integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -6158,6 +7565,7 @@
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -6174,22 +7582,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/strtok3": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz",
- "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==",
- "dependencies": {
- "@tokenizer/token": "^0.3.0",
- "peek-readable": "^4.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -6202,25 +7594,22 @@
"node": ">=8"
}
},
- "node_modules/supports-hyperlinks": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
- "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+ "node_modules/synckit": {
+ "version": "0.11.12",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz",
+ "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "has-flag": "^4.0.0",
- "supports-color": "^7.0.0"
+ "@pkgr/core": "^0.2.9"
},
"engines": {
- "node": ">=8"
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/synckit"
}
},
- "node_modules/symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true
- },
"node_modules/table": {
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz",
@@ -6260,27 +7649,12 @@
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
},
- "node_modules/terminal-link": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
- "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
- "dev": true,
- "dependencies": {
- "ansi-escapes": "^4.2.1",
- "supports-hyperlinks": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
"integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
@@ -6296,26 +7670,12 @@
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
- "node_modules/throat": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
- "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==",
- "dev": true
- },
"node_modules/tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
"integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
- "dev": true
- },
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
"dev": true,
- "engines": {
- "node": ">=4"
- }
+ "license": "BSD-3-Clause"
},
"node_modules/to-regex-range": {
"version": "5.0.1",
@@ -6329,49 +7689,6 @@
"node": ">=8.0"
}
},
- "node_modules/token-types": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz",
- "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==",
- "dependencies": {
- "@tokenizer/token": "^0.3.0",
- "ieee754": "^1.2.1"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
- "node_modules/tough-cookie": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
- "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
- "dev": true,
- "dependencies": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tr46": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
- "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/tsconfig-paths": {
"version": "3.11.0",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz",
@@ -6443,6 +7760,7 @@
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4"
}
@@ -6459,15 +7777,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "dependencies": {
- "is-typedarray": "^1.0.0"
- }
- },
"node_modules/typescript": {
"version": "4.6.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz",
@@ -6487,22 +7796,84 @@
"integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
"dev": true,
"dependencies": {
- "function-bind": "^1.1.1",
- "has-bigints": "^1.0.1",
- "has-symbols": "^1.0.2",
- "which-boxed-primitive": "^1.0.2"
+ "function-bind": "^1.1.1",
+ "has-bigints": "^1.0.1",
+ "has-symbols": "^1.0.2",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
+ },
+ "node_modules/unrs-resolver": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz",
+ "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "dependencies": {
+ "napi-postinstall": "^0.3.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unrs-resolver"
+ },
+ "optionalDependencies": {
+ "@unrs/resolver-binding-android-arm-eabi": "1.11.1",
+ "@unrs/resolver-binding-android-arm64": "1.11.1",
+ "@unrs/resolver-binding-darwin-arm64": "1.11.1",
+ "@unrs/resolver-binding-darwin-x64": "1.11.1",
+ "@unrs/resolver-binding-freebsd-x64": "1.11.1",
+ "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1",
+ "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1",
+ "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-arm64-musl": "1.11.1",
+ "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1",
+ "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-x64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-x64-musl": "1.11.1",
+ "@unrs/resolver-binding-wasm32-wasi": "1.11.1",
+ "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1",
+ "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1",
+ "@unrs/resolver-binding-win32-x64-msvc": "1.11.1"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/universalify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
- "dev": true,
- "engines": {
- "node": ">= 4.0.0"
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
}
},
"node_modules/uri-js": {
@@ -6514,26 +7885,11 @@
"punycode": "^2.1.0"
}
},
- "node_modules/url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "dev": true,
- "dependencies": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
"node_modules/url-slug": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/url-slug/-/url-slug-3.0.2.tgz",
"integrity": "sha512-puioWUGY+esk4kKW8L6fCZWb+xK1+0L/KH2miV6GEJdlCJRJ2lfRlvHkUikyEU1e1v4j1C1HBQKvuljFOxmnEA=="
},
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
- },
"node_modules/v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
@@ -6541,28 +7897,20 @@
"dev": true
},
"node_modules/v8-to-istanbul": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz",
- "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
+ "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
"@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^1.6.0",
- "source-map": "^0.7.3"
+ "convert-source-map": "^2.0.0"
},
"engines": {
"node": ">=10.12.0"
}
},
- "node_modules/v8-to-istanbul/node_modules/source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
@@ -6573,72 +7921,14 @@
"spdx-expression-parse": "^3.0.0"
}
},
- "node_modules/w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "dependencies": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
- "node_modules/w3c-xmlserializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
- "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
- "dev": true,
- "dependencies": {
- "xml-name-validator": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/walker": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
- "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
- "dev": true,
- "dependencies": {
- "makeerror": "1.0.x"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
- "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
- "dev": true,
- "engines": {
- "node": ">=10.4"
- }
- },
- "node_modules/whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
- "dev": true,
- "dependencies": {
- "iconv-lite": "0.4.24"
- }
- },
- "node_modules/whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "node_modules/whatwg-url": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
- "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "lodash": "^4.7.0",
- "tr46": "^2.1.0",
- "webidl-conversions": "^6.1.0"
- },
- "engines": {
- "node": ">=10"
+ "makeerror": "1.0.12"
}
},
"node_modules/which": {
@@ -6685,6 +7975,26 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -6704,42 +8014,37 @@
"dev": true
},
"node_modules/write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+ "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
+ "node_modules/write-file-atomic/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
+ "license": "ISC",
"engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
+ "node": ">=14"
},
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/x3-linkedlist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/x3-linkedlist/-/x3-linkedlist-1.2.0.tgz",
"integrity": "sha512-mH/YwxpYSKNa8bDNF1yOuZCMuV+K80LtDN8vcLDUAwNazCxptDNsYt+zA/EJeYiGbdtKposhKLZjErGVOR8mag==",
+ "dev": true,
"engines": {
"node": ">=10"
}
@@ -6748,6 +8053,7 @@
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz",
"integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
+ "dev": true,
"dependencies": {
"global": "~4.4.0",
"is-function": "^1.0.1",
@@ -6755,22 +8061,11 @@
"xtend": "^4.0.0"
}
},
- "node_modules/xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true
- },
- "node_modules/xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true
- },
"node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true,
"engines": {
"node": ">=0.4"
}
@@ -6784,34 +8079,50 @@
}
},
"node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/yargs": {
- "version": "17.2.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz",
- "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==",
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "license": "MIT",
"dependencies": {
- "cliui": "^7.0.2",
+ "cliui": "^8.0.1",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
- "string-width": "^4.2.0",
+ "string-width": "^4.2.3",
"y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
+ "yargs-parser": "^21.1.1"
},
"engines": {
"node": ">=12"
}
},
"node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
}
},
@@ -6826,220 +8137,155 @@
}
},
"@babel/compat-data": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz",
- "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
+ "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
"dev": true
},
"@babel/core": {
- "version": "7.15.5",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz",
- "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.15.4",
- "@babel/helper-compilation-targets": "^7.15.4",
- "@babel/helper-module-transforms": "^7.15.4",
- "@babel/helpers": "^7.15.4",
- "@babel/parser": "^7.15.5",
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4",
- "convert-source-map": "^1.7.0",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
+ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-compilation-targets": "^7.28.6",
+ "@babel/helper-module-transforms": "^7.28.6",
+ "@babel/helpers": "^7.28.6",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/traverse": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/remapping": "^2.3.5",
+ "convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
- "json5": "^2.1.2",
- "semver": "^6.3.0",
- "source-map": "^0.5.0"
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
- "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.14.5"
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
}
},
"semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true
}
}
},
"@babel/generator": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
- "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
+ "version": "7.29.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
"dev": true,
"requires": {
- "@babel/types": "^7.23.0",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
- "jsesc": "^2.5.1"
+ "@babel/parser": "^7.29.0",
+ "@babel/types": "^7.29.0",
+ "@jridgewell/gen-mapping": "^0.3.12",
+ "@jridgewell/trace-mapping": "^0.3.28",
+ "jsesc": "^3.0.2"
}
},
"@babel/helper-compilation-targets": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz",
- "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
+ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.15.0",
- "@babel/helper-validator-option": "^7.14.5",
- "browserslist": "^4.16.6",
- "semver": "^6.3.0"
+ "@babel/compat-data": "^7.28.6",
+ "@babel/helper-validator-option": "^7.27.1",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
},
"dependencies": {
+ "lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
"semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true
}
}
},
- "@babel/helper-environment-visitor": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
- "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
+ "@babel/helper-globals": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
"dev": true
},
- "@babel/helper-function-name": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
- "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.23.0"
- }
- },
- "@babel/helper-hoist-variables": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
- "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.22.5"
- }
- },
- "@babel/helper-member-expression-to-functions": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz",
- "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.15.4"
- }
- },
"@babel/helper-module-imports": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz",
- "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
+ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
"dev": true,
"requires": {
- "@babel/types": "^7.15.4"
+ "@babel/traverse": "^7.28.6",
+ "@babel/types": "^7.28.6"
}
},
"@babel/helper-module-transforms": {
- "version": "7.15.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz",
- "integrity": "sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.15.4",
- "@babel/helper-replace-supers": "^7.15.4",
- "@babel/helper-simple-access": "^7.15.4",
- "@babel/helper-split-export-declaration": "^7.15.4",
- "@babel/helper-validator-identifier": "^7.15.7",
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.6"
- }
- },
- "@babel/helper-optimise-call-expression": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz",
- "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
+ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
"dev": true,
"requires": {
- "@babel/types": "^7.15.4"
+ "@babel/helper-module-imports": "^7.28.6",
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "@babel/traverse": "^7.28.6"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz",
- "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
"dev": true
},
- "@babel/helper-replace-supers": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz",
- "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==",
- "dev": true,
- "requires": {
- "@babel/helper-member-expression-to-functions": "^7.15.4",
- "@babel/helper-optimise-call-expression": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helper-simple-access": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz",
- "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
- "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.22.5"
- }
- },
"@babel/helper-string-parser": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"dev": true
},
"@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "version": "7.28.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
"dev": true
},
"@babel/helper-validator-option": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz",
- "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
"dev": true
},
"@babel/helpers": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz",
- "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==",
+ "version": "7.29.2",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz",
+ "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==",
"dev": true,
"requires": {
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4"
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.29.0"
}
},
"@babel/highlight": {
@@ -7112,10 +8358,13 @@
}
},
"@babel/parser": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
- "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
- "dev": true
+ "version": "7.29.2",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz",
+ "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.29.0"
+ }
},
"@babel/plugin-syntax-async-generators": {
"version": "7.8.4",
@@ -7144,6 +8393,24 @@
"@babel/helper-plugin-utils": "^7.12.13"
}
},
+ "@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-import-attributes": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz",
+ "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.28.6"
+ }
+ },
"@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
@@ -7162,6 +8429,15 @@
"@babel/helper-plugin-utils": "^7.8.0"
}
},
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz",
+ "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.28.6"
+ }
+ },
"@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
@@ -7216,204 +8492,93 @@
"@babel/helper-plugin-utils": "^7.8.0"
}
},
- "@babel/plugin-syntax-top-level-await": {
+ "@babel/plugin-syntax-private-property-in-object": {
"version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
- "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.14.5"
}
},
- "@babel/plugin-syntax-typescript": {
+ "@babel/plugin-syntax-top-level-await": {
"version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz",
- "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/template": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
- "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.22.13",
- "chalk": "^2.4.2"
- }
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-typescript": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz",
+ "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.28.6"
+ }
+ },
+ "@babel/template": {
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
+ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.28.6",
+ "@babel/parser": "^7.28.6",
+ "@babel/types": "^7.28.6"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
}
}
}
},
"@babel/traverse": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
- "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.0",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.0",
- "@babel/types": "^7.23.0",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
+ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.29.0",
+ "@babel/generator": "^7.29.0",
+ "@babel/helper-globals": "^7.28.0",
+ "@babel/parser": "^7.29.0",
+ "@babel/template": "^7.28.6",
+ "@babel/types": "^7.29.0",
+ "debug": "^4.3.1"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.22.13",
- "chalk": "^2.4.2"
- }
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true
- },
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
}
}
}
},
"@babel/types": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
- "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
"dev": true,
"requires": {
- "@babel/helper-string-parser": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.20",
- "to-fast-properties": "^2.0.0"
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.28.5"
}
},
"@bcoe/v8-coverage": {
@@ -7422,6 +8587,64 @@
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
"dev": true
},
+ "@emnapi/core": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz",
+ "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@emnapi/wasi-threads": "1.2.0",
+ "tslib": "^2.4.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "@emnapi/runtime": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz",
+ "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tslib": "^2.4.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "@emnapi/wasi-threads": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz",
+ "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tslib": "^2.4.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
"@eslint/eslintrc": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
@@ -7456,6 +8679,71 @@
"integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
"dev": true
},
+ "@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "requires": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
+ "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^6.2.2"
+ }
+ },
+ "wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ }
+ }
+ }
+ },
"@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -7533,180 +8821,529 @@
"dev": true
},
"@jest/console": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.4.tgz",
- "integrity": "sha512-94znCKynPZpDpYHQ6esRJSc11AmONrVkBOBZiD7S+bSubHhrUfbS95EY5HIOxhm4PQO7cnvZkL3oJcY0oMA+Wg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.3.0.tgz",
+ "integrity": "sha512-PAwCvFJ4696XP2qZj+LAn1BWjZaJ6RjG6c7/lkMaUJnkyMS34ucuIsfqYvfskVNvUI27R/u4P1HMYFnlVXG/Ww==",
"dev": true,
"requires": {
- "@jest/types": "^27.2.4",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "jest-message-util": "^27.2.4",
- "jest-util": "^27.2.4",
+ "chalk": "^4.1.2",
+ "jest-message-util": "30.3.0",
+ "jest-util": "30.3.0",
"slash": "^3.0.0"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ }
}
},
"@jest/core": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.4.tgz",
- "integrity": "sha512-UNQLyy+rXoojNm2MGlapgzWhZD1CT1zcHZQYeiD0xE7MtJfC19Q6J5D/Lm2l7i4V97T30usKDoEtjI8vKwWcLg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.3.0.tgz",
+ "integrity": "sha512-U5mVPsBxLSO6xYbf+tgkymLx+iAhvZX43/xI1+ej2ZOPnPdkdO1CzDmFKh2mZBn2s4XZixszHeQnzp1gm/DIxw==",
"dev": true,
"requires": {
- "@jest/console": "^27.2.4",
- "@jest/reporters": "^27.2.4",
- "@jest/test-result": "^27.2.4",
- "@jest/transform": "^27.2.4",
- "@jest/types": "^27.2.4",
+ "@jest/console": "30.3.0",
+ "@jest/pattern": "30.0.1",
+ "@jest/reporters": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "emittery": "^0.8.1",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-changed-files": "^27.2.4",
- "jest-config": "^27.2.4",
- "jest-haste-map": "^27.2.4",
- "jest-message-util": "^27.2.4",
- "jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.4",
- "jest-resolve-dependencies": "^27.2.4",
- "jest-runner": "^27.2.4",
- "jest-runtime": "^27.2.4",
- "jest-snapshot": "^27.2.4",
- "jest-util": "^27.2.4",
- "jest-validate": "^27.2.4",
- "jest-watcher": "^27.2.4",
- "micromatch": "^4.0.4",
- "rimraf": "^3.0.0",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "ansi-escapes": "^4.3.2",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "exit-x": "^0.2.2",
+ "graceful-fs": "^4.2.11",
+ "jest-changed-files": "30.3.0",
+ "jest-config": "30.3.0",
+ "jest-haste-map": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.3.0",
+ "jest-resolve-dependencies": "30.3.0",
+ "jest-runner": "30.3.0",
+ "jest-runtime": "30.3.0",
+ "jest-snapshot": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0",
+ "jest-watcher": "30.3.0",
+ "pretty-format": "30.3.0",
+ "slash": "^3.0.0"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ }
+ },
+ "react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true
+ }
}
},
+ "@jest/diff-sequences": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.3.0.tgz",
+ "integrity": "sha512-cG51MVnLq1ecVUaQ3fr6YuuAOitHK1S4WUJHnsPFE/quQr33ADUx1FfrTCpMCRxvy0Yr9BThKpDjSlcTi91tMA==",
+ "dev": true
+ },
"@jest/environment": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.4.tgz",
- "integrity": "sha512-wkuui5yr3SSQW0XD0Qm3TATUbL/WE3LDEM3ulC+RCQhMf2yxhci8x7svGkZ4ivJ6Pc94oOzpZ6cdHBAMSYd1ew==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.3.0.tgz",
+ "integrity": "sha512-SlLSF4Be735yQXyh2+mctBOzNDx5s5uLv88/j8Qn1wH679PDcwy67+YdADn8NJnGjzlXtN62asGH/T4vWOkfaw==",
"dev": true,
"requires": {
- "@jest/fake-timers": "^27.2.4",
- "@jest/types": "^27.2.4",
+ "@jest/fake-timers": "30.3.0",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "jest-mock": "^27.2.4"
+ "jest-mock": "30.3.0"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ }
+ }
+ },
+ "@jest/expect": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.3.0.tgz",
+ "integrity": "sha512-76Nlh4xJxk2D/9URCn3wFi98d2hb19uWE1idLsTt2ywhvdOldbw3S570hBgn25P4ICUZ/cBjybrBex2g17IDbg==",
+ "dev": true,
+ "requires": {
+ "expect": "30.3.0",
+ "jest-snapshot": "30.3.0"
+ }
+ },
+ "@jest/expect-utils": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.3.0.tgz",
+ "integrity": "sha512-j0+W5iQQ8hBh7tHZkTQv3q2Fh/M7Je72cIsYqC4OaktgtO7v1So9UTjp6uPBHIaB6beoF/RRsCgMJKvti0wADA==",
+ "dev": true,
+ "requires": {
+ "@jest/get-type": "30.1.0"
}
},
"@jest/fake-timers": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.4.tgz",
- "integrity": "sha512-cs/TzvwWUM7kAA6Qm/890SK6JJ2pD5RfDNM3SSEom6BmdyV6OiWP1qf/pqo6ts6xwpcM36oN0wSEzcZWc6/B6w==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.3.0.tgz",
+ "integrity": "sha512-WUQDs8SOP9URStX1DzhD425CqbN/HxUYCTwVrT8sTVBfMvFqYt/s61EK5T05qnHu0po6RitXIvP9otZxYDzTGQ==",
"dev": true,
"requires": {
- "@jest/types": "^27.2.4",
- "@sinonjs/fake-timers": "^8.0.1",
+ "@jest/types": "30.3.0",
+ "@sinonjs/fake-timers": "^15.0.0",
"@types/node": "*",
- "jest-message-util": "^27.2.4",
- "jest-mock": "^27.2.4",
- "jest-util": "^27.2.4"
+ "jest-message-util": "30.3.0",
+ "jest-mock": "30.3.0",
+ "jest-util": "30.3.0"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ }
}
},
+ "@jest/get-type": {
+ "version": "30.1.0",
+ "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz",
+ "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==",
+ "dev": true
+ },
"@jest/globals": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.4.tgz",
- "integrity": "sha512-DRsRs5dh0i+fA9mGHylTU19+8fhzNJoEzrgsu+zgJoZth3x8/0juCQ8nVVdW1er4Cqifb/ET7/hACYVPD0dBEA==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.3.0.tgz",
+ "integrity": "sha512-+owLCBBdfpgL3HU+BD5etr1SvbXpSitJK0is1kiYjJxAAJggYMRQz5hSdd5pq1sSggfxPbw2ld71pt4x5wwViA==",
"dev": true,
"requires": {
- "@jest/environment": "^27.2.4",
- "@jest/types": "^27.2.4",
- "expect": "^27.2.4"
+ "@jest/environment": "30.3.0",
+ "@jest/expect": "30.3.0",
+ "@jest/types": "30.3.0",
+ "jest-mock": "30.3.0"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ }
+ }
+ },
+ "@jest/pattern": {
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz",
+ "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "jest-regex-util": "30.0.1"
}
},
"@jest/reporters": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.4.tgz",
- "integrity": "sha512-LHeSdDnDZkDnJ8kvnjcqV8P1Yv/32yL4d4XfR5gBiy3xGO0onwll1QEbvtW96fIwhx2nejug0GTaEdNDoyr3fQ==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.3.0.tgz",
+ "integrity": "sha512-a09z89S+PkQnL055bVj8+pe2Caed2PBOaczHcXCykW5ngxX9EWx/1uAwncxc/HiU0oZqfwseMjyhxgRjS49qPw==",
"dev": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^27.2.4",
- "@jest/test-result": "^27.2.4",
- "@jest/transform": "^27.2.4",
- "@jest/types": "^27.2.4",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.2",
- "graceful-fs": "^4.2.4",
+ "@jest/console": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "collect-v8-coverage": "^1.0.2",
+ "exit-x": "^0.2.2",
+ "glob": "^10.5.0",
+ "graceful-fs": "^4.2.11",
"istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^4.0.3",
+ "istanbul-lib-instrument": "^6.0.0",
"istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "jest-haste-map": "^27.2.4",
- "jest-resolve": "^27.2.4",
- "jest-util": "^27.2.4",
- "jest-worker": "^27.2.4",
+ "istanbul-lib-source-maps": "^5.0.0",
+ "istanbul-reports": "^3.1.3",
+ "jest-message-util": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-worker": "30.3.0",
"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"
+ "string-length": "^4.0.2",
+ "v8-to-istanbul": "^9.0.1"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "dev": true,
+ "requires": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ }
+ },
+ "minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.2"
+ }
+ }
+ }
+ },
+ "@jest/schemas": {
+ "version": "30.0.5",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz",
+ "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==",
+ "dev": true,
+ "requires": {
+ "@sinclair/typebox": "^0.34.0"
+ }
+ },
+ "@jest/snapshot-utils": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.3.0.tgz",
+ "integrity": "sha512-ORbRN9sf5PP82v3FXNSwmO1OTDR2vzR2YTaR+E3VkSBZ8zadQE6IqYdYEeFH1NIkeB2HIGdF02dapb6K0Mj05g==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "30.3.0",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "natural-compare": "^1.4.0"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ }
}
},
"@jest/source-map": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz",
- "integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==",
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz",
+ "integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==",
"dev": true,
"requires": {
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.4",
- "source-map": "^0.6.0"
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "callsites": "^3.1.0",
+ "graceful-fs": "^4.2.11"
}
},
"@jest/test-result": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.4.tgz",
- "integrity": "sha512-eU+PRo0+lIS01b0dTmMdVZ0TtcRSxEaYquZTRFMQz6CvsehGhx9bRzi9Zdw6VROviJyv7rstU+qAMX5pNBmnfQ==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.3.0.tgz",
+ "integrity": "sha512-e/52nJGuD74AKTSe0P4y5wFRlaXP0qmrS17rqOMHeSwm278VyNyXE3gFO/4DTGF9w+65ra3lo3VKj0LBrzmgdQ==",
"dev": true,
"requires": {
- "@jest/console": "^27.2.4",
- "@jest/types": "^27.2.4",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
+ "@jest/console": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "collect-v8-coverage": "^1.0.2"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ }
}
},
"@jest/test-sequencer": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.4.tgz",
- "integrity": "sha512-fpk5eknU3/DXE2QCCG1wv/a468+cfPo3Asu6d6yUtM9LOPh709ubZqrhuUOYfM8hXMrIpIdrv1CdCrWWabX0rQ==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.3.0.tgz",
+ "integrity": "sha512-dgbWy9b8QDlQeRZcv7LNF+/jFiiYHTKho1xirauZ7kVwY7avjFF6uTT0RqlgudB5OuIPagFdVtfFMosjVbk1eA==",
"dev": true,
"requires": {
- "@jest/test-result": "^27.2.4",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.4",
- "jest-runtime": "^27.2.4"
+ "@jest/test-result": "30.3.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.3.0",
+ "slash": "^3.0.0"
}
},
"@jest/transform": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.4.tgz",
- "integrity": "sha512-n5FlX2TH0oQGwyVDKPxdJ5nI2sO7TJBFe3u3KaAtt7TOiV4yL+Y+rSFDl+Ic5MpbiA/eqXmLAQxjnBmWgS2rEA==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.1.0",
- "@jest/types": "^27.2.4",
- "babel-plugin-istanbul": "^6.0.0",
- "chalk": "^4.0.0",
- "convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.4",
- "jest-regex-util": "^27.0.6",
- "jest-util": "^27.2.4",
- "micromatch": "^4.0.4",
- "pirates": "^4.0.1",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.3.0.tgz",
+ "integrity": "sha512-TLKY33fSLVd/lKB2YI1pH69ijyUblO/BQvCj566YvnwuzoTNr648iE0j22vRvVNk2HsPwByPxATg3MleS3gf5A==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.27.4",
+ "@jest/types": "30.3.0",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "babel-plugin-istanbul": "^7.0.1",
+ "chalk": "^4.1.2",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.3.0",
+ "jest-regex-util": "30.0.1",
+ "jest-util": "30.3.0",
+ "pirates": "^4.0.7",
"slash": "^3.0.0",
- "source-map": "^0.6.1",
- "write-file-atomic": "^3.0.0"
+ "write-file-atomic": "^5.0.1"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ }
}
},
"@jest/types": {
@@ -7723,44 +9360,59 @@
}
},
"@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
"dev": true,
"requires": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "@jridgewell/trace-mapping": "^0.3.24"
}
},
- "@jridgewell/resolve-uri": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
- "dev": true
+ "@jridgewell/remapping": {
+ "version": "2.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ }
},
- "@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true
},
"@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
"dev": true
},
"@jridgewell/trace-mapping": {
- "version": "0.3.19",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
- "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
+ "version": "0.3.31",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
"dev": true,
"requires": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "@napi-rs/wasm-runtime": {
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
+ "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@emnapi/core": "^1.4.3",
+ "@emnapi/runtime": "^1.4.3",
+ "@tybys/wasm-util": "^0.10.0"
+ }
+ },
"@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -7787,61 +9439,88 @@
"fastq": "^1.6.0"
}
},
+ "@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "optional": true
+ },
+ "@pkgr/core": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz",
+ "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==",
+ "dev": true
+ },
+ "@sinclair/typebox": {
+ "version": "0.34.48",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz",
+ "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==",
+ "dev": true
+ },
"@sinonjs/commons": {
- "version": "1.8.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
- "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"dev": true,
"requires": {
"type-detect": "4.0.8"
}
},
"@sinonjs/fake-timers": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.0.1.tgz",
- "integrity": "sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==",
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.1.1.tgz",
+ "integrity": "sha512-cO5W33JgAPbOh07tvZjUOJ7oWhtaqGHiZw+11DPbyqh2kHTBc3eF/CjJDeQ4205RLQsX6rxCuYOroFQwl7JDRw==",
"dev": true,
"requires": {
- "@sinonjs/commons": "^1.7.0"
+ "@sinonjs/commons": "^3.0.1"
}
},
- "@tokenizer/token": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
- "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
- },
- "@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "dev": true
+ "@tybys/wasm-util": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
+ "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tslib": "^2.4.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "optional": true
+ }
+ }
},
"@types/babel__core": {
- "version": "7.1.16",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz",
- "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
"requires": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0",
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
"@types/babel__generator": "*",
"@types/babel__template": "*",
"@types/babel__traverse": "*"
}
},
"@types/babel__generator": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz",
- "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==",
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
"dev": true,
"requires": {
"@babel/types": "^7.0.0"
}
},
"@types/babel__template": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
- "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
"dev": true,
"requires": {
"@babel/parser": "^7.1.0",
@@ -7849,27 +9528,18 @@
}
},
"@types/babel__traverse": {
- "version": "7.14.2",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz",
- "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.3.0"
- }
- },
- "@types/graceful-fs": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
- "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==",
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
"dev": true,
"requires": {
- "@types/node": "*"
+ "@babel/types": "^7.28.2"
}
},
"@types/istanbul-lib-coverage": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
- "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
"dev": true
},
"@types/istanbul-lib-report": {
@@ -7882,9 +9552,9 @@
}
},
"@types/istanbul-reports": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
- "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+ "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"dev": true,
"requires": {
"@types/istanbul-lib-report": "*"
@@ -7903,20 +9573,17 @@
"dev": true
},
"@types/node": {
- "version": "16.9.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz",
- "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g=="
- },
- "@types/prettier": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz",
- "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==",
- "dev": true
+ "version": "20.19.37",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz",
+ "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==",
+ "requires": {
+ "undici-types": "~6.21.0"
+ }
},
"@types/stack-utils": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
- "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
+ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
"dev": true
},
"@types/yargs": {
@@ -8000,28 +9667,154 @@
"eslint-visitor-keys": "^2.0.0"
}
},
- "abab": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
- "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
+ "@ungap/structured-clone": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
"dev": true
},
+ "@unrs/resolver-binding-android-arm-eabi": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz",
+ "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-android-arm64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz",
+ "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-darwin-arm64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz",
+ "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-darwin-x64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz",
+ "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-freebsd-x64": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz",
+ "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-arm-gnueabihf": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz",
+ "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-arm-musleabihf": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz",
+ "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-arm64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz",
+ "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-arm64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz",
+ "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-ppc64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz",
+ "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-riscv64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz",
+ "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-riscv64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz",
+ "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-s390x-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz",
+ "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-x64-gnu": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz",
+ "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-linux-x64-musl": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz",
+ "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-wasm32-wasi": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz",
+ "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "@napi-rs/wasm-runtime": "^0.2.11"
+ }
+ },
+ "@unrs/resolver-binding-win32-arm64-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz",
+ "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-win32-ia32-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz",
+ "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@unrs/resolver-binding-win32-x64-msvc": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz",
+ "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==",
+ "dev": true,
+ "optional": true
+ },
"acorn": {
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"dev": true
},
- "acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
- "dev": true,
- "requires": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
- }
- },
"acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -8029,21 +9822,6 @@
"dev": true,
"requires": {}
},
- "acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "dev": true
- },
- "agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "requires": {
- "debug": "4"
- }
- },
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -8093,9 +9871,9 @@
}
},
"anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
"requires": {
"normalize-path": "^3.0.0",
@@ -8154,15 +9932,11 @@
}
},
"arangojs": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-8.0.0.tgz",
- "integrity": "sha512-VjeWxbS18c65Wu6Pr/d5/kW0Chn6ftIfUAzCmG3wUUe8OrRRalSgL6e1+5iY9apocbECo6wTK3kr2goXfLHB+A==",
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-10.2.2.tgz",
+ "integrity": "sha512-3Xllq5inTGjros0mBP9NFxrIW8Di0ldtFurLdrXy5z4NDVJPyJtnwUiiGrMPY21NuVu53wUDE23YN50jnX4epw==",
"requires": {
- "@types/node": ">=14",
- "multi-part": "^4.0.0",
- "path-browserify": "^1.0.1",
- "x3-linkedlist": "1.2.0",
- "xhr": "^2.4.1"
+ "@types/node": "^20.11.26"
}
},
"argparse": {
@@ -8225,81 +9999,74 @@
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
"dev": true
},
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
"babel-jest": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.4.tgz",
- "integrity": "sha512-f24OmxyWymk5jfgLdlCMu4fTs4ldxFBIdn5sJdhvGC1m08rSkJ5hYbWkNmfBSvE/DjhCVNSHXepxsI6THGfGsg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.3.0.tgz",
+ "integrity": "sha512-gRpauEU2KRrCox5Z296aeVHR4jQ98BCnu0IO332D/xpHNOsIH/bgSRk9k6GbKIbBw8vFeN6ctuu6tV8WOyVfYQ==",
"dev": true,
"requires": {
- "@jest/transform": "^27.2.4",
- "@jest/types": "^27.2.4",
- "@types/babel__core": "^7.1.14",
- "babel-plugin-istanbul": "^6.0.0",
- "babel-preset-jest": "^27.2.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
+ "@jest/transform": "30.3.0",
+ "@types/babel__core": "^7.20.5",
+ "babel-plugin-istanbul": "^7.0.1",
+ "babel-preset-jest": "30.3.0",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
"slash": "^3.0.0"
}
},
"babel-plugin-istanbul": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz",
- "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.1.tgz",
+ "integrity": "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
"@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^4.0.0",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-instrument": "^6.0.2",
"test-exclude": "^6.0.0"
}
},
"babel-plugin-jest-hoist": {
- "version": "27.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz",
- "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.3.0.tgz",
+ "integrity": "sha512-+TRkByhsws6sfPjVaitzadk1I0F5sPvOVUH5tyTSzhePpsGIVrdeunHSw/C36QeocS95OOk8lunc4rlu5Anwsg==",
"dev": true,
"requires": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.0.0",
- "@types/babel__traverse": "^7.0.6"
+ "@types/babel__core": "^7.20.5"
}
},
"babel-preset-current-node-syntax": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
- "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz",
+ "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==",
"dev": true,
"requires": {
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.8.3",
+ "@babel/plugin-syntax-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.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.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-top-level-await": "^7.8.3"
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5"
}
},
"babel-preset-jest": {
- "version": "27.2.0",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz",
- "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.3.0.tgz",
+ "integrity": "sha512-6ZcUbWHC+dMz2vfzdNwi87Z1gQsLNK2uLuK1Q89R11xdvejcivlYYwDlEv0FHX3VwEXpbBQ9uufB/MUNpZGfhQ==",
"dev": true,
"requires": {
- "babel-plugin-jest-hoist": "^27.2.0",
- "babel-preset-current-node-syntax": "^1.0.0"
+ "babel-plugin-jest-hoist": "30.3.0",
+ "babel-preset-current-node-syntax": "^1.2.0"
}
},
"balanced-match": {
@@ -8308,6 +10075,12 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
+ "baseline-browser-mapping": {
+ "version": "2.10.10",
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.10.tgz",
+ "integrity": "sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==",
+ "dev": true
+ },
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -8327,23 +10100,17 @@
"fill-range": "^7.1.1"
}
},
- "browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
"browserslist": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.1.tgz",
- "integrity": "sha512-aLD0ZMDSnF4lUt4ZDNgqi5BUn9BZ7YdQdI/cYlILrhdSSZJLU9aNZoD5/NBmM4SK34APB2e83MOsRt1EnkuyaQ==",
+ "version": "4.28.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
+ "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
"dev": true,
"requires": {
- "caniuse-lite": "^1.0.30001259",
- "electron-to-chromium": "^1.3.846",
- "escalade": "^3.1.1",
- "nanocolors": "^0.1.5",
- "node-releases": "^1.1.76"
+ "baseline-browser-mapping": "^2.9.0",
+ "caniuse-lite": "^1.0.30001759",
+ "electron-to-chromium": "^1.5.263",
+ "node-releases": "^2.0.27",
+ "update-browserslist-db": "^1.2.0"
}
},
"bser": {
@@ -8394,9 +10161,9 @@
"dev": true
},
"caniuse-lite": {
- "version": "1.0.30001261",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001261.tgz",
- "integrity": "sha512-vM8D9Uvp7bHIN0fZ2KQ4wnmYFpJo/Etb4Vwsuc+ka0tfGDHvOPrFm6S/7CCNLSOkAUjenT2HnUPESdOIL91FaA==",
+ "version": "1.0.30001781",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001781.tgz",
+ "integrity": "sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==",
"dev": true
},
"chalk": {
@@ -8416,37 +10183,37 @@
"dev": true
},
"ci-info": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz",
- "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==",
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz",
+ "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==",
"dev": true
},
"cjs-module-lexer": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
- "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz",
+ "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==",
"dev": true
},
"cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"requires": {
"string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
+ "strip-ansi": "^6.0.1",
"wrap-ansi": "^7.0.0"
}
},
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
"dev": true
},
"collect-v8-coverage": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz",
+ "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==",
"dev": true
},
"color-convert": {
@@ -8462,15 +10229,6 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -8478,18 +10236,15 @@
"dev": true
},
"convert-source-map": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
- "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- }
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
},
"cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"requires": {
"path-key": "^3.1.0",
@@ -8497,40 +10252,6 @@
"which": "^2.0.1"
}
},
- "cssom": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
- "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
- "dev": true
- },
- "cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
- "dev": true,
- "requires": {
- "cssom": "~0.3.6"
- },
- "dependencies": {
- "cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
- "dev": true
- }
- }
- },
- "data-urls": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
- "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
- "dev": true,
- "requires": {
- "abab": "^2.0.3",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0"
- }
- },
"debug": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
@@ -8540,17 +10261,12 @@
"ms": "2.1.2"
}
},
- "decimal.js": {
- "version": "10.3.1",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
- "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
- "dev": true
- },
"dedent": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
- "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
- "dev": true
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz",
+ "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==",
+ "dev": true,
+ "requires": {}
},
"deep-is": {
"version": "0.1.4",
@@ -8559,9 +10275,9 @@
"dev": true
},
"deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"dev": true
},
"define-properties": {
@@ -8573,12 +10289,6 @@
"object-keys": "^1.0.12"
}
},
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "dev": true
- },
"detect-newline": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
@@ -8612,24 +10322,8 @@
"dom-walk": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
- "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
- },
- "domexception": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
- "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
- "dev": true,
- "requires": {
- "webidl-conversions": "^5.0.0"
- },
- "dependencies": {
- "webidl-conversions": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
- "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
- "dev": true
- }
- }
+ "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
+ "dev": true
},
"dotenv": {
"version": "8.6.0",
@@ -8655,16 +10349,22 @@
"gopd": "^1.2.0"
}
},
+ "eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true
+ },
"electron-to-chromium": {
- "version": "1.3.853",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.853.tgz",
- "integrity": "sha512-W4U8n+U8I5/SUaFcqZgbKRmYZwcyEIQVBDf+j5QQK6xChjXnQD+wj248eGR9X4u+dDmDR//8vIfbu4PrdBBIoQ==",
+ "version": "1.5.325",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.325.tgz",
+ "integrity": "sha512-PwfIw7WQSt3xX7yOf5OE/unLzsK9CaN2f/FvV3WjPR1Knoc1T9vePRVV4W1EM301JzzysK51K7FNKcusCr0zYA==",
"dev": true
},
"emittery": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz",
- "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==",
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
"dev": true
},
"emoji-regex": {
@@ -8731,22 +10431,10 @@
"es-object-atoms": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
- "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
- "dev": true,
- "requires": {
- "es-errors": "^1.3.0"
- }
- },
- "es-set-tostringtag": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
- "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"dev": true,
"requires": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
+ "es-errors": "^1.3.0"
}
},
"es-to-primitive": {
@@ -8767,9 +10455,9 @@
"dev": true
},
"escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="
},
"escape-string-regexp": {
"version": "4.0.0",
@@ -8777,66 +10465,6 @@
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true
},
- "escodegen": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
- "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
- "dev": true,
- "requires": {
- "esprima": "^4.0.1",
- "estraverse": "^5.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
- "dev": true
- },
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- }
- },
- "optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dev": true,
- "requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- }
- },
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "dev": true
- },
- "type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dev": true,
- "requires": {
- "prelude-ls": "~1.1.2"
- }
- }
- }
- },
"eslint": {
"version": "7.32.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
@@ -9165,24 +10793,24 @@
"strip-final-newline": "^2.0.0"
}
},
- "exit": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "exit-x": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz",
+ "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==",
"dev": true
},
"expect": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.4.tgz",
- "integrity": "sha512-gOtuonQ8TCnbNNCSw2fhVzRf8EFYDII4nB5NmG4IEV0rbUnW1I5zXvoTntU4iicB/Uh0oZr20NGlOLdJiwsOZA==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-30.3.0.tgz",
+ "integrity": "sha512-1zQrciTiQfRdo7qJM1uG4navm8DayFa2TgCSRlzUyNkhcJ6XUZF3hjnpkyr3VhAqPH7i/9GkG7Tv5abz6fqz0Q==",
"dev": true,
"requires": {
- "@jest/types": "^27.2.4",
- "ansi-styles": "^5.0.0",
- "jest-get-type": "^27.0.6",
- "jest-matcher-utils": "^27.2.4",
- "jest-message-util": "^27.2.4",
- "jest-regex-util": "^27.0.6"
+ "@jest/expect-utils": "30.3.0",
+ "@jest/get-type": "30.1.0",
+ "jest-matcher-utils": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-mock": "30.3.0",
+ "jest-util": "30.3.0"
},
"dependencies": {
"ansi-styles": {
@@ -9190,6 +10818,47 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true
+ },
+ "jest-diff": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.3.0.tgz",
+ "integrity": "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==",
+ "dev": true,
+ "requires": {
+ "@jest/diff-sequences": "30.3.0",
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "pretty-format": "30.3.0"
+ }
+ },
+ "jest-matcher-utils": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.3.0.tgz",
+ "integrity": "sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==",
+ "dev": true,
+ "requires": {
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "jest-diff": "30.3.0",
+ "pretty-format": "30.3.0"
+ }
+ },
+ "pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ }
+ },
+ "react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true
}
}
},
@@ -9234,9 +10903,9 @@
}
},
"fb-watchman": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
- "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
"dev": true,
"requires": {
"bser": "2.1.1"
@@ -9251,16 +10920,6 @@
"flat-cache": "^3.0.4"
}
},
- "file-type": {
- "version": "16.5.4",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz",
- "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==",
- "requires": {
- "readable-web-to-node-stream": "^3.0.0",
- "strtok3": "^6.2.4",
- "token-types": "^4.1.1"
- }
- },
"fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@@ -9295,17 +10954,22 @@
"integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
"dev": true
},
- "form-data": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz",
- "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==",
+ "foreground-child": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
"dev": true,
"requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "es-set-tostringtag": "^2.1.0",
- "hasown": "^2.0.2",
- "mime-types": "^2.1.35"
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
+ },
+ "dependencies": {
+ "signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true
+ }
}
},
"fs.realpath": {
@@ -9315,9 +10979,9 @@
"dev": true
},
"fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"optional": true
},
@@ -9421,6 +11085,7 @@
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
"integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
+ "dev": true,
"requires": {
"min-document": "^2.19.0",
"process": "^0.11.10"
@@ -9464,9 +11129,9 @@
"dev": true
},
"graceful-fs": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
"has": {
@@ -9520,62 +11185,18 @@
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true
},
- "html-encoding-sniffer": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
- "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
- "dev": true,
- "requires": {
- "whatwg-encoding": "^1.0.5"
- }
- },
"html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true
},
- "http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
- "dev": true,
- "requires": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
- }
- },
- "https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "dev": true,
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- },
"human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"dev": true
},
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
- },
"ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
@@ -9593,9 +11214,9 @@
}
},
"import-local": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
- "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
"dev": true,
"requires": {
"pkg-dir": "^4.2.0",
@@ -9681,7 +11302,8 @@
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
},
"internal-slot": {
"version": "1.0.3",
@@ -9725,15 +11347,6 @@
"integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
"dev": true
},
- "is-ci": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz",
- "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==",
- "dev": true,
- "requires": {
- "ci-info": "^3.1.1"
- }
- },
"is-core-module": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
@@ -9766,7 +11379,8 @@
"is-function": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
- "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="
+ "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==",
+ "dev": true
},
"is-generator-fn": {
"version": "2.1.0",
@@ -9804,12 +11418,6 @@
"has-tostringtag": "^1.0.0"
}
},
- "is-potential-custom-element-name": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
- "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
- "dev": true
- },
"is-regex": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -9844,12 +11452,6 @@
"has-symbols": "^1.0.2"
}
},
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -9857,176 +11459,402 @@
"dev": true
},
"istanbul-lib-coverage": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.1.tgz",
- "integrity": "sha512-GvCYYTxaCPqwMjobtVcVKvSHtAGe48MNhGjpK8LtVF8K0ISX7hCKl85LgtuaSneWVyQmaGcW3iXVV3GaZSLpmQ==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
"dev": true
},
"istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
"dev": true,
"requires": {
- "@babel/core": "^7.7.5",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^7.5.4"
}
},
"istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
"requires": {
"istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
+ "make-dir": "^4.0.0",
"supports-color": "^7.1.0"
}
},
"istanbul-lib-source-maps": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
- "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz",
+ "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==",
"dev": true,
"requires": {
+ "@jridgewell/trace-mapping": "^0.3.23",
"debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
+ "istanbul-lib-coverage": "^3.0.0"
}
},
"istanbul-reports": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
- "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
+ "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
"dev": true,
"requires": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
}
},
+ "jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "requires": {
+ "@isaacs/cliui": "^8.0.2",
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
"jest": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.4.tgz",
- "integrity": "sha512-h4uqb1EQLfPulWyUFFWv9e9Nn8sCqsJ/j3wk/KCY0p4s4s0ICCfP3iMf6hRf5hEhsDyvyrCgKiZXma63gMz16A==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-30.3.0.tgz",
+ "integrity": "sha512-AkXIIFcaazymvey2i/+F94XRnM6TsVLZDhBMLsd1Sf/W0wzsvvpjeyUrCZD6HGG4SDYPgDJDBKeiJTBb10WzMg==",
"dev": true,
"requires": {
- "@jest/core": "^27.2.4",
- "import-local": "^3.0.2",
- "jest-cli": "^27.2.4"
+ "@jest/core": "30.3.0",
+ "@jest/types": "30.3.0",
+ "import-local": "^3.2.0",
+ "jest-cli": "30.3.0"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ }
}
},
"jest-changed-files": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.2.4.tgz",
- "integrity": "sha512-eeO1C1u4ex7pdTroYXezr+rbr957myyVoKGjcY4R1TJi3A+9v+4fu1Iv9J4eLq1bgFyT3O3iRWU9lZsEE7J72Q==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.3.0.tgz",
+ "integrity": "sha512-B/7Cny6cV5At6M25EWDgf9S617lHivamL8vl6KEpJqkStauzcG4e+WPfDgMMF+H4FVH4A2PLRyvgDJan4441QA==",
"dev": true,
"requires": {
- "@jest/types": "^27.2.4",
- "execa": "^5.0.0",
- "throat": "^6.0.1"
+ "execa": "^5.1.1",
+ "jest-util": "30.3.0",
+ "p-limit": "^3.1.0"
+ },
+ "dependencies": {
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ }
}
},
"jest-circus": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.4.tgz",
- "integrity": "sha512-TtheheTElrGjlsY9VxkzUU1qwIx05ItIusMVKnvNkMt4o/PeegLRcjq3Db2Jz0GGdBalJdbzLZBgeulZAJxJWA==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.3.0.tgz",
+ "integrity": "sha512-PyXq5szeSfR/4f1lYqCmmQjh0vqDkURUYi9N6whnHjlRz4IUQfMcXkGLeEoiJtxtyPqgUaUUfyQlApXWBSN1RA==",
"dev": true,
"requires": {
- "@jest/environment": "^27.2.4",
- "@jest/test-result": "^27.2.4",
- "@jest/types": "^27.2.4",
+ "@jest/environment": "30.3.0",
+ "@jest/expect": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "chalk": "^4.0.0",
+ "chalk": "^4.1.2",
"co": "^4.6.0",
- "dedent": "^0.7.0",
- "expect": "^27.2.4",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^27.2.4",
- "jest-matcher-utils": "^27.2.4",
- "jest-message-util": "^27.2.4",
- "jest-runtime": "^27.2.4",
- "jest-snapshot": "^27.2.4",
- "jest-util": "^27.2.4",
- "pretty-format": "^27.2.4",
+ "dedent": "^1.6.0",
+ "is-generator-fn": "^2.1.0",
+ "jest-each": "30.3.0",
+ "jest-matcher-utils": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-runtime": "30.3.0",
+ "jest-snapshot": "30.3.0",
+ "jest-util": "30.3.0",
+ "p-limit": "^3.1.0",
+ "pretty-format": "30.3.0",
+ "pure-rand": "^7.0.0",
"slash": "^3.0.0",
- "stack-utils": "^2.0.3",
- "throat": "^6.0.1"
+ "stack-utils": "^2.0.6"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ },
+ "jest-diff": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.3.0.tgz",
+ "integrity": "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==",
+ "dev": true,
+ "requires": {
+ "@jest/diff-sequences": "30.3.0",
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "pretty-format": "30.3.0"
+ }
+ },
+ "jest-matcher-utils": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.3.0.tgz",
+ "integrity": "sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==",
+ "dev": true,
+ "requires": {
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "jest-diff": "30.3.0",
+ "pretty-format": "30.3.0"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ }
+ },
+ "react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true
+ }
}
},
"jest-cli": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.4.tgz",
- "integrity": "sha512-4kpQQkg74HYLaXo3nzwtg4PYxSLgL7puz1LXHj5Tu85KmlIpxQFjRkXlx4V47CYFFIDoyl3rHA/cXOxUWyMpNg==",
- "dev": true,
- "requires": {
- "@jest/core": "^27.2.4",
- "@jest/test-result": "^27.2.4",
- "@jest/types": "^27.2.4",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "import-local": "^3.0.2",
- "jest-config": "^27.2.4",
- "jest-util": "^27.2.4",
- "jest-validate": "^27.2.4",
- "prompts": "^2.0.1",
- "yargs": "^16.2.0"
- },
- "dependencies": {
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.3.0.tgz",
+ "integrity": "sha512-l6Tqx+j1fDXJEW5bqYykDQQ7mQg+9mhWXtnj+tQZrTWYHyHoi6Be8HPumDSA+UiX2/2buEgjA58iJzdj146uCw==",
+ "dev": true,
+ "requires": {
+ "@jest/core": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/types": "30.3.0",
+ "chalk": "^4.1.2",
+ "exit-x": "^0.2.2",
+ "import-local": "^3.2.0",
+ "jest-config": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0",
+ "yargs": "^17.7.2"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
"dev": true,
"requires": {
- "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"
+ "@types/yargs-parser": "*"
}
}
}
},
"jest-config": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.4.tgz",
- "integrity": "sha512-tWy0UxhdzqiKyp4l5Vq4HxLyD+gH5td+GCF3c22/DJ0bYAOsMo+qi2XtbJI6oYMH5JOJQs9nLW/r34nvFCehjA==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^27.2.4",
- "@jest/types": "^27.2.4",
- "babel-jest": "^27.2.4",
- "chalk": "^4.0.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.1",
- "graceful-fs": "^4.2.4",
- "is-ci": "^3.0.0",
- "jest-circus": "^27.2.4",
- "jest-environment-jsdom": "^27.2.4",
- "jest-environment-node": "^27.2.4",
- "jest-get-type": "^27.0.6",
- "jest-jasmine2": "^27.2.4",
- "jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.4",
- "jest-runner": "^27.2.4",
- "jest-util": "^27.2.4",
- "jest-validate": "^27.2.4",
- "micromatch": "^4.0.4",
- "pretty-format": "^27.2.4"
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.3.0.tgz",
+ "integrity": "sha512-WPMAkMAtNDY9P/oKObtsRG/6KTrhtgPJoBTmk20uDn4Uy6/3EJnnaZJre/FMT1KVRx8cve1r7/FlMIOfRVWL4w==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.27.4",
+ "@jest/get-type": "30.1.0",
+ "@jest/pattern": "30.0.1",
+ "@jest/test-sequencer": "30.3.0",
+ "@jest/types": "30.3.0",
+ "babel-jest": "30.3.0",
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "deepmerge": "^4.3.1",
+ "glob": "^10.5.0",
+ "graceful-fs": "^4.2.11",
+ "jest-circus": "30.3.0",
+ "jest-docblock": "30.2.0",
+ "jest-environment-node": "30.3.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.3.0",
+ "jest-runner": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0",
+ "parse-json": "^5.2.0",
+ "pretty-format": "30.3.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "dev": true,
+ "requires": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ }
+ },
+ "minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.2"
+ }
+ },
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ }
+ },
+ "react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true
+ }
}
},
"jest-diff": {
@@ -10042,54 +11870,115 @@
}
},
"jest-docblock": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz",
- "integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==",
+ "version": "30.2.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz",
+ "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==",
"dev": true,
"requires": {
- "detect-newline": "^3.0.0"
+ "detect-newline": "^3.1.0"
}
},
"jest-each": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.4.tgz",
- "integrity": "sha512-w9XVc+0EDBUTJS4xBNJ7N2JCcWItFd006lFjz77OarAQcQ10eFDBMrfDv2GBJMKlXe9aq0HrIIF51AXcZrRJyg==",
- "dev": true,
- "requires": {
- "@jest/types": "^27.2.4",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.0.6",
- "jest-util": "^27.2.4",
- "pretty-format": "^27.2.4"
- }
- },
- "jest-environment-jsdom": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.4.tgz",
- "integrity": "sha512-X70pTXFSypD7AIzKT1mLnDi5hP9w9mdTRcOGOmoDoBrNyNEg4rYm6d4LQWFLc9ps1VnMuDOkFSG0wjSNYGjkng==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.3.0.tgz",
+ "integrity": "sha512-V8eMndg/aZ+3LnCJgSm13IxS5XSBM22QSZc9BtPK8Dek6pm+hfUNfwBdvsB3d342bo1q7wnSkC38zjX259qZNA==",
"dev": true,
"requires": {
- "@jest/environment": "^27.2.4",
- "@jest/fake-timers": "^27.2.4",
- "@jest/types": "^27.2.4",
- "@types/node": "*",
- "jest-mock": "^27.2.4",
- "jest-util": "^27.2.4",
- "jsdom": "^16.6.0"
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.3.0",
+ "chalk": "^4.1.2",
+ "jest-util": "30.3.0",
+ "pretty-format": "30.3.0"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ }
+ },
+ "react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true
+ }
}
},
"jest-environment-node": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.4.tgz",
- "integrity": "sha512-ZbVbFSnbzTvhLOIkqh5lcLuGCCFvtG4xTXIRPK99rV2KzQT3kNg16KZwfTnLNlIiWCE8do960eToeDfcqmpSAw==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.3.0.tgz",
+ "integrity": "sha512-4i6HItw/JSiJVsC5q0hnKIe/hbYfZLVG9YJ/0pU9Hz2n/9qZe3Rhn5s5CUZA5ORZlcdT/vmAXRMyONXJwPrmYQ==",
"dev": true,
"requires": {
- "@jest/environment": "^27.2.4",
- "@jest/fake-timers": "^27.2.4",
- "@jest/types": "^27.2.4",
+ "@jest/environment": "30.3.0",
+ "@jest/fake-timers": "30.3.0",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "jest-mock": "^27.2.4",
- "jest-util": "^27.2.4"
+ "jest-mock": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ }
}
},
"jest-get-type": {
@@ -10099,60 +11988,89 @@
"dev": true
},
"jest-haste-map": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.4.tgz",
- "integrity": "sha512-bkJ4bT00T2K+1NZXbRcyKnbJ42I6QBvoDNMTAQQDBhaGNnZreiQKUNqax0e6hLTx7E75pKDeltVu3V1HAdu+YA==",
- "dev": true,
- "requires": {
- "@jest/types": "^27.2.4",
- "@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.4",
- "jest-regex-util": "^27.0.6",
- "jest-serializer": "^27.0.6",
- "jest-util": "^27.2.4",
- "jest-worker": "^27.2.4",
- "micromatch": "^4.0.4",
- "walker": "^1.0.7"
- }
- },
- "jest-jasmine2": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.4.tgz",
- "integrity": "sha512-fcffjO/xLWLVnW2ct3No4EksxM5RyPwHDYu9QU+90cC+/eSMLkFAxS55vkqsxexOO5zSsZ3foVpMQcg/amSeIQ==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.3.0.tgz",
+ "integrity": "sha512-mMi2oqG4KRU0R9QEtscl87JzMXfUhbKaFqOxmjb2CKcbHcUGFrJCBWHmnTiUqi6JcnzoBlO4rWfpdl2k/RfLCA==",
"dev": true,
"requires": {
- "@babel/traverse": "^7.1.0",
- "@jest/environment": "^27.2.4",
- "@jest/source-map": "^27.0.6",
- "@jest/test-result": "^27.2.4",
- "@jest/types": "^27.2.4",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "expect": "^27.2.4",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^27.2.4",
- "jest-matcher-utils": "^27.2.4",
- "jest-message-util": "^27.2.4",
- "jest-runtime": "^27.2.4",
- "jest-snapshot": "^27.2.4",
- "jest-util": "^27.2.4",
- "pretty-format": "^27.2.4",
- "throat": "^6.0.1"
+ "anymatch": "^3.1.3",
+ "fb-watchman": "^2.0.2",
+ "fsevents": "^2.3.3",
+ "graceful-fs": "^4.2.11",
+ "jest-regex-util": "30.0.1",
+ "jest-util": "30.3.0",
+ "jest-worker": "30.3.0",
+ "picomatch": "^4.0.3",
+ "walker": "^1.0.8"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true
+ }
}
},
"jest-leak-detector": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.4.tgz",
- "integrity": "sha512-SrcHWbe0EHg/bw2uBjVoHacTo5xosl068x2Q0aWsjr2yYuW2XwqrSkZV4lurUop0jhv1709ymG4or+8E4sH27Q==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.3.0.tgz",
+ "integrity": "sha512-cuKmUUGIjfXZAiGJ7TbEMx0bcqNdPPI6P1V+7aF+m/FUJqFDxkFR4JqkTu8ZOiU5AaX/x0hZ20KaaIPXQzbMGQ==",
"dev": true,
"requires": {
- "jest-get-type": "^27.0.6",
- "pretty-format": "^27.2.4"
+ "@jest/get-type": "30.1.0",
+ "pretty-format": "30.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ }
+ },
+ "react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true
+ }
}
},
"jest-matcher-utils": {
@@ -10168,269 +12086,587 @@
}
},
"jest-message-util": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.4.tgz",
- "integrity": "sha512-wbKT/BNGnBVB9nzi+IoaLkXt6fbSvqUxx+IYY66YFh96J3goY33BAaNG3uPqaw/Sh/FR9YpXGVDfd5DJdbh4nA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.12.13",
- "@jest/types": "^27.2.4",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "micromatch": "^4.0.4",
- "pretty-format": "^27.2.4",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.3.0.tgz",
+ "integrity": "sha512-Z/j4Bo+4ySJ+JPJN3b2Qbl9hDq3VrXmnjjGEWD/x0BCXeOXPTV1iZYYzl2X8c1MaCOL+ewMyNBcm88sboE6YWw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.27.1",
+ "@jest/types": "30.3.0",
+ "@types/stack-utils": "^2.0.3",
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.3",
+ "pretty-format": "30.3.0",
"slash": "^3.0.0",
- "stack-utils": "^2.0.3"
+ "stack-utils": "^2.0.6"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
- "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
+ "version": "7.29.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.28.5",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ }
+ },
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.14.5"
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
}
+ },
+ "react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true
}
}
},
"jest-mock": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.2.4.tgz",
- "integrity": "sha512-iVRU905rutaAoUcrt5Tm1JoHHWi24YabqEGXjPJI4tAyA6wZ7mzDi3GrZ+M7ebgWBqUkZE93GAx1STk7yCMIQA==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.3.0.tgz",
+ "integrity": "sha512-OTzICK8CpE+t4ndhKrwlIdbM6Pn8j00lvmSmq5ejiO+KxukbLjgOflKWMn3KE34EZdQm5RqTuKj+5RIEniYhog==",
"dev": true,
"requires": {
- "@jest/types": "^27.2.4",
- "@types/node": "*"
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "jest-util": "30.3.0"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ }
}
},
"jest-pnp-resolver": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
- "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
"dev": true,
"requires": {}
},
"jest-regex-util": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz",
- "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==",
+ "version": "30.0.1",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz",
+ "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==",
"dev": true
},
"jest-resolve": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.4.tgz",
- "integrity": "sha512-IsAO/3+3BZnKjI2I4f3835TBK/90dxR7Otgufn3mnrDFTByOSXclDi3G2XJsawGV4/18IMLARJ+V7Wm7t+J89Q==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.3.0.tgz",
+ "integrity": "sha512-NRtTAHQlpd15F9rUR36jqwelbrDV/dY4vzNte3S2kxCKUJRYNd5/6nTSbYiak1VX5g8IoFF23Uj5TURkUW8O5g==",
"dev": true,
"requires": {
- "@jest/types": "^27.2.4",
- "chalk": "^4.0.0",
- "escalade": "^3.1.1",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.4",
- "jest-pnp-resolver": "^1.2.2",
- "jest-util": "^27.2.4",
- "jest-validate": "^27.2.4",
- "resolve": "^1.20.0",
- "slash": "^3.0.0"
+ "chalk": "^4.1.2",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.3.0",
+ "jest-pnp-resolver": "^1.2.3",
+ "jest-util": "30.3.0",
+ "jest-validate": "30.3.0",
+ "slash": "^3.0.0",
+ "unrs-resolver": "^1.7.11"
}
},
"jest-resolve-dependencies": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.4.tgz",
- "integrity": "sha512-i5s7Uh9B3Q6uwxLpMhNKlgBf6pcemvWaORxsW1zNF/YCY3jd5EftvnGBI+fxVwJ1CBxkVfxqCvm1lpZkbaoGmg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.3.0.tgz",
+ "integrity": "sha512-9ev8s3YN6Hsyz9LV75XUwkCVFlwPbaFn6Wp75qnI0wzAINYWY8Fb3+6y59Rwd3QaS3kKXffHXsZMziMavfz/nw==",
"dev": true,
"requires": {
- "@jest/types": "^27.2.4",
- "jest-regex-util": "^27.0.6",
- "jest-snapshot": "^27.2.4"
+ "jest-regex-util": "30.0.1",
+ "jest-snapshot": "30.3.0"
}
},
"jest-runner": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.4.tgz",
- "integrity": "sha512-hIo5PPuNUyVDidZS8EetntuuJbQ+4IHWxmHgYZz9FIDbG2wcZjrP6b52uMDjAEQiHAn8yn8ynNe+TL8UuGFYKg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.3.0.tgz",
+ "integrity": "sha512-gDv6C9LGKWDPLia9TSzZwf4h3kMQCqyTpq+95PODnTRDO0g9os48XIYYkS6D236vjpBir2fF63YmJFtqkS5Duw==",
"dev": true,
"requires": {
- "@jest/console": "^27.2.4",
- "@jest/environment": "^27.2.4",
- "@jest/test-result": "^27.2.4",
- "@jest/transform": "^27.2.4",
- "@jest/types": "^27.2.4",
+ "@jest/console": "30.3.0",
+ "@jest/environment": "30.3.0",
+ "@jest/test-result": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "emittery": "^0.8.1",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-docblock": "^27.0.6",
- "jest-environment-jsdom": "^27.2.4",
- "jest-environment-node": "^27.2.4",
- "jest-haste-map": "^27.2.4",
- "jest-leak-detector": "^27.2.4",
- "jest-message-util": "^27.2.4",
- "jest-resolve": "^27.2.4",
- "jest-runtime": "^27.2.4",
- "jest-util": "^27.2.4",
- "jest-worker": "^27.2.4",
- "source-map-support": "^0.5.6",
- "throat": "^6.0.1"
+ "chalk": "^4.1.2",
+ "emittery": "^0.13.1",
+ "exit-x": "^0.2.2",
+ "graceful-fs": "^4.2.11",
+ "jest-docblock": "30.2.0",
+ "jest-environment-node": "30.3.0",
+ "jest-haste-map": "30.3.0",
+ "jest-leak-detector": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-resolve": "30.3.0",
+ "jest-runtime": "30.3.0",
+ "jest-util": "30.3.0",
+ "jest-watcher": "30.3.0",
+ "jest-worker": "30.3.0",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ }
}
},
"jest-runtime": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.4.tgz",
- "integrity": "sha512-ICKzzYdjIi70P17MZsLLIgIQFCQmIjMFf+xYww3aUySiUA/QBPUTdUqo5B2eg4HOn9/KkUsV0z6GVgaqAPBJvg==",
- "dev": true,
- "requires": {
- "@jest/console": "^27.2.4",
- "@jest/environment": "^27.2.4",
- "@jest/fake-timers": "^27.2.4",
- "@jest/globals": "^27.2.4",
- "@jest/source-map": "^27.0.6",
- "@jest/test-result": "^27.2.4",
- "@jest/transform": "^27.2.4",
- "@jest/types": "^27.2.4",
- "@types/yargs": "^16.0.0",
- "chalk": "^4.0.0",
- "cjs-module-lexer": "^1.0.0",
- "collect-v8-coverage": "^1.0.0",
- "execa": "^5.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.4",
- "jest-message-util": "^27.2.4",
- "jest-mock": "^27.2.4",
- "jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.4",
- "jest-snapshot": "^27.2.4",
- "jest-util": "^27.2.4",
- "jest-validate": "^27.2.4",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.3.0.tgz",
+ "integrity": "sha512-CgC+hIBJbuh78HEffkhNKcbXAytQViplcl8xupqeIWyKQF50kCQA8J7GeJCkjisC6hpnC9Muf8jV5RdtdFbGng==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "30.3.0",
+ "@jest/fake-timers": "30.3.0",
+ "@jest/globals": "30.3.0",
+ "@jest/source-map": "30.0.1",
+ "@jest/test-result": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
+ "@types/node": "*",
+ "chalk": "^4.1.2",
+ "cjs-module-lexer": "^2.1.0",
+ "collect-v8-coverage": "^1.0.2",
+ "glob": "^10.5.0",
+ "graceful-fs": "^4.2.11",
+ "jest-haste-map": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-mock": "30.3.0",
+ "jest-regex-util": "30.0.1",
+ "jest-resolve": "30.3.0",
+ "jest-snapshot": "30.3.0",
+ "jest-util": "30.3.0",
"slash": "^3.0.0",
- "strip-bom": "^4.0.0",
- "yargs": "^16.2.0"
+ "strip-bom": "^4.0.0"
},
"dependencies": {
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "dev": true,
+ "requires": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ }
+ },
+ "minimatch": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz",
+ "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==",
"dev": true,
"requires": {
- "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"
+ "brace-expansion": "^2.0.2"
}
}
}
},
- "jest-serializer": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz",
- "integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "graceful-fs": "^4.2.4"
- }
- },
"jest-snapshot": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.4.tgz",
- "integrity": "sha512-5DFxK31rYS8X8C6WXsFx8XxrxW3PGa6+9IrUcZdTLg1aEyXDGIeiBh4jbwvh655bg/9vTETbEj/njfZicHTZZw==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.7.2",
- "@babel/generator": "^7.7.2",
- "@babel/parser": "^7.7.2",
- "@babel/plugin-syntax-typescript": "^7.7.2",
- "@babel/traverse": "^7.7.2",
- "@babel/types": "^7.0.0",
- "@jest/transform": "^27.2.4",
- "@jest/types": "^27.2.4",
- "@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.2.4",
- "graceful-fs": "^4.2.4",
- "jest-diff": "^27.2.4",
- "jest-get-type": "^27.0.6",
- "jest-haste-map": "^27.2.4",
- "jest-matcher-utils": "^27.2.4",
- "jest-message-util": "^27.2.4",
- "jest-resolve": "^27.2.4",
- "jest-util": "^27.2.4",
- "natural-compare": "^1.4.0",
- "pretty-format": "^27.2.4",
- "semver": "^7.3.2"
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.3.0.tgz",
+ "integrity": "sha512-f14c7atpb4O2DeNhwcvS810Y63wEn8O1HqK/luJ4F6M4NjvxmAKQwBUWjbExUtMxWJQ0wVgmCKymeJK6NZMnfQ==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.27.4",
+ "@babel/generator": "^7.27.5",
+ "@babel/plugin-syntax-jsx": "^7.27.1",
+ "@babel/plugin-syntax-typescript": "^7.27.1",
+ "@babel/types": "^7.27.3",
+ "@jest/expect-utils": "30.3.0",
+ "@jest/get-type": "30.1.0",
+ "@jest/snapshot-utils": "30.3.0",
+ "@jest/transform": "30.3.0",
+ "@jest/types": "30.3.0",
+ "babel-preset-current-node-syntax": "^1.2.0",
+ "chalk": "^4.1.2",
+ "expect": "30.3.0",
+ "graceful-fs": "^4.2.11",
+ "jest-diff": "30.3.0",
+ "jest-matcher-utils": "30.3.0",
+ "jest-message-util": "30.3.0",
+ "jest-util": "30.3.0",
+ "pretty-format": "30.3.0",
+ "semver": "^7.7.2",
+ "synckit": "^0.11.8"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ },
+ "jest-diff": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.3.0.tgz",
+ "integrity": "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==",
+ "dev": true,
+ "requires": {
+ "@jest/diff-sequences": "30.3.0",
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "pretty-format": "30.3.0"
+ }
+ },
+ "jest-matcher-utils": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.3.0.tgz",
+ "integrity": "sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==",
+ "dev": true,
+ "requires": {
+ "@jest/get-type": "30.1.0",
+ "chalk": "^4.1.2",
+ "jest-diff": "30.3.0",
+ "pretty-format": "30.3.0"
+ }
+ },
+ "pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ }
+ },
+ "react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true
+ }
}
},
"jest-util": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.4.tgz",
- "integrity": "sha512-mW++4u+fSvAt3YBWm5IpbmRAceUqa2B++JlUZTiuEt2AmNYn0Yw5oay4cP17TGsMINRNPSGiJ2zNnX60g+VbFg==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.3.0.tgz",
+ "integrity": "sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg==",
"dev": true,
"requires": {
- "@jest/types": "^27.2.4",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "is-ci": "^3.0.0",
- "picomatch": "^2.2.3"
+ "chalk": "^4.1.2",
+ "ci-info": "^4.2.0",
+ "graceful-fs": "^4.2.11",
+ "picomatch": "^4.0.3"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true
+ }
}
},
"jest-validate": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.4.tgz",
- "integrity": "sha512-VMtbxbkd7LHnIH7PChdDtrluCFRJ4b1YV2YJzNwwsASMWftq/HgqiqjvptBOWyWOtevgO3f14wPxkPcLlVBRog==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz",
+ "integrity": "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==",
"dev": true,
"requires": {
- "@jest/types": "^27.2.4",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^27.0.6",
+ "@jest/get-type": "30.1.0",
+ "@jest/types": "30.3.0",
+ "camelcase": "^6.3.0",
+ "chalk": "^4.1.2",
"leven": "^3.1.0",
- "pretty-format": "^27.2.4"
+ "pretty-format": "30.3.0"
},
"dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true
+ },
"camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true
+ },
+ "pretty-format": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz",
+ "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==",
+ "dev": true,
+ "requires": {
+ "@jest/schemas": "30.0.5",
+ "ansi-styles": "^5.2.0",
+ "react-is": "^18.3.1"
+ }
+ },
+ "react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true
}
}
},
"jest-watcher": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.4.tgz",
- "integrity": "sha512-LXC/0+dKxhK7cfF7reflRYlzDIaQE+fL4ynhKhzg8IMILNMuI4xcjXXfUJady7OR4/TZeMg7X8eHx8uan9vqaQ==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.3.0.tgz",
+ "integrity": "sha512-PJ1d9ThtTR8aMiBWUdcownq9mDdLXsQzJayTk4kmaBRHKvwNQn+ANveuhEBUyNI2hR1TVhvQ8D5kHubbzBHR/w==",
"dev": true,
"requires": {
- "@jest/test-result": "^27.2.4",
- "@jest/types": "^27.2.4",
+ "@jest/test-result": "30.3.0",
+ "@jest/types": "30.3.0",
"@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "jest-util": "^27.2.4",
- "string-length": "^4.0.1"
+ "ansi-escapes": "^4.3.2",
+ "chalk": "^4.1.2",
+ "emittery": "^0.13.1",
+ "jest-util": "30.3.0",
+ "string-length": "^4.0.2"
+ },
+ "dependencies": {
+ "@jest/types": {
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz",
+ "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==",
+ "dev": true,
+ "requires": {
+ "@jest/pattern": "30.0.1",
+ "@jest/schemas": "30.0.5",
+ "@types/istanbul-lib-coverage": "^2.0.6",
+ "@types/istanbul-reports": "^3.0.4",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.33",
+ "chalk": "^4.1.2"
+ }
+ },
+ "@types/yargs": {
+ "version": "17.0.35",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz",
+ "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ }
}
},
"jest-worker": {
- "version": "27.2.4",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.4.tgz",
- "integrity": "sha512-Zq9A2Pw59KkVjBBKD1i3iE2e22oSjXhUKKuAK1HGX8flGwkm6NMozyEYzKd41hXc64dbd/0eWFeEEuxqXyhM+g==",
+ "version": "30.3.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.3.0.tgz",
+ "integrity": "sha512-DrCKkaQwHexjRUFTmPzs7sHQe0TSj9nvDALKGdwmK5mW9v7j90BudWirKAJHt3QQ9Dhrg1F7DogPzhChppkJpQ==",
"dev": true,
"requires": {
"@types/node": "*",
+ "@ungap/structured-clone": "^1.3.0",
+ "jest-util": "30.3.0",
"merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
+ "supports-color": "^8.1.1"
},
"dependencies": {
"supports-color": {
@@ -10460,53 +12696,10 @@
"esprima": "^4.0.0"
}
},
- "jsdom": {
- "version": "16.7.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
- "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
- "dev": true,
- "requires": {
- "abab": "^2.0.5",
- "acorn": "^8.2.4",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.4.4",
- "cssstyle": "^2.3.0",
- "data-urls": "^2.0.0",
- "decimal.js": "^10.2.1",
- "domexception": "^2.0.1",
- "escodegen": "^2.0.0",
- "form-data": "^3.0.0",
- "html-encoding-sniffer": "^2.0.1",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "is-potential-custom-element-name": "^1.0.1",
- "nwsapi": "^2.2.0",
- "parse5": "6.0.1",
- "saxes": "^5.0.1",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^4.0.0",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^2.0.0",
- "webidl-conversions": "^6.1.0",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.5.0",
- "ws": "^7.4.6",
- "xml-name-validator": "^3.0.0"
- },
- "dependencies": {
- "acorn": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
- "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
- "dev": true
- }
- }
- },
"jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
"dev": true
},
"json-parse-better-errors": {
@@ -10515,6 +12708,12 @@
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
"dev": true
},
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -10533,12 +12732,6 @@
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true
},
- "kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true
- },
"leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
@@ -10555,6 +12748,12 @@
"type-check": "~0.4.0"
}
},
+ "lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
"load-json-file": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
@@ -10585,12 +12784,6 @@
"path-exists": "^3.0.0"
}
},
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
"lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
@@ -10610,38 +12803,27 @@
"dev": true
},
"lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
},
"make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
"requires": {
- "semver": "^6.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
+ "semver": "^7.5.3"
}
},
"makeerror": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
- "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
"dev": true,
"requires": {
- "tmpl": "1.0.x"
+ "tmpl": "1.0.5"
}
},
"math-intrinsics": {
@@ -10675,21 +12857,14 @@
"mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
- },
- "mime-kind": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mime-kind/-/mime-kind-4.0.0.tgz",
- "integrity": "sha512-qQvglvSpS5mABi30beNFd+uHKtKkxD3dxAmhi2e589XKx+WfVqhg5i5P5LBcVgwwv3BiDpNMBWrHqU+JexW4aA==",
- "requires": {
- "file-type": "^16.5.4",
- "mime-types": "^2.1.24"
- }
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true
},
"mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
"requires": {
"mime-db": "1.52.0"
}
@@ -10704,14 +12879,15 @@
"version": "2.19.1",
"resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.1.tgz",
"integrity": "sha512-8lqe85PkqQJzIcs2iD7xW/WSxcncC3/DPVbTOafKNJDIMXwGfwXS350mH4SJslomntN2iYtFBuC0yNO3CEap6g==",
+ "dev": true,
"requires": {
"dom-walk": "^0.1.0"
}
},
"minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
@@ -10723,30 +12899,28 @@
"integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
"dev": true
},
+ "minipass": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
+ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
+ "dev": true
+ },
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "multi-part": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multi-part/-/multi-part-4.0.0.tgz",
- "integrity": "sha512-YT/CS0PAe62kT8EoQXcQj8yIcSu18HhYv0s6ShdAFsoFly3oV5QaxODnkj0u7zH0/RFyH47cdcMVpcGXliEFVA==",
- "requires": {
- "mime-kind": "^4.0.0",
- "multi-part-lite": "^1.0.0"
- }
- },
"multi-part-lite": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/multi-part-lite/-/multi-part-lite-1.0.0.tgz",
- "integrity": "sha512-KxIRbBZZ45hoKX1ROD/19wJr0ql1bef1rE8Y1PCwD3PuNXV42pp7Wo8lEHYuAajoT4vfAFcd3rPjlkyEEyt1nw=="
+ "integrity": "sha512-KxIRbBZZ45hoKX1ROD/19wJr0ql1bef1rE8Y1PCwD3PuNXV42pp7Wo8lEHYuAajoT4vfAFcd3rPjlkyEEyt1nw==",
+ "dev": true
},
- "nanocolors": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.12.tgz",
- "integrity": "sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ==",
+ "napi-postinstall": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz",
+ "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==",
"dev": true
},
"natural-compare": {
@@ -10758,19 +12932,13 @@
"node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
- "dev": true
- },
- "node-modules-regexp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
- "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
"dev": true
},
"node-releases": {
- "version": "1.1.76",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.76.tgz",
- "integrity": "sha512-9/IECtNr8dXNmPWmFXepT0/7o5eolGesHUa3mtr0KlgnCvnZxwh2qensKL42JJY2vQKC3nIBXetFAqR+PW1CmA==",
+ "version": "2.0.36",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz",
+ "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==",
"dev": true
},
"normalize-package-data": {
@@ -10808,12 +12976,6 @@
"path-key": "^3.0.0"
}
},
- "nwsapi": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
- "dev": true
- },
"object-inspect": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
@@ -10905,6 +13067,12 @@
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
"dev": true
},
+ "package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true
+ },
"parent-module": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -10917,7 +13085,8 @@
"parse-headers": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz",
- "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw=="
+ "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==",
+ "dev": true
},
"parse-json": {
"version": "4.0.0",
@@ -10929,17 +13098,6 @@
"json-parse-better-errors": "^1.0.1"
}
},
- "parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
- "path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
- },
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
@@ -10964,21 +13122,32 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
+ "path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ }
+ },
"path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true
},
- "peek-readable": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
- "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg=="
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true
},
"picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true
},
"pify": {
@@ -10988,13 +13157,10 @@
"dev": true
},
"pirates": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
- "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
- "dev": true,
- "requires": {
- "node-modules-regexp": "^1.0.0"
- }
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+ "dev": true
},
"pkg-dir": {
"version": "2.0.0",
@@ -11049,7 +13215,8 @@
"process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
},
"progress": {
"version": "2.0.3",
@@ -11057,32 +13224,16 @@
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
"dev": true
},
- "prompts": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz",
- "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==",
- "dev": true,
- "requires": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- }
- },
- "psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
- "dev": true
- },
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
},
- "querystringify": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
- "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+ "pure-rand": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz",
+ "integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==",
"dev": true
},
"queue-microtask": {
@@ -11129,24 +13280,6 @@
"read-pkg": "^3.0.0"
}
},
- "readable-stream": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz",
- "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "readable-web-to-node-stream": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
- "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
- "requires": {
- "readable-stream": "^3.6.0"
- }
- },
"regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
@@ -11164,12 +13297,6 @@
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true
},
- "requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
- "dev": true
- },
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@@ -11227,35 +13354,11 @@
"queue-microtask": "^1.2.2"
}
},
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "dev": true,
- "requires": {
- "xmlchars": "^2.2.0"
- }
- },
"semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true
},
"shebang-command": {
"version": "2.0.0",
@@ -11284,15 +13387,9 @@
}
},
"signal-exit": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz",
- "integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==",
- "dev": true
- },
- "sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
"slash": {
@@ -11319,9 +13416,9 @@
"dev": true
},
"source-map-support": {
- "version": "0.5.20",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz",
- "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==",
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
"requires": {
"buffer-from": "^1.0.0",
@@ -11367,9 +13464,9 @@
"dev": true
},
"stack-utils": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz",
- "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
"dev": true,
"requires": {
"escape-string-regexp": "^2.0.0"
@@ -11383,21 +13480,6 @@
}
}
},
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "requires": {
- "safe-buffer": "~5.2.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- }
- }
- },
"string-length": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
@@ -11409,13 +13491,24 @@
}
},
"string-width": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
- "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "string-width-cjs": {
+ "version": "npm:string-width@4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
}
},
"string.prototype.trimend": {
@@ -11439,11 +13532,20 @@
}
},
"strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-ansi-cjs": {
+ "version": "npm:strip-ansi@6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
"requires": {
- "ansi-regex": "^5.0.0"
+ "ansi-regex": "^5.0.1"
}
},
"strip-bom": {
@@ -11464,15 +13566,6 @@
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true
},
- "strtok3": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz",
- "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==",
- "requires": {
- "@tokenizer/token": "^0.3.0",
- "peek-readable": "^4.1.0"
- }
- },
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -11482,22 +13575,15 @@
"has-flag": "^4.0.0"
}
},
- "supports-hyperlinks": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
- "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+ "synckit": {
+ "version": "0.11.12",
+ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz",
+ "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==",
"dev": true,
"requires": {
- "has-flag": "^4.0.0",
- "supports-color": "^7.0.0"
+ "@pkgr/core": "^0.2.9"
}
},
- "symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true
- },
"table": {
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz",
@@ -11532,16 +13618,6 @@
}
}
},
- "terminal-link": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
- "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^4.2.1",
- "supports-hyperlinks": "^2.0.0"
- }
- },
"test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
@@ -11559,24 +13635,12 @@
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
- "throat": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
- "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==",
- "dev": true
- },
"tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
"integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
"dev": true
},
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
- "dev": true
- },
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -11586,36 +13650,6 @@
"is-number": "^7.0.0"
}
},
- "token-types": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz",
- "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==",
- "requires": {
- "@tokenizer/token": "^0.3.0",
- "ieee754": "^1.2.1"
- }
- },
- "tough-cookie": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
- "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
- "dev": true,
- "requires": {
- "psl": "^1.1.33",
- "punycode": "^2.1.1",
- "universalify": "^0.2.0",
- "url-parse": "^1.5.3"
- }
- },
- "tr46": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
- "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.1"
- }
- },
"tsconfig-paths": {
"version": "3.11.0",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz",
@@ -11681,15 +13715,6 @@
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true
},
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
"typescript": {
"version": "4.6.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz",
@@ -11708,11 +13733,48 @@
"which-boxed-primitive": "^1.0.2"
}
},
- "universalify": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
- "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
- "dev": true
+ "undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
+ },
+ "unrs-resolver": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz",
+ "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==",
+ "dev": true,
+ "requires": {
+ "@unrs/resolver-binding-android-arm-eabi": "1.11.1",
+ "@unrs/resolver-binding-android-arm64": "1.11.1",
+ "@unrs/resolver-binding-darwin-arm64": "1.11.1",
+ "@unrs/resolver-binding-darwin-x64": "1.11.1",
+ "@unrs/resolver-binding-freebsd-x64": "1.11.1",
+ "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1",
+ "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1",
+ "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-arm64-musl": "1.11.1",
+ "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1",
+ "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-x64-gnu": "1.11.1",
+ "@unrs/resolver-binding-linux-x64-musl": "1.11.1",
+ "@unrs/resolver-binding-wasm32-wasi": "1.11.1",
+ "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1",
+ "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1",
+ "@unrs/resolver-binding-win32-x64-msvc": "1.11.1",
+ "napi-postinstall": "^0.3.0"
+ }
+ },
+ "update-browserslist-db": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+ "dev": true,
+ "requires": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ }
},
"uri-js": {
"version": "4.4.1",
@@ -11723,26 +13785,11 @@
"punycode": "^2.1.0"
}
},
- "url-parse": {
- "version": "1.5.10",
- "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
- "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
- "dev": true,
- "requires": {
- "querystringify": "^2.1.1",
- "requires-port": "^1.0.0"
- }
- },
"url-slug": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/url-slug/-/url-slug-3.0.2.tgz",
"integrity": "sha512-puioWUGY+esk4kKW8L6fCZWb+xK1+0L/KH2miV6GEJdlCJRJ2lfRlvHkUikyEU1e1v4j1C1HBQKvuljFOxmnEA=="
},
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
- },
"v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
@@ -11750,22 +13797,14 @@
"dev": true
},
"v8-to-istanbul": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz",
- "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==",
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
+ "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
"dev": true,
"requires": {
+ "@jridgewell/trace-mapping": "^0.3.12",
"@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^1.6.0",
- "source-map": "^0.7.3"
- },
- "dependencies": {
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
+ "convert-source-map": "^2.0.0"
}
},
"validate-npm-package-license": {
@@ -11778,63 +13817,13 @@
"spdx-expression-parse": "^3.0.0"
}
},
- "w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "requires": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
- "w3c-xmlserializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
- "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
- "dev": true,
- "requires": {
- "xml-name-validator": "^3.0.0"
- }
- },
"walker": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
- "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
- "dev": true,
- "requires": {
- "makeerror": "1.0.x"
- }
- },
- "webidl-conversions": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
- "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
- "dev": true
- },
- "whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
- "dev": true,
- "requires": {
- "iconv-lite": "0.4.24"
- }
- },
- "whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "whatwg-url": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
- "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
"dev": true,
"requires": {
- "lodash": "^4.7.0",
- "tr46": "^2.1.0",
- "webidl-conversions": "^6.1.0"
+ "makeerror": "1.0.12"
}
},
"which": {
@@ -11875,6 +13864,17 @@
"strip-ansi": "^6.0.0"
}
},
+ "wrap-ansi-cjs": {
+ "version": "npm:wrap-ansi@7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -11882,33 +13882,34 @@
"dev": true
},
"write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+ "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
"dev": true,
"requires": {
"imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
+ "signal-exit": "^4.0.1"
+ },
+ "dependencies": {
+ "signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true
+ }
}
},
- "ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "dev": true,
- "requires": {}
- },
"x3-linkedlist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/x3-linkedlist/-/x3-linkedlist-1.2.0.tgz",
- "integrity": "sha512-mH/YwxpYSKNa8bDNF1yOuZCMuV+K80LtDN8vcLDUAwNazCxptDNsYt+zA/EJeYiGbdtKposhKLZjErGVOR8mag=="
+ "integrity": "sha512-mH/YwxpYSKNa8bDNF1yOuZCMuV+K80LtDN8vcLDUAwNazCxptDNsYt+zA/EJeYiGbdtKposhKLZjErGVOR8mag==",
+ "dev": true
},
"xhr": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz",
"integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
+ "dev": true,
"requires": {
"global": "~4.4.0",
"is-function": "^1.0.1",
@@ -11916,22 +13917,11 @@
"xtend": "^4.0.0"
}
},
- "xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true
- },
- "xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true
- },
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true
},
"y18n": {
"version": "5.0.8",
@@ -11939,29 +13929,35 @@
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
},
"yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true
},
"yargs": {
- "version": "17.2.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz",
- "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==",
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"requires": {
- "cliui": "^7.0.2",
+ "cliui": "^8.0.1",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
- "string-width": "^4.2.0",
+ "string-width": "^4.2.3",
"y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
+ "yargs-parser": "^21.1.1"
}
},
"yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
}
}
}
diff --git a/scripts/domain-loader/package.json b/scripts/domain-loader/package.json
index bb17891618..0143dd5886 100644
--- a/scripts/domain-loader/package.json
+++ b/scripts/domain-loader/package.json
@@ -13,7 +13,7 @@
"author": "nsdeschenes",
"license": "MIT",
"dependencies": {
- "arangojs": "^8.0.0",
+ "arangojs": "^10.2.2",
"dotenv-safe": "^8.2.0",
"url-slug": "^3.0.2",
"yargs": "^17.2.1"
@@ -27,7 +27,7 @@
"eslint-plugin-jest": "^24.5.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^5.1.0",
- "jest": "^27.2.4",
+ "jest": "^30.3.0",
"jest-matcher-utils": "^27.2.4",
"prettier": "^2.4.1",
"typescript": "^4.6.4"
diff --git a/scripts/hash-domains/package-lock.json b/scripts/hash-domains/package-lock.json
index df0dd35685..63a392d728 100644
--- a/scripts/hash-domains/package-lock.json
+++ b/scripts/hash-domains/package-lock.json
@@ -9,7 +9,7 @@
"version": "1.0.0",
"license": "MIT",
"dependencies": {
- "arangojs": "^8.0.0",
+ "arangojs": "^10.2.2",
"dotenv-safe": "^8.2.0"
},
"devDependencies": {
@@ -1260,11 +1260,6 @@
"@sinonjs/commons": "^1.7.0"
}
},
- "node_modules/@tokenizer/token": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
- "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
- },
"node_modules/@tootallnate/once": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
@@ -1361,9 +1356,12 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "16.11.12",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz",
- "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw=="
+ "version": "20.19.37",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz",
+ "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
},
"node_modules/@types/prettier": {
"version": "2.4.2",
@@ -1656,18 +1654,22 @@
}
},
"node_modules/arangojs": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-8.0.0.tgz",
- "integrity": "sha512-VjeWxbS18c65Wu6Pr/d5/kW0Chn6ftIfUAzCmG3wUUe8OrRRalSgL6e1+5iY9apocbECo6wTK3kr2goXfLHB+A==",
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-10.2.2.tgz",
+ "integrity": "sha512-3Xllq5inTGjros0mBP9NFxrIW8Di0ldtFurLdrXy5z4NDVJPyJtnwUiiGrMPY21NuVu53wUDE23YN50jnX4epw==",
"dependencies": {
- "@types/node": ">=14",
- "multi-part": "^4.0.0",
- "path-browserify": "^1.0.1",
- "x3-linkedlist": "1.2.0",
- "xhr": "^2.4.1"
+ "@types/node": "^20.11.26"
},
"engines": {
- "node": ">=14"
+ "node": ">=20"
+ },
+ "peerDependencies": {
+ "undici": ">=5.21.0"
+ },
+ "peerDependenciesMeta": {
+ "undici": {
+ "optional": true
+ }
}
},
"node_modules/argparse": {
@@ -2250,11 +2252,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/dom-walk": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
- "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
- },
"node_modules/domexception": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
@@ -3089,22 +3086,6 @@
"node": "^10.12.0 || >=12.0.0"
}
},
- "node_modules/file-type": {
- "version": "16.5.4",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz",
- "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==",
- "dependencies": {
- "readable-web-to-node-stream": "^3.0.0",
- "strtok3": "^6.2.4",
- "token-types": "^4.1.1"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/file-type?sponsor=1"
- }
- },
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@@ -3323,15 +3304,6 @@
"node": ">= 6"
}
},
- "node_modules/global": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
- "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
- "dependencies": {
- "min-document": "^2.19.0",
- "process": "^0.11.10"
- }
- },
"node_modules/globals": {
"version": "13.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
@@ -3529,25 +3501,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
@@ -3693,7 +3646,8 @@
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
},
"node_modules/internal-slot": {
"version": "1.0.3",
@@ -3794,11 +3748,6 @@
"node": ">=8"
}
},
- "node_modules/is-function": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
- "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="
- },
"node_modules/is-generator-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
@@ -4816,9 +4765,9 @@
}
},
"node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
"dev": true
},
"node_modules/lodash.merge": {
@@ -4919,26 +4868,16 @@
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
"engines": {
"node": ">= 0.6"
}
},
- "node_modules/mime-kind": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mime-kind/-/mime-kind-4.0.0.tgz",
- "integrity": "sha512-qQvglvSpS5mABi30beNFd+uHKtKkxD3dxAmhi2e589XKx+WfVqhg5i5P5LBcVgwwv3BiDpNMBWrHqU+JexW4aA==",
- "dependencies": {
- "file-type": "^16.5.4",
- "mime-types": "^2.1.24"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
"dependencies": {
"mime-db": "1.52.0"
},
@@ -4955,18 +4894,10 @@
"node": ">=6"
}
},
- "node_modules/min-document": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
- "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
- "dependencies": {
- "dom-walk": "^0.1.0"
- }
- },
"node_modules/minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -4987,26 +4918,6 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "node_modules/multi-part": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multi-part/-/multi-part-4.0.0.tgz",
- "integrity": "sha512-YT/CS0PAe62kT8EoQXcQj8yIcSu18HhYv0s6ShdAFsoFly3oV5QaxODnkj0u7zH0/RFyH47cdcMVpcGXliEFVA==",
- "dependencies": {
- "mime-kind": "^4.0.0",
- "multi-part-lite": "^1.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/multi-part-lite": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/multi-part-lite/-/multi-part-lite-1.0.0.tgz",
- "integrity": "sha512-KxIRbBZZ45hoKX1ROD/19wJr0ql1bef1rE8Y1PCwD3PuNXV42pp7Wo8lEHYuAajoT4vfAFcd3rPjlkyEEyt1nw==",
- "engines": {
- "node": ">=8.3.0"
- }
- },
"node_modules/natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -5191,22 +5102,12 @@
"node": ">=6"
}
},
- "node_modules/parse-headers": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz",
- "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw=="
- },
"node_modules/parse5": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
"dev": true
},
- "node_modules/path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
- },
"node_modules/path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
@@ -5249,18 +5150,6 @@
"node": ">=8"
}
},
- "node_modules/peek-readable": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
- "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -5268,9 +5157,9 @@
"dev": true
},
"node_modules/picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"engines": {
"node": ">=8.6"
@@ -5348,14 +5237,6 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "engines": {
- "node": ">= 0.6.0"
- }
- },
"node_modules/progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@@ -5425,34 +5306,6 @@
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
"dev": true
},
- "node_modules/readable-stream": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz",
- "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/readable-web-to-node-stream": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
- "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
- "dependencies": {
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
"node_modules/regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
@@ -5747,33 +5600,6 @@
"node": ">=8"
}
},
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/string-length": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
@@ -5869,22 +5695,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/strtok3": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz",
- "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==",
- "dependencies": {
- "@tokenizer/token": "^0.3.0",
- "peek-readable": "^4.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -6023,22 +5833,6 @@
"node": ">=8.0"
}
},
- "node_modules/token-types": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz",
- "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==",
- "dependencies": {
- "@tokenizer/token": "^0.3.0",
- "ieee754": "^1.2.1"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Borewit"
- }
- },
"node_modules/tough-cookie": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
@@ -6191,6 +5985,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
+ },
"node_modules/universalify": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
@@ -6219,11 +6018,6 @@
"requires-port": "^1.0.0"
}
},
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
- },
"node_modules/v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
@@ -6417,25 +6211,6 @@
}
}
},
- "node_modules/x3-linkedlist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/x3-linkedlist/-/x3-linkedlist-1.2.0.tgz",
- "integrity": "sha512-mH/YwxpYSKNa8bDNF1yOuZCMuV+K80LtDN8vcLDUAwNazCxptDNsYt+zA/EJeYiGbdtKposhKLZjErGVOR8mag==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/xhr": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz",
- "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
- "dependencies": {
- "global": "~4.4.0",
- "is-function": "^1.0.1",
- "parse-headers": "^2.0.0",
- "xtend": "^4.0.0"
- }
- },
"node_modules/xml-name-validator": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
@@ -6448,14 +6223,6 @@
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
"dev": true
},
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "engines": {
- "node": ">=0.4"
- }
- },
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
@@ -7460,11 +7227,6 @@
"@sinonjs/commons": "^1.7.0"
}
},
- "@tokenizer/token": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
- "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
- },
"@tootallnate/once": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
@@ -7558,9 +7320,12 @@
"dev": true
},
"@types/node": {
- "version": "16.11.12",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz",
- "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw=="
+ "version": "20.19.37",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz",
+ "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==",
+ "requires": {
+ "undici-types": "~6.21.0"
+ }
},
"@types/prettier": {
"version": "2.4.2",
@@ -7760,15 +7525,11 @@
}
},
"arangojs": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-8.0.0.tgz",
- "integrity": "sha512-VjeWxbS18c65Wu6Pr/d5/kW0Chn6ftIfUAzCmG3wUUe8OrRRalSgL6e1+5iY9apocbECo6wTK3kr2goXfLHB+A==",
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/arangojs/-/arangojs-10.2.2.tgz",
+ "integrity": "sha512-3Xllq5inTGjros0mBP9NFxrIW8Di0ldtFurLdrXy5z4NDVJPyJtnwUiiGrMPY21NuVu53wUDE23YN50jnX4epw==",
"requires": {
- "@types/node": ">=14",
- "multi-part": "^4.0.0",
- "path-browserify": "^1.0.1",
- "x3-linkedlist": "1.2.0",
- "xhr": "^2.4.1"
+ "@types/node": "^20.11.26"
}
},
"argparse": {
@@ -8224,11 +7985,6 @@
"esutils": "^2.0.2"
}
},
- "dom-walk": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
- "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
- },
"domexception": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
@@ -8854,16 +8610,6 @@
"flat-cache": "^3.0.4"
}
},
- "file-type": {
- "version": "16.5.4",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz",
- "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==",
- "requires": {
- "readable-web-to-node-stream": "^3.0.0",
- "strtok3": "^6.2.4",
- "token-types": "^4.1.1"
- }
- },
"fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@@ -9021,15 +8767,6 @@
"is-glob": "^4.0.1"
}
},
- "global": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
- "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
- "requires": {
- "min-document": "^2.19.0",
- "process": "^0.11.10"
- }
- },
"globals": {
"version": "13.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
@@ -9169,11 +8906,6 @@
"safer-buffer": ">= 2.1.2 < 3"
}
},
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
- },
"ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
@@ -9279,7 +9011,8 @@
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
},
"internal-slot": {
"version": "1.0.3",
@@ -9347,11 +9080,6 @@
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true
},
- "is-function": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
- "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="
- },
"is-generator-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
@@ -10125,9 +9853,9 @@
}
},
"lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
"dev": true
},
"lodash.merge": {
@@ -10208,21 +9936,14 @@
"mime-db": {
"version": "1.52.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
- },
- "mime-kind": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mime-kind/-/mime-kind-4.0.0.tgz",
- "integrity": "sha512-qQvglvSpS5mABi30beNFd+uHKtKkxD3dxAmhi2e589XKx+WfVqhg5i5P5LBcVgwwv3BiDpNMBWrHqU+JexW4aA==",
- "requires": {
- "file-type": "^16.5.4",
- "mime-types": "^2.1.24"
- }
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true
},
"mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
"requires": {
"mime-db": "1.52.0"
}
@@ -10233,18 +9954,10 @@
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
- "min-document": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
- "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
- "requires": {
- "dom-walk": "^0.1.0"
- }
- },
"minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
@@ -10262,20 +9975,6 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "multi-part": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/multi-part/-/multi-part-4.0.0.tgz",
- "integrity": "sha512-YT/CS0PAe62kT8EoQXcQj8yIcSu18HhYv0s6ShdAFsoFly3oV5QaxODnkj0u7zH0/RFyH47cdcMVpcGXliEFVA==",
- "requires": {
- "mime-kind": "^4.0.0",
- "multi-part-lite": "^1.0.0"
- }
- },
- "multi-part-lite": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/multi-part-lite/-/multi-part-lite-1.0.0.tgz",
- "integrity": "sha512-KxIRbBZZ45hoKX1ROD/19wJr0ql1bef1rE8Y1PCwD3PuNXV42pp7Wo8lEHYuAajoT4vfAFcd3rPjlkyEEyt1nw=="
- },
"natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -10415,22 +10114,12 @@
"callsites": "^3.0.0"
}
},
- "parse-headers": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz",
- "integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw=="
- },
"parse5": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
"dev": true
},
- "path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
- },
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
@@ -10461,11 +10150,6 @@
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true
},
- "peek-readable": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
- "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg=="
- },
"picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -10473,9 +10157,9 @@
"dev": true
},
"picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true
},
"pirates": {
@@ -10525,11 +10209,6 @@
}
}
},
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
- },
"progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@@ -10576,24 +10255,6 @@
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
"dev": true
},
- "readable-stream": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz",
- "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "readable-web-to-node-stream": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
- "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
- "requires": {
- "readable-stream": "^3.6.0"
- }
- },
"regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
@@ -10805,21 +10466,6 @@
}
}
},
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "requires": {
- "safe-buffer": "~5.2.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- }
- }
- },
"string-length": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
@@ -10888,15 +10534,6 @@
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true
},
- "strtok3": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz",
- "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==",
- "requires": {
- "@tokenizer/token": "^0.3.0",
- "peek-readable": "^4.1.0"
- }
- },
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -11009,15 +10646,6 @@
"is-number": "^7.0.0"
}
},
- "token-types": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz",
- "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==",
- "requires": {
- "@tokenizer/token": "^0.3.0",
- "ieee754": "^1.2.1"
- }
- },
"tough-cookie": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
@@ -11132,6 +10760,11 @@
"which-boxed-primitive": "^1.0.2"
}
},
+ "undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
+ },
"universalify": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
@@ -11157,11 +10790,6 @@
"requires-port": "^1.0.0"
}
},
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
- },
"v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
@@ -11310,22 +10938,6 @@
"dev": true,
"requires": {}
},
- "x3-linkedlist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/x3-linkedlist/-/x3-linkedlist-1.2.0.tgz",
- "integrity": "sha512-mH/YwxpYSKNa8bDNF1yOuZCMuV+K80LtDN8vcLDUAwNazCxptDNsYt+zA/EJeYiGbdtKposhKLZjErGVOR8mag=="
- },
- "xhr": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz",
- "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
- "requires": {
- "global": "~4.4.0",
- "is-function": "^1.0.1",
- "parse-headers": "^2.0.0",
- "xtend": "^4.0.0"
- }
- },
"xml-name-validator": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
@@ -11338,11 +10950,6 @@
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
"dev": true
},
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
- },
"y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
diff --git a/scripts/hash-domains/package.json b/scripts/hash-domains/package.json
index f2ded81914..b276161ecc 100644
--- a/scripts/hash-domains/package.json
+++ b/scripts/hash-domains/package.json
@@ -16,7 +16,7 @@
"form-data@^4.0.0": "4.0.4"
},
"dependencies": {
- "arangojs": "^8.0.0",
+ "arangojs": "^10.2.2",
"dotenv-safe": "^8.2.0"
},
"devDependencies": {
diff --git a/services/cvd-enrollment/.dockerignore b/services/cvd-enrollment/.dockerignore
new file mode 100644
index 0000000000..f0ea1a57bd
--- /dev/null
+++ b/services/cvd-enrollment/.dockerignore
@@ -0,0 +1,6 @@
+**/*.env
+Dockerfile
+*.yaml
+*.md
+.venv
+.pytest_cache
diff --git a/services/cvd-enrollment/.env.example b/services/cvd-enrollment/.env.example
new file mode 100644
index 0000000000..06996c222d
--- /dev/null
+++ b/services/cvd-enrollment/.env.example
@@ -0,0 +1,9 @@
+API_USERNAME=
+API_TOKEN=
+ORG_ID=
+PROGRAM_ID=
+
+DB_USER=
+DB_PASS=
+DB_NAME=
+DB_URL=
diff --git a/services/cvd-enrollment/Dockerfile b/services/cvd-enrollment/Dockerfile
new file mode 100644
index 0000000000..18fa35a527
--- /dev/null
+++ b/services/cvd-enrollment/Dockerfile
@@ -0,0 +1,50 @@
+FROM python:3.14.2-alpine AS base
+ENV PYTHONUNBUFFERED 1
+ENV PYTHONWARNINGS ignore
+
+#===============================================================================================
+
+FROM base AS python-builder
+
+# Copy local code to the container image.
+WORKDIR /working/install
+
+RUN apk add --no-cache \
+ python3 \
+ py3-pip \
+ py3-setuptools \
+ py3-wheel \
+ build-base \
+ python3-dev
+
+COPY requirements.txt ./requirements.txt
+# Install python requirements to /working/install directory for cleaner copy
+RUN pip3 install --prefix=/working/install -r ./requirements.txt
+
+#===============================================================================================
+
+FROM base AS production
+
+WORKDIR /cvd-enrollment
+
+# Copy installed python modules
+COPY --from=python-builder /working/install/lib /usr/local/lib
+# Copy local source code
+COPY hackerone.py main.py ./
+
+RUN adduser -D enrollment
+USER enrollment
+
+CMD ["python3", "main.py"]
+
+#===============================================================================================
+
+FROM production AS test
+
+# Copy test files (which were excluded from production)
+COPY . .
+USER enrollment
+
+#===============================================================================================
+
+FROM production AS final
diff --git a/services/cvd-enrollment/README.md b/services/cvd-enrollment/README.md
new file mode 100644
index 0000000000..71d1d91a09
--- /dev/null
+++ b/services/cvd-enrollment/README.md
@@ -0,0 +1,53 @@
+# CVD Enrollment Service
+
+This service manages the enrollment of domains into the CVD (Coordinated Vulnerability Disclosure) program and synchronizes domain assets with HackerOne.
+
+## Overview
+
+- **Synchronizes enrolled domains from Tracker with HackerOne assets**
+- **Creates new assets in HackerOne for newly enrolled domains**
+- **Archives assets in HackerOne that are no longer enrolled**
+
+## Files
+
+- [`main.py`](services/cvd-enrollment/main.py): Core logic for domain enrollment, asset creation, and archiving.
+- [`hackerone.py`](services/cvd-enrollment/hackerone.py): Handles HackerOne API interactions for asset management.
+
+## How It Works
+
+1. **Fetches enrolled domains** from the Tracker database using ArangoDB.
+2. **Retrieves current assets** from HackerOne via API.
+3. **Creates new assets** in HackerOne for domains enrolled in CVD but not present in HackerOne.
+4. **Archives assets** in HackerOne that are no longer enrolled in CVD.
+
+## Environment Variables
+
+- `LOGGER_LEVEL`: Logging verbosity (default: INFO)
+- `DB_USER`, `DB_PASS`, `DB_NAME`, `DB_URL`: ArangoDB credentials
+- `API_USERNAME`, `API_TOKEN`, `ORG_ID`: HackerOne API credentials
+
+## Usage
+
+Run the service:
+
+```bash
+python main.py
+```
+
+## Logging
+
+- DEBUG/INFO logs to stdout
+- WARNING and above logs to stderr
+
+## Notes
+
+- Re-adding archived assets is not currently supported by the HackerOne API.
+
+## Requirements
+
+- Python 3.10+
+- `arango`, `python-dotenv`, `requests`
+
+## License
+
+See project root for license information.
diff --git a/services/cvd-enrollment/cloudbuild.yaml b/services/cvd-enrollment/cloudbuild.yaml
new file mode 100644
index 0000000000..2119108e32
--- /dev/null
+++ b/services/cvd-enrollment/cloudbuild.yaml
@@ -0,0 +1,45 @@
+steps:
+ - name: 'docker:29'
+ id: generate-image-name
+ entrypoint: 'ash'
+ dir: services/cvd-enrollment
+ args:
+ - '-c'
+ - |
+ echo 'northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/cvd-enrollment:'"$(echo $BRANCH_NAME | sed 's/[^a-zA-Z0-9]/-/g')-$SHORT_SHA-$(date +%s)" > /workspace/imagename
+
+ - name: 'docker:29'
+ id: build-test-image
+ dir: services/cvd-enrollment
+ args: ['build', '--target=test', '-t', 'test-image', '.']
+
+ - name: 'test-image'
+ id: run-tests
+ dir: services/cvd-enrollment
+ entrypoint: 'python3'
+ args: [ '-m', 'pytest', 'tests/', '-v']
+
+ - name: 'docker:29'
+ id: build-production-image
+ entrypoint: 'ash'
+ dir: services/cvd-enrollment
+ args:
+ - '-c'
+ - |
+ image=$(cat /workspace/imagename)
+ docker build -t $image .
+
+ - name: 'docker:29'
+ id: push-enrollment-if-master
+ entrypoint: 'ash'
+ dir: services/cvd-enrollment
+ args:
+ - '-c'
+ - |
+ if [[ '$BRANCH_NAME' == 'master' ]]
+ then
+ image=$(cat /workspace/imagename)
+ docker push $image
+ else
+ exit 0
+ fi
diff --git a/services/cvd-enrollment/hackerone.py b/services/cvd-enrollment/hackerone.py
new file mode 100644
index 0000000000..c1fc28c82f
--- /dev/null
+++ b/services/cvd-enrollment/hackerone.py
@@ -0,0 +1,152 @@
+import requests
+from requests import Response
+from requests.adapters import HTTPAdapter
+from urllib3.util.retry import Retry
+import os
+import logging
+from dotenv import load_dotenv
+from typing import TypedDict
+
+
+load_dotenv()
+
+BASE_URL = "https://api.hackerone.com/v1"
+HEADERS = {
+ "Accept": "application/json",
+ "Content-Type": "application/json",
+}
+
+API_USERNAME = os.getenv("API_USERNAME")
+API_TOKEN = os.getenv("API_TOKEN")
+ORG_ID = os.getenv("ORG_ID")
+PROGRAM_ID = os.getenv("PROGRAM_ID")
+
+ORG_ASSETS_URL = f"{BASE_URL}/organizations/{ORG_ID}/assets"
+
+logger = logging.getLogger(__name__)
+
+
+class HackerOneAPIError(Exception):
+ pass
+
+
+class EnrollmentOptions(TypedDict):
+ description: str | None
+ max_severity: str | None
+ confidentiality_requirement: str | None
+ integrity_requirement: str | None
+ availability_requirement: str | None
+
+
+# Retry on transient errors for idempotent methods only.
+# POST is excluded to avoid duplicate asset/scope creation.
+_retry = Retry(
+ total=3,
+ backoff_factor=1,
+ status_forcelist=[429, 500, 502, 503, 504],
+ allowed_methods=["GET", "PUT"],
+)
+_session = requests.Session()
+_session.mount("https://", HTTPAdapter(max_retries=_retry))
+
+
+def _request(method: str, url: str, **kwargs) -> Response:
+ try:
+ return _session.request(
+ method, url, auth=(API_USERNAME, API_TOKEN), headers=HEADERS, **kwargs
+ )
+ except requests.exceptions.RequestException as e:
+ raise HackerOneAPIError(str(e)) from e
+
+
+def handle_res(res: Response) -> dict:
+ if not res.ok:
+ errors = res.json().get("errors", [])
+ raise HackerOneAPIError(errors)
+ return res.json()
+
+
+def get_all_assets(scope: str = "all", archived: bool = False) -> dict:
+ scope_enums = ["all", "new", "in_scope", "out_of_scope", "untested"]
+ # TODO add filters to make the most correct list possible
+ filters = "filter[asset_types][]=domain" # &filter[state][]=confirmed,unconfirmed"
+ if archived:
+ filters += "&filter[archived]=true"
+ if scope in scope_enums:
+ filters += f"&filter[coverage]={scope}"
+
+ return handle_res(_request("GET", f"{ORG_ASSETS_URL}?{filters}"))
+
+
+def get_asset(domain: str) -> dict:
+ return handle_res(
+ _request(
+ "GET",
+ f"{ORG_ASSETS_URL}?filter[identifier]={domain}&filter[asset_types][]=domain",
+ )
+ )
+
+
+def create_asset(domain: str, options: EnrollmentOptions) -> dict:
+ data = {
+ "data": {
+ "type": "asset",
+ "attributes": {"asset_type": "domain", "identifier": domain, **options},
+ "relationships": {"asset_tags": {"data": []}},
+ }
+ }
+ return handle_res(_request("POST", ORG_ASSETS_URL, json=data))
+
+
+def archive_assets(data: dict) -> dict:
+ return handle_res(_request("POST", f"{ORG_ASSETS_URL}/archive", json=data))
+
+
+def get_scope(asset_name: str) -> dict:
+ return handle_res(
+ _request(
+ "GET",
+ f"{BASE_URL}/programs/{PROGRAM_ID}/structured_scopes?filter[asset_identifier]={asset_name}",
+ )
+ )
+
+
+def add_scope(asset_name: str, enrollment_status: str) -> dict:
+ data = {
+ "data": {
+ "type": "structured-scope",
+ "attributes": {
+ "asset_identifier": asset_name,
+ "asset_type": "URL",
+ "eligible_for_bounty": False,
+ "eligible_for_submission": enrollment_status == "enrolled",
+ },
+ }
+ }
+ return handle_res(
+ _request(
+ "POST",
+ f"{BASE_URL}/programs/{PROGRAM_ID}/structured_scopes",
+ json=data,
+ )
+ )
+
+
+def update_scope(asset_name: str, scope_id: str, enrollment_status: str) -> dict:
+ data = {
+ "data": {
+ "type": "structured-scope",
+ "attributes": {
+ "asset_identifier": asset_name,
+ "asset_type": "URL",
+ "eligible_for_submission": enrollment_status == "enrolled",
+ },
+ }
+ }
+ return handle_res(
+ _request(
+ "PUT",
+ f"{BASE_URL}/programs/{PROGRAM_ID}/structured_scopes/{scope_id}",
+ json=data,
+ )
+ )
diff --git a/services/cvd-enrollment/main.py b/services/cvd-enrollment/main.py
new file mode 100644
index 0000000000..6d76367b0c
--- /dev/null
+++ b/services/cvd-enrollment/main.py
@@ -0,0 +1,242 @@
+import logging
+import sys
+import os
+
+from arango import ArangoClient
+from arango.database import StandardDatabase
+from dotenv import load_dotenv
+from hackerone import (
+ HackerOneAPIError,
+ add_scope,
+ get_all_assets,
+ create_asset,
+ archive_assets,
+ get_scope,
+ update_scope,
+)
+
+load_dotenv()
+
+LOGGER_LEVEL = os.getenv("LOGGER_LEVEL", "INFO")
+
+logger_level = logging._nameToLevel.get(LOGGER_LEVEL, None)
+if not isinstance(logger_level, int):
+ print(f"Invalid logger level: {LOGGER_LEVEL}")
+ sys.exit(1)
+
+# Split logging to stdout and stderr
+# DEBUG and INFO to stdout
+# WARNING and above to stderr
+h1 = logging.StreamHandler(sys.stdout)
+h1.setLevel(logging.DEBUG)
+h1.addFilter(lambda record: record.levelno <= logging.INFO)
+h2 = logging.StreamHandler(sys.stderr)
+h2.setLevel(logging.WARNING)
+
+logging.basicConfig(
+ level=logger_level,
+ format="[%(asctime)s :: %(name)s :: %(levelname)s] %(message)s",
+ handlers=[h1, h2],
+)
+logger = logging.getLogger(__name__)
+
+DB_USER = os.getenv("DB_USER")
+DB_PASS = os.getenv("DB_PASS")
+DB_NAME = os.getenv("DB_NAME")
+DB_URL = os.getenv("DB_URL")
+
+
+def get_asset_identifiers(assets: list[dict]):
+ return [a.get("attributes", {}).get("identifier", None) for a in assets]
+
+
+def get_domain_names(domains: list[dict]):
+ return [d.get("domain", None) for d in domains]
+
+
+def fetch_domains(db: StandardDatabase) -> tuple[list[dict], list[dict], list[dict]]:
+ cursor = db.aql.execute(
+ """
+ FOR d IN domains
+ FILTER d.archived != true
+ FILTER d.rcode != "NXDOMAIN"
+ FILTER d.blocked != true
+ RETURN d
+ """
+ )
+ all_domains = list(cursor)
+
+ enrolled = [
+ d for d in all_domains
+ if isinstance(d.get("cvdEnrollment"), dict)
+ and d.get("cvdEnrollment", {}).get("status") == "enrolled"
+ ]
+ denied = [
+ d for d in all_domains
+ if isinstance(d.get("cvdEnrollment"), dict)
+ and d.get("cvdEnrollment", {}).get("status") == "deny"
+ ]
+ return all_domains, enrolled, denied
+
+
+def fetch_h1_assets() -> tuple[list[dict], list[dict]]:
+ # Raises HackerOneAPIError on failure — caller should abort if in_scope is unavailable.
+ in_scope = get_all_assets(scope="in_scope").get("data", [])
+
+ # A degraded run without out-of-scope data is preferable to aborting entirely.
+ # Rescope detection (deny → enrolled) will be skipped for this run.
+ try:
+ out_of_scope = get_all_assets(scope="out_of_scope").get("data", [])
+ except HackerOneAPIError as e:
+ logger.warning(
+ f"Could not fetch out-of-scope assets, rescope detection will be skipped: {e}"
+ )
+ out_of_scope = []
+
+ return in_scope, out_of_scope
+
+
+def create_assets(domains: list[dict]) -> tuple[int, int]:
+ successes, failures = 0, 0
+ for a in domains:
+ domain = a.get("domain")
+ enrollment_options = a.get("cvdEnrollment", {})
+ try:
+ res = create_asset(domain=domain, options=enrollment_options)
+ logger.info(res)
+ res = add_scope(
+ asset_name=domain,
+ enrollment_status=enrollment_options.get("status"),
+ )
+ logger.info(res)
+ successes += 1
+ except HackerOneAPIError as e:
+ logger.error(f"Failed to create asset {domain}: {e}")
+ failures += 1
+ return successes, failures
+
+
+def rescope_assets(domain_names: list[str], enrollment_status: str) -> tuple[int, int]:
+ successes, failures = 0, 0
+ for domain in domain_names:
+ try:
+ scope_data = get_scope(domain).get("data", [])
+ if not scope_data:
+ logger.error(f"No existing scope entry found for {domain}, skipping rescope.")
+ failures += 1
+ continue
+ scope_id = scope_data[0].get("id", "")
+ res = update_scope(
+ asset_name=domain,
+ scope_id=scope_id,
+ enrollment_status=enrollment_status,
+ )
+ logger.info(res)
+ successes += 1
+ except HackerOneAPIError as e:
+ logger.error(f"Failed to update scope for {domain}: {e}")
+ failures += 1
+ return successes, failures
+
+
+def archive_unenrolled_assets(assets: list[dict]):
+ res = archive_assets(data={"data": assets})
+ logger.info(res)
+
+
+def main(db: StandardDatabase):
+ try:
+ all_domains, enrolled_domains, denied_domains = fetch_domains(db)
+ except Exception as e:
+ logger.error(f"Error(s) while fetching domains from DB: {e}")
+ return
+
+ logger.info(f"Found {len(enrolled_domains)} enrolled domains.")
+
+ try:
+ cvd_assets, cvd_assets_out_of_scope = fetch_h1_assets()
+ except HackerOneAPIError as e:
+ logger.error(f"Error(s) while fetching H1 assets: {e}")
+ return
+
+ # pre-compute sets for O(1) lookups
+ cvd_identifiers = set(get_asset_identifiers(cvd_assets))
+ out_of_scope_identifiers = set(get_asset_identifiers(cvd_assets_out_of_scope))
+ all_domain_names = set(get_domain_names(all_domains))
+ enrolled_domain_names = set(get_domain_names(enrolled_domains))
+ denied_domain_names = set(get_domain_names(denied_domains))
+
+ # enrolled domains not yet in H1
+ new_assets = [
+ d for d in enrolled_domains
+ if d.get("domain") not in cvd_identifiers
+ and d.get("domain") not in out_of_scope_identifiers
+ ]
+ if new_assets:
+ logger.info(f"Creating {len(new_assets)} new enrolled assets.")
+ _, fail = create_assets(new_assets)
+ if fail:
+ logger.warning(f"{fail}/{len(new_assets)} enrolled asset creations failed.")
+
+ # TODO handle re-adding archived assets: The hackerone API currently does not support this function. Revisit once possible
+
+ # deny → enrolled: already exist in H1 as out-of-scope
+ rescoped_to_enrolled = [
+ d.get("domain") for d in enrolled_domains
+ if d.get("domain") in out_of_scope_identifiers
+ ]
+ if rescoped_to_enrolled:
+ logger.info(f"Rescoping {len(rescoped_to_enrolled)} assets to enrolled.")
+ _, fail = rescope_assets(rescoped_to_enrolled, "enrolled")
+ if fail:
+ logger.warning(f"{fail}/{len(rescoped_to_enrolled)} rescopes to enrolled failed.")
+
+ # denied domains not yet in H1
+ new_unscoped_assets = [
+ d for d in denied_domains
+ if d.get("domain") not in cvd_identifiers
+ and d.get("domain") not in out_of_scope_identifiers
+ ]
+ if new_unscoped_assets:
+ logger.info(f"Creating {len(new_unscoped_assets)} new out-of-scope assets.")
+ _, fail = create_assets(new_unscoped_assets)
+ if fail:
+ logger.warning(f"{fail}/{len(new_unscoped_assets)} out-of-scope asset creations failed.")
+
+ # enrolled → deny: currently in-scope in H1
+ rescoped_to_denied = [
+ identifier for a in cvd_assets
+ if (identifier := a.get("attributes", {}).get("identifier"))
+ and identifier in denied_domain_names
+ ]
+ if rescoped_to_denied:
+ logger.info(f"Rescoping {len(rescoped_to_denied)} assets to out-of-scope.")
+ _, fail = rescope_assets(rescoped_to_denied, "deny")
+ if fail:
+ logger.warning(f"{fail}/{len(rescoped_to_denied)} rescopes to out-of-scope failed.")
+
+ # archive in-scope H1 assets that are no longer enrolled or denied
+ archive_list = [
+ a for a in cvd_assets
+ if (identifier := a.get("attributes", {}).get("identifier"))
+ and identifier not in enrolled_domain_names
+ and identifier not in denied_domain_names
+ and identifier in all_domain_names
+ ]
+ if archive_list:
+ logger.info(f"Archiving {len(archive_list)} assets from CVD program.")
+ try:
+ archive_unenrolled_assets(archive_list)
+ except HackerOneAPIError as e:
+ logger.error(f"Error(s) while archiving CVD assets: {e}")
+
+
+if __name__ == "__main__":
+ logger.info("CVD Enrollment service started")
+
+ client = ArangoClient(hosts=DB_URL)
+ db = client.db(DB_NAME, username=DB_USER, password=DB_PASS)
+
+ main(db=db)
+
+ logger.info("CVD Enrollment service shutting down...")
diff --git a/services/cvd-enrollment/requirements.txt b/services/cvd-enrollment/requirements.txt
new file mode 100644
index 0000000000..06903ff238
--- /dev/null
+++ b/services/cvd-enrollment/requirements.txt
@@ -0,0 +1,5 @@
+python-arango==8.2.6
+python-dotenv==1.2.2
+requests==2.33.0
+requests-toolbelt==1.0.0
+pytest==9.0.3
diff --git a/api/src/email-scan/objects/dkim.js b/services/cvd-enrollment/tests/__init__.py
similarity index 100%
rename from api/src/email-scan/objects/dkim.js
rename to services/cvd-enrollment/tests/__init__.py
diff --git a/services/cvd-enrollment/tests/conftest.py b/services/cvd-enrollment/tests/conftest.py
new file mode 100644
index 0000000000..496b2a6ca2
--- /dev/null
+++ b/services/cvd-enrollment/tests/conftest.py
@@ -0,0 +1,22 @@
+import pytest
+from unittest.mock import MagicMock
+
+
+def make_h1_asset(identifier: str) -> dict:
+ """Build a minimal HackerOne asset dict as returned by the API."""
+ return {"attributes": {"identifier": identifier}}
+
+
+def make_domain(domain: str, cvd_status: str = None) -> dict:
+ """Build a minimal domain dict as returned from ArangoDB."""
+ d = {"domain": domain}
+ if cvd_status is not None:
+ d["cvdEnrollment"] = {"status": cvd_status}
+ return d
+
+
+def make_mock_db(domains: list) -> MagicMock:
+ """Return a mock ArangoDB StandardDatabase whose AQL cursor yields the given domains."""
+ db = MagicMock()
+ db.aql.execute.return_value = iter(domains)
+ return db
diff --git a/services/cvd-enrollment/tests/test_hackerone.py b/services/cvd-enrollment/tests/test_hackerone.py
new file mode 100644
index 0000000000..e987271ae6
--- /dev/null
+++ b/services/cvd-enrollment/tests/test_hackerone.py
@@ -0,0 +1,283 @@
+import pytest
+from unittest.mock import MagicMock, patch
+
+import requests
+
+from hackerone import (
+ HackerOneAPIError,
+ handle_res,
+ get_all_assets,
+ get_asset,
+ create_asset,
+ archive_assets,
+ get_scope,
+ add_scope,
+ update_scope,
+ _request,
+)
+
+
+def _ok_response(body: dict) -> MagicMock:
+ res = MagicMock()
+ res.ok = True
+ res.json.return_value = body
+ return res
+
+
+def _err_response(errors: list) -> MagicMock:
+ res = MagicMock()
+ res.ok = False
+ res.json.return_value = {"errors": errors}
+ return res
+
+
+# ---------------------------------------------------------------------------
+# handle_res
+# ---------------------------------------------------------------------------
+
+class TestHandleRes:
+ def test_returns_json_on_ok(self):
+ assert handle_res(_ok_response({"data": []})) == {"data": []}
+
+ def test_raises_hackerone_api_error_on_non_ok(self):
+ with pytest.raises(HackerOneAPIError):
+ handle_res(_err_response([{"title": "Not found"}]))
+
+ def test_error_list_preserved_in_exception(self):
+ errors = [{"title": "Unauthorized"}]
+ with pytest.raises(HackerOneAPIError) as exc_info:
+ handle_res(_err_response(errors))
+ assert exc_info.value.args[0] == errors
+
+
+# ---------------------------------------------------------------------------
+# _request — network error translation
+# ---------------------------------------------------------------------------
+
+class TestRequest:
+ @patch("hackerone._session")
+ def test_translates_connection_error_to_api_error(self, mock_session):
+ mock_session.request.side_effect = requests.exceptions.ConnectionError("timeout")
+ with pytest.raises(HackerOneAPIError):
+ _request("GET", "https://api.hackerone.com/v1/test")
+
+ @patch("hackerone._session")
+ def test_translates_timeout_to_api_error(self, mock_session):
+ mock_session.request.side_effect = requests.exceptions.Timeout()
+ with pytest.raises(HackerOneAPIError):
+ _request("GET", "https://api.hackerone.com/v1/test")
+
+ @patch("hackerone._session")
+ def test_returns_response_on_success(self, mock_session):
+ mock_response = MagicMock()
+ mock_session.request.return_value = mock_response
+ result = _request("GET", "https://api.hackerone.com/v1/test")
+ assert result is mock_response
+
+
+# ---------------------------------------------------------------------------
+# get_all_assets
+# ---------------------------------------------------------------------------
+
+class TestGetAllAssets:
+ @patch("hackerone._request")
+ def test_always_includes_domain_type_filter(self, mock_req):
+ mock_req.return_value = _ok_response({"data": []})
+ get_all_assets()
+ url = mock_req.call_args[0][1]
+ assert "filter[asset_types][]=domain" in url
+
+ @patch("hackerone._request")
+ def test_includes_scope_filter_when_valid(self, mock_req):
+ mock_req.return_value = _ok_response({"data": []})
+ get_all_assets(scope="in_scope")
+ url = mock_req.call_args[0][1]
+ assert "filter[coverage]=in_scope" in url
+
+ @patch("hackerone._request")
+ def test_ignores_unknown_scope(self, mock_req):
+ mock_req.return_value = _ok_response({"data": []})
+ get_all_assets(scope="invalid_scope")
+ url = mock_req.call_args[0][1]
+ assert "filter[coverage]" not in url
+
+ @patch("hackerone._request")
+ def test_includes_archived_filter(self, mock_req):
+ mock_req.return_value = _ok_response({"data": []})
+ get_all_assets(archived=True)
+ url = mock_req.call_args[0][1]
+ assert "filter[archived]=true" in url
+
+ @patch("hackerone._request")
+ def test_omits_archived_filter_by_default(self, mock_req):
+ mock_req.return_value = _ok_response({"data": []})
+ get_all_assets()
+ url = mock_req.call_args[0][1]
+ assert "filter[archived]" not in url
+
+ @patch("hackerone._request")
+ def test_uses_get_method(self, mock_req):
+ mock_req.return_value = _ok_response({"data": []})
+ get_all_assets()
+ assert mock_req.call_args[0][0] == "GET"
+
+
+# ---------------------------------------------------------------------------
+# create_asset
+# ---------------------------------------------------------------------------
+
+class TestCreateAsset:
+ @patch("hackerone._request")
+ def test_uses_post_method(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ create_asset(domain="example.com", options={})
+ assert mock_req.call_args[0][0] == "POST"
+
+ @patch("hackerone._request")
+ def test_sets_identifier_and_asset_type(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ create_asset(domain="example.com", options={})
+ payload = mock_req.call_args[1]["json"]
+ attrs = payload["data"]["attributes"]
+ assert attrs["identifier"] == "example.com"
+ assert attrs["asset_type"] == "domain"
+
+ @patch("hackerone._request")
+ def test_spreads_options_into_attributes(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ create_asset(domain="example.com", options={"description": "test", "maxSeverity": "HIGH"})
+ attrs = mock_req.call_args[1]["json"]["data"]["attributes"]
+ assert attrs["description"] == "test"
+ assert attrs["maxSeverity"] == "HIGH"
+
+ @patch("hackerone._request")
+ def test_includes_empty_asset_tags_relationship(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ create_asset(domain="example.com", options={})
+ payload = mock_req.call_args[1]["json"]
+ assert payload["data"]["relationships"]["asset_tags"]["data"] == []
+
+
+# ---------------------------------------------------------------------------
+# add_scope
+# ---------------------------------------------------------------------------
+
+class TestAddScope:
+ @patch("hackerone._request")
+ def test_eligible_for_submission_true_when_enrolled(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ add_scope(asset_name="example.com", enrollment_status="enrolled")
+ attrs = mock_req.call_args[1]["json"]["data"]["attributes"]
+ assert attrs["eligible_for_submission"] is True
+
+ @patch("hackerone._request")
+ def test_eligible_for_submission_false_when_denied(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ add_scope(asset_name="example.com", enrollment_status="deny")
+ attrs = mock_req.call_args[1]["json"]["data"]["attributes"]
+ assert attrs["eligible_for_submission"] is False
+
+ @patch("hackerone._request")
+ def test_eligible_for_bounty_always_false(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ add_scope(asset_name="example.com", enrollment_status="enrolled")
+ attrs = mock_req.call_args[1]["json"]["data"]["attributes"]
+ assert attrs["eligible_for_bounty"] is False
+
+ @patch("hackerone._request")
+ def test_sets_asset_identifier(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ add_scope(asset_name="example.com", enrollment_status="enrolled")
+ attrs = mock_req.call_args[1]["json"]["data"]["attributes"]
+ assert attrs["asset_identifier"] == "example.com"
+
+ @patch("hackerone._request")
+ def test_uses_post_method(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ add_scope(asset_name="example.com", enrollment_status="enrolled")
+ assert mock_req.call_args[0][0] == "POST"
+
+
+# ---------------------------------------------------------------------------
+# update_scope
+# ---------------------------------------------------------------------------
+
+class TestUpdateScope:
+ @patch("hackerone._request")
+ def test_uses_put_method(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ update_scope(asset_name="example.com", scope_id="s-1", enrollment_status="enrolled")
+ assert mock_req.call_args[0][0] == "PUT"
+
+ @patch("hackerone._request")
+ def test_scope_id_included_in_url(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ update_scope(asset_name="example.com", scope_id="scope-abc", enrollment_status="deny")
+ url = mock_req.call_args[0][1]
+ assert "scope-abc" in url
+
+ @patch("hackerone._request")
+ def test_eligible_for_submission_true_when_enrolled(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ update_scope(asset_name="example.com", scope_id="s-1", enrollment_status="enrolled")
+ attrs = mock_req.call_args[1]["json"]["data"]["attributes"]
+ assert attrs["eligible_for_submission"] is True
+
+ @patch("hackerone._request")
+ def test_eligible_for_submission_false_when_denied(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ update_scope(asset_name="example.com", scope_id="s-1", enrollment_status="deny")
+ attrs = mock_req.call_args[1]["json"]["data"]["attributes"]
+ assert attrs["eligible_for_submission"] is False
+
+ @patch("hackerone._request")
+ def test_sets_asset_identifier(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ update_scope(asset_name="example.com", scope_id="s-1", enrollment_status="deny")
+ attrs = mock_req.call_args[1]["json"]["data"]["attributes"]
+ assert attrs["asset_identifier"] == "example.com"
+
+
+# ---------------------------------------------------------------------------
+# get_scope
+# ---------------------------------------------------------------------------
+
+class TestGetScope:
+ @patch("hackerone._request")
+ def test_includes_asset_identifier_in_url(self, mock_req):
+ mock_req.return_value = _ok_response({"data": []})
+ get_scope("example.com")
+ url = mock_req.call_args[0][1]
+ assert "example.com" in url
+
+ @patch("hackerone._request")
+ def test_uses_get_method(self, mock_req):
+ mock_req.return_value = _ok_response({"data": []})
+ get_scope("example.com")
+ assert mock_req.call_args[0][0] == "GET"
+
+
+# ---------------------------------------------------------------------------
+# archive_assets
+# ---------------------------------------------------------------------------
+
+class TestArchiveAssets:
+ @patch("hackerone._request")
+ def test_uses_post_method(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ archive_assets(data={"data": []})
+ assert mock_req.call_args[0][0] == "POST"
+
+ @patch("hackerone._request")
+ def test_url_contains_archive_path(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ archive_assets(data={"data": []})
+ url = mock_req.call_args[0][1]
+ assert "archive" in url
+
+ @patch("hackerone._request")
+ def test_passes_data_as_json_body(self, mock_req):
+ mock_req.return_value = _ok_response({"data": {}})
+ payload = {"data": [{"id": "asset-1"}]}
+ archive_assets(data=payload)
+ assert mock_req.call_args[1]["json"] == payload
diff --git a/services/cvd-enrollment/tests/test_main.py b/services/cvd-enrollment/tests/test_main.py
new file mode 100644
index 0000000000..838a0dd075
--- /dev/null
+++ b/services/cvd-enrollment/tests/test_main.py
@@ -0,0 +1,375 @@
+import pytest
+from unittest.mock import MagicMock, patch
+
+from hackerone import HackerOneAPIError
+from main import (
+ get_asset_identifiers,
+ get_domain_names,
+ fetch_domains,
+ fetch_h1_assets,
+ create_assets,
+ rescope_assets,
+ archive_unenrolled_assets,
+ main,
+)
+from tests.conftest import make_h1_asset, make_domain, make_mock_db
+
+
+# ---------------------------------------------------------------------------
+# get_asset_identifiers
+# ---------------------------------------------------------------------------
+
+class TestGetAssetIdentifiers:
+ def test_extracts_identifiers(self):
+ assets = [make_h1_asset("a.com"), make_h1_asset("b.com")]
+ assert get_asset_identifiers(assets) == ["a.com", "b.com"]
+
+ def test_missing_attributes_returns_none(self):
+ assert get_asset_identifiers([{}]) == [None]
+
+ def test_empty_list(self):
+ assert get_asset_identifiers([]) == []
+
+
+# ---------------------------------------------------------------------------
+# get_domain_names
+# ---------------------------------------------------------------------------
+
+class TestGetDomainNames:
+ def test_extracts_domain_names(self):
+ domains = [{"domain": "a.com"}, {"domain": "b.com"}]
+ assert get_domain_names(domains) == ["a.com", "b.com"]
+
+ def test_missing_domain_returns_none(self):
+ assert get_domain_names([{}]) == [None]
+
+ def test_empty_list(self):
+ assert get_domain_names([]) == []
+
+
+# ---------------------------------------------------------------------------
+# fetch_domains
+# ---------------------------------------------------------------------------
+
+class TestFetchDomains:
+ def test_returns_all_domains(self):
+ domains = [make_domain("a.com", "enrolled"), make_domain("b.com")]
+ all_d, _, _ = fetch_domains(make_mock_db(domains))
+ assert len(all_d) == 2
+
+ def test_splits_enrolled_and_denied(self):
+ domains = [
+ make_domain("enrolled.com", "enrolled"),
+ make_domain("denied.com", "deny"),
+ make_domain("pending.com", "pending"),
+ make_domain("plain.com"),
+ ]
+ _, enrolled, denied = fetch_domains(make_mock_db(domains))
+ assert [d["domain"] for d in enrolled] == ["enrolled.com"]
+ assert [d["domain"] for d in denied] == ["denied.com"]
+
+ def test_non_dict_cvd_enrollment_excluded(self):
+ domains = [{"domain": "x.com", "cvdEnrollment": "enrolled"}]
+ _, enrolled, denied = fetch_domains(make_mock_db(domains))
+ assert enrolled == []
+ assert denied == []
+
+ def test_raises_on_db_error(self):
+ db = MagicMock()
+ db.aql.execute.side_effect = Exception("DB connection failed")
+ with pytest.raises(Exception, match="DB connection failed"):
+ fetch_domains(db)
+
+
+# ---------------------------------------------------------------------------
+# fetch_h1_assets
+# ---------------------------------------------------------------------------
+
+class TestFetchH1Assets:
+ @patch("main.get_all_assets")
+ def test_returns_both_asset_lists(self, mock_get):
+ mock_get.side_effect = [
+ {"data": [make_h1_asset("a.com")]},
+ {"data": [make_h1_asset("b.com")]},
+ ]
+ in_scope, out_of_scope = fetch_h1_assets()
+ assert len(in_scope) == 1
+ assert len(out_of_scope) == 1
+
+ @patch("main.get_all_assets")
+ def test_raises_when_in_scope_fails(self, mock_get):
+ mock_get.side_effect = HackerOneAPIError("API error")
+ with pytest.raises(HackerOneAPIError):
+ fetch_h1_assets()
+
+ @patch("main.get_all_assets")
+ def test_returns_empty_list_when_out_of_scope_fails(self, mock_get):
+ mock_get.side_effect = [
+ {"data": [make_h1_asset("a.com")]},
+ HackerOneAPIError("API error"),
+ ]
+ in_scope, out_of_scope = fetch_h1_assets()
+ assert len(in_scope) == 1
+ assert out_of_scope == []
+
+ @patch("main.get_all_assets")
+ def test_calls_in_scope_then_out_of_scope(self, mock_get):
+ mock_get.side_effect = [{"data": []}, {"data": []}]
+ fetch_h1_assets()
+ assert mock_get.call_args_list[0][1]["scope"] == "in_scope"
+ assert mock_get.call_args_list[1][1]["scope"] == "out_of_scope"
+
+
+# ---------------------------------------------------------------------------
+# create_assets
+# ---------------------------------------------------------------------------
+
+class TestCreateAssets:
+ @patch("main.add_scope")
+ @patch("main.create_asset")
+ def test_creates_asset_and_scope_for_each_domain(self, mock_create, mock_add):
+ mock_create.return_value = {"data": {}}
+ mock_add.return_value = {"data": {}}
+ ok, fail = create_assets([make_domain("a.com", "enrolled"), make_domain("b.com", "enrolled")])
+ assert ok == 2
+ assert fail == 0
+ assert mock_create.call_count == 2
+ assert mock_add.call_count == 2
+
+ @patch("main.add_scope")
+ @patch("main.create_asset")
+ def test_counts_failure_and_continues(self, mock_create, mock_add):
+ mock_create.side_effect = [HackerOneAPIError("fail"), {"data": {}}]
+ mock_add.return_value = {"data": {}}
+ ok, fail = create_assets([make_domain("fail.com", "enrolled"), make_domain("ok.com", "enrolled")])
+ assert ok == 1
+ assert fail == 1
+
+ @patch("main.add_scope")
+ @patch("main.create_asset")
+ def test_failure_on_add_scope_counted_as_failure(self, mock_create, mock_add):
+ mock_create.return_value = {"data": {}}
+ mock_add.side_effect = HackerOneAPIError("scope fail")
+ ok, fail = create_assets([make_domain("a.com", "enrolled")])
+ assert ok == 0
+ assert fail == 1
+
+ @patch("main.add_scope")
+ @patch("main.create_asset")
+ def test_empty_list_returns_zero_counts(self, mock_create, mock_add):
+ ok, fail = create_assets([])
+ assert ok == 0
+ assert fail == 0
+ mock_create.assert_not_called()
+
+ @patch("main.add_scope")
+ @patch("main.create_asset")
+ def test_passes_enrollment_status_to_add_scope(self, mock_create, mock_add):
+ mock_create.return_value = {"data": {}}
+ mock_add.return_value = {"data": {}}
+ create_assets([make_domain("a.com", "deny")])
+ mock_add.assert_called_once_with(asset_name="a.com", enrollment_status="deny")
+
+ @patch("main.add_scope")
+ @patch("main.create_asset")
+ def test_passes_full_cvd_options_to_create_asset(self, mock_create, mock_add):
+ mock_create.return_value = {"data": {}}
+ mock_add.return_value = {"data": {}}
+ options = {"status": "enrolled", "description": "test desc", "maxSeverity": "HIGH"}
+ domain = {"domain": "a.com", "cvdEnrollment": options}
+ create_assets([domain])
+ mock_create.assert_called_once_with(domain="a.com", options=options)
+
+
+# ---------------------------------------------------------------------------
+# rescope_assets
+# ---------------------------------------------------------------------------
+
+class TestRescopeAssets:
+ @patch("main.update_scope")
+ @patch("main.get_scope")
+ def test_rescopes_each_domain(self, mock_get, mock_update):
+ mock_get.return_value = {"data": [{"id": "scope-1"}]}
+ mock_update.return_value = {"data": {}}
+ ok, fail = rescope_assets(["a.com", "b.com"], "enrolled")
+ assert ok == 2
+ assert fail == 0
+ assert mock_update.call_count == 2
+
+ @patch("main.update_scope")
+ @patch("main.get_scope")
+ def test_failure_when_no_scope_data_returned(self, mock_get, mock_update):
+ mock_get.return_value = {"data": []}
+ ok, fail = rescope_assets(["a.com"], "enrolled")
+ assert ok == 0
+ assert fail == 1
+ mock_update.assert_not_called()
+
+ @patch("main.update_scope")
+ @patch("main.get_scope")
+ def test_continues_on_api_error(self, mock_get, mock_update):
+ mock_get.side_effect = [
+ HackerOneAPIError("fail"),
+ {"data": [{"id": "scope-2"}]},
+ ]
+ mock_update.return_value = {"data": {}}
+ ok, fail = rescope_assets(["fail.com", "ok.com"], "deny")
+ assert ok == 1
+ assert fail == 1
+
+ @patch("main.update_scope")
+ @patch("main.get_scope")
+ def test_passes_correct_scope_id_and_status(self, mock_get, mock_update):
+ mock_get.return_value = {"data": [{"id": "scope-789"}]}
+ mock_update.return_value = {"data": {}}
+ rescope_assets(["a.com"], "deny")
+ mock_update.assert_called_once_with(
+ asset_name="a.com", scope_id="scope-789", enrollment_status="deny"
+ )
+
+ @patch("main.update_scope")
+ @patch("main.get_scope")
+ def test_empty_list_returns_zero_counts(self, mock_get, mock_update):
+ ok, fail = rescope_assets([], "enrolled")
+ assert ok == 0
+ assert fail == 0
+ mock_get.assert_not_called()
+
+
+# ---------------------------------------------------------------------------
+# archive_unenrolled_assets
+# ---------------------------------------------------------------------------
+
+class TestArchiveUnenrolledAssets:
+ @patch("main.archive_assets")
+ def test_calls_archive_with_wrapped_data(self, mock_archive):
+ mock_archive.return_value = {"data": {}}
+ assets = [make_h1_asset("old.com")]
+ archive_unenrolled_assets(assets)
+ mock_archive.assert_called_once_with(data={"data": assets})
+
+ @patch("main.archive_assets")
+ def test_propagates_api_error(self, mock_archive):
+ mock_archive.side_effect = HackerOneAPIError("archive failed")
+ with pytest.raises(HackerOneAPIError):
+ archive_unenrolled_assets([make_h1_asset("old.com")])
+
+
+# ---------------------------------------------------------------------------
+# main — orchestration logic
+# ---------------------------------------------------------------------------
+
+class TestMain:
+ """Tests for main() focus on which operations are triggered for each sync scenario."""
+
+ def _run(self, domains, in_scope=None, out_of_scope=None):
+ """Helper: run main() with mocked H1 assets and return the four operation mocks."""
+ in_scope = in_scope or []
+ out_of_scope = out_of_scope or []
+
+ with (
+ patch("main.fetch_h1_assets", return_value=(in_scope, out_of_scope)),
+ patch("main.create_assets", return_value=(len(domains), 0)) as mock_create,
+ patch("main.rescope_assets", return_value=(1, 0)) as mock_rescope,
+ patch("main.archive_unenrolled_assets") as mock_archive,
+ ):
+ main(make_mock_db(domains))
+ return mock_create, mock_rescope, mock_archive
+
+ def test_creates_new_enrolled_asset_not_in_h1(self):
+ domain = make_domain("new.com", "enrolled")
+ mock_create, _, _ = self._run([domain])
+ mock_create.assert_called_once_with([domain])
+
+ def test_does_not_create_asset_already_in_scope_in_h1(self):
+ mock_create, _, _ = self._run(
+ [make_domain("existing.com", "enrolled")],
+ in_scope=[make_h1_asset("existing.com")],
+ )
+ mock_create.assert_not_called()
+
+ def test_rescopes_out_of_scope_to_enrolled(self):
+ """deny → enrolled: domain exists in H1 as out-of-scope."""
+ _, mock_rescope, _ = self._run(
+ [make_domain("rescoped.com", "enrolled")],
+ out_of_scope=[make_h1_asset("rescoped.com")],
+ )
+ mock_rescope.assert_any_call(["rescoped.com"], "enrolled")
+
+ def test_does_not_create_asset_when_rescoping_to_enrolled(self):
+ """Domain in H1 out-of-scope + enrolled in tracker → rescope only, no create."""
+ mock_create, _, _ = self._run(
+ [make_domain("rescoped.com", "enrolled")],
+ out_of_scope=[make_h1_asset("rescoped.com")],
+ )
+ mock_create.assert_not_called()
+
+ def test_creates_new_denied_asset_not_in_h1(self):
+ domain = make_domain("denied.com", "deny")
+ mock_create, _, _ = self._run([domain])
+ mock_create.assert_called_once_with([domain])
+
+ def test_does_not_create_denied_asset_already_out_of_scope_in_h1(self):
+ mock_create, _, _ = self._run(
+ [make_domain("existing-denied.com", "deny")],
+ out_of_scope=[make_h1_asset("existing-denied.com")],
+ )
+ mock_create.assert_not_called()
+
+ def test_rescopes_in_scope_to_denied(self):
+ """enrolled → deny: domain is in-scope in H1 but denied in tracker."""
+ _, mock_rescope, _ = self._run(
+ [make_domain("toscope.com", "deny")],
+ in_scope=[make_h1_asset("toscope.com")],
+ )
+ mock_rescope.assert_any_call(["toscope.com"], "deny")
+
+ def test_archives_asset_with_no_cvd_enrollment(self):
+ """Domain in H1 in-scope but no CVD enrollment in tracker → archive."""
+ asset = make_h1_asset("old.com")
+ _, _, mock_archive = self._run(
+ [make_domain("old.com")],
+ in_scope=[asset],
+ )
+ mock_archive.assert_called_once_with([asset])
+
+ def test_does_not_archive_denied_assets(self):
+ """Denied domains should be rescoped, not archived."""
+ _, _, mock_archive = self._run(
+ [make_domain("denied.com", "deny")],
+ in_scope=[make_h1_asset("denied.com")],
+ )
+ mock_archive.assert_not_called()
+
+ def test_does_not_archive_unknown_domain(self):
+ """H1 asset with no matching domain in tracker DB → not archived."""
+ asset = make_h1_asset("unknown.com")
+ _, _, mock_archive = self._run([], in_scope=[asset])
+ mock_archive.assert_not_called()
+
+ def test_returns_early_on_db_error(self):
+ db = MagicMock()
+ db.aql.execute.side_effect = Exception("DB down")
+ with patch("main.fetch_h1_assets") as mock_fetch:
+ main(db)
+ mock_fetch.assert_not_called()
+
+ def test_returns_early_on_h1_in_scope_error(self):
+ with (
+ patch("main.fetch_h1_assets", side_effect=HackerOneAPIError("H1 down")),
+ patch("main.create_assets") as mock_create,
+ ):
+ main(make_mock_db([make_domain("a.com", "enrolled")]))
+ mock_create.assert_not_called()
+
+ def test_proceeds_with_empty_out_of_scope_on_degraded_run(self):
+ """Degraded run (out-of-scope unavailable) still creates new enrolled assets."""
+ domain = make_domain("new.com", "enrolled")
+ with (
+ patch("main.fetch_h1_assets", return_value=([], [])),
+ patch("main.create_assets", return_value=(1, 0)) as mock_create,
+ patch("main.rescope_assets", return_value=(0, 0)),
+ patch("main.archive_unenrolled_assets"),
+ ):
+ main(make_mock_db([domain]))
+ mock_create.assert_called_once_with([domain])
diff --git a/services/detect-decay/.dockerignore b/services/detect-decay/.dockerignore
index 4416d432c3..be4dfaf026 100644
--- a/services/detect-decay/.dockerignore
+++ b/services/detect-decay/.dockerignore
@@ -1,5 +1,4 @@
**/*.env
Dockerfile
.venv
-tests
-cloudbuild.yaml
\ No newline at end of file
+cloudbuild.yaml
diff --git a/services/detect-decay/Dockerfile b/services/detect-decay/Dockerfile
index fe1999b79e..49eb32fbe4 100644
--- a/services/detect-decay/Dockerfile
+++ b/services/detect-decay/Dockerfile
@@ -1,40 +1,51 @@
-FROM python:3.13.3-slim-bookworm AS python-builder
-
+FROM python:3.14.2-alpine AS base
ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV DEBIAN_FRONTEND noninteractive
+
+#===============================================================================================
+
+FROM base AS python-builder
+
WORKDIR /working/install
-RUN apt-get update && apt-get install -y --no-install-recommends \
- apt-utils \
+RUN apk add --no-cache \
python3 \
- python3-pip \
- python3-setuptools \
- python3-wheel \
- build-essential \
+ py3-pip \
+ py3-setuptools \
+ py3-wheel \
+ build-base \
python3-dev
-COPY requirements.txt /requirements.txt
+COPY requirements.txt ./requirements.txt
# Install python requirements to /working/install directory for cleaner copy
-RUN pip3 install --prefix=/working/install -r /requirements.txt
+RUN pip3 install --prefix=/working/install -r ./requirements.txt
-#===============================================================================================
#===============================================================================================
-FROM python:3.13.3-slim-bookworm
+FROM base AS production
-ENV PYTHONUNBUFFERED 1
-ENV PYTHONDONTWRITEBYTECODE 1
-ENV DEBIAN_FRONTEND noninteractive
WORKDIR /decay
+# Copy installed python modules
COPY --from=python-builder /working/install/lib /usr/local/lib
# Copy local source code
-COPY detect_decay.py ./
-COPY config.py ./
+COPY detect_decay.py config.py ./
COPY notify /decay/notify
-RUN useradd -ms /bin/bash decay
+RUN adduser -D decay
USER decay
CMD ["python3", "detect_decay.py"]
+
+#===============================================================================================
+
+FROM production AS test
+
+# Copy test files (which were excluded from production)
+COPY . .
+USER decay
+
+#===============================================================================================
+
+FROM production AS final
diff --git a/services/detect-decay/cloudbuild.yaml b/services/detect-decay/cloudbuild.yaml
index 51a46df3a6..23c402fa30 100644
--- a/services/detect-decay/cloudbuild.yaml
+++ b/services/detect-decay/cloudbuild.yaml
@@ -1,61 +1,66 @@
steps:
- - name: "gcr.io/cloud-builders/docker"
+ - name: 'docker:29'
id: start_testdb
- entrypoint: /bin/sh
+ entrypoint: 'ash'
args:
[
- "-c",
- "docker run --net cloudbuild --name arangodb -e ARANGO_NO_AUTH=1 -d -p 127.0.0.1:8529:8529 arangodb/arangodb:3.12.1",
+ '-c',
+ 'docker run --net cloudbuild --name arangodb -e ARANGO_NO_AUTH=1 -d -p 127.0.0.1:8529:8529 arangodb/arangodb:3.12.1',
]
-
+
- name: mikewilliamson/wait-for
id: wait_testdb
- args: ["arangodb:8529"]
+ args: ['arangodb:8529']
+
+ - name: 'docker:29'
+ id: build-test-image
+ dir: services/detect-decay
+ args: ['build', '--target=test', '-t', 'test-image', '.']
- - name: "northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/ci"
- id: test-results
+ - name: 'test-image'
+ id: run-tests
dir: services/detect-decay
- entrypoint: /bin/sh
- args: ["-c", "pip3 install -r requirements.txt && python3 -m pytest"]
+ entrypoint: 'python3'
+ args: [ '-m', 'pytest', '-v' ]
env:
- - DB_URL=http://arangodb:8529
- - DB_USER=root
- - DB_PASS=test
- - DB_NAME=track_dmarc
- - DETECT_DECAY_START_HOUR=$_DETECT_DECAY_START_HOUR
- - DETECT_DECAY_START_MINUTE=$_DETECT_DECAY_START_MINUTE
- - DETECT_DECAY_MINIMUM_SCANS=$_DETECT_DECAY_MINIMUM_SCANS
- - NOTIFICATION_API_KEY=$_NOTIFICATION_API_KEY
- - NOTIFICATION_API_URL=$_NOTIFICATION_API_URL
- - DETECT_DECAY_EMAIL_TEMPLATE_ID=$_DETECT_DECAY_EMAIL_TEMPLATE_ID
-
- - name: "gcr.io/cloud-builders/docker"
+ - 'DB_URL=http://arangodb:8529'
+ - 'DB_USER=root'
+ - 'DB_PASS=test'
+ - 'DB_NAME=track_dmarc'
+ - 'DETECT_DECAY_START_HOUR=$_DETECT_DECAY_START_HOUR'
+ - 'DETECT_DECAY_START_MINUTE=$_DETECT_DECAY_START_MINUTE'
+ - 'DETECT_DECAY_MINIMUM_SCANS=$_DETECT_DECAY_MINIMUM_SCANS'
+ - 'NOTIFICATION_API_KEY=$_NOTIFICATION_API_KEY'
+ - 'NOTIFICATION_API_URL=$_NOTIFICATION_API_URL'
+ - 'DETECT_DECAY_EMAIL_TEMPLATE_ID=$_DETECT_DECAY_EMAIL_TEMPLATE_ID'
+
+ - name: 'docker:29'
id: generate-image-name
- entrypoint: "bash"
+ entrypoint: 'ash'
dir: services/detect-decay
args:
- - "-c"
+ - '-c'
- |
- echo "northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/detect-decay:$(echo $BRANCH_NAME | sed 's/[^a-zA-Z0-9]/-/g')-$SHORT_SHA-$(date +%s)" > /workspace/imagename
-
- - name: "gcr.io/cloud-builders/docker"
- id: build-results
- entrypoint: "bash"
+ echo 'northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/detect-decay:'"$(echo $BRANCH_NAME | sed 's/[^a-zA-Z0-9]/-/g')-$SHORT_SHA-$(date +%s)" > /workspace/imagename
+
+ - name: 'docker:29'
+ id: build-production-image
+ entrypoint: 'ash'
dir: services/detect-decay
args:
- - "-c"
+ - '-c'
- |
image=$(cat /workspace/imagename)
docker build -t $image .
- - name: "gcr.io/cloud-builders/docker"
+ - name: 'docker:29'
id: push-results-if-master
- entrypoint: "bash"
+ entrypoint: 'ash'
dir: services/detect-decay
args:
- - "-c"
+ - '-c'
- |
- if [[ "$BRANCH_NAME" == "master" ]]
+ if [[ '$BRANCH_NAME' == 'master' ]]
then
image=$(cat /workspace/imagename)
docker push $image
diff --git a/services/detect-decay/detect_decay.py b/services/detect-decay/detect_decay.py
index 87def15fe8..1edf608ff8 100644
--- a/services/detect-decay/detect_decay.py
+++ b/services/detect-decay/detect_decay.py
@@ -225,6 +225,7 @@ def get_users(org_id, db):
FOR v, e IN 1 OUTBOUND @org_id affiliations
FILTER e.permission == "admin" OR e.permission == "owner"
FILTER v.emailUpdateOptions.detectDecay == true
+ FILTER v.insideUser == true
RETURN v
""",
bind_vars={"org_id": org_id},
diff --git a/services/detect-decay/requirements.txt b/services/detect-decay/requirements.txt
index 1353536188..583bdd15b4 100644
--- a/services/detect-decay/requirements.txt
+++ b/services/detect-decay/requirements.txt
@@ -7,12 +7,12 @@ iniconfig==2.1.0
notifications-python-client==10.0.1
packaging==25.0
pluggy==1.6.0
-Pygments==2.19.2
-PyJWT==2.10.1
-pytest==8.4.1
+Pygments==2.20.0
+PyJWT==2.12.0
+pytest==9.0.3
python-arango==8.2.0
-python-dotenv==1.1.0
-requests==2.32.4
+python-dotenv==1.2.2
+requests==2.33.0
requests-toolbelt==1.0.0
setuptools==80.9.0
urllib3==2.6.3
diff --git a/services/detect-decay/tests/test_detect_decay.py b/services/detect-decay/tests/test_detect_decay.py
index f1c53f2516..33ac7623f5 100644
--- a/services/detect-decay/tests/test_detect_decay.py
+++ b/services/detect-decay/tests/test_detect_decay.py
@@ -569,21 +569,24 @@ def change_minute(dt, minute):
"displayName": "user1",
"userName": "Sara.Jaffer@tbs-sct.gc.ca",
"receiveEmailUpdates": True,
- "emailUpdateOptions": {"detectDecay": True}
+ "emailUpdateOptions": {"detectDecay": True},
+ "insideUser": True
},
{ # Org 1 Admin
"_id": "users/2",
"displayName": "user2",
"userName": "Sara.Jaffer@tbs-sct.gc.ca",
"receiveEmailUpdates": True,
- "emailUpdateOptions": {"detectDecay": True}
+ "emailUpdateOptions": {"detectDecay": True},
+ "insideUser": True
},
{ # Org 1 User
"_id": "users/3",
"displayName": "user3",
"userName": "Sara.Jaffer@tbs-sct.gc.ca",
"receiveEmailUpdates": True,
- "emailUpdateOptions": {"detectDecay": True}
+ "emailUpdateOptions": {"detectDecay": True},
+ "insideUser": True
}
]
affiliations = [
diff --git a/services/dmarc-report/.dockerignore b/services/dmarc-report/.dockerignore
index 16a13f0e21..9280e0ce86 100644
--- a/services/dmarc-report/.dockerignore
+++ b/services/dmarc-report/.dockerignore
@@ -1,6 +1,5 @@
node_modules
cloudbuild.yaml
coverage
-**/*.test.js
**/*/.env
-.git
\ No newline at end of file
+.git
diff --git a/services/dmarc-report/Dockerfile b/services/dmarc-report/Dockerfile
index 65ddbd7252..8e827e3368 100644
--- a/services/dmarc-report/Dockerfile
+++ b/services/dmarc-report/Dockerfile
@@ -1,17 +1,34 @@
-FROM node:alpine
+# syntax=docker/dockerfile:1
+FROM node:25.5.0-alpine AS production
ENV NODE_ENV production
WORKDIR /app
-COPY src ./src
-COPY index.js .
COPY package* ./
-COPY database-options.js .
-COPY ./.env.example .
+RUN npm ci --omit=dev
-RUN npm ci
-RUN npm prune --production
+COPY --exclude=**/__tests__ \
+ --exclude=**/__mocks__ \
+ --exclude=**/testUtilities.js \
+ src ./src
+COPY index.js database-options.js .env.example ./
USER node
-CMD ["npm", "start"]
\ No newline at end of file
+CMD ["npm", "start"]
+
+#===============================================================================================
+
+FROM production AS test
+
+USER root
+
+ENV NODE_ENV=development
+RUN npm install
+COPY . .
+
+USER node
+
+#===============================================================================================
+
+FROM production AS final
diff --git a/services/dmarc-report/cloudbuild.yaml b/services/dmarc-report/cloudbuild.yaml
index d67890db20..723f2283bc 100644
--- a/services/dmarc-report/cloudbuild.yaml
+++ b/services/dmarc-report/cloudbuild.yaml
@@ -1,5 +1,5 @@
steps:
-- name: 'gcr.io/cloud-builders/docker'
+- name: 'docker:29'
id: start_arango
entrypoint: /bin/sh
args:
@@ -12,21 +12,20 @@ steps:
id: wait
args: ['arangodb:8529']
-- name: node:alpine
- id: install-dependencies
+- name: 'docker:29'
+ id: build-test-image
dir: services/dmarc-report
- entrypoint: npm
- args: ['ci', '--no-optional']
+ args: ['build', '--target=test', '-t', 'test-image', '.']
-- name: node:alpine
- id: run-eslint
- dir: services/dmarc-report
+- name: 'test-image'
+ id: run-lint
+ dir: /app
entrypoint: npm
- args: ['run', lint]
+ args: ['run', 'lint']
-- name: node:alpine
- id: test
- dir: services/dmarc-report
+- name: 'test-image'
+ id: run-tests
+ dir: /app
entrypoint: npm
args: ['test']
env:
@@ -43,18 +42,18 @@ steps:
- DATABASE=$_DATABASE
- SUMMARIES_CONTAINER=$_SUMMARIES_CONTAINER
-- name: 'gcr.io/cloud-builders/docker'
+- name: 'docker:29'
id: generate-image-name
- entrypoint: 'bash'
+ entrypoint: 'ash'
dir: services/dmarc-report
args:
- '-c'
- |
echo "northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/dmarc-report:$(echo $BRANCH_NAME | sed 's/[^a-zA-Z0-9]/-/g')-$SHORT_SHA-$(date +%s)" > /workspace/imagename
-- name: 'gcr.io/cloud-builders/docker'
+- name: 'docker:29'
id: build
- entrypoint: 'bash'
+ entrypoint: 'ash'
dir: services/dmarc-report
args:
- '-c'
@@ -62,9 +61,9 @@ steps:
image=$(cat /workspace/imagename)
docker build -t $image .
-- name: 'gcr.io/cloud-builders/docker'
+- name: 'docker:29'
id: push-if-master
- entrypoint: 'bash'
+ entrypoint: 'ash'
dir: services/dmarc-report
args:
- '-c'
diff --git a/services/dmarc-report/package-lock.json b/services/dmarc-report/package-lock.json
index 49ebaf2a9b..0497b272b4 100644
--- a/services/dmarc-report/package-lock.json
+++ b/services/dmarc-report/package-lock.json
@@ -15,7 +15,8 @@
"https-proxy-agent": "^7.0.6",
"isomorphic-fetch": "^3.0.0",
"moment": "^2.29.4",
- "octokit": "^3.1.2"
+ "octokit": "^3.1.2",
+ "pino": "^10.3.1"
},
"devDependencies": {
"eslint": "^8.57.0",
@@ -28,6 +29,7 @@
"jest": "29.7.0",
"jest-fetch-mock": "^3.0.3",
"jest-matcher-utils": "^28.1.0",
+ "pino-pretty": "^13.1.3",
"prettier": "^2.6.2",
"supertest": "^7.0.0"
}
@@ -55,69 +57,68 @@
}
},
"node_modules/@azure/abort-controller": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.0.4.tgz",
- "integrity": "sha512-lNUmDRVGpanCsiUN3NWxFTdwmdFI53xwhkTFfHDGTYk46ca7Ind3nanJc+U6Zj9Tv+9nTCWRBscWEW1DyKOpTw==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz",
+ "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==",
"dependencies": {
- "tslib": "^2.0.0"
+ "tslib": "^2.6.2"
},
"engines": {
- "node": ">=8.0.0"
+ "node": ">=18.0.0"
}
},
"node_modules/@azure/core-auth": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.3.2.tgz",
- "integrity": "sha512-7CU6DmCHIZp5ZPiZ9r3J17lTKMmYsm/zGvNkjArQwPkrLlZ1TZ+EUYfGgh2X31OLMVAQCTJZW4cXHJi02EbJnA==",
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz",
+ "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==",
"dependencies": {
- "@azure/abort-controller": "^1.0.0",
- "tslib": "^2.2.0"
+ "@azure/abort-controller": "^2.1.2",
+ "@azure/core-util": "^1.13.0",
+ "tslib": "^2.6.2"
},
"engines": {
- "node": ">=12.0.0"
+ "node": ">=20.0.0"
}
},
"node_modules/@azure/core-rest-pipeline": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.3.0.tgz",
- "integrity": "sha512-XdGCm4sVfLvFbd3x17Aw6XNA8SK+sWFvVlOnNSSL2OJGJ4g10LspCpGnIqB+V6OZAaVwOx/eQQN2rOfZzf4Q5w==",
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz",
+ "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==",
"dependencies": {
- "@azure/abort-controller": "^1.0.0",
- "@azure/core-auth": "^1.3.0",
- "@azure/core-tracing": "1.0.0-preview.13",
- "@azure/logger": "^1.0.0",
- "form-data": "^4.0.0",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "tslib": "^2.2.0",
- "uuid": "^8.3.0"
+ "@azure/abort-controller": "^2.1.2",
+ "@azure/core-auth": "^1.10.0",
+ "@azure/core-tracing": "^1.3.0",
+ "@azure/core-util": "^1.13.0",
+ "@azure/logger": "^1.3.0",
+ "@typespec/ts-http-runtime": "^0.3.0",
+ "tslib": "^2.6.2"
},
"engines": {
- "node": ">=12.0.0"
+ "node": ">=20.0.0"
}
},
- "node_modules/@azure/core-rest-pipeline/node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "node_modules/@azure/core-tracing": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz",
+ "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==",
"dependencies": {
- "agent-base": "6",
- "debug": "4"
+ "tslib": "^2.6.2"
},
"engines": {
- "node": ">= 6"
+ "node": ">=20.0.0"
}
},
- "node_modules/@azure/core-tracing": {
- "version": "1.0.0-preview.13",
- "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz",
- "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==",
+ "node_modules/@azure/core-util": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz",
+ "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==",
"dependencies": {
- "@opentelemetry/api": "^1.0.1",
- "tslib": "^2.2.0"
+ "@azure/abort-controller": "^2.1.2",
+ "@typespec/ts-http-runtime": "^0.3.0",
+ "tslib": "^2.6.2"
},
"engines": {
- "node": ">=12.0.0"
+ "node": ">=20.0.0"
}
},
"node_modules/@azure/cosmos": {
@@ -142,14 +143,15 @@
}
},
"node_modules/@azure/logger": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.2.tgz",
- "integrity": "sha512-YZNjNV0vL3nN2nedmcjQBcpCTo3oqceXmgiQtEm6fLpucjRZyQKAQruhCmCpRlB1iykqKJJ/Y8CDmT5rIE6IJw==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz",
+ "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==",
"dependencies": {
- "tslib": "^2.0.0"
+ "@typespec/ts-http-runtime": "^0.3.0",
+ "tslib": "^2.6.2"
},
"engines": {
- "node": ">=8.0.0"
+ "node": ">=20.0.0"
}
},
"node_modules/@babel/code-frame": {
@@ -1702,14 +1704,6 @@
"resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-7.3.2.tgz",
"integrity": "sha512-JWOoOgtWTFnTSAamPXXyjTY5/apttvNxF+vPBnwdSu5cj5snrd7FO0fyw4+wTXy8fHduq626JjhO+TwCyyA6vA=="
},
- "node_modules/@opentelemetry/api": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.3.tgz",
- "integrity": "sha512-puWxACExDe9nxbBB3lOymQFrLYml2dVOrd7USiVRnSbgXE+KwBu+HxFvxrzfqsiSda9IWsXJG1ef7C1O2/GmKQ==",
- "engines": {
- "node": ">=8.0.0"
- }
- },
"node_modules/@paralleldrive/cuid2": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz",
@@ -1720,6 +1714,11 @@
"@noble/hashes": "^1.1.5"
}
},
+ "node_modules/@pinojs/redact": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz",
+ "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg=="
+ },
"node_modules/@sinclair/typebox": {
"version": "0.23.5",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz",
@@ -1744,14 +1743,6 @@
"@sinonjs/commons": "^3.0.0"
}
},
- "node_modules/@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/@types/aws-lambda": {
"version": "8.10.134",
"resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.134.tgz",
@@ -2029,6 +2020,19 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
+ "node_modules/@typespec/ts-http-runtime": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.3.tgz",
+ "integrity": "sha512-91fp6CAAJSRtH5ja95T1FHSKa8aPW9/Zw6cta81jlZTUw/+Vq8jM/AfF/14h2b71wwR84JUTW/3Y8QPhDAawFA==",
+ "dependencies": {
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ }
+ },
"node_modules/@ungap/structured-clone": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
@@ -2057,14 +2061,11 @@
}
},
"node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dependencies": {
- "debug": "4"
- },
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
+ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
"engines": {
- "node": ">= 6.0.0"
+ "node": ">= 14"
}
},
"node_modules/aggregate-error": {
@@ -2263,7 +2264,16 @@
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "node_modules/atomic-sleep": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
+ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
},
"node_modules/babel-jest": {
"version": "29.7.0",
@@ -2509,6 +2519,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dev": true,
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2"
@@ -2673,10 +2684,17 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "node_modules/colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
"dependencies": {
"delayed-stream": "~1.0.0"
},
@@ -2755,6 +2773,15 @@
"node": ">= 8"
}
},
+ "node_modules/dateformat": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
+ "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -2833,6 +2860,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true,
"engines": {
"node": ">=0.4.0"
}
@@ -2919,6 +2947,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
"dependencies": {
"call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0",
@@ -2960,6 +2989,15 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
+ "node_modules/end-of-stream": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
+ "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -3007,6 +3045,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "dev": true,
"engines": {
"node": ">= 0.4"
}
@@ -3015,6 +3054,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
"engines": {
"node": ">= 0.4"
}
@@ -3023,6 +3063,7 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "dev": true,
"dependencies": {
"es-errors": "^1.3.0"
},
@@ -3034,6 +3075,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dev": true,
"dependencies": {
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.6",
@@ -3804,6 +3846,12 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/fast-copy": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.2.tgz",
+ "integrity": "sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==",
+ "dev": true
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -3931,15 +3979,16 @@
}
},
"node_modules/flatted": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
- "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
"node_modules/form-data": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+ "dev": true,
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
@@ -3993,6 +4042,7 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -4019,6 +4069,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "dev": true,
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
"es-define-property": "^1.0.1",
@@ -4051,6 +4102,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dev": true,
"dependencies": {
"dunder-proto": "^1.0.1",
"es-object-atoms": "^1.0.0"
@@ -4167,6 +4219,7 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -4232,6 +4285,7 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -4243,6 +4297,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
"dependencies": {
"has-symbols": "^1.0.3"
},
@@ -4257,6 +4312,7 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
"dependencies": {
"function-bind": "^1.1.2"
},
@@ -4264,6 +4320,12 @@
"node": ">= 0.4"
}
},
+ "node_modules/help-me": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz",
+ "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==",
+ "dev": true
+ },
"node_modules/html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -4271,16 +4333,15 @@
"dev": true
},
"node_modules/http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"dependencies": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 14"
}
},
"node_modules/https-proxy-agent": {
@@ -4295,14 +4356,6 @@
"node": ">= 14"
}
},
- "node_modules/https-proxy-agent/node_modules/agent-base": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
- "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
- "engines": {
- "node": ">= 14"
- }
- },
"node_modules/human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
@@ -5775,6 +5828,15 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
+ "node_modules/joycon": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
+ "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -6019,6 +6081,7 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "dev": true,
"engines": {
"node": ">= 0.4"
}
@@ -6121,9 +6184,9 @@
}
},
"node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -6329,6 +6392,14 @@
"node": ">= 18"
}
},
+ "node_modules/on-exit-leak-free": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
+ "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -6486,9 +6557,9 @@
"dev": true
},
"node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"engines": {
"node": ">=8.6"
@@ -6497,6 +6568,76 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/pino": {
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz",
+ "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==",
+ "dependencies": {
+ "@pinojs/redact": "^0.4.0",
+ "atomic-sleep": "^1.0.0",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^3.0.0",
+ "pino-std-serializers": "^7.0.0",
+ "process-warning": "^5.0.0",
+ "quick-format-unescaped": "^4.0.3",
+ "real-require": "^0.2.0",
+ "safe-stable-stringify": "^2.3.1",
+ "sonic-boom": "^4.0.1",
+ "thread-stream": "^4.0.0"
+ },
+ "bin": {
+ "pino": "bin.js"
+ }
+ },
+ "node_modules/pino-abstract-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz",
+ "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==",
+ "dependencies": {
+ "split2": "^4.0.0"
+ }
+ },
+ "node_modules/pino-pretty": {
+ "version": "13.1.3",
+ "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.3.tgz",
+ "integrity": "sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==",
+ "dev": true,
+ "dependencies": {
+ "colorette": "^2.0.7",
+ "dateformat": "^4.6.3",
+ "fast-copy": "^4.0.0",
+ "fast-safe-stringify": "^2.1.1",
+ "help-me": "^5.0.0",
+ "joycon": "^3.1.1",
+ "minimist": "^1.2.6",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^3.0.0",
+ "pump": "^3.0.0",
+ "secure-json-parse": "^4.0.0",
+ "sonic-boom": "^4.0.1",
+ "strip-json-comments": "^5.0.2"
+ },
+ "bin": {
+ "pino-pretty": "bin.js"
+ }
+ },
+ "node_modules/pino-pretty/node_modules/strip-json-comments": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz",
+ "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pino-std-serializers": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz",
+ "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw=="
+ },
"node_modules/pirates": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
@@ -6652,6 +6793,21 @@
"node": ">= 0.6.0"
}
},
+ "node_modules/process-warning": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz",
+ "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ]
+ },
"node_modules/promise-polyfill": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.2.0.tgz",
@@ -6671,6 +6827,16 @@
"node": ">= 6"
}
},
+ "node_modules/pump": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
+ "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
"node_modules/punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@@ -6697,9 +6863,9 @@
]
},
"node_modules/qs": {
- "version": "6.14.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
- "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
+ "version": "6.14.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
+ "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
"dev": true,
"dependencies": {
"side-channel": "^1.1.0"
@@ -6731,12 +6897,25 @@
}
]
},
+ "node_modules/quick-format-unescaped": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="
+ },
"node_modules/react-is": {
"version": "18.1.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz",
"integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==",
"dev": true
},
+ "node_modules/real-require": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
+ "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
+ "engines": {
+ "node": ">= 12.13.0"
+ }
+ },
"node_modules/regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
@@ -6881,6 +7060,30 @@
}
]
},
+ "node_modules/safe-stable-stringify": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
+ "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/secure-json-parse": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz",
+ "integrity": "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ]
+ },
"node_modules/semaphore": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz",
@@ -7034,6 +7237,14 @@
"node": ">=8"
}
},
+ "node_modules/sonic-boom": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz",
+ "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==",
+ "dependencies": {
+ "atomic-sleep": "^1.0.0"
+ }
+ },
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -7053,6 +7264,14 @@
"source-map": "^0.6.0"
}
},
+ "node_modules/split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+ "engines": {
+ "node": ">= 10.x"
+ }
+ },
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -7253,6 +7472,17 @@
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
+ "node_modules/thread-stream": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.0.0.tgz",
+ "integrity": "sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==",
+ "dependencies": {
+ "real-require": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
"node_modules/tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -7305,9 +7535,9 @@
}
},
"node_modules/tslib": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
- "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
},
"node_modules/tsutils": {
"version": "3.21.0",
@@ -7646,56 +7876,53 @@
}
},
"@azure/abort-controller": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.0.4.tgz",
- "integrity": "sha512-lNUmDRVGpanCsiUN3NWxFTdwmdFI53xwhkTFfHDGTYk46ca7Ind3nanJc+U6Zj9Tv+9nTCWRBscWEW1DyKOpTw==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz",
+ "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==",
"requires": {
- "tslib": "^2.0.0"
+ "tslib": "^2.6.2"
}
},
"@azure/core-auth": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.3.2.tgz",
- "integrity": "sha512-7CU6DmCHIZp5ZPiZ9r3J17lTKMmYsm/zGvNkjArQwPkrLlZ1TZ+EUYfGgh2X31OLMVAQCTJZW4cXHJi02EbJnA==",
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz",
+ "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==",
"requires": {
- "@azure/abort-controller": "^1.0.0",
- "tslib": "^2.2.0"
+ "@azure/abort-controller": "^2.1.2",
+ "@azure/core-util": "^1.13.0",
+ "tslib": "^2.6.2"
}
},
"@azure/core-rest-pipeline": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.3.0.tgz",
- "integrity": "sha512-XdGCm4sVfLvFbd3x17Aw6XNA8SK+sWFvVlOnNSSL2OJGJ4g10LspCpGnIqB+V6OZAaVwOx/eQQN2rOfZzf4Q5w==",
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz",
+ "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==",
"requires": {
- "@azure/abort-controller": "^1.0.0",
- "@azure/core-auth": "^1.3.0",
- "@azure/core-tracing": "1.0.0-preview.13",
- "@azure/logger": "^1.0.0",
- "form-data": "^4.0.0",
- "http-proxy-agent": "^4.0.1",
- "https-proxy-agent": "^5.0.0",
- "tslib": "^2.2.0",
- "uuid": "^8.3.0"
- },
- "dependencies": {
- "https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- }
+ "@azure/abort-controller": "^2.1.2",
+ "@azure/core-auth": "^1.10.0",
+ "@azure/core-tracing": "^1.3.0",
+ "@azure/core-util": "^1.13.0",
+ "@azure/logger": "^1.3.0",
+ "@typespec/ts-http-runtime": "^0.3.0",
+ "tslib": "^2.6.2"
}
},
"@azure/core-tracing": {
- "version": "1.0.0-preview.13",
- "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz",
- "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz",
+ "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==",
+ "requires": {
+ "tslib": "^2.6.2"
+ }
+ },
+ "@azure/core-util": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz",
+ "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==",
"requires": {
- "@opentelemetry/api": "^1.0.1",
- "tslib": "^2.2.0"
+ "@azure/abort-controller": "^2.1.2",
+ "@typespec/ts-http-runtime": "^0.3.0",
+ "tslib": "^2.6.2"
}
},
"@azure/cosmos": {
@@ -7717,11 +7944,12 @@
}
},
"@azure/logger": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.2.tgz",
- "integrity": "sha512-YZNjNV0vL3nN2nedmcjQBcpCTo3oqceXmgiQtEm6fLpucjRZyQKAQruhCmCpRlB1iykqKJJ/Y8CDmT5rIE6IJw==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz",
+ "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==",
"requires": {
- "tslib": "^2.0.0"
+ "@typespec/ts-http-runtime": "^0.3.0",
+ "tslib": "^2.6.2"
}
},
"@babel/code-frame": {
@@ -8908,11 +9136,6 @@
"resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-7.3.2.tgz",
"integrity": "sha512-JWOoOgtWTFnTSAamPXXyjTY5/apttvNxF+vPBnwdSu5cj5snrd7FO0fyw4+wTXy8fHduq626JjhO+TwCyyA6vA=="
},
- "@opentelemetry/api": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.3.tgz",
- "integrity": "sha512-puWxACExDe9nxbBB3lOymQFrLYml2dVOrd7USiVRnSbgXE+KwBu+HxFvxrzfqsiSda9IWsXJG1ef7C1O2/GmKQ=="
- },
"@paralleldrive/cuid2": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz",
@@ -8922,6 +9145,11 @@
"@noble/hashes": "^1.1.5"
}
},
+ "@pinojs/redact": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz",
+ "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg=="
+ },
"@sinclair/typebox": {
"version": "0.23.5",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz",
@@ -8946,11 +9174,6 @@
"@sinonjs/commons": "^3.0.0"
}
},
- "@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
- },
"@types/aws-lambda": {
"version": "8.10.134",
"resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.134.tgz",
@@ -9169,6 +9392,16 @@
"eslint-visitor-keys": "^3.0.0"
}
},
+ "@typespec/ts-http-runtime": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.3.tgz",
+ "integrity": "sha512-91fp6CAAJSRtH5ja95T1FHSKa8aPW9/Zw6cta81jlZTUw/+Vq8jM/AfF/14h2b71wwR84JUTW/3Y8QPhDAawFA==",
+ "requires": {
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.0",
+ "tslib": "^2.6.2"
+ }
+ },
"@ungap/structured-clone": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
@@ -9189,12 +9422,9 @@
"requires": {}
},
"agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "requires": {
- "debug": "4"
- }
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
+ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="
},
"aggregate-error": {
"version": "3.1.0",
@@ -9339,7 +9569,13 @@
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "atomic-sleep": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
+ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="
},
"babel-jest": {
"version": "29.7.0",
@@ -9531,6 +9767,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "dev": true,
"requires": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2"
@@ -9635,10 +9872,17 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
"requires": {
"delayed-stream": "~1.0.0"
}
@@ -9702,6 +9946,12 @@
"which": "^2.0.1"
}
},
+ "dateformat": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
+ "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
+ "dev": true
+ },
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -9752,7 +10002,8 @@
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
},
"deprecation": {
"version": "2.3.1",
@@ -9821,6 +10072,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "dev": true,
"requires": {
"call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0",
@@ -9853,6 +10105,15 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
+ "end-of-stream": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
+ "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -9893,17 +10154,20 @@
"es-define-property": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
- "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "dev": true
},
"es-errors": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true
},
"es-object-atoms": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "dev": true,
"requires": {
"es-errors": "^1.3.0"
}
@@ -9912,6 +10176,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "dev": true,
"requires": {
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.6",
@@ -10448,6 +10713,12 @@
}
}
},
+ "fast-copy": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.2.tgz",
+ "integrity": "sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==",
+ "dev": true
+ },
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -10556,15 +10827,16 @@
}
},
"flatted": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz",
- "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
"form-data": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+ "dev": true,
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
@@ -10600,7 +10872,8 @@
"function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true
},
"gensync": {
"version": "1.0.0-beta.2",
@@ -10618,6 +10891,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "dev": true,
"requires": {
"call-bind-apply-helpers": "^1.0.2",
"es-define-property": "^1.0.1",
@@ -10641,6 +10915,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "dev": true,
"requires": {
"dunder-proto": "^1.0.1",
"es-object-atoms": "^1.0.0"
@@ -10720,7 +10995,8 @@
"gopd": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
- "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "dev": true
},
"graceful-fs": {
"version": "4.2.11",
@@ -10767,12 +11043,14 @@
"has-symbols": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
- "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "dev": true
},
"has-tostringtag": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
"requires": {
"has-symbols": "^1.0.3"
}
@@ -10781,10 +11059,17 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
"requires": {
"function-bind": "^1.1.2"
}
},
+ "help-me": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz",
+ "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==",
+ "dev": true
+ },
"html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -10792,13 +11077,12 @@
"dev": true
},
"http-proxy-agent": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
- "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"requires": {
- "@tootallnate/once": "1",
- "agent-base": "6",
- "debug": "4"
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
}
},
"https-proxy-agent": {
@@ -10808,13 +11092,6 @@
"requires": {
"agent-base": "^7.1.2",
"debug": "4"
- },
- "dependencies": {
- "agent-base": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
- "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="
- }
}
},
"human-signals": {
@@ -11909,6 +12186,12 @@
}
}
},
+ "joycon": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
+ "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
+ "dev": true
+ },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -12108,7 +12391,8 @@
"math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
- "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "dev": true
},
"merge-stream": {
"version": "2.0.0",
@@ -12181,9 +12465,9 @@
}
},
"minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
@@ -12338,6 +12622,11 @@
"@octokit/types": "^12.0.0"
}
},
+ "on-exit-leak-free": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
+ "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="
+ },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -12456,10 +12745,70 @@
"dev": true
},
"picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "dev": true
+ },
+ "pino": {
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz",
+ "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==",
+ "requires": {
+ "@pinojs/redact": "^0.4.0",
+ "atomic-sleep": "^1.0.0",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^3.0.0",
+ "pino-std-serializers": "^7.0.0",
+ "process-warning": "^5.0.0",
+ "quick-format-unescaped": "^4.0.3",
+ "real-require": "^0.2.0",
+ "safe-stable-stringify": "^2.3.1",
+ "sonic-boom": "^4.0.1",
+ "thread-stream": "^4.0.0"
+ }
+ },
+ "pino-abstract-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz",
+ "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==",
+ "requires": {
+ "split2": "^4.0.0"
+ }
+ },
+ "pino-pretty": {
+ "version": "13.1.3",
+ "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.3.tgz",
+ "integrity": "sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==",
+ "dev": true,
+ "requires": {
+ "colorette": "^2.0.7",
+ "dateformat": "^4.6.3",
+ "fast-copy": "^4.0.0",
+ "fast-safe-stringify": "^2.1.1",
+ "help-me": "^5.0.0",
+ "joycon": "^3.1.1",
+ "minimist": "^1.2.6",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^3.0.0",
+ "pump": "^3.0.0",
+ "secure-json-parse": "^4.0.0",
+ "sonic-boom": "^4.0.1",
+ "strip-json-comments": "^5.0.2"
+ },
+ "dependencies": {
+ "strip-json-comments": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz",
+ "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==",
+ "dev": true
+ }
+ }
+ },
+ "pino-std-serializers": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz",
+ "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw=="
},
"pirates": {
"version": "4.0.6",
@@ -12569,6 +12918,11 @@
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
"integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
},
+ "process-warning": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz",
+ "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA=="
+ },
"promise-polyfill": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.2.0.tgz",
@@ -12585,6 +12939,16 @@
"sisteransi": "^1.0.5"
}
},
+ "pump": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
+ "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
"punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@@ -12598,9 +12962,9 @@
"dev": true
},
"qs": {
- "version": "6.14.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
- "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
+ "version": "6.14.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
+ "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
"dev": true,
"requires": {
"side-channel": "^1.1.0"
@@ -12612,12 +12976,22 @@
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true
},
+ "quick-format-unescaped": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="
+ },
"react-is": {
"version": "18.1.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz",
"integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==",
"dev": true
},
+ "real-require": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
+ "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="
+ },
"regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
@@ -12699,6 +13073,17 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
+ "safe-stable-stringify": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
+ "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="
+ },
+ "secure-json-parse": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz",
+ "integrity": "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==",
+ "dev": true
+ },
"semaphore": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz",
@@ -12807,6 +13192,14 @@
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
+ "sonic-boom": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz",
+ "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==",
+ "requires": {
+ "atomic-sleep": "^1.0.0"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -12823,6 +13216,11 @@
"source-map": "^0.6.0"
}
},
+ "split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="
+ },
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -12974,6 +13372,14 @@
"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
"dev": true
},
+ "thread-stream": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.0.0.tgz",
+ "integrity": "sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==",
+ "requires": {
+ "real-require": "^0.2.0"
+ }
+ },
"tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -13019,9 +13425,9 @@
}
},
"tslib": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
- "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
},
"tsutils": {
"version": "3.21.0",
diff --git a/services/dmarc-report/package.json b/services/dmarc-report/package.json
index e4c8b26e63..88f460d54f 100644
--- a/services/dmarc-report/package.json
+++ b/services/dmarc-report/package.json
@@ -28,7 +28,8 @@
"https-proxy-agent": "^7.0.6",
"isomorphic-fetch": "^3.0.0",
"moment": "^2.29.4",
- "octokit": "^3.1.2"
+ "octokit": "^3.1.2",
+ "pino": "^10.3.1"
},
"devDependencies": {
"eslint": "^8.57.0",
@@ -41,6 +42,7 @@
"jest": "29.7.0",
"jest-fetch-mock": "^3.0.3",
"jest-matcher-utils": "^28.1.0",
+ "pino-pretty": "^13.1.3",
"prettier": "^2.6.2",
"supertest": "^7.0.0"
}
diff --git a/services/dmarc-report/src/__tests__/dmarc-report.test.js b/services/dmarc-report/src/__tests__/dmarc-report.test.js
index 0a078618a5..2357c45d4f 100644
--- a/services/dmarc-report/src/__tests__/dmarc-report.test.js
+++ b/services/dmarc-report/src/__tests__/dmarc-report.test.js
@@ -1,3 +1,10 @@
+jest.mock('../logger', () => ({
+ info: jest.fn(),
+ warn: jest.fn(),
+ error: jest.fn(),
+}))
+
+const logger = require('../logger')
const { arangoConnection } = require('../database')
const { dmarcReport } = require('../dmarc-report')
const { dbNameFromFile } = require('arango-tools')
@@ -7,13 +14,7 @@ const { DB_PASS: rootPass, DB_URL: url } = process.env
describe('given the dmarcReport function', () => {
let query, truncate, collections, transaction, arangoCtx, dbName, arangoDB, domain, acrOrg, ecrOrg
- const consoleOutput = []
- const mockedInfo = (output) => consoleOutput.push(output)
- const mockedWarn = (output) => consoleOutput.push(output)
-
beforeAll(async () => {
- console.info = mockedInfo
- console.warn = mockedWarn
dbName = dbNameFromFile(__filename)
;({ collections, query, transaction, arangoDB, truncate } = await arangoConnection({
url,
@@ -24,6 +25,7 @@ describe('given the dmarcReport function', () => {
})
beforeEach(async () => {
+ jest.clearAllMocks()
domain = await collections.domains.save({
domain: 'domain.ca',
})
@@ -45,7 +47,6 @@ describe('given the dmarcReport function', () => {
afterEach(async () => {
await truncate()
- consoleOutput.length = 0
})
afterAll(async () => {
@@ -54,7 +55,7 @@ describe('given the dmarcReport function', () => {
})
describe('org is not found in arango', () => {
- it('logs message to console', async () => {
+ it('logs message', async () => {
await dmarcReport({
ownerships: { NOEXISTORG: [] },
arangoCtx,
@@ -70,11 +71,16 @@ describe('given the dmarcReport function', () => {
updateAllDates: false,
})
- expect(consoleOutput[0]).toEqual('Org: NOEXISTORG cannot be found in datastore')
+ expect(logger.warn).toHaveBeenCalledWith(
+ {
+ orgAcronym: 'NOEXISTORG',
+ },
+ 'Org cannot be found in the datastore, skipping to next org',
+ )
})
})
describe('domain is not found in arango', () => {
- it('logs message to console', async () => {
+ it('logs message', async () => {
await dmarcReport({
ownerships: { ACR: ['domain.doesnt.exist'] },
arangoCtx,
@@ -90,7 +96,12 @@ describe('given the dmarcReport function', () => {
updateAllDates: false,
})
- expect(consoleOutput).toContain('\tdomain.doesnt.exist cannot be found in the datastore')
+ expect(logger.warn).toHaveBeenCalledWith(
+ {
+ domain: 'domain.doesnt.exist',
+ },
+ 'Domain cannot be found in the datastore',
+ )
})
})
describe('no org owns the domain', () => {
@@ -122,7 +133,13 @@ describe('given the dmarcReport function', () => {
}
expect(checkOwner).toEqual(expectedResult)
- expect(consoleOutput).toContain('\t\tAssigning domain.ca ownership to: ACR')
+ expect(logger.info).toHaveBeenCalledWith(
+ {
+ domain: 'domain.ca',
+ orgAcronym: 'ACR',
+ },
+ 'Assigning domain ownership',
+ )
})
})
describe('another org owns the domain', () => {
@@ -158,7 +175,13 @@ describe('given the dmarcReport function', () => {
const checkOwner = await checkCursor.next()
expect(checkOwner).toBeUndefined()
- expect(consoleOutput).toContain('\t\tRemoving domain.ca ownership from: ECR')
+ expect(logger.info).toHaveBeenCalledWith(
+ {
+ domain: 'domain.ca',
+ orgOwner: 'ECR',
+ },
+ 'Removing domain ownership from current owner',
+ )
const newCursor =
await query`FOR item IN ownership FILTER item._from == ${acrOrg._id} RETURN {_id: item._id, _from: item._from, _to: item._to}`
@@ -170,7 +193,13 @@ describe('given the dmarcReport function', () => {
_to: domain._id,
}
expect(newOwner).toEqual(expectedResult)
- expect(consoleOutput).toContain('\t\tAssigning domain.ca ownership to: ACR')
+ expect(logger.info).toHaveBeenCalledWith(
+ {
+ domain: 'domain.ca',
+ orgAcronym: 'ACR',
+ },
+ 'Assigning domain ownership to new owner',
+ )
})
})
describe('org already owns the domain', () => {
@@ -180,7 +209,7 @@ describe('given the dmarcReport function', () => {
_to: domain._id,
})
})
- it('logs to console', async () => {
+ it('logs message', async () => {
await dmarcReport({
ownerships: { ACR: ['domain.ca'] },
arangoCtx,
@@ -196,7 +225,13 @@ describe('given the dmarcReport function', () => {
updateAllDates: false,
})
- expect(consoleOutput).toContain('\t\tOwnership of domain.ca is already assigned to ACR')
+ expect(logger.info).toHaveBeenCalledWith(
+ {
+ domain: 'domain.ca',
+ orgAcronym: 'ACR',
+ },
+ 'Domain ownership is already correct, no changes needed',
+ )
})
})
describe('old date is found in arango', () => {
@@ -235,13 +270,25 @@ describe('given the dmarcReport function', () => {
const checkEdge = await checkCursor.next()
expect(checkEdge).toBeUndefined()
- expect(consoleOutput).toContain('\t\tRemoving 2000-01-01 for domain.ca')
+ expect(logger.info).toHaveBeenCalledWith(
+ {
+ domain: 'domain.ca',
+ date: '2000-01-01',
+ },
+ 'Removing out of date summary',
+ )
const checkSummaryCursor = await query`FOR item IN dmarcSummaries RETURN item`
const checkSummary = await checkSummaryCursor.next()
expect(checkSummary).toBeUndefined()
- expect(consoleOutput).toContain('\t\tRemoving 2000-01-01 for domain.ca')
+ expect(logger.info).toHaveBeenCalledWith(
+ {
+ domain: 'domain.ca',
+ date: '2000-01-01',
+ },
+ 'Removing out of date summary',
+ )
})
})
describe('date is not found in arango dates', () => {
@@ -274,7 +321,13 @@ describe('given the dmarcReport function', () => {
}
expect(checkEdge).toEqual(expectedResult)
- expect(consoleOutput).toContain('\t\tInitializing 2021-01-01 for domain.ca')
+ expect(logger.info).toHaveBeenCalledWith(
+ {
+ domain: 'domain.ca',
+ date: '2021-01-01',
+ },
+ 'Creating new summary for date',
+ )
const checkSummaryCursor = await query`FOR item IN dmarcSummaries RETURN item`
const checkSummary = await checkSummaryCursor.next()
@@ -407,7 +460,13 @@ describe('given the dmarcReport function', () => {
}
expect(checkSummary).toEqual(expectedResult)
- expect(consoleOutput).toContain('\t\tUpdating 2021-01-01 for domain.ca')
+ expect(logger.info).toHaveBeenCalledWith(
+ {
+ domain: 'domain.ca',
+ date: '2021-01-01',
+ },
+ 'Updating existing summary for date',
+ )
})
})
describe('thirty days is not found in arango', () => {
@@ -476,7 +535,13 @@ describe('given the dmarcReport function', () => {
}
expect(checkSummaryEdge).toEqual(expectedResult)
- expect(consoleOutput).toContain('\t\tInitializing thirtyDays for domain.ca')
+ expect(logger.info).toHaveBeenCalledWith(
+ {
+ domain: 'domain.ca',
+ date: 'thirtyDays',
+ },
+ 'Creating new summary for date',
+ )
const sumIdCursor =
await query`FOR item IN domainsToDmarcSummaries FILTER item.startDate == "thirtyDays" RETURN item`
@@ -638,7 +703,13 @@ describe('given the dmarcReport function', () => {
}
expect(checkSummary).toEqual(expectedResult)
- expect(consoleOutput).toContain('\t\tUpdating thirtyDays for domain.ca')
+ expect(logger.info).toHaveBeenCalledWith(
+ {
+ domain: 'domain.ca',
+ date: 'thirtyDays',
+ },
+ 'Updating existing summary for date',
+ )
})
})
})
diff --git a/services/dmarc-report/src/database/arango-connection.js b/services/dmarc-report/src/database/arango-connection.js
index 398307b3d7..6a1983eb0a 100644
--- a/services/dmarc-report/src/database/arango-connection.js
+++ b/services/dmarc-report/src/database/arango-connection.js
@@ -1,6 +1,8 @@
const { Database, aql } = require('arangojs')
const { ensure } = require('arango-tools')
+
const { databaseOptions } = require('../../database-options')
+const logger = require('../logger')
const arangoConnection = async ({ url, databaseName, rootPass }) => {
const systemDatabase = new Database({ url, databaseName: '_system' })
@@ -10,7 +12,7 @@ const arangoConnection = async ({ url, databaseName, rootPass }) => {
try {
await systemDatabase.createDatabase(databaseName)
} catch (e) {
- console.error(`Failed to create database ${databaseName}: ${e.message}`)
+ logger.error({ err: e, databaseName }, 'Failed to create database')
process.exit(1)
}
}
diff --git a/services/dmarc-report/src/database/create-ownership.js b/services/dmarc-report/src/database/create-ownership.js
index b03ebd4996..f54509c8f3 100644
--- a/services/dmarc-report/src/database/create-ownership.js
+++ b/services/dmarc-report/src/database/create-ownership.js
@@ -1,3 +1,5 @@
+const logger = require('../logger')
+
async function createOwnership({ arangoCtx, domain, orgAcronymEn }) {
// Generate list of collections names
const collectionStrings = Object.keys(arangoCtx.collections)
@@ -26,14 +28,14 @@ async function createOwnership({ arangoCtx, domain, orgAcronymEn }) {
`,
)
} catch (err) {
- console.error(`Transaction step error occurred for dmarc summaries service when creating ownership data: ${err}`)
+ logger.error({ err }, 'Transaction step error occurred for dmarc summaries service when creating ownership data')
await trx.abort()
}
try {
await trx.commit()
} catch (err) {
- console.error(`Transaction commit error occurred for dmarc summaries service when creating ownership data: ${err}`)
+ logger.error({ err }, 'Transaction commit error occurred for dmarc summaries service when creating ownership data')
await trx.abort()
}
}
diff --git a/services/dmarc-report/src/database/create-summary.js b/services/dmarc-report/src/database/create-summary.js
index e9b367570d..336b5f67ba 100644
--- a/services/dmarc-report/src/database/create-summary.js
+++ b/services/dmarc-report/src/database/create-summary.js
@@ -1,3 +1,5 @@
+const logger = require('../logger')
+
async function createSummary({ arangoCtx, date, domain, summaryData }) {
// Generate list of collections names
const collectionStrings = Object.keys(arangoCtx.collections)
@@ -33,14 +35,14 @@ async function createSummary({ arangoCtx, date, domain, summaryData }) {
`,
)
} catch (err) {
- console.error(`Transaction step error occurred for dmarc summaries service when creating summary data: ${err}`)
+ logger.error({ err }, 'Transaction step error occurred for dmarc summaries service when creating summary data')
await trx.abort()
}
try {
await trx.commit()
} catch (err) {
- console.error(`Transaction commit error occurred for dmarc summaries service when creating summary data: ${err}`)
+ logger.error({ err }, 'Transaction commit error occurred for dmarc summaries service when creating summary data')
await trx.abort()
}
}
diff --git a/services/dmarc-report/src/database/remove-ownership.js b/services/dmarc-report/src/database/remove-ownership.js
index 3555b6e003..5a8095211d 100644
--- a/services/dmarc-report/src/database/remove-ownership.js
+++ b/services/dmarc-report/src/database/remove-ownership.js
@@ -1,3 +1,5 @@
+const logger = require('../logger')
+
async function removeOwnership({ arangoCtx, domain, orgAcronymEn }) {
// Generate list of collections names
const collectionStrings = Object.keys(arangoCtx.collections)
@@ -51,14 +53,14 @@ async function removeOwnership({ arangoCtx, domain, orgAcronymEn }) {
`,
)
} catch (err) {
- console.error(`Transaction step error occurred for dmarc summaries service when removing ownership data: ${err}`)
+ logger.error({ err }, 'Transaction step error occurred for dmarc summaries service when removing ownership data')
await trx.abort()
}
try {
await trx.commit()
} catch (err) {
- console.error(`Transaction commit error occurred for dmarc summaries service when removing ownership data: ${err}`)
+ logger.error({ err }, 'Transaction commit error occurred for dmarc summaries service when removing ownership data')
await trx.abort()
}
}
diff --git a/services/dmarc-report/src/database/remove-summary.js b/services/dmarc-report/src/database/remove-summary.js
index 9ca30af537..274b622a9b 100644
--- a/services/dmarc-report/src/database/remove-summary.js
+++ b/services/dmarc-report/src/database/remove-summary.js
@@ -1,3 +1,5 @@
+const logger = require('../logger')
+
async function removeSummary({ arangoCtx, domain, date }) {
// Generate list of collections names
const collectionStrings = Object.keys(arangoCtx.collections)
@@ -32,14 +34,14 @@ async function removeSummary({ arangoCtx, domain, date }) {
`,
)
} catch (err) {
- console.error(`Transaction step error occurred for dmarc summaries service when removing summary data: ${err}`)
+ logger.error({ err }, 'Transaction step error occurred for dmarc summaries service when removing summary data')
await trx.abort()
}
try {
await trx.commit()
} catch (err) {
- console.error(`Transaction commit error occurred for dmarc summaries service when removing summary data: ${err}`)
+ logger.error({ err }, 'Transaction commit error occurred for dmarc summaries service when removing summary data')
await trx.abort()
}
}
diff --git a/services/dmarc-report/src/database/update-no-owner-domain-mail-status.js b/services/dmarc-report/src/database/update-no-owner-domain-mail-status.js
index 83535b5f3b..8494a9e073 100644
--- a/services/dmarc-report/src/database/update-no-owner-domain-mail-status.js
+++ b/services/dmarc-report/src/database/update-no-owner-domain-mail-status.js
@@ -1,5 +1,7 @@
+const logger = require('../logger')
+
async function updateNoOwnerDomainMailStatus({ arangoCtx }) {
- console.info(`Updating no owner domain mail statuses`)
+ logger.info('Updating no owner domain mail statuses')
const updateNoOwnerDomainMailStatusCursor = await arangoCtx.query`
FOR domain IN domains
LET ownerships = (
diff --git a/services/dmarc-report/src/database/upsert-summary.js b/services/dmarc-report/src/database/upsert-summary.js
index 067dc61760..2dc5bcb2a0 100644
--- a/services/dmarc-report/src/database/upsert-summary.js
+++ b/services/dmarc-report/src/database/upsert-summary.js
@@ -1,3 +1,5 @@
+const logger = require('../logger')
+
async function upsertSummary({ arangoCtx, date, domain, summaryData }) {
// get current summary info
const edgeCursor = await arangoCtx.query`
@@ -35,14 +37,14 @@ async function upsertSummary({ arangoCtx, date, domain, summaryData }) {
`,
)
} catch (err) {
- console.error(`Transaction step error occurred for dmarc summaries service when upserting summary data: ${err}`)
+ logger.error({ err }, 'Transaction step error occurred for dmarc summaries service when upserting summary data')
await trx.abort()
}
try {
await trx.commit()
} catch (err) {
- console.error(`Transaction commit error occurred for dmarc summaries service when upserting summary data: ${err}`)
+ logger.error({ err }, 'Transaction commit error occurred for dmarc summaries service when upserting summary data')
await trx.abort()
}
}
diff --git a/services/dmarc-report/src/dmarc-report.js b/services/dmarc-report/src/dmarc-report.js
index 833c6369ab..ba5cdda6bb 100644
--- a/services/dmarc-report/src/dmarc-report.js
+++ b/services/dmarc-report/src/dmarc-report.js
@@ -1,6 +1,7 @@
const { updateDomain } = require('./update-domain')
const { loadCheckOrg } = require('./loaders')
const { updateNoOwnerDomainMailStatus } = require('./database')
+const logger = require('./logger')
async function dmarcReport({ ownerships, arangoCtx, currentDate, cosmosDates, container, updateAllDates }) {
// get org acronyms
@@ -12,11 +13,11 @@ async function dmarcReport({ ownerships, arangoCtx, currentDate, cosmosDates, co
// check if org exists
const checkOrg = await loadCheckOrg({ arangoCtx, orgAcronymEn })
if (!checkOrg) {
- console.warn(`Org: ${orgAcronym} cannot be found in datastore`)
+ logger.warn({ orgAcronym: String(orgAcronym) }, 'Org cannot be found in the datastore, skipping to next org')
continue
}
- console.info(`Updating DMARC summary info for org: ${String(orgAcronym)}`)
+ logger.info({ orgAcronym: String(orgAcronym) }, 'Updating DMARC summary info for org')
const batchSize = 60
@@ -24,7 +25,7 @@ async function dmarcReport({ ownerships, arangoCtx, currentDate, cosmosDates, co
// Batch update domains, process 20 at a time
const domains = ownerships[orgAcronym].slice(i, i + batchSize)
- console.log(`Checking ${domains.length} domains for ${orgAcronym}: ${domains}`)
+ logger.info({ orgAcronym: String(orgAcronym), batchSize: domains.length }, 'Processing batch of domains for org')
const queryResults = await container.items
.query({
@@ -56,7 +57,7 @@ async function dmarcReport({ ownerships, arangoCtx, currentDate, cosmosDates, co
// Update send status for all domains without ownership
await updateNoOwnerDomainMailStatus({ arangoCtx })
- console.info('Completed assigning ownerships.')
+ logger.info('Completed updating DMARC summary info for all orgs')
}
module.exports = { dmarcReport }
diff --git a/services/dmarc-report/src/loaders/load-ownerships.js b/services/dmarc-report/src/loaders/load-ownerships.js
index 2981da5b88..e99f3ebce4 100644
--- a/services/dmarc-report/src/loaders/load-ownerships.js
+++ b/services/dmarc-report/src/loaders/load-ownerships.js
@@ -1,5 +1,7 @@
const { Octokit } = require('octokit')
+const logger = require('../logger')
+
const { GITHUB_TOKEN, GITHUB_BRANCH, GITHUB_FILE, GITHUB_OWNER, GITHUB_REPO } = process.env
function getDecodedData(resp) {
@@ -22,7 +24,7 @@ async function loadDomainOwnership() {
})
return getDecodedData(resp)
} catch (err) {
- console.error(`Error loading domain ownership: ${err}`)
+ logger.error({ err }, 'Error loading domain ownership')
throw err
}
}
diff --git a/services/dmarc-report/src/logger.js b/services/dmarc-report/src/logger.js
new file mode 100644
index 0000000000..918c8ac84c
--- /dev/null
+++ b/services/dmarc-report/src/logger.js
@@ -0,0 +1,14 @@
+const pino = require('pino')
+
+const logger = pino({
+ level: process.env.LOG_LEVEL || 'info',
+ base: {
+ service: 'dmarc-report',
+ env: process.env.NODE_ENV,
+ },
+ timestamp: pino.stdTimeFunctions.isoTime,
+ messageKey: 'message',
+ errorKey: 'err',
+})
+
+module.exports = logger
diff --git a/services/dmarc-report/src/update-domain.js b/services/dmarc-report/src/update-domain.js
index 3dea3701e7..27c9d8d319 100644
--- a/services/dmarc-report/src/update-domain.js
+++ b/services/dmarc-report/src/update-domain.js
@@ -8,6 +8,7 @@ const {
updateDomainMailStatus,
} = require('./database')
const { calculatePercentages } = require('./utils')
+const logger = require('./logger')
async function updateDomain({
arangoCtx,
@@ -22,11 +23,11 @@ async function updateDomain({
// check to see if domain exists
const checkDomain = await loadCheckDomain({ arangoCtx, domain })
if (!checkDomain) {
- console.warn(`\t${domain} cannot be found in the datastore`)
+ logger.warn({ domain }, 'Domain cannot be found in the datastore')
return
}
- console.info(`\tWorking on domain: ${domain}`)
+ logger.info({ domain }, 'Working on domain')
// get the current owner of the domain
const orgOwner = await loadOrgOwner({
@@ -36,18 +37,18 @@ async function updateDomain({
// if the domain is not owned create ownership
if (!orgOwner) {
- console.info(`\t\tAssigning ${domain} ownership to: ${String(orgAcronym)}`)
+ logger.info({ domain, orgAcronym: String(orgAcronym) }, 'Assigning domain ownership')
await createOwnership({ arangoCtx, domain, orgAcronymEn })
}
// if the domain is owned by another org, remove ownership and assign a new one
else if (orgOwner !== orgAcronymEn) {
- console.info(`\t\tRemoving ${domain} ownership from: ${orgOwner}`)
+ logger.info({ domain, orgOwner }, 'Removing domain ownership from current owner')
await removeOwnership({ arangoCtx, domain, orgAcronymEn: orgOwner })
- console.info(`\t\tAssigning ${domain} ownership to: ${String(orgAcronym)}`)
+ logger.info({ domain, orgAcronym: String(orgAcronym) }, 'Assigning domain ownership to new owner')
await createOwnership({ arangoCtx, domain, orgAcronymEn })
} else {
- console.info(`\t\tOwnership of ${domain} is already assigned to ${String(orgAcronym)}`)
+ logger.info({ domain, orgAcronym: String(orgAcronym) }, 'Domain ownership is already correct, no changes needed')
}
const arangoDates = await loadArangoDates({ arangoCtx, domain })
@@ -55,7 +56,7 @@ async function updateDomain({
if (date === 'thirtyDays') continue // Do not remove thirtyDays summary
if (cosmosDates.indexOf(date) === -1) {
// remove periods in arango
- console.info(`\t\tRemoving ${date} for ${domain}`)
+ logger.info({ domain, date }, 'Removing out of date summary')
await removeSummary({
arangoCtx,
domain,
@@ -66,7 +67,7 @@ async function updateDomain({
const domainData = queryResults.resources.filter((resource) => resource.domain === domain)
if (!domainData.length > 0) {
- console.warn(`\t\t${domain} cannot be found in the summaries container`)
+ logger.warn({ domain }, 'Domain cannot be found in the summaries container')
}
for (const date of cosmosDates) {
@@ -170,7 +171,7 @@ async function updateDomain({
summaryDataToInput.totalMessages = totalMessages
if (arangoDates.indexOf(arangoDate) === -1) {
- console.info(`\t\tInitializing ${arangoDate} for ${domain}`)
+ logger.info({ domain, date: arangoDate }, 'Creating new summary for date')
await createSummary({
arangoCtx,
domain,
@@ -178,7 +179,8 @@ async function updateDomain({
summaryData: summaryDataToInput,
})
} else if ([currentDate, 'thirtyDays'].includes(arangoDate) || updateAllDates) {
- console.info(`\t\tUpdating ${arangoDate} for ${domain}`)
+ logger.info({ domain, date: arangoDate }, 'Updating existing summary for date')
+
await upsertSummary({
arangoCtx,
domain,
@@ -199,7 +201,7 @@ async function updateDomain({
) {
sendsEmail = 'true'
}
- console.info(`\t\tUpdating domain mail status for ${domain} to ${sendsEmail}`)
+ logger.info({ domain, sendsEmail }, 'Updating domain mail status')
await updateDomainMailStatus({ arangoCtx, domain, sendsEmail })
}
}
diff --git a/services/domain-cleanup/.dockerignore b/services/domain-cleanup/.dockerignore
index 463aee45ce..9280e0ce86 100644
--- a/services/domain-cleanup/.dockerignore
+++ b/services/domain-cleanup/.dockerignore
@@ -1,6 +1,5 @@
node_modules
cloudbuild.yaml
coverage
-**/*.test.js
**/*/.env
.git
diff --git a/services/domain-cleanup/Dockerfile b/services/domain-cleanup/Dockerfile
index a09fcf9540..8e827e3368 100644
--- a/services/domain-cleanup/Dockerfile
+++ b/services/domain-cleanup/Dockerfile
@@ -1,14 +1,34 @@
-FROM node:alpine
+# syntax=docker/dockerfile:1
+FROM node:25.5.0-alpine AS production
ENV NODE_ENV production
WORKDIR /app
-COPY src ./src
-COPY index.js ./index.js
+
COPY package* ./
-COPY database-options.js ./
-COPY .env.example ./
-RUN npm ci
+RUN npm ci --omit=dev
+
+COPY --exclude=**/__tests__ \
+ --exclude=**/__mocks__ \
+ --exclude=**/testUtilities.js \
+ src ./src
+COPY index.js database-options.js .env.example ./
USER node
CMD ["npm", "start"]
+
+#===============================================================================================
+
+FROM production AS test
+
+USER root
+
+ENV NODE_ENV=development
+RUN npm install
+COPY . .
+
+USER node
+
+#===============================================================================================
+
+FROM production AS final
diff --git a/services/domain-cleanup/cloudbuild.yaml b/services/domain-cleanup/cloudbuild.yaml
index 4ad8b75043..dbf0c98686 100644
--- a/services/domain-cleanup/cloudbuild.yaml
+++ b/services/domain-cleanup/cloudbuild.yaml
@@ -1,7 +1,7 @@
steps:
- - name: 'gcr.io/cloud-builders/docker'
+ - name: 'docker:29'
id: start_arango
- entrypoint: /bin/sh
+ entrypoint: 'ash'
args:
[
'-c',
@@ -12,21 +12,20 @@ steps:
id: wait
args: ['arangodb:8529']
- - name: node:alpine
- id: install-dependencies
+ - name: 'docker:29'
+ id: build-test-image
dir: services/domain-cleanup
- entrypoint: npm
- args: ['ci', '--no-optional']
+ args: ['build', '--target=test', '-t', 'test-image', '.']
- - name: node:alpine
- id: run-eslint
- dir: services/domain-cleanup
+ - name: 'test-image'
+ id: run-lint
+ dir: /app
entrypoint: npm
- args: ['run', lint]
+ args: ['run', 'lint']
- - name: node:alpine
- id: test
- dir: services/domain-cleanup
+ - name: 'test-image'
+ id: run-tests
+ dir: /app
entrypoint: npm
args: ['test']
env:
@@ -34,18 +33,19 @@ steps:
- DB_PASS=$_DB_PASS
- DB_NAME=$_DB_NAME
- UNCLAIMED_ORG_ID=$_UNCLAIMED_ORG_ID
- - name: 'gcr.io/cloud-builders/docker'
+
+ - name: 'docker:29'
id: generate-image-name
- entrypoint: 'bash'
+ entrypoint: 'ash'
dir: services/domain-cleanup
args:
- '-c'
- |
- echo "northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/domain-cleanup:$(echo $BRANCH_NAME | sed 's/[^a-zA-Z0-9]/-/g')-$SHORT_SHA-$(date +%s)" > /workspace/imagename
+ echo 'northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/domain-cleanup:'"$(echo $BRANCH_NAME | sed 's/[^a-zA-Z0-9]/-/g')-$SHORT_SHA-$(date +%s)" > /workspace/imagename
- - name: 'gcr.io/cloud-builders/docker'
+ - name: 'docker:29'
id: build
- entrypoint: 'bash'
+ entrypoint: 'ash'
dir: services/domain-cleanup
args:
- '-c'
@@ -53,14 +53,14 @@ steps:
image=$(cat /workspace/imagename)
docker build -t $image .
- - name: 'gcr.io/cloud-builders/docker'
+ - name: 'docker:29'
id: push-if-master
- entrypoint: 'bash'
+ entrypoint: 'ash'
dir: services/domain-cleanup
args:
- '-c'
- |
- if [[ "$BRANCH_NAME" == "master" ]]
+ if [[ '$BRANCH_NAME' == 'master' ]]
then
image=$(cat /workspace/imagename)
docker push $image
diff --git a/services/domain-cleanup/index.js b/services/domain-cleanup/index.js
index 74e740cee5..0fed4f0a5d 100644
--- a/services/domain-cleanup/index.js
+++ b/services/domain-cleanup/index.js
@@ -7,6 +7,7 @@ const { DB_PASS: rootPass, DB_URL: url, DB_NAME: databaseName } = process.env
const { ensure } = require('arango-tools')
const { databaseOptions } = require('./database-options')
+const logger = require('./src/logger')
const { removeNXDomainService, unclaimedCleanupService, untagNewDomainsService } = require('./src')
@@ -21,26 +22,26 @@ const { removeNXDomainService, unclaimedCleanupService, untagNewDomainsService }
})
try {
- console.log('Starting NXDOMAIN cleanup service...')
- await removeNXDomainService({ query, log: console.log })
- console.log('NXDOMAIN cleanup service finished successfully.')
+ logger.info('Starting NXDOMAIN cleanup service...')
+ await removeNXDomainService({ query, log: logger.info.bind(logger) })
+ logger.info('NXDOMAIN cleanup service finished successfully.')
} catch (err) {
- console.log(err)
+ logger.error({ err }, 'NXDOMAIN cleanup service failed')
}
try {
- console.log('Starting unclaimed cleanup service...')
- await unclaimedCleanupService({ query, log: console.log })
- console.log('Unclaimed cleanup service finished successfully.')
+ logger.info('Starting unclaimed cleanup service...')
+ await unclaimedCleanupService({ query, log: logger.info.bind(logger) })
+ logger.info('Unclaimed cleanup service finished successfully.')
} catch (err) {
- console.log(err)
+ logger.error({ err }, 'Unclaimed cleanup service failed')
}
try {
- console.log('Starting untag new domains service...')
- await untagNewDomainsService({ query, log: console.log })
- console.log('Untag new domain service finished successfully.')
+ logger.info('Starting untag new domains service...')
+ await untagNewDomainsService({ query, log: logger.info.bind(logger) })
+ logger.info('Untag new domain service finished successfully.')
} catch (err) {
- console.log(err)
+ logger.error({ err }, 'Untag new domain service failed')
}
})()
diff --git a/services/domain-cleanup/package-lock.json b/services/domain-cleanup/package-lock.json
index cb24d9902a..1c40261002 100644
--- a/services/domain-cleanup/package-lock.json
+++ b/services/domain-cleanup/package-lock.json
@@ -10,7 +10,8 @@
"license": "ISC",
"dependencies": {
"arango-tools": "^0.6.0",
- "dotenv-safe": "^8.2.0"
+ "dotenv-safe": "^8.2.0",
+ "pino": "^10.3.1"
},
"devDependencies": {
"eslint": "^8.40.0",
@@ -24,6 +25,7 @@
"jest": "^29.5.0",
"jest-fetch-mock": "^3.0.3",
"jest-matcher-utils": "^29.5.0",
+ "pino-pretty": "^13.1.3",
"prettier": "^2.8.8"
}
},
@@ -1244,6 +1246,11 @@
"node": ">= 8"
}
},
+ "node_modules/@pinojs/redact": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz",
+ "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg=="
+ },
"node_modules/@sinclair/typebox": {
"version": "0.25.24",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz",
@@ -1808,6 +1815,14 @@
"node": ">=6"
}
},
+ "node_modules/atomic-sleep": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
+ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
"node_modules/available-typed-arrays": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
@@ -2173,6 +2188,12 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "node_modules/colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -2208,6 +2229,15 @@
"node": ">= 8"
}
},
+ "node_modules/dateformat": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
+ "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -2349,6 +2379,15 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
+ "node_modules/end-of-stream": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
+ "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -3071,6 +3110,12 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/fast-copy": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.2.tgz",
+ "integrity": "sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==",
+ "dev": true
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -3117,6 +3162,12 @@
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
+ "node_modules/fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
+ "dev": true
+ },
"node_modules/fastq": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
@@ -3197,9 +3248,9 @@
}
},
"node_modules/flatted": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
- "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
"node_modules/for-each": {
@@ -3529,6 +3580,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/help-me": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz",
+ "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==",
+ "dev": true
+ },
"node_modules/html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -4577,6 +4634,15 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
+ "node_modules/joycon": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
+ "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/js-sdsl": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz",
@@ -4824,9 +4890,9 @@
}
},
"node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -4982,6 +5048,14 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/on-exit-leak-free": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
+ "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -5146,9 +5220,9 @@
"dev": true
},
"node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"engines": {
"node": ">=8.6"
@@ -5157,6 +5231,76 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/pino": {
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz",
+ "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==",
+ "dependencies": {
+ "@pinojs/redact": "^0.4.0",
+ "atomic-sleep": "^1.0.0",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^3.0.0",
+ "pino-std-serializers": "^7.0.0",
+ "process-warning": "^5.0.0",
+ "quick-format-unescaped": "^4.0.3",
+ "real-require": "^0.2.0",
+ "safe-stable-stringify": "^2.3.1",
+ "sonic-boom": "^4.0.1",
+ "thread-stream": "^4.0.0"
+ },
+ "bin": {
+ "pino": "bin.js"
+ }
+ },
+ "node_modules/pino-abstract-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz",
+ "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==",
+ "dependencies": {
+ "split2": "^4.0.0"
+ }
+ },
+ "node_modules/pino-pretty": {
+ "version": "13.1.3",
+ "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.3.tgz",
+ "integrity": "sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==",
+ "dev": true,
+ "dependencies": {
+ "colorette": "^2.0.7",
+ "dateformat": "^4.6.3",
+ "fast-copy": "^4.0.0",
+ "fast-safe-stringify": "^2.1.1",
+ "help-me": "^5.0.0",
+ "joycon": "^3.1.1",
+ "minimist": "^1.2.6",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^3.0.0",
+ "pump": "^3.0.0",
+ "secure-json-parse": "^4.0.0",
+ "sonic-boom": "^4.0.1",
+ "strip-json-comments": "^5.0.2"
+ },
+ "bin": {
+ "pino-pretty": "bin.js"
+ }
+ },
+ "node_modules/pino-pretty/node_modules/strip-json-comments": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz",
+ "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pino-std-serializers": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz",
+ "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw=="
+ },
"node_modules/pirates": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
@@ -5288,6 +5432,21 @@
"node": ">= 0.6.0"
}
},
+ "node_modules/process-warning": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz",
+ "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ]
+ },
"node_modules/promise-polyfill": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz",
@@ -5307,6 +5466,16 @@
"node": ">= 6"
}
},
+ "node_modules/pump": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
+ "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
"node_modules/punycode": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
@@ -5352,12 +5521,25 @@
}
]
},
+ "node_modules/quick-format-unescaped": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="
+ },
"node_modules/react-is": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
"dev": true
},
+ "node_modules/real-require": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
+ "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
+ "engines": {
+ "node": ">= 12.13.0"
+ }
+ },
"node_modules/regexp.prototype.flags": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
@@ -5514,6 +5696,30 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/safe-stable-stringify": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
+ "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/secure-json-parse": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz",
+ "integrity": "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ]
+ },
"node_modules/semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -5579,6 +5785,14 @@
"node": ">=8"
}
},
+ "node_modules/sonic-boom": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz",
+ "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==",
+ "dependencies": {
+ "atomic-sleep": "^1.0.0"
+ }
+ },
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -5598,6 +5812,14 @@
"source-map": "^0.6.0"
}
},
+ "node_modules/split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+ "engines": {
+ "node": ">= 10.x"
+ }
+ },
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -5783,6 +6005,17 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
+ "node_modules/thread-stream": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.0.0.tgz",
+ "integrity": "sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==",
+ "dependencies": {
+ "real-require": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
"node_modules/tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -7144,6 +7377,11 @@
"fastq": "^1.6.0"
}
},
+ "@pinojs/redact": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz",
+ "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg=="
+ },
"@sinclair/typebox": {
"version": "0.25.24",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz",
@@ -7578,6 +7816,11 @@
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-2.0.2.tgz",
"integrity": "sha512-9sBQUQZMKFKcO/C3Bo6Rx4CQany0R0UeVcefNGRRdW2vbmaMOhV1sbmlXcQLcD56juLXbSGTBm0GGuvmrAF8pA=="
},
+ "atomic-sleep": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
+ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="
+ },
"available-typed-arrays": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
@@ -7839,6 +8082,12 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -7871,6 +8120,12 @@
"which": "^2.0.1"
}
},
+ "dateformat": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
+ "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
+ "dev": true
+ },
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -7974,6 +8229,15 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
+ "end-of-stream": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
+ "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -8478,6 +8742,12 @@
"jest-util": "^29.5.0"
}
},
+ "fast-copy": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.2.tgz",
+ "integrity": "sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==",
+ "dev": true
+ },
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -8520,6 +8790,12 @@
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
+ "fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
+ "dev": true
+ },
"fastq": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
@@ -8582,9 +8858,9 @@
}
},
"flatted": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
- "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
"for-each": {
@@ -8814,6 +9090,12 @@
"has-symbols": "^1.0.2"
}
},
+ "help-me": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz",
+ "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==",
+ "dev": true
+ },
"html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -9591,6 +9873,12 @@
}
}
},
+ "joycon": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
+ "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
+ "dev": true
+ },
"js-sdsl": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz",
@@ -9776,9 +10064,9 @@
}
},
"minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
@@ -9887,6 +10175,11 @@
"es-abstract": "^1.20.4"
}
},
+ "on-exit-leak-free": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
+ "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="
+ },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -10006,11 +10299,71 @@
"dev": true
},
"picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true
},
+ "pino": {
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz",
+ "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==",
+ "requires": {
+ "@pinojs/redact": "^0.4.0",
+ "atomic-sleep": "^1.0.0",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^3.0.0",
+ "pino-std-serializers": "^7.0.0",
+ "process-warning": "^5.0.0",
+ "quick-format-unescaped": "^4.0.3",
+ "real-require": "^0.2.0",
+ "safe-stable-stringify": "^2.3.1",
+ "sonic-boom": "^4.0.1",
+ "thread-stream": "^4.0.0"
+ }
+ },
+ "pino-abstract-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz",
+ "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==",
+ "requires": {
+ "split2": "^4.0.0"
+ }
+ },
+ "pino-pretty": {
+ "version": "13.1.3",
+ "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.3.tgz",
+ "integrity": "sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==",
+ "dev": true,
+ "requires": {
+ "colorette": "^2.0.7",
+ "dateformat": "^4.6.3",
+ "fast-copy": "^4.0.0",
+ "fast-safe-stringify": "^2.1.1",
+ "help-me": "^5.0.0",
+ "joycon": "^3.1.1",
+ "minimist": "^1.2.6",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^3.0.0",
+ "pump": "^3.0.0",
+ "secure-json-parse": "^4.0.0",
+ "sonic-boom": "^4.0.1",
+ "strip-json-comments": "^5.0.2"
+ },
+ "dependencies": {
+ "strip-json-comments": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz",
+ "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==",
+ "dev": true
+ }
+ }
+ },
+ "pino-std-serializers": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz",
+ "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw=="
+ },
"pirates": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
@@ -10101,6 +10454,11 @@
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="
},
+ "process-warning": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz",
+ "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA=="
+ },
"promise-polyfill": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz",
@@ -10117,6 +10475,16 @@
"sisteransi": "^1.0.5"
}
},
+ "pump": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
+ "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
"punycode": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
@@ -10135,12 +10503,22 @@
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true
},
+ "quick-format-unescaped": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="
+ },
"react-is": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
"dev": true
},
+ "real-require": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
+ "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="
+ },
"regexp.prototype.flags": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
@@ -10239,6 +10617,17 @@
"is-regex": "^1.1.4"
}
},
+ "safe-stable-stringify": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
+ "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="
+ },
+ "secure-json-parse": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz",
+ "integrity": "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==",
+ "dev": true
+ },
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -10289,6 +10678,14 @@
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
+ "sonic-boom": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz",
+ "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==",
+ "requires": {
+ "atomic-sleep": "^1.0.0"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -10305,6 +10702,11 @@
"source-map": "^0.6.0"
}
},
+ "split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="
+ },
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -10441,6 +10843,14 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
+ "thread-stream": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.0.0.tgz",
+ "integrity": "sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==",
+ "requires": {
+ "real-require": "^0.2.0"
+ }
+ },
"tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
diff --git a/services/domain-cleanup/package.json b/services/domain-cleanup/package.json
index 31a956a9ff..e7bba5b0d2 100644
--- a/services/domain-cleanup/package.json
+++ b/services/domain-cleanup/package.json
@@ -14,7 +14,8 @@
"license": "ISC",
"dependencies": {
"arango-tools": "^0.6.0",
- "dotenv-safe": "^8.2.0"
+ "dotenv-safe": "^8.2.0",
+ "pino": "^10.3.1"
},
"devDependencies": {
"eslint": "^8.40.0",
@@ -28,6 +29,7 @@
"jest": "^29.5.0",
"jest-fetch-mock": "^3.0.3",
"jest-matcher-utils": "^29.5.0",
+ "pino-pretty": "^13.1.3",
"prettier": "^2.8.8"
}
}
diff --git a/services/domain-cleanup/src/__tests__/domain-cleanup-service.test.js b/services/domain-cleanup/src/__tests__/domain-cleanup-service.test.js
index 8d8f687394..e7e839b358 100644
--- a/services/domain-cleanup/src/__tests__/domain-cleanup-service.test.js
+++ b/services/domain-cleanup/src/__tests__/domain-cleanup-service.test.js
@@ -97,18 +97,22 @@ describe('given the removeNXDomainService', () => {
})
})
it('removes all domains with an rcode of NXDOMAIN', async () => {
- await removeNXDomainService({ query, log: console.info })
-
- const domainCursor = await query`
+ const getAllDomains = async () =>
+ await (
+ await query`
FOR domain IN domains
RETURN domain
`
- const domainList = await domainCursor.all()
- expect(domainList).toEqual([])
- expect(consoleInfoOutput).toEqual([
- 'Found 1 domains to cleanup',
- 'Domain "test.domain.gc.ca" and related data successfully removed',
- ])
+ ).all()
+
+ const initialDomainList = await getAllDomains()
+ expect(initialDomainList).toHaveLength(1)
+ expect(initialDomainList[0].domain).toEqual('test.domain.gc.ca')
+
+ await removeNXDomainService({ query })
+
+ const domainListAfterCleanup = await getAllDomains()
+ expect(domainListAfterCleanup).toEqual([])
})
})
})
diff --git a/services/domain-cleanup/src/logger.js b/services/domain-cleanup/src/logger.js
new file mode 100644
index 0000000000..c19b46c976
--- /dev/null
+++ b/services/domain-cleanup/src/logger.js
@@ -0,0 +1,14 @@
+const pino = require('pino')
+
+const logger = pino({
+ level: process.env.LOG_LEVEL || 'info',
+ base: {
+ service: 'domain-cleanup',
+ env: process.env.NODE_ENV,
+ },
+ timestamp: pino.stdTimeFunctions.isoTime,
+ messageKey: 'message',
+ errorKey: 'err',
+})
+
+module.exports = logger
diff --git a/services/domain-cleanup/src/remove-nxdomain-service.js b/services/domain-cleanup/src/remove-nxdomain-service.js
index 4ddd8dba28..753670bc95 100644
--- a/services/domain-cleanup/src/remove-nxdomain-service.js
+++ b/services/domain-cleanup/src/remove-nxdomain-service.js
@@ -1,20 +1,23 @@
const { getNXDomains } = require('./database')
+const logger = require('./logger')
-const removeNXDomainService = async ({ query, log }) => {
- const cleanupDomains = await getNXDomains({ query, log })
- log(`Found ${cleanupDomains.length} domains to cleanup`)
- for (const domain of cleanupDomains) {
+const removeNXDomainService = async ({ query }) => {
+ const cleanupDomains = await getNXDomains({ query })
+ logger.info({ count: cleanupDomains.length }, `Found domains to cleanup`)
+ for (const domainDoc of cleanupDomains) {
+ const domainId = domainDoc._id
+ const domain = domainDoc.domain
// remove favourites
try {
await (
await query`
WITH favourites, domains
- FOR v, e IN 1..1 ANY ${domain._id} favourites
+ FOR v, e IN 1..1 ANY ${domainId} favourites
REMOVE e IN favourites
`
).all()
} catch (err) {
- console.error(`Error while removing favourites for domain: ${domain._key}, error: ${err})`)
+ logger.error({ err, domain }, `Error while removing favourites for domain`)
continue
}
@@ -23,12 +26,12 @@ const removeNXDomainService = async ({ query, log }) => {
await (
await query`
WITH ownership, domains
- FOR v, e IN 1..1 ANY ${domain._id} ownership
+ FOR v, e IN 1..1 ANY ${domainId} ownership
REMOVE e IN ownership
`
).all()
} catch (err) {
- console.error(`Error while removing ownerships for domain: ${domain._key}, error: ${err})`)
+ logger.error({ err, domain }, `Error while removing ownerships for domain`)
continue
}
@@ -37,12 +40,12 @@ const removeNXDomainService = async ({ query, log }) => {
await (
await query`
WITH dmarcSummaries, domainsToDmarcSummaries, domains
- FOR v, e IN 1..1 ANY ${domain._id} domainsToDmarcSummaries
+ FOR v, e IN 1..1 ANY ${domainId} domainsToDmarcSummaries
REMOVE e IN domainsToDmarcSummaries
REMOVE v IN dmarcSummaries`
).all()
} catch (err) {
- console.error(`Error while removing DMARC summaries for domain: ${domain._key}, error: ${err})`)
+ logger.error({ err, domain }, `Error while removing DMARC summaries for domain`)
continue
}
@@ -51,11 +54,11 @@ const removeNXDomainService = async ({ query, log }) => {
await (
await query`
WITH web, webScan, domainsWeb, webToWebScans, domains
- FOR webV, domainsWebEdge IN 1..1 OUTBOUND ${domain._id} domainsWeb
+ FOR webV, domainsWebEdge IN 1..1 OUTBOUND ${domainId} domainsWeb
LET removeWebScansQuery = (
- FOR webScanV, webToWebScansV In 1..1 OUTBOUND webV._id webToWebScans
+ FOR webScanV, webToWebScansE In 1..1 OUTBOUND webV._id webToWebScans
REMOVE webScanV IN webScan
- REMOVE webToWebScansV IN webToWebScans
+ REMOVE webToWebScansE IN webToWebScans
OPTIONS { waitForSync: true }
)
REMOVE webV IN web
@@ -64,7 +67,7 @@ const removeNXDomainService = async ({ query, log }) => {
`
).all()
} catch (err) {
- console.error(`Error while removing web scans for domain: ${domain._key}, error: ${err})`)
+ logger.error({ err, domain }, `Error while removing web scans for domain`)
continue
}
@@ -73,13 +76,13 @@ const removeNXDomainService = async ({ query, log }) => {
await (
await query`
WITH dns, domainsDNS, domains
- FOR v, e IN 1..1 ANY ${domain._id} domainsDNS
+ FOR v, e IN 1..1 ANY ${domainId} domainsDNS
REMOVE e IN domainsDNS
REMOVE v IN dns
`
).all()
} catch (err) {
- console.error(`Error while removing dns scans for domain: ${domain._key}, error: ${err})`)
+ logger.error({ err, domain }, `Error while removing dns scans for domain`)
continue
}
@@ -88,12 +91,12 @@ const removeNXDomainService = async ({ query, log }) => {
await (
await query`
WITH claims, domains
- FOR v, e IN 1..1 ANY ${domain._id} claims
+ FOR v, e IN 1..1 ANY ${domainId} claims
REMOVE e IN claims
`
).all()
} catch (err) {
- console.error(`Error while removing claims for domain: ${domain._key}, error: ${err})`)
+ logger.error({ err, domain }, `Error while removing claims for domain`)
continue
}
@@ -102,14 +105,14 @@ const removeNXDomainService = async ({ query, log }) => {
await (
await query`
WITH domains
- REMOVE ${domain._key} IN domains
+ REMOVE ${domainDoc._key} IN domains
`
).all()
} catch (err) {
- console.error(`Error while removing domain: ${domain._key}, error: ${err})`)
+ logger.error({ err, domain }, `Error while removing domain`)
continue
}
- log(`Domain "${domain.domain}" and related data successfully removed`)
+ logger.info({ domain }, 'Domain and related data successfully removed')
}
}
diff --git a/services/domain-cleanup/src/unclaimed-cleanup-service.js b/services/domain-cleanup/src/unclaimed-cleanup-service.js
index b1cea4ee83..a3399706de 100644
--- a/services/domain-cleanup/src/unclaimed-cleanup-service.js
+++ b/services/domain-cleanup/src/unclaimed-cleanup-service.js
@@ -1,13 +1,14 @@
const { UNCLAIMED_ORG_ID } = process.env
const { findDomainClaims, findUnclaimedDomains } = require('./database')
+const logger = require('./logger')
-const unclaimedCleanupService = async ({ query, log }) => {
+const unclaimedCleanupService = async ({ query }) => {
const unclaimedDomains = await findUnclaimedDomains({ query, orgId: UNCLAIMED_ORG_ID })
- log(`Found ${unclaimedDomains.length} unclaimed domains`)
- unclaimedDomains.forEach(async ({ domain, _id: domainId }) => {
+ logger.info({ count: unclaimedDomains.length }, 'Found unclaimed domains')
+ for (const { domain, _id: domainId } of unclaimedDomains) {
const claims = await findDomainClaims({ query, domainId })
if (claims.length > 1) {
- log(`Attempting to remove ${domain} from the 'Unclaimed' org...`)
+ logger.info({ domain }, "Attempting to remove domain from the 'Unclaimed' org")
try {
await (
await query`
@@ -16,12 +17,12 @@ const unclaimedCleanupService = async ({ query, log }) => {
REMOVE e IN claims
`
).all()
- log(`Successfully removed ${domain} from the 'Unclaimed' org.`)
+ logger.info({ domain }, "Successfully removed domain from the 'Unclaimed' org.")
} catch (err) {
- console.error(`Error while removing claims for domain: ${domain._key}, error: ${err})`)
+ logger.error({ err, domain }, "Error while removing claims for domain from the 'Unclaimed' org")
}
}
- })
+ }
}
module.exports = {
diff --git a/services/domain-cleanup/src/untag-new-domains-service.js b/services/domain-cleanup/src/untag-new-domains-service.js
index 598f4e4a23..781661d475 100644
--- a/services/domain-cleanup/src/untag-new-domains-service.js
+++ b/services/domain-cleanup/src/untag-new-domains-service.js
@@ -1,8 +1,9 @@
const { getNewDomains } = require('./database')
+const logger = require('./logger')
-const untagNewDomainsService = async ({ query, log }) => {
- const newClaims = await getNewDomains({ query, log })
- log(`Found ${newClaims.length} new claims`)
+const untagNewDomainsService = async ({ query }) => {
+ const newClaims = await getNewDomains({ query })
+ logger.info({ count: newClaims.length }, `New claims found`)
// create date for 120 days ago
const newCutOff = new Date()
newCutOff.setDate(newCutOff.getDate() - 120)
@@ -16,7 +17,7 @@ const untagNewDomainsService = async ({ query, log }) => {
const claimDate = new Date(claim?.firstSeen)
if (claimDate < newCutOff) oldClaimKeys.push(claim._key)
})
- log(`Found ${oldClaimKeys.length} new claims to untag`)
+ logger.info({ count: oldClaimKeys.length }, 'New claims to untag')
try {
query`
@@ -26,7 +27,7 @@ const untagNewDomainsService = async ({ query, log }) => {
UPDATE c WITH { tags: REMOVE_VALUE(c.tags, 'new-nouveau') } IN claims
`
} catch (err) {
- console.error(`Error while untagging new claims, error: ${err})`)
+ logger.error({ err }, 'Error while untagging new claims')
}
}
diff --git a/services/guidance/Dockerfile b/services/guidance/Dockerfile
index b376a5de23..2b29493e8e 100644
--- a/services/guidance/Dockerfile
+++ b/services/guidance/Dockerfile
@@ -1,19 +1,18 @@
-FROM python:3.13.5-slim-bookworm
+FROM python:3.14.2-alpine
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV PYTHONWARNINGS ignore
-RUN useradd -ms /bin/bash guidance
+RUN adduser -D guidance
-RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
- apt-utils \
+RUN apk add --no-cache \
git \
python3 \
- python3-pip \
- python3-setuptools \
- python3-wheel \
- build-essential \
+ py3-pip \
+ py3-setuptools \
+ py3-wheel \
+ build-base \
python3-dev
USER guidance
diff --git a/services/guidance/requirements.txt b/services/guidance/requirements.txt
index 1b78d2cc76..961ee00bbd 100644
--- a/services/guidance/requirements.txt
+++ b/services/guidance/requirements.txt
@@ -3,10 +3,10 @@ charset-normalizer==3.3.2
emoji==2.10.1
idna==3.7
packaging==23.2
-PyJWT==2.8.0
-python-arango==7.2.0
-python-dotenv==0.19.0
-requests==2.32.4
+PyJWT==2.12.0
+python-arango==8.3.0
+python-dotenv==1.2.2
+requests==2.33.0
requests-toolbelt==1.0.0
setuptools-scm==8.0.4
tomli==2.0.1
diff --git a/services/org-footprint/.dockerignore b/services/org-footprint/.dockerignore
index 463aee45ce..9280e0ce86 100644
--- a/services/org-footprint/.dockerignore
+++ b/services/org-footprint/.dockerignore
@@ -1,6 +1,5 @@
node_modules
cloudbuild.yaml
coverage
-**/*.test.js
**/*/.env
.git
diff --git a/services/org-footprint/Dockerfile b/services/org-footprint/Dockerfile
index a09fcf9540..8e827e3368 100644
--- a/services/org-footprint/Dockerfile
+++ b/services/org-footprint/Dockerfile
@@ -1,14 +1,34 @@
-FROM node:alpine
+# syntax=docker/dockerfile:1
+FROM node:25.5.0-alpine AS production
ENV NODE_ENV production
WORKDIR /app
-COPY src ./src
-COPY index.js ./index.js
+
COPY package* ./
-COPY database-options.js ./
-COPY .env.example ./
-RUN npm ci
+RUN npm ci --omit=dev
+
+COPY --exclude=**/__tests__ \
+ --exclude=**/__mocks__ \
+ --exclude=**/testUtilities.js \
+ src ./src
+COPY index.js database-options.js .env.example ./
USER node
CMD ["npm", "start"]
+
+#===============================================================================================
+
+FROM production AS test
+
+USER root
+
+ENV NODE_ENV=development
+RUN npm install
+COPY . .
+
+USER node
+
+#===============================================================================================
+
+FROM production AS final
diff --git a/services/org-footprint/cloudbuild.yaml b/services/org-footprint/cloudbuild.yaml
index 147a0abac5..28e4265c4b 100644
--- a/services/org-footprint/cloudbuild.yaml
+++ b/services/org-footprint/cloudbuild.yaml
@@ -1,7 +1,7 @@
steps:
- - name: 'gcr.io/cloud-builders/docker'
+ - name: 'docker:29'
id: start_arango
- entrypoint: /bin/sh
+ entrypoint: 'ash'
args:
[
'-c',
@@ -12,21 +12,20 @@ steps:
id: wait
args: ['arangodb:8529']
- - name: node:alpine
- id: install-dependencies
+ - name: 'docker:29'
+ id: build-test-image
dir: services/org-footprint
- entrypoint: npm
- args: ['ci', '--no-optional']
+ args: ['build', '--target=test', '-t', 'test-image', '.']
- - name: node:alpine
- id: run-eslint
- dir: services/org-footprint
+ - name: 'test-image'
+ id: run-lint
+ dir: /app
entrypoint: npm
- args: ['run', lint]
+ args: ['run', 'lint']
- - name: node:alpine
- id: test
- dir: services/org-footprint
+ - name: 'test-image'
+ id: run-tests
+ dir: /app
entrypoint: npm
args: ['test']
env:
@@ -39,18 +38,19 @@ steps:
- SERVICE_ACCOUNT_EMAIL=$_SERVICE_ACCOUNT_EMAIL
- REDIRECT_TO_SERVICE_ACCOUNT_EMAIL=$_REDIRECT_TO_SERVICE_ACCOUNT_EMAIL
- NOTIFICATION_PENDING_USERS=$_NOTIFICATION_PENDING_USERS
- - name: 'gcr.io/cloud-builders/docker'
+
+ - name: 'docker:29'
id: generate-image-name
- entrypoint: 'bash'
+ entrypoint: 'ash'
dir: services/org-footprint
args:
- '-c'
- |
- echo "northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/org-footprint:$(echo $BRANCH_NAME | sed 's/[^a-zA-Z0-9]/-/g')-$SHORT_SHA-$(date +%s)" > /workspace/imagename
+ echo 'northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/org-footprint:'"$(echo $BRANCH_NAME | sed 's/[^a-zA-Z0-9]/-/g')-$SHORT_SHA-$(date +%s)" > /workspace/imagename
- - name: 'gcr.io/cloud-builders/docker'
+ - name: 'docker:29'
id: build
- entrypoint: 'bash'
+ entrypoint: 'ash'
dir: services/org-footprint
args:
- '-c'
@@ -58,14 +58,14 @@ steps:
image=$(cat /workspace/imagename)
docker build -t $image .
- - name: 'gcr.io/cloud-builders/docker'
+ - name: 'docker:29'
id: push-if-master
- entrypoint: 'bash'
+ entrypoint: 'ash'
dir: services/org-footprint
args:
- '-c'
- |
- if [[ "$BRANCH_NAME" == "master" ]]
+ if [[ '$BRANCH_NAME' == 'master' ]]
then
image=$(cat /workspace/imagename)
docker push $image
diff --git a/services/org-footprint/index.js b/services/org-footprint/index.js
index 2479fb3506..04035d7130 100644
--- a/services/org-footprint/index.js
+++ b/services/org-footprint/index.js
@@ -29,5 +29,5 @@ const notifyClient = new NotifyClient(NOTIFICATION_API_URL, NOTIFICATION_API_KEY
options: databaseOptions({ rootPass }),
})
- await orgFootprintService({ query, log: console.log, notifyClient })
+ await orgFootprintService({ query, notifyClient })
})()
diff --git a/services/org-footprint/package-lock.json b/services/org-footprint/package-lock.json
index f8d4c7e54c..7b599bd77e 100644
--- a/services/org-footprint/package-lock.json
+++ b/services/org-footprint/package-lock.json
@@ -11,7 +11,8 @@
"dependencies": {
"arango-tools": "^0.6.0",
"dotenv-safe": "^8.2.0",
- "notifications-node-client": "^8.2.1"
+ "notifications-node-client": "^8.2.1",
+ "pino": "^10.3.1"
},
"devDependencies": {
"eslint": "^8.40.0",
@@ -25,6 +26,7 @@
"jest": "^29.5.0",
"jest-fetch-mock": "^3.0.3",
"jest-matcher-utils": "^29.5.0",
+ "pino-pretty": "^13.1.3",
"prettier": "^2.8.8"
}
},
@@ -1245,6 +1247,11 @@
"node": ">= 8"
}
},
+ "node_modules/@pinojs/redact": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz",
+ "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg=="
+ },
"node_modules/@sinclair/typebox": {
"version": "0.25.24",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz",
@@ -1814,6 +1821,14 @@
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
+ "node_modules/atomic-sleep": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
+ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
"node_modules/available-typed-arrays": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
@@ -1827,13 +1842,13 @@
}
},
"node_modules/axios": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.1.tgz",
- "integrity": "sha512-Kn4kbSXpkFHCGE6rBFNwIv0GQs4AvDT80jlveJDKFxjbTYMUeB4QtsdPCv6H8Cm19Je7IU6VFtRl2zWZI0rudQ==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
+ "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
"dependencies": {
- "follow-redirects": "^1.15.6",
- "form-data": "^4.0.4",
- "proxy-from-env": "^1.1.0"
+ "follow-redirects": "^1.15.11",
+ "form-data": "^4.0.5",
+ "proxy-from-env": "^2.1.0"
}
},
"node_modules/babel-jest": {
@@ -2206,6 +2221,12 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "node_modules/colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -2252,6 +2273,15 @@
"node": ">= 8"
}
},
+ "node_modules/dateformat": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
+ "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -2422,6 +2452,15 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
+ "node_modules/end-of-stream": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
+ "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -3171,6 +3210,12 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/fast-copy": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.2.tgz",
+ "integrity": "sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==",
+ "dev": true
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -3217,6 +3262,12 @@
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
+ "node_modules/fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
+ "dev": true
+ },
"node_modules/fastq": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
@@ -3297,15 +3348,15 @@
}
},
"node_modules/flatted": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
- "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
"node_modules/follow-redirects": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
+ "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
"funding": [
{
"type": "individual",
@@ -3331,9 +3382,9 @@
}
},
"node_modules/form-data": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
- "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
@@ -3694,6 +3745,12 @@
"node": ">= 0.4"
}
},
+ "node_modules/help-me": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz",
+ "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==",
+ "dev": true
+ },
"node_modules/html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -4742,6 +4799,15 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
+ "node_modules/joycon": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
+ "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/js-sdsl": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz",
@@ -5083,9 +5149,9 @@
}
},
"node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -5253,6 +5319,14 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/on-exit-leak-free": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
+ "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -5417,9 +5491,9 @@
"dev": true
},
"node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"engines": {
"node": ">=8.6"
@@ -5428,6 +5502,76 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/pino": {
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz",
+ "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==",
+ "dependencies": {
+ "@pinojs/redact": "^0.4.0",
+ "atomic-sleep": "^1.0.0",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^3.0.0",
+ "pino-std-serializers": "^7.0.0",
+ "process-warning": "^5.0.0",
+ "quick-format-unescaped": "^4.0.3",
+ "real-require": "^0.2.0",
+ "safe-stable-stringify": "^2.3.1",
+ "sonic-boom": "^4.0.1",
+ "thread-stream": "^4.0.0"
+ },
+ "bin": {
+ "pino": "bin.js"
+ }
+ },
+ "node_modules/pino-abstract-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz",
+ "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==",
+ "dependencies": {
+ "split2": "^4.0.0"
+ }
+ },
+ "node_modules/pino-pretty": {
+ "version": "13.1.3",
+ "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.3.tgz",
+ "integrity": "sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==",
+ "dev": true,
+ "dependencies": {
+ "colorette": "^2.0.7",
+ "dateformat": "^4.6.3",
+ "fast-copy": "^4.0.0",
+ "fast-safe-stringify": "^2.1.1",
+ "help-me": "^5.0.0",
+ "joycon": "^3.1.1",
+ "minimist": "^1.2.6",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^3.0.0",
+ "pump": "^3.0.0",
+ "secure-json-parse": "^4.0.0",
+ "sonic-boom": "^4.0.1",
+ "strip-json-comments": "^5.0.2"
+ },
+ "bin": {
+ "pino-pretty": "bin.js"
+ }
+ },
+ "node_modules/pino-pretty/node_modules/strip-json-comments": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz",
+ "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pino-std-serializers": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz",
+ "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw=="
+ },
"node_modules/pirates": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
@@ -5559,6 +5703,21 @@
"node": ">= 0.6.0"
}
},
+ "node_modules/process-warning": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz",
+ "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ]
+ },
"node_modules/promise-polyfill": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz",
@@ -5579,9 +5738,22 @@
}
},
"node_modules/proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz",
+ "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/pump": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
+ "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
},
"node_modules/punycode": {
"version": "2.3.0",
@@ -5628,12 +5800,25 @@
}
]
},
+ "node_modules/quick-format-unescaped": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="
+ },
"node_modules/react-is": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
"dev": true
},
+ "node_modules/real-require": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
+ "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
+ "engines": {
+ "node": ">= 12.13.0"
+ }
+ },
"node_modules/regexp.prototype.flags": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
@@ -5809,6 +5994,30 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/safe-stable-stringify": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
+ "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/secure-json-parse": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz",
+ "integrity": "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ]
+ },
"node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -5874,6 +6083,14 @@
"node": ">=8"
}
},
+ "node_modules/sonic-boom": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz",
+ "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==",
+ "dependencies": {
+ "atomic-sleep": "^1.0.0"
+ }
+ },
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -5893,6 +6110,14 @@
"source-map": "^0.6.0"
}
},
+ "node_modules/split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+ "engines": {
+ "node": ">= 10.x"
+ }
+ },
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -6078,6 +6303,17 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
+ "node_modules/thread-stream": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.0.0.tgz",
+ "integrity": "sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==",
+ "dependencies": {
+ "real-require": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
"node_modules/tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -7439,6 +7675,11 @@
"fastq": "^1.6.0"
}
},
+ "@pinojs/redact": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz",
+ "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg=="
+ },
"@sinclair/typebox": {
"version": "0.25.24",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz",
@@ -7878,6 +8119,11 @@
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
+ "atomic-sleep": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
+ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="
+ },
"available-typed-arrays": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
@@ -7885,13 +8131,13 @@
"dev": true
},
"axios": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.1.tgz",
- "integrity": "sha512-Kn4kbSXpkFHCGE6rBFNwIv0GQs4AvDT80jlveJDKFxjbTYMUeB4QtsdPCv6H8Cm19Je7IU6VFtRl2zWZI0rudQ==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
+ "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
"requires": {
- "follow-redirects": "^1.15.6",
- "form-data": "^4.0.4",
- "proxy-from-env": "^1.1.0"
+ "follow-redirects": "^1.15.11",
+ "form-data": "^4.0.5",
+ "proxy-from-env": "^2.1.0"
}
},
"babel-jest": {
@@ -8163,6 +8409,12 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -8203,6 +8455,12 @@
"which": "^2.0.1"
}
},
+ "dateformat": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
+ "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
+ "dev": true
+ },
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -8329,6 +8587,15 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
+ "end-of-stream": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
+ "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -8851,6 +9118,12 @@
"jest-util": "^29.5.0"
}
},
+ "fast-copy": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.2.tgz",
+ "integrity": "sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==",
+ "dev": true
+ },
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -8893,6 +9166,12 @@
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
+ "fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
+ "dev": true
+ },
"fastq": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
@@ -8955,15 +9234,15 @@
}
},
"flatted": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
- "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
"follow-redirects": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA=="
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
+ "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="
},
"for-each": {
"version": "0.3.3",
@@ -8975,9 +9254,9 @@
}
},
"form-data": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
- "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
@@ -9220,6 +9499,12 @@
"function-bind": "^1.1.2"
}
},
+ "help-me": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz",
+ "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==",
+ "dev": true
+ },
"html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -9997,6 +10282,12 @@
}
}
},
+ "joycon": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
+ "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
+ "dev": true
+ },
"js-sdsl": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz",
@@ -10265,9 +10556,9 @@
}
},
"minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
@@ -10384,6 +10675,11 @@
"es-abstract": "^1.20.4"
}
},
+ "on-exit-leak-free": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
+ "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="
+ },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -10503,11 +10799,71 @@
"dev": true
},
"picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true
},
+ "pino": {
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz",
+ "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==",
+ "requires": {
+ "@pinojs/redact": "^0.4.0",
+ "atomic-sleep": "^1.0.0",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^3.0.0",
+ "pino-std-serializers": "^7.0.0",
+ "process-warning": "^5.0.0",
+ "quick-format-unescaped": "^4.0.3",
+ "real-require": "^0.2.0",
+ "safe-stable-stringify": "^2.3.1",
+ "sonic-boom": "^4.0.1",
+ "thread-stream": "^4.0.0"
+ }
+ },
+ "pino-abstract-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz",
+ "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==",
+ "requires": {
+ "split2": "^4.0.0"
+ }
+ },
+ "pino-pretty": {
+ "version": "13.1.3",
+ "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.3.tgz",
+ "integrity": "sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==",
+ "dev": true,
+ "requires": {
+ "colorette": "^2.0.7",
+ "dateformat": "^4.6.3",
+ "fast-copy": "^4.0.0",
+ "fast-safe-stringify": "^2.1.1",
+ "help-me": "^5.0.0",
+ "joycon": "^3.1.1",
+ "minimist": "^1.2.6",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^3.0.0",
+ "pump": "^3.0.0",
+ "secure-json-parse": "^4.0.0",
+ "sonic-boom": "^4.0.1",
+ "strip-json-comments": "^5.0.2"
+ },
+ "dependencies": {
+ "strip-json-comments": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz",
+ "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==",
+ "dev": true
+ }
+ }
+ },
+ "pino-std-serializers": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz",
+ "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw=="
+ },
"pirates": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
@@ -10598,6 +10954,11 @@
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="
},
+ "process-warning": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz",
+ "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA=="
+ },
"promise-polyfill": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz",
@@ -10615,9 +10976,19 @@
}
},
"proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz",
+ "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="
+ },
+ "pump": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
+ "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
},
"punycode": {
"version": "2.3.0",
@@ -10637,12 +11008,22 @@
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true
},
+ "quick-format-unescaped": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="
+ },
"react-is": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
"dev": true
},
+ "real-require": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
+ "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="
+ },
"regexp.prototype.flags": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
@@ -10746,6 +11127,17 @@
"is-regex": "^1.1.4"
}
},
+ "safe-stable-stringify": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
+ "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="
+ },
+ "secure-json-parse": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz",
+ "integrity": "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==",
+ "dev": true
+ },
"semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -10796,6 +11188,14 @@
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
+ "sonic-boom": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz",
+ "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==",
+ "requires": {
+ "atomic-sleep": "^1.0.0"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -10812,6 +11212,11 @@
"source-map": "^0.6.0"
}
},
+ "split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="
+ },
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -10948,6 +11353,14 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
+ "thread-stream": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.0.0.tgz",
+ "integrity": "sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==",
+ "requires": {
+ "real-require": "^0.2.0"
+ }
+ },
"tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
diff --git a/services/org-footprint/package.json b/services/org-footprint/package.json
index 99e50cbac7..e0ea7cdbec 100644
--- a/services/org-footprint/package.json
+++ b/services/org-footprint/package.json
@@ -15,7 +15,8 @@
"dependencies": {
"arango-tools": "^0.6.0",
"dotenv-safe": "^8.2.0",
- "notifications-node-client": "^8.2.1"
+ "notifications-node-client": "^8.2.1",
+ "pino": "^10.3.1"
},
"devDependencies": {
"eslint": "^8.40.0",
@@ -29,6 +30,7 @@
"jest": "^29.5.0",
"jest-fetch-mock": "^3.0.3",
"jest-matcher-utils": "^29.5.0",
+ "pino-pretty": "^13.1.3",
"prettier": "^2.8.8"
}
}
diff --git a/services/org-footprint/src/__mocks__/logger.js b/services/org-footprint/src/__mocks__/logger.js
new file mode 100644
index 0000000000..c928f70c54
--- /dev/null
+++ b/services/org-footprint/src/__mocks__/logger.js
@@ -0,0 +1,7 @@
+const logger = {
+ info: jest.fn(),
+ warn: jest.fn(),
+ error: jest.fn(),
+}
+
+module.exports = logger
diff --git a/services/org-footprint/src/__tests__/get-all-org-keys.test.js b/services/org-footprint/src/__tests__/get-all-org-keys.test.js
index 33b1a816dd..f91b1382a1 100644
--- a/services/org-footprint/src/__tests__/get-all-org-keys.test.js
+++ b/services/org-footprint/src/__tests__/get-all-org-keys.test.js
@@ -7,11 +7,6 @@ const { databaseOptions } = require('../../database-options')
const { getAllOrgKeys } = require('../database')
describe('given the getAllOrgKeys function', () => {
- const consoleErrorOutput = []
- const consoleInfoOutput = []
- const mockedError = (output) => consoleErrorOutput.push(output)
- const mockedInfo = (output) => consoleInfoOutput.push(output)
-
let query, drop, truncate, collections
beforeAll(async () => {
@@ -26,11 +21,6 @@ describe('given the getAllOrgKeys function', () => {
})
beforeEach(async () => {
- console.error = mockedError
- console.info = mockedInfo
- consoleErrorOutput.length = 0
- consoleInfoOutput.length = 0
-
await truncate()
})
diff --git a/services/org-footprint/src/__tests__/get-bilingual-org-names.test.js b/services/org-footprint/src/__tests__/get-bilingual-org-names.test.js
index 672990ed7e..8b705cb18e 100644
--- a/services/org-footprint/src/__tests__/get-bilingual-org-names.test.js
+++ b/services/org-footprint/src/__tests__/get-bilingual-org-names.test.js
@@ -7,11 +7,6 @@ const { databaseOptions } = require('../../database-options')
const { getBilingualOrgNames } = require('../database')
describe('given the getBilingualOrgNames function', () => {
- const consoleErrorOutput = []
- const consoleInfoOutput = []
- const mockedError = (output) => consoleErrorOutput.push(output)
- const mockedInfo = (output) => consoleInfoOutput.push(output)
-
let query, drop, truncate, collections
beforeAll(async () => {
@@ -26,11 +21,6 @@ describe('given the getBilingualOrgNames function', () => {
})
beforeEach(async () => {
- console.error = mockedError
- console.info = mockedInfo
- consoleErrorOutput.length = 0
- consoleInfoOutput.length = 0
-
await truncate()
})
diff --git a/services/org-footprint/src/__tests__/get-new-audit-logs.test.js b/services/org-footprint/src/__tests__/get-new-audit-logs.test.js
index b28200060c..1a0f4468d4 100644
--- a/services/org-footprint/src/__tests__/get-new-audit-logs.test.js
+++ b/services/org-footprint/src/__tests__/get-new-audit-logs.test.js
@@ -7,11 +7,6 @@ const { databaseOptions } = require('../../database-options')
const { getNewAuditLogs } = require('../database')
describe('given the getNewAuditLogs function', () => {
- const consoleErrorOutput = []
- const consoleInfoOutput = []
- const mockedError = (output) => consoleErrorOutput.push(output)
- const mockedInfo = (output) => consoleInfoOutput.push(output)
-
let query, drop, truncate, collections
beforeAll(async () => {
@@ -26,11 +21,6 @@ describe('given the getNewAuditLogs function', () => {
})
beforeEach(async () => {
- console.error = mockedError
- console.info = mockedInfo
- consoleErrorOutput.length = 0
- consoleInfoOutput.length = 0
-
await truncate()
})
diff --git a/services/org-footprint/src/__tests__/get-org-admins.test.js b/services/org-footprint/src/__tests__/get-org-admins.test.js
index 8e7171c796..78bf0c8110 100644
--- a/services/org-footprint/src/__tests__/get-org-admins.test.js
+++ b/services/org-footprint/src/__tests__/get-org-admins.test.js
@@ -7,11 +7,6 @@ const { databaseOptions } = require('../../database-options')
const { getOrgAdmins } = require('../database')
describe('given the getOrgAdmins function', () => {
- const consoleErrorOutput = []
- const consoleInfoOutput = []
- const mockedError = (output) => consoleErrorOutput.push(output)
- const mockedInfo = (output) => consoleInfoOutput.push(output)
-
let query, drop, truncate, collections
beforeAll(async () => {
@@ -26,11 +21,6 @@ describe('given the getOrgAdmins function', () => {
})
beforeEach(async () => {
- console.error = mockedError
- console.info = mockedInfo
- consoleErrorOutput.length = 0
- consoleInfoOutput.length = 0
-
await truncate()
})
diff --git a/services/org-footprint/src/__tests__/get-pending-org-user-count.test.js b/services/org-footprint/src/__tests__/get-pending-org-user-count.test.js
index e5bea7446b..f007c83bbd 100644
--- a/services/org-footprint/src/__tests__/get-pending-org-user-count.test.js
+++ b/services/org-footprint/src/__tests__/get-pending-org-user-count.test.js
@@ -7,11 +7,6 @@ const { databaseOptions } = require('../../database-options')
const { getPendingOrgUserCount } = require('../database')
describe('given the getPendingOrgUserCount function', () => {
- const consoleErrorOutput = []
- const consoleInfoOutput = []
- const mockedError = (output) => consoleErrorOutput.push(output)
- const mockedInfo = (output) => consoleInfoOutput.push(output)
-
let query, drop, truncate, collections
beforeAll(async () => {
@@ -26,11 +21,6 @@ describe('given the getPendingOrgUserCount function', () => {
})
beforeEach(async () => {
- console.error = mockedError
- console.info = mockedInfo
- consoleErrorOutput.length = 0
- consoleInfoOutput.length = 0
-
await truncate()
})
diff --git a/services/org-footprint/src/__tests__/notify-send-org-footprint-email.test.js b/services/org-footprint/src/__tests__/notify-send-org-footprint-email.test.js
index 09033c4956..42839357ad 100644
--- a/services/org-footprint/src/__tests__/notify-send-org-footprint-email.test.js
+++ b/services/org-footprint/src/__tests__/notify-send-org-footprint-email.test.js
@@ -1,14 +1,12 @@
+jest.mock('../logger')
+
+const logger = require('../logger')
const { sendOrgFootprintEmail } = require('../notify')
const { NOTIFICATION_ORG_FOOTPRINT_BILINGUAL } = process.env
describe('given the sendOrgFootprintEmail function', () => {
- let consoleOutput = []
- const mockedError = (output) => consoleOutput.push(output)
- beforeAll(async () => {
- console.error = mockedError
- })
beforeEach(async () => {
- consoleOutput = []
+ jest.clearAllMocks()
})
describe('email successfully sent', () => {
it('returns nothing', async () => {
@@ -100,9 +98,13 @@ describe('given the sendOrgFootprintEmail function', () => {
},
})
- expect(consoleOutput).toEqual([
- `Error occurred when sending org footprint changes via email for ${user._key}: Error: Notification error occurred.`,
- ])
+ expect(logger.error).toHaveBeenCalledWith(
+ {
+ err: new Error('Notification error occurred.'),
+ userKey: user._key,
+ },
+ 'Error occurred when sending org footprint changes via email',
+ )
})
})
})
diff --git a/services/org-footprint/src/database/get-org-admins.js b/services/org-footprint/src/database/get-org-admins.js
index 4385e62ac6..44c440abdb 100644
--- a/services/org-footprint/src/database/get-org-admins.js
+++ b/services/org-footprint/src/database/get-org-admins.js
@@ -5,7 +5,6 @@ const getOrgAdmins = async ({ query, orgKey }) => {
cursor = await query`
FOR v, e IN 1..1 OUTBOUND ${orgId} affiliations
FILTER e.permission == "admin" OR e.permission == "owner"
- FILTER v.emailUpdateOptions.orgFootprint == true
RETURN v
`
} catch (err) {
diff --git a/services/org-footprint/src/database/get-org-owner.js b/services/org-footprint/src/database/get-org-owner.js
new file mode 100644
index 0000000000..355a3ab9c6
--- /dev/null
+++ b/services/org-footprint/src/database/get-org-owner.js
@@ -0,0 +1,26 @@
+const getOrgOwner = async ({ query, orgKey }) => {
+ let cursor
+ const orgId = `organizations/${orgKey}`
+ try {
+ cursor = await query`
+ FOR v, e IN 1..1 OUTBOUND ${orgId} affiliations
+ FILTER e.permission == "owner"
+ RETURN v
+ `
+ } catch (err) {
+ throw new Error(`Database error occurred while trying to find org owner: ${err}`)
+ }
+
+ let owner
+ try {
+ owner = await cursor.next()
+ } catch (err) {
+ throw new Error(`Cursor error occurred while trying to find org owner: ${err}`)
+ }
+
+ return owner
+}
+
+module.exports = {
+ getOrgOwner,
+}
diff --git a/services/org-footprint/src/database/get-org-users.js b/services/org-footprint/src/database/get-org-users.js
new file mode 100644
index 0000000000..ae9eaeca43
--- /dev/null
+++ b/services/org-footprint/src/database/get-org-users.js
@@ -0,0 +1,26 @@
+const getOrgUsers = async ({ query, orgKey }) => {
+ let cursor
+ const orgId = `organizations/${orgKey}`
+ try {
+ cursor = await query`
+ FOR v, e IN 1..1 OUTBOUND ${orgId} affiliations
+ FILTER v.emailUpdateOptions.orgFootprint == true
+ RETURN v
+ `
+ } catch (err) {
+ throw new Error(`Database error occurred while trying to find org users: ${err}`)
+ }
+
+ let orgUsers
+ try {
+ orgUsers = await cursor.all()
+ } catch (err) {
+ throw new Error(`Cursor error occurred while trying to find org users: ${err}`)
+ }
+
+ return orgUsers
+}
+
+module.exports = {
+ getOrgUsers,
+}
diff --git a/services/org-footprint/src/database/get-pending-cvd-enrollments.js b/services/org-footprint/src/database/get-pending-cvd-enrollments.js
new file mode 100644
index 0000000000..33b6b6d7a8
--- /dev/null
+++ b/services/org-footprint/src/database/get-pending-cvd-enrollments.js
@@ -0,0 +1,26 @@
+const getPendingCvdEnrollmentCount = async ({ query, orgKey }) => {
+ let cursor
+ const orgId = `organizations/${orgKey}`
+ try {
+ cursor = await query`
+ FOR v, e IN 1..1 OUTBOUND ${orgId} claims
+ FILTER v.cvdEnrollment.status == "pending"
+ RETURN v
+ `
+ } catch (err) {
+ throw new Error(`Database error occurred while trying to find pending enrollments: ${err}`)
+ }
+
+ let pendingEnrollmentCount
+ try {
+ pendingEnrollmentCount = await cursor.all()
+ } catch (err) {
+ throw new Error(`Cursor error occurred while trying to find pending enrollments: ${err}`)
+ }
+
+ return pendingEnrollmentCount.length
+}
+
+module.exports = {
+ getPendingCvdEnrollmentCount,
+}
diff --git a/services/org-footprint/src/database/index.js b/services/org-footprint/src/database/index.js
index 9231363982..87fceff6fd 100644
--- a/services/org-footprint/src/database/index.js
+++ b/services/org-footprint/src/database/index.js
@@ -3,5 +3,17 @@ const { getAllOrgKeys } = require('./get-all-org-keys')
const { getNewAuditLogs } = require('./get-new-audit-logs')
const { getBilingualOrgNames } = require('./get-bilingual-org-names')
const { getPendingOrgUserCount } = require('./get-pending-org-user-count')
+const { getOrgUsers } = require('./get-org-users')
+const { getOrgOwner } = require('./get-org-owner')
+const { getPendingCvdEnrollmentCount } = require('./get-pending-cvd-enrollments')
-module.exports = { getOrgAdmins, getAllOrgKeys, getNewAuditLogs, getBilingualOrgNames, getPendingOrgUserCount }
+module.exports = {
+ getOrgAdmins,
+ getAllOrgKeys,
+ getNewAuditLogs,
+ getBilingualOrgNames,
+ getPendingOrgUserCount,
+ getOrgUsers,
+ getOrgOwner,
+ getPendingCvdEnrollmentCount,
+}
diff --git a/services/org-footprint/src/logger.js b/services/org-footprint/src/logger.js
new file mode 100644
index 0000000000..6f86ce65ae
--- /dev/null
+++ b/services/org-footprint/src/logger.js
@@ -0,0 +1,14 @@
+const pino = require('pino')
+
+const logger = pino({
+ level: process.env.LOG_LEVEL || 'info',
+ base: {
+ service: 'org-footprint',
+ env: process.env.NODE_ENV,
+ },
+ timestamp: pino.stdTimeFunctions.isoTime,
+ messageKey: 'message',
+ errorKey: 'err',
+})
+
+module.exports = logger
diff --git a/services/org-footprint/src/notify/index.js b/services/org-footprint/src/notify/index.js
index 8d49cd7e39..bfb2a11dec 100644
--- a/services/org-footprint/src/notify/index.js
+++ b/services/org-footprint/src/notify/index.js
@@ -1,3 +1,4 @@
const { sendOrgFootprintEmail } = require('./notify-send-org-footprint-email')
const { sendPendingOrgUsersEmail } = require('./notify-send-pending-org-users-email')
-module.exports = { sendOrgFootprintEmail, sendPendingOrgUsersEmail }
+const { sendPendingCvdEnrollmentEmail } = require('./notify-send-pending-cvd-enrollment-email')
+module.exports = { sendOrgFootprintEmail, sendPendingOrgUsersEmail, sendPendingCvdEnrollmentEmail }
diff --git a/services/org-footprint/src/notify/notify-send-org-footprint-email.js b/services/org-footprint/src/notify/notify-send-org-footprint-email.js
index ac40876467..ddc2b01a4e 100644
--- a/services/org-footprint/src/notify/notify-send-org-footprint-email.js
+++ b/services/org-footprint/src/notify/notify-send-org-footprint-email.js
@@ -1,3 +1,5 @@
+const logger = require('../logger')
+
const { NOTIFICATION_ORG_FOOTPRINT_BILINGUAL } = process.env
const sendOrgFootprintEmail = async ({ notifyClient, user, auditLogs, orgNames }) => {
@@ -48,7 +50,7 @@ const sendOrgFootprintEmail = async ({ notifyClient, user, auditLogs, orgNames }
},
})
} catch (err) {
- console.error(`Error occurred when sending org footprint changes via email for ${user._key}: ${err}`)
+ logger.error({ err, userKey: user._key }, 'Error occurred when sending org footprint changes via email')
}
}
diff --git a/services/org-footprint/src/notify/notify-send-pending-cvd-enrollment-email.js b/services/org-footprint/src/notify/notify-send-pending-cvd-enrollment-email.js
new file mode 100644
index 0000000000..938127c511
--- /dev/null
+++ b/services/org-footprint/src/notify/notify-send-pending-cvd-enrollment-email.js
@@ -0,0 +1,24 @@
+const logger = require('../logger')
+
+const { NOTIFICATION_PENDING_CVD_ENROLLMENT } = process.env
+
+const sendPendingCvdEnrollmentEmail = async ({ notifyClient, user, orgNames }) => {
+ const templateId = NOTIFICATION_PENDING_CVD_ENROLLMENT
+
+ try {
+ await notifyClient.sendEmail(templateId, user.userName, {
+ personalisation: {
+ display_name: user.displayName,
+ organization_name_en: orgNames.en,
+ organization_name_fr: orgNames.fr,
+ admin_link: 'https://tracker.canada.ca/admin/organizations',
+ },
+ })
+ } catch (err) {
+ logger.error({ err, userKey: user._key }, 'Error occurred when sending pending users alert via email')
+ }
+}
+
+module.exports = {
+ sendPendingCvdEnrollmentEmail,
+}
diff --git a/services/org-footprint/src/notify/notify-send-pending-org-users-email.js b/services/org-footprint/src/notify/notify-send-pending-org-users-email.js
index 2e7116094a..fb9b5529cd 100644
--- a/services/org-footprint/src/notify/notify-send-pending-org-users-email.js
+++ b/services/org-footprint/src/notify/notify-send-pending-org-users-email.js
@@ -1,3 +1,5 @@
+const logger = require('../logger')
+
const { NOTIFICATION_PENDING_USERS } = process.env
const sendPendingOrgUsersEmail = async ({ notifyClient, user, orgNames }) => {
@@ -13,7 +15,7 @@ const sendPendingOrgUsersEmail = async ({ notifyClient, user, orgNames }) => {
},
})
} catch (err) {
- console.error(`Error occurred when sending pending users alert via email for ${user._key}: ${err}`)
+ logger.error({ err, userKey: user._key }, 'Error occurred when sending pending users alert via email')
}
}
diff --git a/services/org-footprint/src/org-footprint-service.js b/services/org-footprint/src/org-footprint-service.js
index 93f34a91ff..4718133dd0 100644
--- a/services/org-footprint/src/org-footprint-service.js
+++ b/services/org-footprint/src/org-footprint-service.js
@@ -4,54 +4,51 @@ const {
getNewAuditLogs,
getBilingualOrgNames,
getPendingOrgUserCount,
+ getOrgUsers,
+ getPendingCvdEnrollmentCount,
+ getOrgOwner,
} = require('./database')
-const { sendOrgFootprintEmail, sendPendingOrgUsersEmail } = require('./notify')
+const { sendOrgFootprintEmail, sendPendingOrgUsersEmail, sendPendingCvdEnrollmentEmail } = require('./notify')
+const logger = require('logger')
const { SERVICE_ACCOUNT_EMAIL, REDIRECT_TO_SERVICE_ACCOUNT_EMAIL } = process.env
-const orgFootprintService = async ({ query, log, notifyClient }) => {
- // get list of all orgs
+const orgFootprintService = async ({ query, notifyClient }) => {
const orgKeys = await getAllOrgKeys({ query })
for (const orgKey of orgKeys) {
- // check for new audit logs
+ const orgNames = await getBilingualOrgNames({ query, orgKey })
const auditLogs = await getNewAuditLogs({ query, orgKey })
- // if new audit logs exist
if (auditLogs.length > 0) {
- // get list of org admins
- const orgAdmins = await getOrgAdmins({ query, orgKey })
+ const orgUsers = await getOrgUsers({ query, orgKey })
if (REDIRECT_TO_SERVICE_ACCOUNT_EMAIL) {
- // send email to service account
- orgAdmins.push({
+ orgUsers.push({
userName: SERVICE_ACCOUNT_EMAIL,
displayName: 'Service Account',
_key: 'service-account',
})
}
- // if org admins exist
- if (orgAdmins.length > 0) {
- log(`Sending recent activity email to admins of org: ${orgKey}`)
- const orgNames = await getBilingualOrgNames({ query, orgKey })
- // send email to org admins
- for (const user of orgAdmins) {
- await sendOrgFootprintEmail({ notifyClient, user, auditLogs, orgNames })
- }
+ logger.info({ orgKey, auditLogCount: auditLogs.length }, 'Sending recent activity email to admins of org')
+ for (const user of orgUsers) {
+ await sendOrgFootprintEmail({ notifyClient, user, auditLogs, orgNames })
}
}
- // if org has pending users
+
const pendingUserCount = await getPendingOrgUserCount({ query, orgKey })
if (pendingUserCount > 0) {
const orgAdmins = await getOrgAdmins({ query, orgKey })
- // if org admins exist
- if (orgAdmins.length > 0) {
- log(`Sending pending users email to admins of org: ${orgKey}`)
- const orgNames = await getBilingualOrgNames({ query, orgKey })
- // send email to org admins
- for (const user of orgAdmins) {
- await sendPendingOrgUsersEmail({ notifyClient, user, orgNames })
- }
+ logger.info({ orgKey, pendingUserCount }, 'Sending pending users email to admins of org')
+ for (const admin of orgAdmins) {
+ await sendPendingOrgUsersEmail({ notifyClient, user: admin, orgNames })
}
}
+
+ const pendingEnrollmentCount = await getPendingCvdEnrollmentCount({ query, orgKey })
+ if (pendingEnrollmentCount > 0) {
+ const orgOwner = await getOrgOwner({ query, orgKey })
+ logger.info({ orgKey, pendingEnrollmentCount }, 'Sending pending CVD enrollments email to owner of org')
+ await sendPendingCvdEnrollmentEmail({ notifyClient, user: orgOwner, orgNames })
+ }
}
}
diff --git a/services/progress-report/.dockerignore b/services/progress-report/.dockerignore
index 463aee45ce..9280e0ce86 100644
--- a/services/progress-report/.dockerignore
+++ b/services/progress-report/.dockerignore
@@ -1,6 +1,5 @@
node_modules
cloudbuild.yaml
coverage
-**/*.test.js
**/*/.env
.git
diff --git a/services/progress-report/Dockerfile b/services/progress-report/Dockerfile
index a09fcf9540..8e827e3368 100644
--- a/services/progress-report/Dockerfile
+++ b/services/progress-report/Dockerfile
@@ -1,14 +1,34 @@
-FROM node:alpine
+# syntax=docker/dockerfile:1
+FROM node:25.5.0-alpine AS production
ENV NODE_ENV production
WORKDIR /app
-COPY src ./src
-COPY index.js ./index.js
+
COPY package* ./
-COPY database-options.js ./
-COPY .env.example ./
-RUN npm ci
+RUN npm ci --omit=dev
+
+COPY --exclude=**/__tests__ \
+ --exclude=**/__mocks__ \
+ --exclude=**/testUtilities.js \
+ src ./src
+COPY index.js database-options.js .env.example ./
USER node
CMD ["npm", "start"]
+
+#===============================================================================================
+
+FROM production AS test
+
+USER root
+
+ENV NODE_ENV=development
+RUN npm install
+COPY . .
+
+USER node
+
+#===============================================================================================
+
+FROM production AS final
diff --git a/services/progress-report/cloudbuild.yaml b/services/progress-report/cloudbuild.yaml
index 8692f3207d..50f0eea87b 100644
--- a/services/progress-report/cloudbuild.yaml
+++ b/services/progress-report/cloudbuild.yaml
@@ -1,7 +1,7 @@
steps:
- - name: 'gcr.io/cloud-builders/docker'
+ - name: 'docker:29'
id: start_arango
- entrypoint: /bin/sh
+ entrypoint: 'ash'
args:
[
'-c',
@@ -12,21 +12,20 @@ steps:
id: wait
args: ['arangodb:8529']
- - name: node:alpine
- id: install-dependencies
+ - name: 'docker:29'
+ id: build-test-image
dir: services/progress-report
- entrypoint: npm
- args: ['ci', '--no-optional']
+ args: ['build', '--target=test', '-t', 'test-image', '.']
- - name: node:alpine
- id: run-eslint
- dir: services/progress-report
+ - name: 'test-image'
+ id: run-lint
+ dir: /app
entrypoint: npm
- args: ['run', lint]
+ args: ['run', 'lint']
- - name: node:alpine
- id: test
- dir: services/progress-report
+ - name: 'test-image'
+ id: run-tests
+ dir: /app
entrypoint: npm
args: ['test']
env:
@@ -39,18 +38,18 @@ steps:
- REDIRECT_TO_SERVICE_ACCOUNT_EMAIL=$_REDIRECT_TO_SERVICE_ACCOUNT_EMAIL
- SERVICE_ACCOUNT_EMAIL=$_SERVICE_ACCOUNT_EMAIL
- - name: 'gcr.io/cloud-builders/docker'
+ - name: 'docker:29'
id: generate-image-name
- entrypoint: 'bash'
+ entrypoint: 'ash'
dir: services/progress-report
args:
- '-c'
- |
echo "northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/progress-report:$(echo $BRANCH_NAME | sed 's/[^a-zA-Z0-9]/-/g')-$SHORT_SHA-$(date +%s)" > /workspace/imagename
- - name: 'gcr.io/cloud-builders/docker'
+ - name: 'docker:29'
id: build
- entrypoint: 'bash'
+ entrypoint: 'ash'
dir: services/progress-report
args:
- '-c'
@@ -58,14 +57,14 @@ steps:
image=$(cat /workspace/imagename)
docker build -t $image .
- - name: 'gcr.io/cloud-builders/docker'
+ - name: 'docker:29'
id: push-if-master
- entrypoint: 'bash'
+ entrypoint: 'ash'
dir: services/progress-report
args:
- '-c'
- |
- if [[ "$BRANCH_NAME" == "master" ]]
+ if [[ '$BRANCH_NAME' == 'master' ]]
then
image=$(cat /workspace/imagename)
docker push $image
diff --git a/services/progress-report/index.js b/services/progress-report/index.js
index 2dea50f597..080b089f80 100644
--- a/services/progress-report/index.js
+++ b/services/progress-report/index.js
@@ -29,5 +29,5 @@ const notifyClient = new NotifyClient(NOTIFICATION_API_URL, NOTIFICATION_API_KEY
options: databaseOptions({ rootPass }),
})
- await progressReportService({ query, log: console.log, notifyClient })
+ await progressReportService({ query, notifyClient })
})()
diff --git a/services/progress-report/package-lock.json b/services/progress-report/package-lock.json
index 7eba04838d..c10e995852 100644
--- a/services/progress-report/package-lock.json
+++ b/services/progress-report/package-lock.json
@@ -11,7 +11,8 @@
"dependencies": {
"arango-tools": "^0.6.0",
"dotenv-safe": "^8.2.0",
- "notifications-node-client": "^8.2.1"
+ "notifications-node-client": "^8.2.1",
+ "pino": "^10.3.1"
},
"devDependencies": {
"eslint": "^8.40.0",
@@ -25,6 +26,7 @@
"jest": "^29.5.0",
"jest-fetch-mock": "^3.0.3",
"jest-matcher-utils": "^29.5.0",
+ "pino-pretty": "^13.1.3",
"prettier": "^2.8.8"
}
},
@@ -1239,6 +1241,11 @@
"node": ">= 8"
}
},
+ "node_modules/@pinojs/redact": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz",
+ "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg=="
+ },
"node_modules/@sinclair/typebox": {
"version": "0.27.8",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
@@ -1842,6 +1849,14 @@
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
+ "node_modules/atomic-sleep": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
+ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
"node_modules/available-typed-arrays": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
@@ -1855,13 +1870,13 @@
}
},
"node_modules/axios": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.1.tgz",
- "integrity": "sha512-Kn4kbSXpkFHCGE6rBFNwIv0GQs4AvDT80jlveJDKFxjbTYMUeB4QtsdPCv6H8Cm19Je7IU6VFtRl2zWZI0rudQ==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
+ "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
"dependencies": {
- "follow-redirects": "^1.15.6",
- "form-data": "^4.0.4",
- "proxy-from-env": "^1.1.0"
+ "follow-redirects": "^1.15.11",
+ "form-data": "^4.0.5",
+ "proxy-from-env": "^2.1.0"
}
},
"node_modules/babel-jest": {
@@ -2254,6 +2269,12 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "node_modules/colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
"node_modules/combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -2321,6 +2342,15 @@
"node": ">= 8"
}
},
+ "node_modules/dateformat": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
+ "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -2514,6 +2544,15 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
+ "node_modules/end-of-stream": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
+ "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -3217,6 +3256,12 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/fast-copy": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.2.tgz",
+ "integrity": "sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==",
+ "dev": true
+ },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -3263,6 +3308,12 @@
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
+ "node_modules/fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
+ "dev": true
+ },
"node_modules/fastq": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
@@ -3344,15 +3395,15 @@
}
},
"node_modules/flatted": {
- "version": "3.2.9",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
- "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
"node_modules/follow-redirects": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
+ "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
"funding": [
{
"type": "individual",
@@ -3378,9 +3429,9 @@
}
},
"node_modules/form-data": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
- "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
@@ -3754,6 +3805,12 @@
"node": ">= 0.4"
}
},
+ "node_modules/help-me": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz",
+ "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==",
+ "dev": true
+ },
"node_modules/html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -4834,6 +4891,15 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
+ "node_modules/joycon": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
+ "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -5232,9 +5298,9 @@
}
},
"node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -5431,6 +5497,14 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/on-exit-leak-free": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
+ "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -5595,9 +5669,9 @@
"dev": true
},
"node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"engines": {
"node": ">=8.6"
@@ -5606,6 +5680,76 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/pino": {
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz",
+ "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==",
+ "dependencies": {
+ "@pinojs/redact": "^0.4.0",
+ "atomic-sleep": "^1.0.0",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^3.0.0",
+ "pino-std-serializers": "^7.0.0",
+ "process-warning": "^5.0.0",
+ "quick-format-unescaped": "^4.0.3",
+ "real-require": "^0.2.0",
+ "safe-stable-stringify": "^2.3.1",
+ "sonic-boom": "^4.0.1",
+ "thread-stream": "^4.0.0"
+ },
+ "bin": {
+ "pino": "bin.js"
+ }
+ },
+ "node_modules/pino-abstract-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz",
+ "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==",
+ "dependencies": {
+ "split2": "^4.0.0"
+ }
+ },
+ "node_modules/pino-pretty": {
+ "version": "13.1.3",
+ "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.3.tgz",
+ "integrity": "sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==",
+ "dev": true,
+ "dependencies": {
+ "colorette": "^2.0.7",
+ "dateformat": "^4.6.3",
+ "fast-copy": "^4.0.0",
+ "fast-safe-stringify": "^2.1.1",
+ "help-me": "^5.0.0",
+ "joycon": "^3.1.1",
+ "minimist": "^1.2.6",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^3.0.0",
+ "pump": "^3.0.0",
+ "secure-json-parse": "^4.0.0",
+ "sonic-boom": "^4.0.1",
+ "strip-json-comments": "^5.0.2"
+ },
+ "bin": {
+ "pino-pretty": "bin.js"
+ }
+ },
+ "node_modules/pino-pretty/node_modules/strip-json-comments": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz",
+ "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pino-std-serializers": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz",
+ "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw=="
+ },
"node_modules/pirates": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
@@ -5737,6 +5881,21 @@
"node": ">= 0.6.0"
}
},
+ "node_modules/process-warning": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz",
+ "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ]
+ },
"node_modules/promise-polyfill": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz",
@@ -5757,9 +5916,22 @@
}
},
"node_modules/proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz",
+ "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/pump": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
+ "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
},
"node_modules/punycode": {
"version": "2.3.0",
@@ -5806,12 +5978,25 @@
}
]
},
+ "node_modules/quick-format-unescaped": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="
+ },
"node_modules/react-is": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
"dev": true
},
+ "node_modules/real-require": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
+ "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
+ "engines": {
+ "node": ">= 12.13.0"
+ }
+ },
"node_modules/regexp.prototype.flags": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
@@ -6015,6 +6200,30 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/safe-stable-stringify": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
+ "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/secure-json-parse": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz",
+ "integrity": "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ]
+ },
"node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -6094,6 +6303,14 @@
"node": ">=8"
}
},
+ "node_modules/sonic-boom": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz",
+ "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==",
+ "dependencies": {
+ "atomic-sleep": "^1.0.0"
+ }
+ },
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -6113,6 +6330,14 @@
"source-map": "^0.6.0"
}
},
+ "node_modules/split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
+ "engines": {
+ "node": ">= 10.x"
+ }
+ },
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -6298,6 +6523,17 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
+ "node_modules/thread-stream": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.0.0.tgz",
+ "integrity": "sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==",
+ "dependencies": {
+ "real-require": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
"node_modules/tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -7687,6 +7923,11 @@
"fastq": "^1.6.0"
}
},
+ "@pinojs/redact": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz",
+ "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg=="
+ },
"@sinclair/typebox": {
"version": "0.27.8",
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
@@ -8148,6 +8389,11 @@
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
+ "atomic-sleep": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
+ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="
+ },
"available-typed-arrays": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
@@ -8155,13 +8401,13 @@
"dev": true
},
"axios": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.1.tgz",
- "integrity": "sha512-Kn4kbSXpkFHCGE6rBFNwIv0GQs4AvDT80jlveJDKFxjbTYMUeB4QtsdPCv6H8Cm19Je7IU6VFtRl2zWZI0rudQ==",
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
+ "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
"requires": {
- "follow-redirects": "^1.15.6",
- "form-data": "^4.0.4",
- "proxy-from-env": "^1.1.0"
+ "follow-redirects": "^1.15.11",
+ "form-data": "^4.0.5",
+ "proxy-from-env": "^2.1.0"
}
},
"babel-jest": {
@@ -8448,6 +8694,12 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "colorette": {
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
+ "dev": true
+ },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -8503,6 +8755,12 @@
"which": "^2.0.1"
}
},
+ "dateformat": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz",
+ "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==",
+ "dev": true
+ },
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -8642,6 +8900,15 @@
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
},
+ "end-of-stream": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
+ "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -9131,6 +9398,12 @@
"jest-util": "^29.7.0"
}
},
+ "fast-copy": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.2.tgz",
+ "integrity": "sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==",
+ "dev": true
+ },
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -9173,6 +9446,12 @@
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
+ "fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
+ "dev": true
+ },
"fastq": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
@@ -9236,15 +9515,15 @@
}
},
"flatted": {
- "version": "3.2.9",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
- "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
+ "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
"dev": true
},
"follow-redirects": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA=="
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
+ "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="
},
"for-each": {
"version": "0.3.3",
@@ -9256,9 +9535,9 @@
}
},
"form-data": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
- "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
+ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
@@ -9511,6 +9790,12 @@
"function-bind": "^1.1.2"
}
},
+ "help-me": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz",
+ "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==",
+ "dev": true
+ },
"html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -10313,6 +10598,12 @@
}
}
},
+ "joycon": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
+ "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
+ "dev": true
+ },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -10632,9 +10923,9 @@
}
},
"minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
@@ -10774,6 +11065,11 @@
"es-abstract": "^1.22.1"
}
},
+ "on-exit-leak-free": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
+ "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="
+ },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -10893,10 +11189,70 @@
"dev": true
},
"picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+ "dev": true
+ },
+ "pino": {
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz",
+ "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==",
+ "requires": {
+ "@pinojs/redact": "^0.4.0",
+ "atomic-sleep": "^1.0.0",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^3.0.0",
+ "pino-std-serializers": "^7.0.0",
+ "process-warning": "^5.0.0",
+ "quick-format-unescaped": "^4.0.3",
+ "real-require": "^0.2.0",
+ "safe-stable-stringify": "^2.3.1",
+ "sonic-boom": "^4.0.1",
+ "thread-stream": "^4.0.0"
+ }
+ },
+ "pino-abstract-transport": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz",
+ "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==",
+ "requires": {
+ "split2": "^4.0.0"
+ }
+ },
+ "pino-pretty": {
+ "version": "13.1.3",
+ "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.3.tgz",
+ "integrity": "sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==",
+ "dev": true,
+ "requires": {
+ "colorette": "^2.0.7",
+ "dateformat": "^4.6.3",
+ "fast-copy": "^4.0.0",
+ "fast-safe-stringify": "^2.1.1",
+ "help-me": "^5.0.0",
+ "joycon": "^3.1.1",
+ "minimist": "^1.2.6",
+ "on-exit-leak-free": "^2.1.0",
+ "pino-abstract-transport": "^3.0.0",
+ "pump": "^3.0.0",
+ "secure-json-parse": "^4.0.0",
+ "sonic-boom": "^4.0.1",
+ "strip-json-comments": "^5.0.2"
+ },
+ "dependencies": {
+ "strip-json-comments": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz",
+ "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==",
+ "dev": true
+ }
+ }
+ },
+ "pino-std-serializers": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz",
+ "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw=="
},
"pirates": {
"version": "4.0.6",
@@ -10988,6 +11344,11 @@
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="
},
+ "process-warning": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz",
+ "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA=="
+ },
"promise-polyfill": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.3.0.tgz",
@@ -11005,9 +11366,19 @@
}
},
"proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz",
+ "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="
+ },
+ "pump": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz",
+ "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
},
"punycode": {
"version": "2.3.0",
@@ -11027,12 +11398,22 @@
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true
},
+ "quick-format-unescaped": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="
+ },
"react-is": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
"dev": true
},
+ "real-require": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
+ "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="
+ },
"regexp.prototype.flags": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
@@ -11155,6 +11536,17 @@
"is-regex": "^1.1.4"
}
},
+ "safe-stable-stringify": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
+ "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="
+ },
+ "secure-json-parse": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz",
+ "integrity": "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==",
+ "dev": true
+ },
"semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@@ -11216,6 +11608,14 @@
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
+ "sonic-boom": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz",
+ "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==",
+ "requires": {
+ "atomic-sleep": "^1.0.0"
+ }
+ },
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -11232,6 +11632,11 @@
"source-map": "^0.6.0"
}
},
+ "split2": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
+ "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="
+ },
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -11368,6 +11773,14 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
+ "thread-stream": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.0.0.tgz",
+ "integrity": "sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==",
+ "requires": {
+ "real-require": "^0.2.0"
+ }
+ },
"tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
diff --git a/services/progress-report/package.json b/services/progress-report/package.json
index 58803c4d47..bcfc8f40a2 100644
--- a/services/progress-report/package.json
+++ b/services/progress-report/package.json
@@ -15,7 +15,8 @@
"dependencies": {
"arango-tools": "^0.6.0",
"dotenv-safe": "^8.2.0",
- "notifications-node-client": "^8.2.1"
+ "notifications-node-client": "^8.2.1",
+ "pino": "^10.3.1"
},
"devDependencies": {
"eslint": "^8.40.0",
@@ -29,6 +30,7 @@
"jest": "^29.5.0",
"jest-fetch-mock": "^3.0.3",
"jest-matcher-utils": "^29.5.0",
+ "pino-pretty": "^13.1.3",
"prettier": "^2.8.8"
}
}
diff --git a/services/progress-report/src/__mocks__/logger.js b/services/progress-report/src/__mocks__/logger.js
new file mode 100644
index 0000000000..c928f70c54
--- /dev/null
+++ b/services/progress-report/src/__mocks__/logger.js
@@ -0,0 +1,7 @@
+const logger = {
+ info: jest.fn(),
+ warn: jest.fn(),
+ error: jest.fn(),
+}
+
+module.exports = logger
diff --git a/services/progress-report/src/__tests__/find-verified-org-summaries.test.js b/services/progress-report/src/__tests__/find-verified-org-summaries.test.js
index 579440091f..b708891620 100644
--- a/services/progress-report/src/__tests__/find-verified-org-summaries.test.js
+++ b/services/progress-report/src/__tests__/find-verified-org-summaries.test.js
@@ -7,11 +7,6 @@ const { databaseOptions } = require('../../database-options')
const { findOrgSummaries } = require('../database')
describe('given the findChartSummaries function', () => {
- const consoleErrorOutput = []
- const consoleInfoOutput = []
- const mockedError = (output) => consoleErrorOutput.push(output)
- const mockedInfo = (output) => consoleInfoOutput.push(output)
-
let query, drop, truncate, collections
beforeAll(async () => {
@@ -26,11 +21,6 @@ describe('given the findChartSummaries function', () => {
})
beforeEach(async () => {
- console.error = mockedError
- console.info = mockedInfo
- consoleErrorOutput.length = 0
- consoleInfoOutput.length = 0
-
await truncate()
})
@@ -74,7 +64,7 @@ describe('given the findChartSummaries function', () => {
})
})
it('returns the recent chart summaries', async () => {
- const orgSummaries = await findOrgSummaries({ log: console.log, query, startDate: '2021-01-01' })
+ const orgSummaries = await findOrgSummaries({ query, startDate: '2021-01-01' })
const expectedOrgSummaries = {
_id: org._id,
diff --git a/services/progress-report/src/__tests__/get-org-admins.test.js b/services/progress-report/src/__tests__/get-org-admins.test.js
index 32ddda8a75..d820bfa339 100644
--- a/services/progress-report/src/__tests__/get-org-admins.test.js
+++ b/services/progress-report/src/__tests__/get-org-admins.test.js
@@ -4,14 +4,9 @@ const { dbNameFromFile } = require('arango-tools')
const { ensureDatabase: ensure } = require('../testUtilities')
const { databaseOptions } = require('../../database-options')
-const { getOrgAdmins } = require('../database')
-
-describe('given the getOrgAdmins function', () => {
- const consoleErrorOutput = []
- const consoleInfoOutput = []
- const mockedError = (output) => consoleErrorOutput.push(output)
- const mockedInfo = (output) => consoleInfoOutput.push(output)
+const { getOrgUsers } = require('../database')
+describe('given the getOrgUsers function', () => {
let query, drop, truncate, collections
beforeAll(async () => {
@@ -26,11 +21,6 @@ describe('given the getOrgAdmins function', () => {
})
beforeEach(async () => {
- console.error = mockedError
- console.info = mockedInfo
- consoleErrorOutput.length = 0
- consoleInfoOutput.length = 0
-
await truncate()
})
@@ -56,9 +46,9 @@ describe('given the getOrgAdmins function', () => {
permission: 'admin',
})
})
- it('returns the org admins', async () => {
- const orgAdmins = await getOrgAdmins({ query, orgId: org._id })
- const expectedOrgAdmins = [
+ it('returns the org users', async () => {
+ const orgUsers = await getOrgUsers({ query, orgId: org._id })
+ const expectedorgUsers = [
{
...user,
userName: 'user@test.ca',
@@ -68,7 +58,7 @@ describe('given the getOrgAdmins function', () => {
},
},
]
- expect(orgAdmins).toEqual(expectedOrgAdmins)
+ expect(orgUsers).toEqual(expectedorgUsers)
})
})
describe('given an unsuccessful query', () => {
@@ -76,10 +66,10 @@ describe('given the getOrgAdmins function', () => {
it('throws an error', async () => {
const mockQuery = jest.fn().mockRejectedValue(new Error('Database error occurred.'))
try {
- await getOrgAdmins({ query: mockQuery })
+ await getOrgUsers({ query: mockQuery })
} catch (err) {
expect(err).toEqual(
- new Error('Database error occurred while trying to find org admins: Error: Database error occurred.'),
+ new Error('Database error occurred while trying to find org users: Error: Database error occurred.'),
)
}
})
@@ -93,10 +83,10 @@ describe('given the getOrgAdmins function', () => {
}
const mockQuery = jest.fn().mockReturnValue(cursor)
try {
- await getOrgAdmins({ query: mockQuery })
+ await getOrgUsers({ query: mockQuery })
} catch (err) {
expect(err).toEqual(
- new Error('Cursor error occurred while trying to find org admins: Error: Cursor error occurred.'),
+ new Error('Cursor error occurred while trying to find org users: Error: Cursor error occurred.'),
)
}
})
diff --git a/services/progress-report/src/__tests__/notify-send-org-progress-report.test.js b/services/progress-report/src/__tests__/notify-send-org-progress-report.test.js
index 26b6bd0c49..bdc7b36553 100644
--- a/services/progress-report/src/__tests__/notify-send-org-progress-report.test.js
+++ b/services/progress-report/src/__tests__/notify-send-org-progress-report.test.js
@@ -1,14 +1,12 @@
+jest.mock('../logger')
+
+const logger = require('../logger')
const { sendOrgProgressReport } = require('../notify')
const { NOTIFICATION_ORG_PROGRESS_REPORT } = process.env
describe('given the sendOrgProgressReport function', () => {
- let consoleOutput = []
- const mockedError = (output) => consoleOutput.push(output)
- beforeAll(async () => {
- console.error = mockedError
- })
beforeEach(async () => {
- consoleOutput = []
+ jest.clearAllMocks()
})
describe('email successfully sent', () => {
it('returns nothing', async () => {
@@ -95,9 +93,14 @@ describe('given the sendOrgProgressReport function', () => {
orgStats,
})
- expect(consoleOutput).toEqual([
- `Error occurred when sending org progress report via email for ${user._key}: Error: Notification error occurred.`,
- ])
+ expect(logger.error).toHaveBeenCalledWith(
+ {
+ err: new Error('Notification error occurred.'),
+ userKey: user._key,
+ orgName: orgStats.orgDetails.en.name,
+ },
+ 'Error occurred when sending org progress report via email',
+ )
})
})
})
diff --git a/services/progress-report/src/database/find-verified-org-summaries.js b/services/progress-report/src/database/find-verified-org-summaries.js
index b437efc9d8..c1b974e2b6 100644
--- a/services/progress-report/src/database/find-verified-org-summaries.js
+++ b/services/progress-report/src/database/find-verified-org-summaries.js
@@ -1,4 +1,6 @@
const { aql } = require('arangojs')
+const logger = require('../logger')
+
const { UNCLAIMED_ORG_ID } = process.env
const findVerifiedOrgs = async ({ query }) => {
@@ -26,7 +28,7 @@ const findVerifiedOrgs = async ({ query }) => {
return verifiedOrgs
}
-const findOrgSummaries = async ({ log, query, startDate }) => {
+const findOrgSummaries = async ({ query, startDate }) => {
const verifiedOrgs = await findVerifiedOrgs({ query })
const orgSummaries = {}
for (const org of verifiedOrgs) {
@@ -61,7 +63,7 @@ const findOrgSummaries = async ({ log, query, startDate }) => {
}
}
- log(`Successfully found ${Object.keys(orgSummaries).length} verified org summaries`)
+ logger.info({ orgCount: Object.keys(orgSummaries).length }, 'Successfully found verified org summaries')
return orgSummaries
}
diff --git a/services/progress-report/src/database/get-org-admins.js b/services/progress-report/src/database/get-org-users.js
similarity index 72%
rename from services/progress-report/src/database/get-org-admins.js
rename to services/progress-report/src/database/get-org-users.js
index 165ba819da..af212cc3f7 100644
--- a/services/progress-report/src/database/get-org-admins.js
+++ b/services/progress-report/src/database/get-org-users.js
@@ -1,26 +1,25 @@
-const getOrgAdmins = async ({ query, orgId }) => {
+const getOrgUsers = async ({ query, orgId }) => {
let cursor
try {
cursor = await query`
FOR v, e IN 1..1 OUTBOUND ${orgId} affiliations
- FILTER e.permission == "admin" OR e.permission == "owner"
FILTER v.emailUpdateOptions.progressReport == true
RETURN v
`
} catch (err) {
- throw new Error(`Database error occurred while trying to find org admins: ${err}`)
+ throw new Error(`Database error occurred while trying to find org users: ${err}`)
}
let orgAdmins
try {
orgAdmins = await cursor.all()
} catch (err) {
- throw new Error(`Cursor error occurred while trying to find org admins: ${err}`)
+ throw new Error(`Cursor error occurred while trying to find org users: ${err}`)
}
return orgAdmins
}
module.exports = {
- getOrgAdmins,
+ getOrgUsers,
}
diff --git a/services/progress-report/src/database/index.js b/services/progress-report/src/database/index.js
index b42b651cd3..0bf5542d43 100644
--- a/services/progress-report/src/database/index.js
+++ b/services/progress-report/src/database/index.js
@@ -1,5 +1,5 @@
const { findOrgSummaries } = require('./find-verified-org-summaries')
-const { getOrgAdmins } = require('./get-org-admins')
+const { getOrgUsers } = require('./get-org-users')
const { findVulnerabilitiesByOrgId } = require('./find-vulnerabilities-by-org-id')
-module.exports = { findOrgSummaries, getOrgAdmins, findVulnerabilitiesByOrgId }
+module.exports = { findOrgSummaries, getOrgUsers, findVulnerabilitiesByOrgId }
diff --git a/services/progress-report/src/logger.js b/services/progress-report/src/logger.js
new file mode 100644
index 0000000000..6f86ce65ae
--- /dev/null
+++ b/services/progress-report/src/logger.js
@@ -0,0 +1,14 @@
+const pino = require('pino')
+
+const logger = pino({
+ level: process.env.LOG_LEVEL || 'info',
+ base: {
+ service: 'org-footprint',
+ env: process.env.NODE_ENV,
+ },
+ timestamp: pino.stdTimeFunctions.isoTime,
+ messageKey: 'message',
+ errorKey: 'err',
+})
+
+module.exports = logger
diff --git a/services/progress-report/src/notify/notify-send-org-progress-report.js b/services/progress-report/src/notify/notify-send-org-progress-report.js
index 6572753e9e..1f15f4c54d 100644
--- a/services/progress-report/src/notify/notify-send-org-progress-report.js
+++ b/services/progress-report/src/notify/notify-send-org-progress-report.js
@@ -1,6 +1,8 @@
+const logger = require('../logger')
+
const { NOTIFICATION_ORG_PROGRESS_REPORT } = process.env
-const sendOrgProgressReport = async ({ log, user, orgStats, notifyClient, vulnerableAssets }) => {
+const sendOrgProgressReport = async ({ user, orgStats, notifyClient, vulnerableAssets }) => {
const templateId = NOTIFICATION_ORG_PROGRESS_REPORT
const { httpsScore, dmarcScore, domainCount, httpsScoreDiff, dmarcScoreDiff, domainCountDiff, orgDetails } = orgStats
@@ -19,9 +21,12 @@ const sendOrgProgressReport = async ({ log, user, orgStats, notifyClient, vulner
vulnerable_domain_count: vulnerableAssets,
},
})
- log(`Successfully sent ${orgDetails.en.name} progress report via email to user:, ${user._key}`)
+ logger.info({ userKey: user._key, orgName: orgDetails.en.name }, 'Successfully sent progress report via email')
} catch (err) {
- console.error(`Error occurred when sending org progress report via email for ${user._key}: ${err}`)
+ logger.error(
+ { err: err, userKey: user._key, orgName: orgDetails.en.name },
+ 'Error occurred when sending org progress report via email',
+ )
}
}
diff --git a/services/progress-report/src/progress-report-service.js b/services/progress-report/src/progress-report-service.js
index 4e0bacf444..5e35252e18 100644
--- a/services/progress-report/src/progress-report-service.js
+++ b/services/progress-report/src/progress-report-service.js
@@ -1,4 +1,4 @@
-const { findOrgSummaries, getOrgAdmins, findVulnerabilitiesByOrgId } = require('./database')
+const { findOrgSummaries, getOrgUsers, findVulnerabilitiesByOrgId } = require('./database')
const { sendOrgProgressReport } = require('./notify')
const progressReportService = async ({ query, log, notifyClient }) => {
@@ -22,8 +22,8 @@ const progressReportService = async ({ query, log, notifyClient }) => {
// send notifications
for (const [_key, value] of Object.entries(verifiedOrgStats)) {
const vulnerableAssets = await findVulnerabilitiesByOrgId({ query, orgId: value._id })
- const orgAdmins = await getOrgAdmins({ query, orgId: value._id })
- for (const user of orgAdmins) {
+ const orgUsers = await getOrgUsers({ query, orgId: value._id })
+ for (const user of orgUsers) {
await sendOrgProgressReport({
log,
notifyClient,
diff --git a/services/summaries/Dockerfile b/services/summaries/Dockerfile
index beac15acd8..7c5d5c8789 100644
--- a/services/summaries/Dockerfile
+++ b/services/summaries/Dockerfile
@@ -1,20 +1,19 @@
-FROM python:3.13.4-slim-bookworm
+FROM python:3.14.2-alpine
ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV DEBIAN_FRONTEND noninteractive
-RUN useradd -ms /bin/bash summary
+RUN adduser -D summary
WORKDIR /home/summaries
-RUN apt-get update && apt-get install -y --no-install-recommends \
- apt-utils \
+RUN apk add --no-cache \
python3 \
- python3-pip \
- python3-setuptools \
- python3-wheel \
- build-essential \
+ py3-pip \
+ py3-setuptools \
+ py3-wheel \
+ build-base \
python3-dev
COPY . .
diff --git a/services/summaries/cloudbuild.yaml b/services/summaries/cloudbuild.yaml
index 5de1652646..fbefecee31 100644
--- a/services/summaries/cloudbuild.yaml
+++ b/services/summaries/cloudbuild.yaml
@@ -16,6 +16,10 @@ steps:
id: test-results
dir: services/summaries
entrypoint: /bin/sh
+ env:
+ - "DB_URL=http://testdb:8529"
+ - "DB_USER=root"
+ - "DB_PASSWORD=test"
args: ["-c", "pip3 install -r requirements.txt && python3 -m pytest"]
- name: "gcr.io/cloud-builders/docker"
diff --git a/services/summaries/requirements.txt b/services/summaries/requirements.txt
index c00cb04f20..4aecd0528c 100644
--- a/services/summaries/requirements.txt
+++ b/services/summaries/requirements.txt
@@ -9,11 +9,11 @@ iniconfig==2.0.0
packaging==24.2
pluggy==1.5.0
pretend==1.0.9
-PyJWT==2.6.0
-pytest==8.3.5
+PyJWT[crypto]==2.12.0
+pytest==9.0.3
python-arango==8.1.7
-python-dotenv==1.1.0
-requests==2.32.4
+python-dotenv==1.2.2
+requests==2.33.0
requests-toolbelt==1.0.0
tomli==2.0.1
urllib3==2.6.3
diff --git a/services/summaries/summaries-job.yaml b/services/summaries/summaries-job.yaml
index b14e6233fb..0951795a60 100644
--- a/services/summaries/summaries-job.yaml
+++ b/services/summaries/summaries-job.yaml
@@ -8,7 +8,7 @@ spec:
spec:
containers:
- name: summaries
- image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/summaries:master-12325e1-1768415866 # {"$imagepolicy": "flux-system:summaries"}
+ image: northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/summaries:master-ec8c3ff-1776966895 # {"$imagepolicy": "flux-system:summaries"}
env:
- name: DB_USER
valueFrom:
diff --git a/services/summaries/summaries.py b/services/summaries/summaries.py
index 1709acc54f..e76ebd7940 100644
--- a/services/summaries/summaries.py
+++ b/services/summaries/summaries.py
@@ -34,6 +34,7 @@ def domain_has_verified_claim(domain, db):
"""
FOR v, e IN 1..1 INBOUND @domain_id claims
FILTER v.verified == true
+ FILTER e.assetState == "approved"
RETURN v
""",
bind_vars={"domain_id": domain["_id"]},
@@ -334,7 +335,7 @@ def update_org_summaries(host=DB_URL, name=DB_NAME, user=DB_USER, password=DB_PA
logging.error(f"Error processing domain {domain['_id']}: {e}")
continue
- dmarc_phase_total = (
+ dmarc_phase_total = (
dmarc_phase_assess
+ dmarc_phase_deploy
+ dmarc_phase_enforce
@@ -405,7 +406,7 @@ def update_org_summaries(host=DB_URL, name=DB_NAME, user=DB_USER, password=DB_PA
{"organization": org.get("_id"), **current_summary}
)
org.update({"summaries": summary_data})
- db.collection("organizations").update(org)
+ db.collection("organizations").update(org, merge=False)
except Exception as e:
logging.error(f"Error processing organization {org['_id']}: {e}")
continue
diff --git a/services/summaries/tests/test_summaries.py b/services/summaries/tests/test_summaries.py
index 8456118e3e..7d6429575e 100644
--- a/services/summaries/tests/test_summaries.py
+++ b/services/summaries/tests/test_summaries.py
@@ -1,200 +1,229 @@
+import os
+
import pytest
from datetime import date
from arango import ArangoClient
-from summaries import *
-from test_data import *
-
-arango_client = ArangoClient(hosts="http://testdb:8529")
-# Connect to arango system DB and create test DB
-sys_db = arango_client.db("_system", username="", password="")
-sys_db.create_database("test")
-
-# Establish DB connection
-db = arango_client.db("test", username="", password="")
-db.create_collection("scanSummaries")
-db.create_collection("chartSummaries")
-db.create_collection("organizationSummaries")
-db.create_collection("dns")
-db.create_collection("web")
-db.create_collection("webScan")
-graph = db.create_graph("compliance")
-domains = graph.create_vertex_collection("domains")
-orgs = graph.create_vertex_collection("organizations")
-
-claims = graph.create_edge_definition(
- edge_collection="claims",
- from_vertex_collections=["organizations"],
- to_vertex_collections=["domains"],
-)
-domains_dns = graph.create_edge_definition(
- edge_collection="domainsDNS",
- from_vertex_collections=["domains"],
- to_vertex_collections=["dns"],
-)
-domains_web = graph.create_edge_definition(
- edge_collection="domainsWeb",
- from_vertex_collections=["domains"],
- to_vertex_collections=["web"],
-)
-web_to_web_scans = graph.create_edge_definition(
- edge_collection="webToWebScans",
- from_vertex_collections=["web"],
- to_vertex_collections=["webScan"],
-)
-
-org = orgs.insert(
- {
- "_key": "testorg",
- "verified": True,
- "summaries": {
+from dotenv import load_dotenv
+from summaries import update_chart_summaries, update_org_summaries
+
+load_dotenv(os.path.join(os.path.dirname(__file__), "test.env"))
+
+DB_URL = os.getenv("DB_URL", "http://localhost:8530")
+DB_USER = os.getenv("DB_USER", "root")
+DB_PASS = os.getenv("DB_PASS", "test")
+
+
+class TestSummaries:
+ @pytest.fixture
+ def arango_db(self):
+ arango_client = ArangoClient(hosts=DB_URL)
+ sys_db = arango_client.db("_system", username=DB_USER, password=DB_PASS)
+
+ db_name = os.path.basename(__file__).split(".")[0]
+
+ if sys_db.has_database(db_name):
+ sys_db.delete_database(db_name)
+ sys_db.create_database(db_name)
+
+ db = arango_client.db(db_name, username=DB_USER, password=DB_PASS)
+ db.create_collection("scanSummaries")
+ db.create_collection("chartSummaries")
+ db.create_collection("organizationSummaries")
+ db.create_collection("dns")
+ db.create_collection("web")
+ db.create_collection("webScan")
+ graph = db.create_graph("compliance")
+ domains = graph.create_vertex_collection("domains")
+ orgs = graph.create_vertex_collection("organizations")
+
+ claims = graph.create_edge_definition(
+ edge_collection="claims",
+ from_vertex_collections=["organizations"],
+ to_vertex_collections=["domains"],
+ )
+ graph.create_edge_definition(
+ edge_collection="domainsDNS",
+ from_vertex_collections=["domains"],
+ to_vertex_collections=["dns"],
+ )
+ graph.create_edge_definition(
+ edge_collection="domainsWeb",
+ from_vertex_collections=["domains"],
+ to_vertex_collections=["web"],
+ )
+ graph.create_edge_definition(
+ edge_collection="webToWebScans",
+ from_vertex_collections=["web"],
+ to_vertex_collections=["webScan"],
+ )
+
+ org = orgs.insert(
+ {
+ "_key": "testorg",
+ "verified": True,
+ "summaries": {
+ "organization": "organizations/testorg",
+ "dmarc": {"pass": 0, "fail": 0, "total": 0},
+ "web": {"pass": 0, "fail": 0, "total": 0},
+ "mail": {"pass": 0, "fail": 0, "total": 0},
+ "https": {"pass": 0, "fail": 0, "total": 0},
+ "web_connections": {"pass": 0, "fail": 0, "total": 0},
+ "ssl": {"pass": 0, "fail": 0, "total": 0},
+ "dkim": {"pass": 0, "fail": 0, "total": 0},
+ "spf": {"pass": 0, "fail": 0, "total": 0},
+ "dmarc_phase": {
+ "assess": 0,
+ "deploy": 0,
+ "enforce": 0,
+ "maintain": 0,
+ },
+ },
+ "hist_summaries": [],
+ "orgDetails": {
+ "en": {
+ "slug": "communications-security-establishment",
+ "acronym": "CSE",
+ "name": "Communications Security Establishment",
+ "zone": "FED",
+ "sector": "DND",
+ "country": "Canada",
+ "province": "Ontario",
+ "city": "Ottawa",
+ },
+ "fr": {
+ "slug": "centre-de-la-securite-des-telecommunications",
+ "acronym": "CST",
+ "name": "Centre de la Securite des Telecommunications",
+ "zone": "FED",
+ "sector": "DND",
+ "country": "Canada",
+ "province": "Ontario",
+ "city": "Ottawa",
+ },
+ },
+ }
+ )
+
+ domain1 = domains.insert(
+ {
+ "domain": "cyber1.gc.ca",
+ "selectors": ["selector1"],
+ "phase": "not implemented",
+ "status": {
+ "https": "pass",
+ "ssl": "pass",
+ "dmarc": "pass",
+ "spf": "pass",
+ "dkim": "fail",
+ },
+ "archived": False,
+ }
+ )
+ domain2 = domains.insert(
+ {
+ "domain": "cyber2.gc.ca",
+ "selectors": ["selector1"],
+ "phase": "maintain",
+ "status": {
+ "https": "pass",
+ "ssl": "pass",
+ "dmarc": "pass",
+ "spf": "pass",
+ "dkim": "pass",
+ },
+ "archived": False,
+ }
+ )
+ domain3 = domains.insert(
+ {
+ "domain": "cyber3.gc.ca",
+ "selectors": ["selector1"],
+ "phase": "maintain",
+ "status": {
+ "https": "fail",
+ "ssl": "fail",
+ "dmarc": "fail",
+ "spf": "fail",
+ "dkim": "fail",
+ },
+ "archived": False,
+ }
+ )
+
+ claims.insert(
+ {"_from": org["_id"], "_to": domain1["_id"], "assetState": "approved"}
+ )
+ claims.insert(
+ {"_from": org["_id"], "_to": domain2["_id"], "assetState": "approved"}
+ )
+ claims.insert(
+ {"_from": org["_id"], "_to": domain3["_id"], "assetState": "approved"}
+ )
+
+ yield db
+
+ sys_db.delete_database(db_name)
+
+ def test_update_chart_summaries(self, arango_db):
+ db_name = os.path.basename(__file__).split(".")[0]
+ update_chart_summaries(
+ host=DB_URL, name=db_name, user=DB_USER, password=DB_PASS
+ )
+
+ summary = arango_db.collection("chartSummaries").all().next()
+ assert summary["https"] == {
+ "scan_types": ["https"],
+ "pass": 2,
+ "fail": 1,
+ "total": 3,
+ }
+
+ assert summary["web"] == {
+ "scan_types": ["https", "hsts", "ssl"],
+ "pass": 2,
+ "fail": 1,
+ "total": 3,
+ }
+
+ assert summary["mail"] == {
+ "scan_types": ["dmarc", "spf", "dkim"],
+ "pass": 1,
+ "fail": 2,
+ "total": 3,
+ }
+
+ assert summary["dmarc_phase"] == {
+ "assess": 0,
+ "deploy": 0,
+ "enforce": 0,
+ "maintain": 2,
+ "total": 2,
+ }
+
+ def test_update_org_summaries(self, arango_db):
+ db_name = os.path.basename(__file__).split(".")[0]
+ update_org_summaries(
+ host=DB_URL, name=db_name, user=DB_USER, password=DB_PASS
+ )
+
+ organization = arango_db.collection("organizations").get({"_key": "testorg"})
+ assert organization["summaries"] == {
"organization": "organizations/testorg",
- "dmarc": {"pass": 0, "fail": 0, "total": 0},
- "web": {"pass": 0, "fail": 0, "total": 0},
- "mail": {"pass": 0, "fail": 0, "total": 0},
- "https": {"pass": 0, "fail": 0, "total": 0},
- "web_connections": {"pass": 0, "fail": 0, "total": 0},
- "ssl": {"pass": 0, "fail": 0, "total": 0},
- "dkim": {"pass": 0, "fail": 0, "total": 0},
- "spf": {"pass": 0, "fail": 0, "total": 0},
+ "date": date.today().isoformat(),
+ "dmarc": {"pass": 2, "fail": 1, "total": 3},
+ "https": {"pass": 2, "fail": 1, "total": 3},
+ "web": {"pass": 2, "fail": 1, "total": 3},
+ "mail": {"pass": 1, "fail": 2, "total": 3},
+ "web_connections": {"pass": 0, "fail": 1, "total": 1},
+ "ssl": {"pass": 2, "fail": 1, "total": 3},
+ "dkim": {"pass": 1, "fail": 2, "total": 3},
+ "spf": {"pass": 2, "fail": 1, "total": 3},
"dmarc_phase": {
"assess": 0,
"deploy": 0,
"enforce": 0,
- "maintain": 0,
- },
- },
- "hist_summaries": [],
- "orgDetails": {
- "en": {
- "slug": "communications-security-establishment",
- "acronym": "CSE",
- "name": "Communications Security Establishment",
- "zone": "FED",
- "sector": "DND",
- "country": "Canada",
- "province": "Ontario",
- "city": "Ottawa",
+ "maintain": 2,
+ "total": 2,
},
- "fr": {
- "slug": "centre-de-la-securite-des-telecommunications",
- "acronym": "CST",
- "name": "Centre de la Securite des Telecommunications",
- "zone": "FED",
- "sector": "DND",
- "country": "Canada",
- "province": "Ontario",
- "city": "Ottawa",
- },
- },
- }
-)
-
-domain1 = domains.insert(
- {
- "domain": "cyber1.gc.ca",
- "selectors": ["selector1"],
- "phase": "not implemented",
- "status": {
- "https": "pass",
- "ssl": "pass",
- "dmarc": "pass",
- "spf": "pass",
- "dkim": "fail",
- },
- "archived": False,
- }
-)
-domain2 = domains.insert(
- {
- "domain": "cyber2.gc.ca",
- "selectors": ["selector1"],
- "phase": "maintain",
- "status": {
- "https": "pass",
- "ssl": "pass",
- "dmarc": "pass",
- "spf": "pass",
- "dkim": "pass",
- },
- "archived": False,
- }
-)
-domain3 = domains.insert(
- {
- "domain": "cyber3.gc.ca",
- "selectors": ["selector1"],
- "phase": "maintain",
- "status": {
- "https": "fail",
- "ssl": "fail",
- "dmarc": "fail",
- "spf": "fail",
- "dkim": "fail",
- },
- "archived": False,
- }
-)
-
-claims.insert({"_from": org["_id"], "_to": domain1["_id"], "assetState": "approved"})
-claims.insert({"_from": org["_id"], "_to": domain2["_id"], "assetState": "approved"})
-claims.insert({"_from": org["_id"], "_to": domain3["_id"], "assetState": "approved"})
-
-
-def test_update_chart_summaries():
- update_chart_summaries(host="http://testdb:8529", name="test", user="", password="")
-
- summary = db.collection("chartSummaries").all().next()
- assert summary["https"] == {
- "scan_types": ["https"],
- "pass": 2,
- "fail": 1,
- "total": 3,
- }
-
- assert summary["web"] == {
- "scan_types": ["https", "hsts", "ssl"],
- "pass": 2,
- "fail": 1,
- "total": 3,
- }
-
- assert summary["mail"] == {
- "scan_types": ["dmarc", "spf", "dkim"],
- "pass": 1,
- "fail": 2,
- "total": 3,
- }
-
- assert summary["dmarc_phase"] == {
- "assess": 0,
- "deploy": 0,
- "enforce": 0,
- "maintain": 2,
- "total": 2,
- }
-
-
-def test_update_org_summaries():
- update_org_summaries(host="http://testdb:8529", name="test", user="", password="")
-
- organization = db.collection("organizations").get({"_key": "testorg"})
- assert organization["summaries"] == {
- "organization": "organizations/testorg",
- "date": date.today().isoformat(),
- "dmarc": {"pass": 2, "fail": 1, "total": 3},
- "https": {"pass": 2, "fail": 1, "total": 3},
- "web": {"pass": 2, "fail": 1, "total": 3},
- "mail": {"pass": 1, "fail": 2, "total": 3},
- "web_connections": {"pass": 0, "fail": 1, "total": 1},
- "ssl": {"pass": 2, "fail": 1, "total": 3},
- "dkim": {"pass": 1, "fail": 2, "total": 3},
- "spf": {"pass": 2, "fail": 1, "total": 3},
- "dmarc_phase": {
- "assess": 0,
- "deploy": 0,
- "enforce": 0,
- "maintain": 2,
- "total": 2,
- },
- "negative_tags": {},
- }
+ "negative_tags": {},
+ }
diff --git a/services/super-admin/.dockerignore b/services/super-admin/.dockerignore
index 463aee45ce..9280e0ce86 100644
--- a/services/super-admin/.dockerignore
+++ b/services/super-admin/.dockerignore
@@ -1,6 +1,5 @@
node_modules
cloudbuild.yaml
coverage
-**/*.test.js
**/*/.env
.git
diff --git a/services/super-admin/Dockerfile b/services/super-admin/Dockerfile
index a09fcf9540..8e827e3368 100644
--- a/services/super-admin/Dockerfile
+++ b/services/super-admin/Dockerfile
@@ -1,14 +1,34 @@
-FROM node:alpine
+# syntax=docker/dockerfile:1
+FROM node:25.5.0-alpine AS production
ENV NODE_ENV production
WORKDIR /app
-COPY src ./src
-COPY index.js ./index.js
+
COPY package* ./
-COPY database-options.js ./
-COPY .env.example ./
-RUN npm ci
+RUN npm ci --omit=dev
+
+COPY --exclude=**/__tests__ \
+ --exclude=**/__mocks__ \
+ --exclude=**/testUtilities.js \
+ src ./src
+COPY index.js database-options.js .env.example ./
USER node
CMD ["npm", "start"]
+
+#===============================================================================================
+
+FROM production AS test
+
+USER root
+
+ENV NODE_ENV=development
+RUN npm install
+COPY . .
+
+USER node
+
+#===============================================================================================
+
+FROM production AS final
diff --git a/services/super-admin/cloudbuild.yaml b/services/super-admin/cloudbuild.yaml
index fe1ae0ef70..d83548e4ed 100644
--- a/services/super-admin/cloudbuild.yaml
+++ b/services/super-admin/cloudbuild.yaml
@@ -1,7 +1,7 @@
steps:
-- name: 'gcr.io/cloud-builders/docker'
+- name: 'docker:29'
id: start_arango
- entrypoint: /bin/sh
+ entrypoint: 'ash'
args:
[
'-c',
@@ -12,21 +12,20 @@ steps:
id: wait
args: ['arangodb:8529']
-- name: node:alpine
- id: install-dependencies
+- name: 'docker:29'
+ id: build-test-image
dir: services/super-admin
- entrypoint: npm
- args: ['ci', '--no-optional']
+ args: ['build', '--target=test', '-t', 'test-image', '.']
-- name: node:alpine
- id: run-eslint
- dir: services/super-admin
+- name: 'test-image'
+ id: run-lint
+ dir: /app
entrypoint: npm
- args: ['run', lint]
+ args: ['run', 'lint']
-- name: node:alpine
- id: test
- dir: services/super-admin
+- name: 'test-image'
+ id: run-tests
+ dir: /app
entrypoint: npm
args: ['test']
env:
@@ -54,18 +53,18 @@ steps:
- SA_ORG_FR_PROVINCE=$_SA_ORG_FR_PROVINCE
- SA_ORG_FR_CITY=$_SA_ORG_FR_CITY
-- name: 'gcr.io/cloud-builders/docker'
+- name: 'docker:29'
id: generate-image-name
- entrypoint: 'bash'
+ entrypoint: 'ash'
dir: services/super-admin
args:
- '-c'
- |
echo "northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/super-admin:$(echo $BRANCH_NAME | sed 's/[^a-zA-Z0-9]/-/g')-$SHORT_SHA-$(date +%s)" > /workspace/imagename
-- name: 'gcr.io/cloud-builders/docker'
+- name: 'docker:29'
id: build
- entrypoint: 'bash'
+ entrypoint: 'ash'
dir: services/super-admin
args:
- '-c'
@@ -73,9 +72,9 @@ steps:
image=$(cat /workspace/imagename)
docker build -t $image .
-- name: 'gcr.io/cloud-builders/docker'
+- name: 'docker:29'
id: push-if-master
- entrypoint: 'bash'
+ entrypoint: 'ash'
dir: services/super-admin
args:
- '-c'
diff --git a/services/super-admin/package-lock.json b/services/super-admin/package-lock.json
index 8cc94d9d91..b939ad65b3 100644
--- a/services/super-admin/package-lock.json
+++ b/services/super-admin/package-lock.json
@@ -4527,9 +4527,9 @@
}
},
"node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -4862,9 +4862,9 @@
"dev": true
},
"node_modules/picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"engines": {
"node": ">=8.6"
@@ -9296,9 +9296,9 @@
}
},
"minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
+ "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
@@ -9550,9 +9550,9 @@
"dev": true
},
"picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true
},
"pirates": {
diff --git a/services/update-selectors/.dockerignore b/services/update-selectors/.dockerignore
index 21a9787681..f0ea1a57bd 100644
--- a/services/update-selectors/.dockerignore
+++ b/services/update-selectors/.dockerignore
@@ -1,6 +1,5 @@
**/*.env
Dockerfile
-tests
*.yaml
*.md
.venv
diff --git a/services/update-selectors/Dockerfile b/services/update-selectors/Dockerfile
index 9d8f79254d..c73daabbae 100644
--- a/services/update-selectors/Dockerfile
+++ b/services/update-selectors/Dockerfile
@@ -1,31 +1,30 @@
-FROM python:3.11.11-slim-bookworm AS python-builder
+FROM python:3.14.3-alpine AS base
+ENV PYTHONUNBUFFERED 1
+ENV PYTHONWARNINGS ignore
+
+#===============================================================================================
+
+FROM base AS python-builder
# Copy local code to the container image.
-ENV PYTHONWARNINGS ignore
-ENV PYTHONUNBUFFERED 1
WORKDIR /working/install
-RUN apt-get update && apt-get install -y --no-install-recommends \
- apt-utils \
+RUN apk add --no-cache \
python3 \
- python3-pip \
- python3-setuptools \
- python3-wheel \
- build-essential \
+ py3-pip \
+ py3-setuptools \
+ py3-wheel \
+ build-base \
python3-dev
-COPY requirements.txt /requirements.txt
+COPY requirements.txt ./requirements.txt
# Install python requirements to /working/install directory for cleaner copy
-RUN pip3 install --prefix=/working/install -r /requirements.txt
+RUN pip3 install --prefix=/working/install -r ./requirements.txt
-#===============================================================================================
#===============================================================================================
-FROM python:3.11.11-slim-bookworm
+FROM base AS production
-# Copy local code to the container image.
-ENV PYTHONUNBUFFERED 1
-ENV PYTHONWARNINGS ignore
WORKDIR /selectors
# Copy installed python modules
@@ -33,7 +32,19 @@ COPY --from=python-builder /working/install/lib /usr/local/lib
# Copy local source code
COPY update_selectors.py main.py ./
-RUN useradd -ms /bin/bash selectors
+RUN adduser -D selectors
USER selectors
CMD ["python3", "main.py"]
+
+#===============================================================================================
+
+FROM production AS test
+
+# Copy test files (which were excluded from release)
+COPY . .
+USER selectors
+
+#===============================================================================================
+
+FROM production AS final
diff --git a/services/update-selectors/cloudbuild.yaml b/services/update-selectors/cloudbuild.yaml
index eb010cdaf2..0a2a1a6dae 100644
--- a/services/update-selectors/cloudbuild.yaml
+++ b/services/update-selectors/cloudbuild.yaml
@@ -1,68 +1,74 @@
steps:
- - name: "gcr.io/cloud-builders/docker"
+ - name: 'docker:29'
id: start_testdb
- entrypoint: /bin/sh
+ entrypoint: /bin/ash
args:
[
- "-c",
- "docker run --net cloudbuild --name arangodb -e ARANGO_NO_AUTH=1 -d -p 127.0.0.1:8529:8529 arangodb/arangodb:3.12.1",
+ '-c',
+ 'docker run --net cloudbuild --name arangodb -e ARANGO_NO_AUTH=1 -d -p 127.0.0.1:8529:8529 arangodb/arangodb:3.12.1',
]
- name: mikewilliamson/wait-for
id: wait_testdb
- args: ["arangodb:8529"]
+ args: ['arangodb:8529']
- - name: "gcr.io/cloud-builders/docker"
+ - name: 'docker:29'
id: start_test_cosmosdb
- entrypoint: /bin/sh
+ entrypoint: /bin/ash
args:
[
- "-c",
- "docker run --net cloudbuild --name cosmosdb -d -p 8081:8081 -p 10250-10255:10250-10255 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest",
+ '-c',
+ 'docker run --net cloudbuild --name cosmosdb -d -p 8081:8081 -p 10250-10255:10250-10255 -e PROTOCOL=https -e GATEWAY_PUBLIC_ENDPOINT=cosmosdb mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview',
]
- name: mikewilliamson/wait-for
id: wait_test_cosmosdb
- args: ["cosmosdb:8081", "--timeout=180"]
+ args: ['cosmosdb:8081', '--timeout=180']
- - name: "northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/ci"
- id: test-results
+ - name: 'docker:29'
+ id: build-test-image
dir: services/update-selectors
- entrypoint: /bin/sh
- args: ["-c", "pip3 install -r requirements.txt && python3 -m pytest -v"]
+ args: ['build', '--target=test', '-t', 'test-image', '.']
+
+ - name: 'test-image'
+ id: test-results
+ dir: /selectors
+ entrypoint: python3
+ args: [ '-m', 'pytest', '-v' ]
env:
- ARANGO_DB_URL=http://arangodb:8529
- ARANGO_DB_USER=root
- - ARANGO_DB_PASSWORD=test
+ - ARANGO_DB_PASS=test
- COSMOS_DB_HOST=cosmosdb
- - name: "gcr.io/cloud-builders/docker"
+ - name: 'docker:29'
id: generate-image-name
- entrypoint: "bash"
+ entrypoint: 'ash'
dir: services/update-selectors
args:
- - "-c"
+ - '-c'
- |
- echo "northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/update-selectors:$(echo $BRANCH_NAME | sed 's/[^a-zA-Z0-9]/-/g')-$SHORT_SHA-$(date +%s)" > /workspace/imagename
+ echo 'northamerica-northeast1-docker.pkg.dev/track-compliance/tracker/services/update-selectors:'"$(echo $BRANCH_NAME | sed 's/[^a-zA-Z0-9]/-/g')-$SHORT_SHA-$(date +%s)" > /workspace/imagename
- - name: "gcr.io/cloud-builders/docker"
+ - name: 'docker:29'
id: build-results
- entrypoint: "bash"
+ entrypoint: 'ash'
dir: services/update-selectors
args:
- - "-c"
+ - '-c'
- |
image=$(cat /workspace/imagename)
+ echo "Building image $image"
docker build -t $image .
- - name: "gcr.io/cloud-builders/docker"
+ - name: 'docker:29'
id: push-results-if-master
- entrypoint: "bash"
+ entrypoint: 'ash'
dir: services/update-selectors
args:
- - "-c"
+ - '-c'
- |
- if [[ "$BRANCH_NAME" == "master" ]]
+ if [[ '$BRANCH_NAME' == 'master' ]]
then
image=$(cat /workspace/imagename)
docker push $image
diff --git a/services/update-selectors/requirements.txt b/services/update-selectors/requirements.txt
index d4313cd0a2..21f144c4bd 100644
--- a/services/update-selectors/requirements.txt
+++ b/services/update-selectors/requirements.txt
@@ -6,12 +6,12 @@ docopt==0.6.2
idna==3.7
nats-py==2.6.0
notifications-python-client==8.0.1
-PyJWT==2.8.0
-pytest==7.4.4
+PyJWT==2.12.0
+pytest==9.0.3
python-arango==7.3.4
-python-dotenv==1.1.0
-requests==2.32.4
+python-dotenv==1.2.2
+requests==2.33.0
requests-toolbelt==1.0.0
six==1.16.0
-typing_extensions==4.9.0
+typing_extensions==4.15.0
urllib3==2.6.3
diff --git a/services/update-selectors/tests/docker-compose.yaml b/services/update-selectors/tests/docker-compose.yaml
index d3d30b8519..00a06f31b9 100644
--- a/services/update-selectors/tests/docker-compose.yaml
+++ b/services/update-selectors/tests/docker-compose.yaml
@@ -7,7 +7,10 @@ services:
environment:
- ARANGO_ROOT_PASSWORD=test
cosmosdb:
- image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
+ image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-preview
ports:
- '8081:8081'
- '10250-10255:10250-10255'
+ environment:
+ - PROTOCOL=https
+ - GATEWAY_PUBLIC_ENDPOINT=cosmosdb